Excellent, thanks!

On Fri, 27 Mar 2015 at 20:00 Marc Fawzi <[email protected]> wrote:

> Yes, for sure.
>
>
> On Fri, Mar 27, 2015 at 12:56 PM, Daniel Kersten <[email protected]>
> wrote:
>
>> I'm not in SF either (or even the same continent) so would very much
>> appreciate slides/videos/blog posts.
>>
>> On Fri, 27 Mar 2015 at 19:20 Khalid Jebbari <[email protected]>
>> wrote:
>>
>>> Staying tuned !
>>>
>>> I'm not in SF, will there be slides or videos ?
>>>
>>> Le 27 mars 2015 à 20:16, Marc Fawzi <[email protected]> a écrit :
>>>
>>>
>>> You can have your cake and eat it.
>>>
>>> Will present the complete approach on the next Reagent meetup in SF, and
>>> while we are talking about having a presentation about re-frame port of
>>> ANgular's phonecat example, the reusable "smart" components presentation
>>> will be based on RAW Reagent, nothing added.
>>>
>>> Stay tuned.
>>>
>>>
>>> On Fri, Mar 27, 2015 at 10:58 AM, Khalid Jebbari <
>>> [email protected]> wrote:
>>>
>>>> If this approach suits you better, fine. Remember, this approach is
>>>> coming from the React.js world, where everything is mutable and where
>>>> there's no committment to a particular way of passing data/events. For my
>>>> current projects, we indeed encapsulated both markup and behaviour, but it
>>>> was hard sometimes to make it reusable without changing/hacking it. We
>>>> didn't use a global method for sharing state like Flux, so it may explain
>>>> why.
>>>>
>>>>
>>>>
>>>> Khalid aka DjebbZ
>>>> @Dj3bbZ
>>>>
>>>> On Fri, Mar 27, 2015 at 6:45 PM, Daniel Kersten <[email protected]>
>>>> wrote:
>>>>
>>>>> Marc, can you tell us a little more about the approach your taking?
>>>>>
>>>>> On Fri, 27 Mar 2015 at 17:43 Marc Fawzi <[email protected]> wrote:
>>>>>
>>>>>> Yeah but then what are you really reusing? I have components that
>>>>>> have sophisticated behavior... sharing just the markup and styles is of
>>>>>> limited value since what I want to share in effect is the smart 
>>>>>> components,
>>>>>> which is why I had settled on components encapsulating behavior as a
>>>>>> pattern... works better for me to share the whole component (with its
>>>>>> behavior) rather than just the dumb part....
>>>>>>
>>>>>> On Fri, Mar 27, 2015 at 10:25 AM, Khalid Jebbari <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> Yes, dumb components don't encapsulate beahvior. Indeed if you
>>>>>>> generic behaviour you need as someone proposed to push a generic event, 
>>>>>>> and
>>>>>>> the app handles it specifically.
>>>>>>>
>>>>>>> Khalid aka DjebbZ
>>>>>>> @Dj3bbZ
>>>>>>>
>>>>>>> On Fri, Mar 27, 2015 at 4:45 PM, Jamie Orchard-Hays <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Good articles. Thanks, Mike. In my apps I think of them as
>>>>>>>> "generic" and "specific", or something like that. IOW, I want some 
>>>>>>>> generic
>>>>>>>> views that are dumb and know nothing about the app and can be used 
>>>>>>>> where
>>>>>>>> ever I need them. They get composed into specific views.
>>>>>>>>
>>>>>>>> Jamie
>>>>>>>>
>>>>>>>>
>>>>>>>> On Mar 27, 2015, at 10:12 AM, Mike Thompson <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>> > On Saturday, March 28, 2015 at 12:58:17 AM UTC+11, Khalid Jebbari
>>>>>>>> wrote:
>>>>>>>> >> On Friday, March 27, 2015 at 2:39:37 PM UTC+1, Jamie
>>>>>>>> Orchard-Hays wrote:
>>>>>>>> >>> Does it make sense to pass the reusable component's context as
>>>>>>>> an argument to it? ie,
>>>>>>>> >>>
>>>>>>>> >>> (defn ReusableComponent [some-context] .... )
>>>>>>>> >>>
>>>>>>>> >>> Jamie
>>>>>>>> >>>
>>>>>>>> >>> On Mar 27, 2015, at 8:54 AM, Colin Yates <[email protected]>
>>>>>>>> wrote:
>>>>>>>> >>>
>>>>>>>> >>>> In re-frame event dispatching is handled by (dispatch
>>>>>>>> [:discriminator detail]). A corresponding (register-handler 
>>>>>>>> :discriminator
>>>>>>>> (fn [db [_ detail]]) then reacts to that dispatched event.
>>>>>>>> >>>>
>>>>>>>> >>>> My question is how are people managing this with re-usable
>>>>>>>> components? For example, I have a tree and when selecting a node in 
>>>>>>>> that
>>>>>>>> tree something should happen. But this is where it gets all 
>>>>>>>> polymorphic as
>>>>>>>> _what_ happens depends on the client who instantiated the tree. I can 
>>>>>>>> see
>>>>>>>> the following ways forward:
>>>>>>>> >>>>
>>>>>>>> >>>> - tree is configured with a 'context' key which is combined
>>>>>>>> with the discriminator so rather than the tree emitting :node-selected 
>>>>>>>> it
>>>>>>>> emits :consumer-a-node-selected. Consumer a can then handle
>>>>>>>> consumer-a-node-selected and consumer b can handle (go on, guess)
>>>>>>>> consumer-b-node-selected
>>>>>>>> >>>> - a variation on the above involving writing your own
>>>>>>>> dispatching logic...
>>>>>>>> >>>> - tree doesn't use dispatch as the event bus, rather it takes
>>>>>>>> in an instance of a Protocol:
>>>>>>>> >>>> IRespondToTree
>>>>>>>> >>>> (on-node-select [this node])
>>>>>>>> >>>> - tree is parameterised with a map of fns {:node-selected-fn
>>>>>>>> ...} etc.
>>>>>>>> >>>>
>>>>>>>> >>>> How would you all handle it? (I am leaning towards the first
>>>>>>>> one).
>>>>>>>> >>>>
>>>>>>>> >>>> --
>>>>>>>> >>>> Note that posts from new members are moderated - please be
>>>>>>>> patient with your first post.
>>>>>>>> >>>> ---
>>>>>>>> >>>> You received this message because you are subscribed to the
>>>>>>>> Google Groups "ClojureScript" group.
>>>>>>>> >>>> To unsubscribe from this group and stop receiving emails from
>>>>>>>> it, send an email to [email protected].
>>>>>>>> >>>> To post to this group, send email to
>>>>>>>> [email protected].
>>>>>>>> >>>> Visit this group at
>>>>>>>> http://groups.google.com/group/clojurescript.
>>>>>>>> >>
>>>>>>>> >> Not sure I'm going to answer the question directly, since I've
>>>>>>>> never used re-frame, Reagent or Om. I'm just an experienced React.js
>>>>>>>> developer VERY interested with Clojure(Script).
>>>>>>>> >>
>>>>>>>> >> If you want reusable components, whatever wrapper you use around
>>>>>>>> React, here's the plan.
>>>>>>>> >>
>>>>>>>> >> You should create 2 types of components : dumb and smart. Dumb
>>>>>>>> components do 2 simple things : display stuff and handle input/events. 
>>>>>>>> The
>>>>>>>> way they handle should be agnostic to any kind of library and should 
>>>>>>>> use
>>>>>>>> only language-level feature. Functions. So the dumb component use 
>>>>>>>> function
>>>>>>>> it's been passed and call it with the input/event. The smart components
>>>>>>>> wrap dumb components and connect to the outside world with whatever 
>>>>>>>> your
>>>>>>>> stack uses (channels, events, ratoms, what not).
>>>>>>>> >>
>>>>>>>> >> This way your dumb components are always reusable, whatever
>>>>>>>> stack/project they're incorporated in. They can also be displayed in a
>>>>>>>> simple page for your graphics or HTML/CSS team to check their look. The
>>>>>>>> smart components handle whatever logic you want to put in them. So 
>>>>>>>> from a
>>>>>>>> stack/page/project to another, only the smart components change, no the
>>>>>>>> dumb ones. This keep UI consistent and separate concerns.
>>>>>>>> >>
>>>>>>>> >> Hope it's clear and helpful.
>>>>>>>> >
>>>>>>>> >
>>>>>>>> > I'm not sure how much this perspective applies to the
>>>>>>>> Clojurescript wrappings, but here are further references:
>>>>>>>> > https://medium.com/@learnreact/container-components-c0e67432e005
>>>>>>>> >
>>>>>>>> https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0
>>>>>>>> >
>>>>>>>> > --
>>>>>>>> > Mike
>>>>>>>> >
>>>>>>>> > --
>>>>>>>> > Note that posts from new members are moderated - please be
>>>>>>>> patient with your first post.
>>>>>>>> > ---
>>>>>>>> > You received this message because you are subscribed to the
>>>>>>>> Google Groups "ClojureScript" group.
>>>>>>>> > To unsubscribe from this group and stop receiving emails from it,
>>>>>>>> send an email to [email protected].
>>>>>>>> > To post to this group, send email to
>>>>>>>> [email protected].
>>>>>>>> > Visit this group at http://groups.google.com/group/clojurescript.
>>>>>>>>
>>>>>>>> --
>>>>>>>> Note that posts from new members are moderated - please be patient
>>>>>>>> with your first post.
>>>>>>>> ---
>>>>>>>> You received this message because you are subscribed to a topic in
>>>>>>>> the Google Groups "ClojureScript" group.
>>>>>>>> To unsubscribe from this topic, visit
>>>>>>>> https://groups.google.com/d/topic/clojurescript/WOGdUY79Xv4/unsubscribe
>>>>>>>> .
>>>>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>>>>> [email protected].
>>>>>>>> To post to this group, send email to [email protected]
>>>>>>>> .
>>>>>>>> Visit this group at http://groups.google.com/group/clojurescript.
>>>>>>>>
>>>>>>>
>>>>>>>  --
>>>>>>> Note that posts from new members are moderated - please be patient
>>>>>>> with your first post.
>>>>>>> ---
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "ClojureScript" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>> send an email to [email protected].
>>>>>>> To post to this group, send email to [email protected].
>>>>>>> Visit this group at http://groups.google.com/group/clojurescript.
>>>>>>>
>>>>>>
>>>>>>  --
>>>>>> Note that posts from new members are moderated - please be patient
>>>>>> with your first post.
>>>>>> ---
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "ClojureScript" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>> To post to this group, send email to [email protected].
>>>>>> Visit this group at http://groups.google.com/group/clojurescript.
>>>>>>
>>>>>  --
>>>>> Note that posts from new members are moderated - please be patient
>>>>> with your first post.
>>>>> ---
>>>>> You received this message because you are subscribed to a topic in the
>>>>> Google Groups "ClojureScript" group.
>>>>> To unsubscribe from this topic, visit
>>>>> https://groups.google.com/d/topic/clojurescript/WOGdUY79Xv4/unsubscribe
>>>>> .
>>>>> To unsubscribe from this group and all its topics, send an email to
>>>>> [email protected].
>>>>> To post to this group, send email to [email protected].
>>>>> Visit this group at http://groups.google.com/group/clojurescript.
>>>>>
>>>>
>>>>  --
>>>> Note that posts from new members are moderated - please be patient with
>>>> your first post.
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "ClojureScript" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To post to this group, send email to [email protected].
>>>> Visit this group at http://groups.google.com/group/clojurescript.
>>>>
>>>
>>>  --
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> ---
>>> You received this message because you are subscribed to a topic in the
>>> Google Groups "ClojureScript" group.
>>> To unsubscribe from this topic, visit
>>> https://groups.google.com/d/topic/clojurescript/WOGdUY79Xv4/unsubscribe.
>>> To unsubscribe from this group and all its topics, send an email to
>>> [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/clojurescript.
>>>
>>>  --
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> ---
>>> You received this message because you are subscribed to the Google
>>> Groups "ClojureScript" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/clojurescript.
>>>
>>  --
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "ClojureScript" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/clojurescript.
>>
>
>  --
> Note that posts from new members are moderated - please be patient with
> your first post.
> ---
> You received this message because you are subscribed to the Google Groups
> "ClojureScript" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/clojurescript.
>

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to