helix icon indicating copy to clipboard operation
helix copied to clipboard

Helix clone-element

Open lilactown opened this issue 4 years ago • 4 comments

Provide a helix.core/clone-element macro which uses the same props conversion API as $.

lilactown avatar Jan 31 '20 18:01 lilactown

Having other fns for extracting and manipulating props could be useful as well.

(helix.core/props some-el)
;; => props as a bean

lilactown avatar Jan 31 '20 19:01 lilactown

Something like this: https://github.com/darwin/helix/blob/596648ce7ab068eba8f935c9acd71b18d5049945/src/helix/impl/props2.cljs#L139

darwin avatar Jan 31 '20 22:01 darwin

I'm interested to work on this feature. I've looked through the code, and it seems that the basic implementation could be as simple as

(defmacro clone-element
  "Clones a React Element with props conversion like in $"
  [element props]
  `^js/React.Element (.cloneElement (get-react) ~element (impl.props/props ~props)))

What I'm not sure about is "helix/propx" attr that is present in some cases. Any tips would be appreciated

retro avatar Mar 22 '21 13:03 retro

Hmm. That's a tricky problem, I'll have to think about it. .cloneElement does a shallow merge, which means it will ignore "helix/props".

"helix/props" is only present if you are using the :define-factory feature flag. it's pretty niche. Perhaps I should change the implementation to shallowly convert the props to a JS object inside the factory function, so that they match what the $ macro does at compile time.

lilactown avatar Mar 23 '21 01:03 lilactown