Fork me on GitHub
#fulcro
<
2020-12-29
>
tony.kay01:12:38

Has anyone tried the new guardrails async mode? If so, did you notice a runtime dev speed improvement?

tony.kay01:12:50

(only helps clj, unfortunately)

Jakub Holý (HolyJak)15:12:30

I would very much appreciate if you could provide your feedback on https://github.com/holyjak/blog.jakubholy.net/blob/master/content/asc/posts/2021/fulcro-divergent-ui-data.asc, which talks about: > Fulcro’s stateful components serve normally both as elements of the UI and to define the data model, i.e. data entities with their unique IDs and attributes. And that is what you want 95% of the time. But what if your UI and data model needs diverge? > We will take a look at what different kinds of divergence between the UI and data entities you might encounter and how to solve them. I am primarily interested in: 1. Is everything correct? 2. Have i forgotten some cases? 3. Any [better] examples / code samples to add? 4. Is it understandable to people "new" to Fulcro? 🙏

Tyler Nisonoff15:12:22

This is wonderful!

Tyler Nisonoff15:12:27

One thought: I think I would have groked it slightly quicker if the query / idents for PersonView / PersonDetails were shown in “A Data-only component” and similarly PersonIdentification in the last section — you implied that PersonIdentification queries for person/name person/email in the explanation after, but would be nice to see that in the queries of the components But also want to emphasize that I think its is a great blog post 🙂

👍 3
tony.kay15:12:43

I’m adding comments via https://web.hypothes.is/ @holyjak

❤️ 3
Jakub Holý (HolyJak)15:12:42

I have never heard about ☝️. I suppose you will share a link to your comments eventually, or how does it work?

tony.kay15:12:51

I made the comments public. You install the extension and just go to the page.

tony.kay15:12:23

it’s super handy for giving feedback about arbitrary web content

tvaughan15:12:09

> Have i forgotten some cases? Let's say you have two data-only components that only differ in their query namespaces, e.g. pdf/name and pdf/size versus png/name and png/size, and you want to render these the same, e.g. (div (h2 name) (h4 size)). Comments about the naming convention aside, would this fit?

Jakub Holý (HolyJak)16:12:07

@U0P7ZBZCK Thanks! Perhaps. Could you elaborate more the problem you have encountered? Why data-only components in this case? And are you looking at how to avoid having to manually defsc for each of the file types or what? Thanks!

tvaughan16:12:23

I was thinking of abstracting away the body of the defsc, i.e. have each defsc call a shared function that returns (div (h2 name) (h4 size)). Would this be the right approach, or is there an alternative I haven't thought of?

tony.kay18:12:52

@U0P7ZBZCK Yes of course. It’s all just function calls anyway. If there’s a common layout/formatting concern there is no problem at all putting that in a function, or even a component without query if you want shouldComponentUpdate optimizations.

tvaughan18:12:22

Good to know. Thanks @tony.kay

tony.kay22:12:04

that’s fine 🙂

Michael W22:12:46

Towards the beginning when you talk about defining the data entity, could you expand on static ident and dynamic ident, what they are, what they do, and possibly when it's appropriate to use them?

Michael W22:12:14

That's the only thing I was confused about in the entire article, thanks for the excellent content.

Jakub Holý (HolyJak)23:12:35

Hi, thanks! What I call a dynamic ident is one based on the props so (fn [] [:person/id (:person/id props)]) or, in the template form, simply :person/id

genekim21:12:11

Really great article, @holyjak —  Last night, I finally watched the 5+ remaining hours of @tony.kay Fulcro 3 videos at 1.25x speed, with the hopes of the big picture sinking in via osmosis. :). I went to sleep exhausted, but hopeful that clarity will eventually emerge later this week. 😁. (Eager to sit down in front of IDE and see if I can actually build something using what I've learned!) @holyjak — I love the work you're doing helping describe the critical Fulcro concepts!

❤️ 3
phronmophobic22:12:07

Achievement Unlocked! I made a simple todo app for desktop and terminal using fulcro. It's not going to win any awards, but I think it's a good start. The code is available https://github.com/phronmophobic/membrane-fulcro. Thanks for everyone's help, especially @tony.kay! It's still a little rough around the edges, but if anyone is interested in trying, feel free to ping me and I'm happy to answer any questions.

🤯 9
🎉 9
👏 3
Jakub Holý (HolyJak)09:12:10

I would like to add it to Awesome Fulcro if you are OK with it, see https://github.com/holyjak/awesome-fulcro/pull/4/files

phronmophobic19:12:18

you may have to update the tag line: > the most awesome webapp framework the Earth has ever seen. fulcro can do more than make web apps 😉!

😻 3
tony.kay23:12:53

I absolutely love the terminal version. I cut my coding teeth in C w/Curses in HP-UX and Solaris in the late 80's/early 90's. Played a ton of nethack in the wee hours, and while it seems a bit silly to use a terminal for UI these days, I still love it.

❤️ 3
phronmophobic23:12:29

At some point, I'd like to implement something like this, https://github.com/sindresorhus/terminal-image, for membrane even though it's completely impractical. Also, I only learned recently that terminal actually supports mouse input.

tony.kay23:12:58

long gone are the days of the single-color cyan terminal running at 19200 baud (via local wires)

Michael W23:12:09

gotta love the null modem cable

tony.kay23:12:27

complete digression, at one point I wrote an ncurses implementation of mine sweeper. The recursive clearing algorithm that opens up the board when you click where there are no mines is kind of fun to write, and if you set your terminal to 1200 baud with stty you could watch it move the cursor around and change the text. Modern terminals ignore the device setting, so not as much fun.

tony.kay23:12:51

you have to resort to manual “sleep” calls

😁 3