Comments (4)
Hi @andreasknoepfle!
Is there some way of rendering a component dynamically?
Not yet, but this is definitely on the roadmap and there's no way we'll ship the first version without it.
The plan is to have a built-in <Dynamic>
component that can handle those cases. Something that you could use like this:
def render(assigns) do
props = %{label: "Ok", class: "button"}
component = Button
~H"""
<Dynamic component={{ component }} props={{ props }}/>
"""
end
A first naive implementation that would probably work for the most simple cases (like stateless components without nested children) would look like:
defmodule Dynamic do
use Surface.Component
property component, :module, required: true
property props, :map, default: %{}
def render(assigns) do
props =
assigns
|> Map.get(:props)
|> Map.merge(%{__surface__: %{groups: %{__default__: %{binding: false, size: 0}}}}) # Don't worry about this for now :)
~H"""
{{ live_component(@socket, @component, props) }}
"""
end
end
I'm currently working on the new event API due to some breaking changes in LiveView so, unfortunately, I wasn't able to validate the above solution but feel free to give it a try if you want and let me know if it works :)
Cheers.
from surface.
Implemented in #473.
from surface.
Hi @msaraiva 👋
Your proposed solution works like a charm 💚.
Thank you very much! I am already excited and looking forward for a first release of surface 💯
Cheers
from surface.
Did anything come of this? The above Dynamic solution doesn't seem to work with default props.
from surface.
Related Issues (20)
- Improve error messaging when using `<#slot />` in template via `embed_sface/1` macro
- Setting which modules can pass context values outside of config
- Erlang Error in Elixir Language Server with Surface HOT 1
- [Using a plugin] Scoped CSS changes require two page reloads. HOT 1
- inputs_for/3 warning HOT 1
- Warnings on Select component with disabled property
- Props missing inside `handle_event()` `socket.assigns` map. HOT 3
- mix surface.init: no function clause matching in Sourceror.Zipper.down/1 HOT 3
- Support for LiveViewNative? HOT 5
- Submitted forms don't carry the "submitter" attribute
- Surface CSS scoping attributes don't work when root component is a component
- When using :on-click={"name", target="#target_id"} I cannot seem to get a sibling to target another sibling node that is rendered in the same parent. HOT 1
- Compatibility with LiveView 0.20 HOT 7
- Question: How would you make the sample tab component to use svg icons instead of font icons HOT 4
- Elixir 1.16: negative steps are not supported in String.slice/2, pass 1..-2//1 instead
- Malformed HTML when using LiveRedirect with another component inside HOT 1
- Mix.env() usage can cause troubles in release HOT 2
- Question: Form example on latest version HOT 2
- error: module Surface.Components.Form.Inputs is not loaded and could not be found. This may be happening because the module you are trying to load directly or indirectly depends on the current module<Description> HOT 1
- Surface LiveComponent raise single static root error if render root is Form Component HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from surface.