demo_corr.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import * as React from "react";
  2. import {SimpleGrid, Text, Title, Group, Stack, Button, Space, Textarea, Tabs, HoverCard, ActionIcon, Center} from "@mantine/core";
  3. import {PrimitiveRegistry} from "../onion/primitive_delta";
  4. import {mockUuid} from "../onion/test_helpers";
  5. import {newVersionedModel, VersionedModelState} from "./versioned_model";
  6. import {newCorrespondence} from "./correspondence";
  7. export function getDemoCorr() {
  8. const generateUUID = mockUuid();
  9. const primitiveRegistry = new PrimitiveRegistry();
  10. const commonStuff = {generateUUID, primitiveRegistry};
  11. const as = newVersionedModel({readonly: false, ...commonStuff});
  12. const cs = newVersionedModel({readonly: false, ...commonStuff});
  13. const corr = newCorrespondence({cs, as, ...commonStuff});
  14. // returns functional react component
  15. return function() {
  16. const [asState, setAsState] = React.useState<VersionedModelState>(as.initialState);
  17. const [csState, setCsState] = React.useState<VersionedModelState>(cs.initialState);
  18. const [corrState, setCorrState] = React.useState<VersionedModelState>(corr.initialState);
  19. const asReducer = as.getReducer(setAsState);
  20. const csReducer = cs.getReducer(setCsState);
  21. const corrReducer = corr.getReducer(setCorrState, csReducer, asReducer);
  22. const csComponents = cs.getReactComponents(csState, {
  23. onUserEdit: corrReducer.parse,
  24. onUndoClicked: csReducer.undo,
  25. onRedoClicked: csReducer.redo,
  26. onVersionClicked: csReducer.gotoVersion,
  27. });
  28. const corrComponents = corr.getReactComponents(corrState, {
  29. onUndoClicked: corrReducer.gotoVersion,
  30. onRedoClicked: corrReducer.gotoVersion,
  31. onVersionClicked: corrReducer.gotoVersion,
  32. });
  33. const asComponents = as.getReactComponents(asState, {
  34. onUserEdit: corrReducer.render,
  35. onUndoClicked: asReducer.undo,
  36. onRedoClicked: asReducer.redo,
  37. onVersionClicked: asReducer.gotoVersion,
  38. });
  39. const csTabs = ["editor", "state", "history", "dependencyL1", "dependencyL0"];
  40. const corrTabs = ["state", "history", "dependencyL1", "dependencyL0"];
  41. const asTabs = ["state", "history", "dependencyL1", "dependencyL0"];
  42. const makeTabs = (components, defaultTab, tabs) => {
  43. return <Tabs defaultValue={defaultTab} keepMounted={false}>
  44. <Tabs.List>
  45. {tabs.map(tab => ({
  46. editor: <Tabs.Tab key={tab} value={tab}>Editor</Tabs.Tab>,
  47. state: <Tabs.Tab key={tab} value={tab}>State</Tabs.Tab>,
  48. history: <Tabs.Tab key={tab} value={tab}>History</Tabs.Tab>,
  49. dependencyL1: <Tabs.Tab key={tab} value={tab}>Deltas (L1)</Tabs.Tab>,
  50. dependencyL0: <Tabs.Tab key={tab} value={tab}>Deltas (L0)</Tabs.Tab>,
  51. }[tab]))}
  52. </Tabs.List>
  53. <Tabs.Panel value="state">
  54. {components.graphStateComponent}
  55. </Tabs.Panel>
  56. <Tabs.Panel value="editor">
  57. {components.rountangleEditor}
  58. </Tabs.Panel>
  59. <Tabs.Panel value="dependencyL1">
  60. {components.depGraphL1Component}
  61. </Tabs.Panel>
  62. <Tabs.Panel value="dependencyL0">
  63. {components.depGraphL0Component}
  64. </Tabs.Panel>
  65. <Tabs.Panel value="history">
  66. {components.historyComponent}
  67. </Tabs.Panel>
  68. </Tabs>;
  69. }
  70. return (<>
  71. <SimpleGrid cols={3}>
  72. <div>
  73. <Title order={4}>Concrete Syntax</Title>
  74. <Stack>
  75. {makeTabs(csComponents, "editor", csTabs)}
  76. {makeTabs(csComponents, "history", csTabs)}
  77. </Stack>
  78. </div>
  79. <div>
  80. <Title order={4}>Correspondence</Title>
  81. <Stack>
  82. {makeTabs(corrComponents, "state", corrTabs)}
  83. {makeTabs(corrComponents, "history", corrTabs)}
  84. </Stack>
  85. </div>
  86. <div>
  87. <Title order={4}>Abstract Syntax</Title>
  88. <Stack>
  89. {makeTabs(asComponents, "state", asTabs)}
  90. {makeTabs(asComponents, "history", asTabs)}
  91. </Stack>
  92. </div>
  93. </SimpleGrid>
  94. <Center>{corrComponents.undoRedoButtons}</Center>
  95. </>);
  96. }
  97. }