Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Accordion.re */
- type expanded =
- | Closed
- | Open(string);
- type state = {expanded};
- type action =
- | Toggle(string);
- let component = ReasonReact.reducerComponent("Accordion");
- let make = (~render, _children) => {
- ...component,
- initialState: () => {expanded: Closed},
- reducer: (action, state) =>
- switch (action) {
- | Toggle(id) =>
- switch (state.expanded) {
- | Open(x) when x === id => ReasonReact.Update({expanded: Closed})
- | Open(_) => ReasonReact.Update({expanded: Open(id)})
- | Closed => ReasonReact.Update({expanded: Open(id)})
- }
- },
- render: self => {
- let toggle = (id, _evt, self) => self.ReasonReact.send(Toggle(id));
- ...
- {render(self.state.expanded, self.handle, toggle)}
- ...
- },
- };
- /* Consumer.re */
- ...
- let print = id => fun
- | Open(open) when open === id => "true"
- | Open(_) => "false"
- | Closed => "false";
- let make = _children => {
- ...component,
- render: _self =>
- <Accordion
- render=((expanded, handle, toggle) =>
- ...
- <button onClick=(handle(toggle("item-1-id"))> (ReasonReact.string("open " ++ print("item-1-id"))) </button>
- ...
- <button onClick=(handle(toggle("item-2-id"))> (ReasonReact.string("open " ++ print("item-2-id"))) </button>
- ...
- />
- ...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement