Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. /* Accordion.re */
  2. type expanded =
  3. | Closed
  4. | Open(string);
  5.  
  6. type state = {expanded};
  7.  
  8. type action =
  9. | Toggle(string);
  10.  
  11. let component = ReasonReact.reducerComponent("Accordion");
  12.  
  13. let make = (~render, _children) => {
  14. ...component,
  15. initialState: () => {expanded: Closed},
  16. reducer: (action, state) =>
  17. switch (action) {
  18. | Toggle(id) =>
  19. switch (state.expanded) {
  20. | Open(x) when x === id => ReasonReact.Update({expanded: Closed})
  21. | Open(_) => ReasonReact.Update({expanded: Open(id)})
  22. | Closed => ReasonReact.Update({expanded: Open(id)})
  23. }
  24. },
  25. render: self => {
  26. let toggle = (id, _evt, self) => self.ReasonReact.send(Toggle(id));
  27.  
  28. ...
  29. {render(self.state.expanded, self.handle, toggle)}
  30. ...
  31. },
  32. };
  33.  
  34. /* Consumer.re */
  35. ...
  36.  
  37. let print = id => fun
  38. | Open(open) when open === id => "true"
  39. | Open(_) => "false"
  40. | Closed => "false";
  41.  
  42. let make = _children => {
  43. ...component,
  44. render: _self =>
  45. <Accordion
  46. render=((expanded, handle, toggle) =>
  47. ...
  48. <button onClick=(handle(toggle("item-1-id"))> (ReasonReact.string("open " ++ print("item-1-id"))) </button>
  49. ...
  50. <button onClick=(handle(toggle("item-2-id"))> (ReasonReact.string("open " ++ print("item-2-id"))) </button>
  51. ...
  52. />
  53. ...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement