@arpproject/recrate 0.1.7-test5 → 0.1.7-test6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/dist/app/App.d.ts +2 -0
  2. package/dist/app/EmbeddedComponent.d.ts +3 -0
  3. package/dist/app/index.d.ts +0 -0
  4. package/dist/app/lookup.d.ts +82 -0
  5. package/dist/crate-builder/CrateManager/contexts.d.ts +6 -0
  6. package/dist/crate-builder/CrateManager/crate-manager-benchmarking.spec.d.ts +1 -0
  7. package/dist/crate-builder/CrateManager/crate-manager-loading-exporting.spec.d.ts +1 -0
  8. package/dist/crate-builder/CrateManager/crate-manager-operations.spec.d.ts +0 -0
  9. package/dist/crate-builder/CrateManager/crate-manager.d.ts +641 -0
  10. package/dist/crate-builder/CrateManager/crate-manager.spec.d.ts +1 -0
  11. package/dist/crate-builder/CrateManager/lib.d.ts +26 -0
  12. package/dist/crate-builder/CrateManager/lib.spec.d.ts +1 -0
  13. package/dist/crate-builder/CrateManager/profile-manager.d.ts +143 -0
  14. package/dist/crate-builder/CrateManager/profile-manager.spec.d.ts +1 -0
  15. package/{src/crate-builder/CrateManager/schema-type-definitions.json → dist/crate-builder/CrateManager/schema-type-definitions.json.d.ts} +4 -1
  16. package/dist/crate-builder/CrateManager/validate-identifier.d.ts +10 -0
  17. package/dist/crate-builder/CrateManager/validate-identifier.spec.d.ts +1 -0
  18. package/dist/crate-builder/RenderEntity/Add.d.ts +26 -0
  19. package/dist/crate-builder/RenderEntity/AddControl.d.ts +14 -0
  20. package/dist/crate-builder/RenderEntity/AddControl.stories.d.ts +29 -0
  21. package/dist/crate-builder/RenderEntity/AutoComplete.d.ts +12 -0
  22. package/dist/crate-builder/RenderEntity/BulkAdd.d.ts +10 -0
  23. package/dist/crate-builder/RenderEntity/DeleteProperty.d.ts +8 -0
  24. package/dist/crate-builder/RenderEntity/DialogAddProperty.d.ts +9 -0
  25. package/dist/crate-builder/RenderEntity/DialogBrowseEntities.d.ts +8 -0
  26. package/dist/crate-builder/RenderEntity/DialogEditContext.d.ts +8 -0
  27. package/dist/crate-builder/RenderEntity/DialogPreviewCrate.d.ts +7 -0
  28. package/dist/crate-builder/RenderEntity/DialogSaveCrateAsTemplate.d.ts +13 -0
  29. package/dist/crate-builder/RenderEntity/DialogSaveEntityTemplate.d.ts +14 -0
  30. package/dist/crate-builder/RenderEntity/DisplayPropertyName.d.ts +8 -0
  31. package/dist/crate-builder/RenderEntity/DisplayPropertyName.stories.d.ts +6 -0
  32. package/dist/crate-builder/RenderEntity/EntityId.d.ts +13 -0
  33. package/dist/crate-builder/RenderEntity/EntityName.d.ts +13 -0
  34. package/dist/crate-builder/RenderEntity/EntityProperty.d.ts +19 -0
  35. package/dist/crate-builder/RenderEntity/EntityPropertyInstance.d.ts +25 -0
  36. package/dist/crate-builder/RenderEntity/EntityType.d.ts +12 -0
  37. package/dist/crate-builder/RenderEntity/ItemLink.d.ts +14 -0
  38. package/dist/crate-builder/RenderEntity/PaginateLinkedEntities.d.ts +23 -0
  39. package/dist/crate-builder/RenderEntity/PaginateLinkedEntities.stories.d.ts +7 -0
  40. package/dist/crate-builder/RenderEntity/PropertyHelp.d.ts +6 -0
  41. package/dist/crate-builder/RenderEntity/RenderControls.d.ts +22 -0
  42. package/dist/crate-builder/RenderEntity/RenderLinkedItem.d.ts +20 -0
  43. package/dist/crate-builder/RenderEntity/RenderPropertyHelp.d.ts +6 -0
  44. package/dist/crate-builder/RenderEntity/RenderReverseConnections.d.ts +16 -0
  45. package/dist/crate-builder/RenderEntity/RenderTypes.d.ts +6 -0
  46. package/dist/crate-builder/RenderEntity/Shell2.d.ts +14 -0
  47. package/dist/crate-builder/RenderEntity/UnlinkEntity.d.ts +14 -0
  48. package/dist/crate-builder/RenderEntity/auto-complete.lib.d.ts +25 -0
  49. package/dist/crate-builder/RenderEntity/keys.d.ts +4 -0
  50. package/dist/crate-builder/RenderEntity/layout.d.ts +14 -0
  51. package/dist/crate-builder/RenderEntity/layout.spec.d.ts +1 -0
  52. package/dist/crate-builder/Shell.d.ts +40 -0
  53. package/dist/crate-builder/editor-state.d.ts +72 -0
  54. package/dist/crate-builder/emotionCache.d.ts +1 -0
  55. package/dist/crate-builder/helpers.d.ts +9 -0
  56. package/dist/crate-builder/i18n.d.ts +2 -0
  57. package/dist/crate-builder/lib/validate-iri.d.ts +6 -0
  58. package/dist/crate-builder/locales/en.d.ts +79 -0
  59. package/dist/crate-builder/locales/hu.d.ts +79 -0
  60. package/dist/crate-builder/primitives/Boolean.d.ts +11 -0
  61. package/dist/crate-builder/primitives/Boolean.stories.d.ts +7 -0
  62. package/dist/crate-builder/primitives/Date.d.ts +11 -0
  63. package/dist/crate-builder/primitives/Date.stories.d.ts +5 -0
  64. package/dist/crate-builder/primitives/DateTime.d.ts +11 -0
  65. package/dist/crate-builder/primitives/DateTime.stories.d.ts +5 -0
  66. package/dist/crate-builder/primitives/Geo.d.ts +12 -0
  67. package/dist/crate-builder/primitives/Geo.stories.d.ts +26 -0
  68. package/dist/crate-builder/primitives/Map.SelectArea.d.ts +9 -0
  69. package/dist/crate-builder/primitives/Map.d.ts +15 -0
  70. package/dist/crate-builder/primitives/Map.stories.d.ts +6 -0
  71. package/dist/crate-builder/primitives/Number.d.ts +16 -0
  72. package/dist/crate-builder/primitives/Number.stories.d.ts +10 -0
  73. package/dist/crate-builder/primitives/Select.d.ts +15 -0
  74. package/dist/crate-builder/primitives/Select.stories.d.ts +9 -0
  75. package/dist/crate-builder/primitives/SelectObject.d.ts +13 -0
  76. package/dist/crate-builder/primitives/SelectObject.stories.d.ts +5 -0
  77. package/dist/crate-builder/primitives/SelectUrl.d.ts +14 -0
  78. package/dist/crate-builder/primitives/SelectUrl.stories.d.ts +7 -0
  79. package/dist/crate-builder/primitives/Text.d.ts +19 -0
  80. package/dist/crate-builder/primitives/Text.stories.d.ts +13 -0
  81. package/dist/crate-builder/primitives/Time.d.ts +11 -0
  82. package/dist/crate-builder/primitives/Time.stories.d.ts +7 -0
  83. package/dist/crate-builder/primitives/Url.d.ts +11 -0
  84. package/dist/crate-builder/primitives/Url.stories.d.ts +7 -0
  85. package/dist/crate-builder/primitives/Value.d.ts +7 -0
  86. package/dist/crate-builder/primitives/Value.stories.d.ts +7 -0
  87. package/dist/crate-builder/primitives/date-libs.d.ts +1 -0
  88. package/dist/crate-builder/property-definitions.d.ts +78 -0
  89. package/dist/crate-builder/store.d.ts +8 -0
  90. package/dist/index.d.ts +5 -0
  91. package/dist/recrate.css +1896 -0
  92. package/dist/recrate.es.js +38508 -0
  93. package/dist/types.d.ts +42 -0
  94. package/package.json +31 -24
  95. package/.eslintrc.json +0 -37
  96. package/.storybook/main.ts +0 -40
  97. package/.storybook/preview.tsx +0 -46
  98. package/babel.config.json +0 -5
  99. package/docker-compose.yml +0 -30
  100. package/docs/.nojekyll +0 -1
  101. package/docs/assets/highlight.css +0 -99
  102. package/docs/assets/icons.js +0 -18
  103. package/docs/assets/icons.svg +0 -1
  104. package/docs/assets/main.js +0 -60
  105. package/docs/assets/navigation.js +0 -1
  106. package/docs/assets/search.js +0 -1
  107. package/docs/assets/style.css +0 -1448
  108. package/docs/classes/src_crate_builder_CrateManager_crate_manager.CrateManager.html +0 -240
  109. package/docs/classes/src_crate_builder_CrateManager_profile_manager.ProfileManager.html +0 -42
  110. package/docs/classes/src_crate_builder_editor_state.EditorState.html +0 -28
  111. package/docs/classes/src_crate_builder_types.CrateManagerType.html +0 -57
  112. package/docs/classes/src_crate_builder_types.ProfileManagerType.html +0 -13
  113. package/docs/functions/src_crate_builder_CrateManager_lib.isURL.html +0 -2
  114. package/docs/functions/src_crate_builder_CrateManager_lib.mintNewCrate.html +0 -3
  115. package/docs/functions/src_crate_builder_CrateManager_lib.normalise.html +0 -5
  116. package/docs/functions/src_crate_builder_CrateManager_lib.normaliseEntityType.html +0 -1
  117. package/docs/index.html +0 -58
  118. package/docs/interfaces/src_crate_builder_types.NormalisedCrate.html +0 -3
  119. package/docs/interfaces/src_crate_builder_types.NormalisedEntityDefinition.html +0 -4
  120. package/docs/interfaces/src_crate_builder_types.NormalisedProfile.html +0 -9
  121. package/docs/interfaces/src_crate_builder_types.ProfileLayout.html +0 -2
  122. package/docs/interfaces/src_crate_builder_types.ProfileLayoutGroup.html +0 -9
  123. package/docs/interfaces/src_crate_builder_types.UnverifiedCrate.html +0 -3
  124. package/docs/interfaces/src_crate_builder_types.UnverifiedEntityDefinition.html +0 -4
  125. package/docs/modules/src_crate_builder_CrateManager_crate_manager.html +0 -2
  126. package/docs/modules/src_crate_builder_CrateManager_lib.html +0 -6
  127. package/docs/modules/src_crate_builder_CrateManager_profile_manager.html +0 -2
  128. package/docs/modules/src_crate_builder_editor_state.html +0 -2
  129. package/docs/modules/src_crate_builder_types.html +0 -16
  130. package/docs/types/src_crate_builder_types.EntityReference.html +0 -1
  131. package/docs/types/src_crate_builder_types.NormalisedContext.html +0 -1
  132. package/docs/types/src_crate_builder_types.PrimitiveType.html +0 -1
  133. package/docs/types/src_crate_builder_types.ProfileAssociation.html +0 -1
  134. package/docs/types/src_crate_builder_types.ProfileInput.html +0 -1
  135. package/docs/types/src_crate_builder_types.UnverifiedContext.html +0 -1
  136. package/docs/variables/src_crate_builder_CrateManager_lib.urlProtocols.html +0 -1
  137. package/index.html +0 -13
  138. package/load-data-packs.cjs +0 -38
  139. package/postcss.config.cjs +0 -6
  140. package/react-app-env.d.ts +0 -1
  141. package/rollup.config.js +0 -26
  142. package/src/app/App.tsx +0 -13
  143. package/src/app/EmbeddedComponent.tsx +0 -432
  144. package/src/app/index.html +0 -20
  145. package/src/app/index.tsx +0 -19
  146. package/src/app/lookup.ts +0 -141
  147. package/src/app/override-styles.css +0 -96
  148. package/src/crate-builder/CrateManager/contexts/1.1-context.jsonld +0 -2660
  149. package/src/crate-builder/CrateManager/contexts/1.2-DRAFT-context.jsonld +0 -2918
  150. package/src/crate-builder/CrateManager/contexts.ts +0 -42
  151. package/src/crate-builder/CrateManager/crate-manager-benchmarking.spec.ts +0 -31
  152. package/src/crate-builder/CrateManager/crate-manager-loading-exporting.spec.ts +0 -431
  153. package/src/crate-builder/CrateManager/crate-manager-operations.spec.ts +0 -298
  154. package/src/crate-builder/CrateManager/crate-manager.spec.ts +0 -2336
  155. package/src/crate-builder/CrateManager/crate-manager.ts +0 -2111
  156. package/src/crate-builder/CrateManager/lib.spec.ts +0 -133
  157. package/src/crate-builder/CrateManager/lib.ts +0 -170
  158. package/src/crate-builder/CrateManager/profile-manager.spec.ts +0 -593
  159. package/src/crate-builder/CrateManager/profile-manager.ts +0 -367
  160. package/src/crate-builder/CrateManager/validate-identifier.spec.ts +0 -82
  161. package/src/crate-builder/CrateManager/validate-identifier.ts +0 -65
  162. package/src/crate-builder/RenderEntity/Add.tsx +0 -249
  163. package/src/crate-builder/RenderEntity/AddControl.stories.tsx +0 -126
  164. package/src/crate-builder/RenderEntity/AddControl.tsx +0 -84
  165. package/src/crate-builder/RenderEntity/AutoComplete.tsx +0 -215
  166. package/src/crate-builder/RenderEntity/BulkAdd.tsx +0 -136
  167. package/src/crate-builder/RenderEntity/DeleteProperty.tsx +0 -33
  168. package/src/crate-builder/RenderEntity/DialogAddProperty.tsx +0 -83
  169. package/src/crate-builder/RenderEntity/DialogBrowseEntities.tsx +0 -136
  170. package/src/crate-builder/RenderEntity/DialogEditContext.tsx +0 -107
  171. package/src/crate-builder/RenderEntity/DialogPreviewCrate.tsx +0 -54
  172. package/src/crate-builder/RenderEntity/DialogSaveCrateAsTemplate.tsx +0 -65
  173. package/src/crate-builder/RenderEntity/DialogSaveEntityTemplate.tsx +0 -87
  174. package/src/crate-builder/RenderEntity/DisplayPropertyName.stories.tsx +0 -30
  175. package/src/crate-builder/RenderEntity/DisplayPropertyName.tsx +0 -21
  176. package/src/crate-builder/RenderEntity/EntityId.tsx +0 -75
  177. package/src/crate-builder/RenderEntity/EntityName.tsx +0 -49
  178. package/src/crate-builder/RenderEntity/EntityProperty.tsx +0 -188
  179. package/src/crate-builder/RenderEntity/EntityPropertyInstance.tsx +0 -255
  180. package/src/crate-builder/RenderEntity/EntityType.tsx +0 -95
  181. package/src/crate-builder/RenderEntity/ItemLink.tsx +0 -37
  182. package/src/crate-builder/RenderEntity/PaginateLinkedEntities.stories.tsx +0 -43
  183. package/src/crate-builder/RenderEntity/PaginateLinkedEntities.tsx +0 -141
  184. package/src/crate-builder/RenderEntity/PropertyHelp.tsx +0 -39
  185. package/src/crate-builder/RenderEntity/RenderControls.tsx +0 -278
  186. package/src/crate-builder/RenderEntity/RenderLinkedItem.tsx +0 -139
  187. package/src/crate-builder/RenderEntity/RenderPropertyHelp.tsx +0 -41
  188. package/src/crate-builder/RenderEntity/RenderReverseConnections.tsx +0 -150
  189. package/src/crate-builder/RenderEntity/RenderTypes.tsx +0 -102
  190. package/src/crate-builder/RenderEntity/Shell2.tsx +0 -576
  191. package/src/crate-builder/RenderEntity/UnlinkEntity.tsx +0 -30
  192. package/src/crate-builder/RenderEntity/auto-complete.lib.ts +0 -184
  193. package/src/crate-builder/RenderEntity/keys.ts +0 -4
  194. package/src/crate-builder/RenderEntity/layout.spec.js +0 -593
  195. package/src/crate-builder/RenderEntity/layout.ts +0 -220
  196. package/src/crate-builder/Shell.tsx +0 -337
  197. package/src/crate-builder/component.css +0 -65
  198. package/src/crate-builder/editor-state.ts +0 -114
  199. package/src/crate-builder/emotionCache.ts +0 -8
  200. package/src/crate-builder/helpers.ts +0 -16
  201. package/src/crate-builder/i18n.ts +0 -22
  202. package/src/crate-builder/lib/validate-iri.ts +0 -57
  203. package/src/crate-builder/locales/en.js +0 -149
  204. package/src/crate-builder/locales/hu.js +0 -147
  205. package/src/crate-builder/primitives/Boolean.stories.tsx +0 -33
  206. package/src/crate-builder/primitives/Boolean.tsx +0 -67
  207. package/src/crate-builder/primitives/Date.stories.tsx +0 -32
  208. package/src/crate-builder/primitives/Date.tsx +0 -58
  209. package/src/crate-builder/primitives/DateTime.stories.tsx +0 -32
  210. package/src/crate-builder/primitives/DateTime.tsx +0 -64
  211. package/src/crate-builder/primitives/Geo.stories.tsx +0 -57
  212. package/src/crate-builder/primitives/Geo.tsx +0 -225
  213. package/src/crate-builder/primitives/Map.SelectArea.js +0 -359
  214. package/src/crate-builder/primitives/Map.stories.tsx +0 -61
  215. package/src/crate-builder/primitives/Map.tsx +0 -124
  216. package/src/crate-builder/primitives/Number.stories.tsx +0 -74
  217. package/src/crate-builder/primitives/Number.tsx +0 -166
  218. package/src/crate-builder/primitives/Select.stories.tsx +0 -66
  219. package/src/crate-builder/primitives/Select.tsx +0 -121
  220. package/src/crate-builder/primitives/SelectObject.stories.tsx +0 -29
  221. package/src/crate-builder/primitives/SelectObject.tsx +0 -105
  222. package/src/crate-builder/primitives/SelectUrl.stories.tsx +0 -42
  223. package/src/crate-builder/primitives/SelectUrl.tsx +0 -110
  224. package/src/crate-builder/primitives/Text.stories.tsx +0 -106
  225. package/src/crate-builder/primitives/Text.tsx +0 -197
  226. package/src/crate-builder/primitives/Time.stories.tsx +0 -38
  227. package/src/crate-builder/primitives/Time.tsx +0 -71
  228. package/src/crate-builder/primitives/Url.stories.tsx +0 -43
  229. package/src/crate-builder/primitives/Url.tsx +0 -75
  230. package/src/crate-builder/primitives/Value.stories.tsx +0 -37
  231. package/src/crate-builder/primitives/Value.tsx +0 -30
  232. package/src/crate-builder/primitives/date-libs.ts +0 -12
  233. package/src/crate-builder/profile-schema.json +0 -145
  234. package/src/crate-builder/property-definitions.ts +0 -78
  235. package/src/crate-builder/recrate.css +0 -3
  236. package/src/crate-builder/store.ts +0 -14
  237. package/src/crate-builder/tailwind.css +0 -5
  238. package/src/crate-builder/types.d.ts +0 -318
  239. package/src/examples/collection/collections-entity-example.json +0 -131
  240. package/src/examples/collection/crate-builder-entity-example.json +0 -33
  241. package/src/examples/item/complex-collection/ro-crate-metadata.json +0 -174
  242. package/src/examples/item/complex-item/ro-crate-metadata.json +0 -769
  243. package/src/examples/item/crate-with-language.json +0 -38
  244. package/src/examples/item/empty/ro-crate-metadata.json +0 -20
  245. package/src/examples/item/item-with-relationship-and-action/ro-crate-metadata.json +0 -66
  246. package/src/examples/item/large-crate/ro-crate-metadata.json +0 -5762
  247. package/src/examples/item/multiple-types/ro-crate-metadata.json +0 -20
  248. package/src/examples/item/ridiculously-big-collection/ro-crate-metadata.json +0 -162977
  249. package/src/examples/profile/aroma.complex.profile.json +0 -11098
  250. package/src/examples/profile/aroma.profile.json +0 -9158
  251. package/src/examples/profile/nyingarn-item-profile.json +0 -426
  252. package/src/examples/profile/profile-to-test-inverse-associations.json +0 -73
  253. package/src/examples/profile/profile-to-test-multiple-types.json +0 -31
  254. package/src/examples/profile/profile-with-all-primitives-and-groups.json +0 -207
  255. package/src/examples/profile/profile-with-all-primitives.json +0 -244
  256. package/src/examples/profile/profile-with-constraints.json +0 -446
  257. package/src/examples/profile/profile-with-resolve.json +0 -57
  258. package/src/examples/profile/vocabulary-creation-profile.json +0 -231
  259. package/src/images.d.ts +0 -5
  260. package/src/index.ts +0 -12
  261. package/src/types.ts +0 -104
  262. package/tailwind.config.js +0 -21
  263. package/tsconfig.app.json +0 -31
  264. package/tsconfig.json +0 -26
  265. package/typedoc.json +0 -11
  266. package/update-deps.sh +0 -4
  267. package/vite-env.d.ts +0 -1
  268. package/vite.config.ts +0 -67
  269. /package/{public → dist}/favicon.ico +0 -0
  270. /package/{public → dist}/index.html +0 -0
  271. /package/{public → dist}/logo192.png +0 -0
  272. /package/{public → dist}/logo512.png +0 -0
  273. /package/{public → dist}/manifest.json +0 -0
  274. /package/{public → dist}/marker-icon.png +0 -0
  275. /package/{public → dist}/marker-shadow.png +0 -0
  276. /package/{public → dist}/robots.txt +0 -0
@@ -1,220 +0,0 @@
1
- import difference from "lodash/difference";
2
- import orderBy from "lodash/orderBy";
3
- import uniqBy from "lodash/uniqBy";
4
- const coreProperties = ["@id", "@type", "@reverse", "name"];
5
- import type {
6
- ProfileManagerType,
7
- ProfileInput,
8
- ProfileLayout,
9
- ProfileLayoutGroup,
10
- NormalisedEntityDefinition,
11
- } from "../types";
12
-
13
- export function applyLayout({
14
- configuration,
15
- entity,
16
- extraProperties,
17
- profileManager: pm,
18
- }: {
19
- configuration: { [key: string]: any };
20
- entity: NormalisedEntityDefinition;
21
- extraProperties: string[];
22
- profileManager: ProfileManagerType;
23
- }): {
24
- renderTabs: boolean;
25
- missingRequiredData: boolean;
26
- entity: NormalisedEntityDefinition;
27
- tabs: ProfileLayoutGroup[];
28
- } {
29
- let missingRequiredData = false;
30
- let inputs = [];
31
-
32
- ({ missingRequiredData, entity, inputs } = getProfileInputs({
33
- configuration,
34
- entity,
35
- pm,
36
- }));
37
-
38
- if (extraProperties.length) {
39
- extraProperties.forEach((property) => {
40
- if (!entity[property]) entity[property] = [];
41
- });
42
- }
43
- let layouts = pm.getLayout({ entity });
44
- let renderTabs = false;
45
- let tabs = [] as ProfileLayoutGroup[];
46
- if (layouts) {
47
- renderTabs = true;
48
- tabs = applyLayoutToEntity({ layouts, inputs, entity });
49
- tabs = applyTabDataIndicators({ configuration, tabs, entity });
50
- }
51
-
52
- return { renderTabs, missingRequiredData, entity, tabs };
53
- }
54
-
55
- function getProfileInputs({
56
- configuration,
57
- entity,
58
- pm,
59
- }: {
60
- configuration: { [key: string]: any };
61
- entity: NormalisedEntityDefinition;
62
- pm: ProfileManagerType;
63
- }): {
64
- missingRequiredData: boolean;
65
- entity: NormalisedEntityDefinition;
66
- inputs: ProfileInput[];
67
- } {
68
- const inputs = pm.getInputsFromProfile({ entity });
69
-
70
- let missingRequiredData = false;
71
- for (let input of inputs) {
72
- if (input.name === "name") continue;
73
- if (!input.id) {
74
- console.error(`Excluding invalid input - missing id: ${input}`);
75
- continue;
76
- }
77
- if (!entity[input.name] && !configuration.readonly) {
78
- entity[input.name] = [];
79
- }
80
-
81
- if (input.required && (!entity[input.name] || !entity[input.name].length)) {
82
- missingRequiredData = true;
83
- }
84
- }
85
- return { missingRequiredData, entity, inputs };
86
- }
87
-
88
- function applyLayoutToEntity({
89
- layouts,
90
- inputs,
91
- entity,
92
- }: {
93
- layouts: ProfileLayout;
94
- inputs: ProfileInput[];
95
- entity: NormalisedEntityDefinition;
96
- }): ProfileLayoutGroup[] {
97
- // normalise the layouts
98
- let sort = false;
99
- for (let name of Object.keys(layouts)) {
100
- layouts[name].name = name;
101
- layouts[name].inputs = [];
102
- if (!layouts[name].properties) layouts[name].properties = [];
103
- if (layouts[name].order) sort = true;
104
- }
105
-
106
- // sort the profile inputs into their groups
107
- for (let input of inputs) {
108
- if (coreProperties.includes(input.name)) continue;
109
- if (!entity[input.name]) continue;
110
- if (input.hide) continue;
111
- if (input.group && layouts[input.group]) {
112
- layouts[input.group].inputs.push(input);
113
- }
114
- }
115
-
116
- // now sort any ungrouped inputs using the properties
117
- // array in each layout
118
- let ungroupedInputs = [];
119
- for (let input of inputs) {
120
- if (coreProperties.includes(input.name)) continue;
121
- if (!entity[input.name]) continue;
122
- if (input?.hide) continue;
123
- if (input.group && layouts[input.group]) continue;
124
- let matched = false;
125
- for (let name of Object.keys(layouts)) {
126
- if (
127
- layouts[name] &&
128
- layouts[name].properties &&
129
- (layouts[name].properties.includes(input.id) ||
130
- layouts[name].properties.includes(input.name))
131
- ) {
132
- layouts[name].inputs.push(input);
133
- matched = true;
134
- }
135
- }
136
- if (!matched) ungroupedInputs.push(input);
137
- }
138
-
139
- // and any that still aren't part of a group go into overflow
140
- for (let input of ungroupedInputs) {
141
- layouts.overflow.inputs.push(input);
142
- }
143
-
144
- // get a list of the properties defined on the entity
145
- // but which have no input definition and pop them
146
- // into the overflow group with a default Text configuration
147
- let profileInputs = inputs.map((i) => i.name);
148
- let entityProperties = Object.keys(entity);
149
- let missingInputs = difference(entityProperties, profileInputs);
150
- for (let input of missingInputs) {
151
- if (coreProperties.includes(input)) continue;
152
- layouts.overflow.inputs.push({
153
- id: "",
154
- name: input,
155
- multiple: true,
156
- type: ["Text"],
157
- });
158
- }
159
-
160
- let tabs: any[] = Object.keys(layouts)
161
- .map((k) => layouts[k])
162
- .filter((t) => t.name !== "appliesTo");
163
- if (sort) tabs = orderBy(tabs, "order");
164
-
165
- // if a properties array is defined
166
- // reorder the inputs by the order in that array
167
- for (let tab of tabs) {
168
- if (tab.properties.length) {
169
- let orderedInputs = [];
170
- let otherInputs = [];
171
- for (let property of tab.properties) {
172
- for (let input of tab.inputs) {
173
- if ([input.name, input.id].includes(property)) {
174
- orderedInputs.push(input);
175
- } else {
176
- otherInputs.push(input);
177
- }
178
- }
179
- }
180
- orderedInputs = uniqBy(orderedInputs, "name");
181
- otherInputs = uniqBy(otherInputs, "name");
182
- otherInputs = difference(otherInputs, orderedInputs);
183
- tab.inputs = [...orderedInputs, ...otherInputs];
184
- }
185
- }
186
- return tabs;
187
- }
188
-
189
- function applyTabDataIndicators({
190
- configuration,
191
- tabs,
192
- entity,
193
- }: {
194
- configuration: { [key: string]: any };
195
- tabs: ProfileLayoutGroup[];
196
- entity: NormalisedEntityDefinition;
197
- }): ProfileLayoutGroup[] {
198
- // special case: component in readonly mode
199
- if (configuration.readonly) {
200
- tabs = tabs.map((tab) => {
201
- tab.hasData = false;
202
- tab.missingRequiredData = false;
203
- return tab;
204
- });
205
- } else {
206
- for (let tab of tabs) {
207
- tab.missingRequiredData = false;
208
- tab.hasData = false;
209
- for (let input of tab.inputs) {
210
- if (input.required && !entity[input.name].length) {
211
- tab.missingRequiredData = true;
212
- }
213
- if (entity[input.name].length) {
214
- tab.hasData = true;
215
- }
216
- }
217
- }
218
- }
219
- return tabs;
220
- }
@@ -1,337 +0,0 @@
1
- import React, {
2
- useState,
3
- useEffect,
4
- useRef,
5
- useCallback,
6
- useMemo,
7
- useContext,
8
- JSX,
9
- } from "react";
10
- //import RenderEntity from "./RenderEntity/Shell";
11
- import RenderEntity from "./RenderEntity/Shell2";
12
- import {
13
- CrateManager,
14
- } from "./CrateManager/crate-manager";
15
- import {
16
- ProfileManager,
17
- } from "./CrateManager/profile-manager";
18
- import { useStateStore } from "./store";
19
- import i18next from "./i18n";
20
- import isEmpty from "lodash/isEmpty";
21
- import isFunction from "lodash/isFunction";
22
- import { CrateManagerType, ProfileManagerType, UnverifiedCrate } from "./types"; // Add appropriate types
23
- import { propertyDefinitions } from "./property-definitions";
24
- import { Lookup } from "./RenderEntity/auto-complete.lib";
25
- import { App as AntApp, ConfigProvider } from 'antd';
26
- import { createScopedCache } from './emotionCache';
27
- import { CacheProvider } from "@emotion/react";
28
-
29
- const antdCache = createScopedCache('recrate');
30
-
31
-
32
- export interface DescriboCrateBuilderProps {
33
- crate?: CrateManagerType["crate"];
34
- profile?: ProfileManagerType["profile"];
35
- entityId?: string;
36
- lookup?: any;
37
- enableContextEditor?: boolean;
38
- enableCratePreview?: boolean;
39
- enableBrowseEntities?: boolean;
40
- enableTemplateSave?: boolean;
41
- enableReverseLinkBrowser?: boolean;
42
- enableUrlMarkup?: boolean;
43
- enableEntityTimestamps?: boolean;
44
- purgeUnlinkedEntities?: boolean;
45
- readonly?: boolean;
46
- webComponent?: boolean;
47
- tabLocation?: string;
48
- showControls?: boolean;
49
- language?: string;
50
- resetTabOnEntityChange?: boolean;
51
- resetTabOnProfileChange?: boolean;
52
- onReady?: () => void;
53
- onError?: (errors: any) => void;
54
- onWarning?: (warnings: any) => void;
55
- onNavigation?: (info: { "@id": string; "@type": string[]; name: string }) => void;
56
- onSaveCrate?: (saveData: {crate: any}) => void,
57
- onSaveEntityTemplate?: (entity: any) => void;
58
- }
59
-
60
-
61
- // Use propertyDefinitions to define props
62
- export const ProfileManagerContext = React.createContext<any>(null);
63
- export const CrateManagerContext = React.createContext<any>(null);
64
- export const LookupsContext = React.createContext<any>(null);
65
-
66
- export function DescriboCrateBuilder(props: DescriboCrateBuilderProps): JSX.Element {
67
- const {
68
- crate,
69
- profile,
70
- entityId,
71
- lookup,
72
- enableContextEditor = propertyDefinitions.enableContextEditor.default,
73
- enableCratePreview = propertyDefinitions.enableCratePreview.default,
74
- enableBrowseEntities = propertyDefinitions.enableBrowseEntities.default,
75
- enableTemplateSave = propertyDefinitions.enableTemplateSave.default,
76
- enableReverseLinkBrowser = propertyDefinitions.enableReverseLinkBrowser.default,
77
- enableUrlMarkup = propertyDefinitions.enableUrlMarkup.default,
78
- enableEntityTimestamps = propertyDefinitions.enableEntityTimestamps.default,
79
- purgeUnlinkedEntities = propertyDefinitions.purgeUnlinkedEntities.default,
80
- readonly = propertyDefinitions.readonly.default,
81
- webComponent = propertyDefinitions.webComponent.default,
82
- tabLocation = propertyDefinitions.tabLocation.default,
83
- showControls = propertyDefinitions.showControls.default,
84
- language = propertyDefinitions.language.default,
85
- resetTabOnEntityChange = false,
86
- resetTabOnProfileChange = false,
87
- onReady,
88
- onError,
89
- onWarning,
90
- onNavigation,
91
- onSaveCrate,
92
- onSaveEntityTemplate,
93
- } = props;
94
-
95
- console.log("DescriboCrateBuilder props:", { crate, profile, entityId });
96
- const [ready, setReady] = useState(false);
97
- const [error, setError] = useState(false);
98
- const [contextEntity, setContextEntity] = useState<any | null>(null);
99
- const [cm, setCm] = useState<CrateManager | null>(null);
100
- const [pm, setPm] = useState<ProfileManager | null>(null);
101
- const [lookups, setLookups] = useState<typeof propertyDefinitions.lookup | null>(null);
102
- const state = useStateStore();
103
- const renderEntityRef = useRef<any>(null);
104
- const keys = useRef({ cm: 0, pm: 0, lookups: 0 });
105
-
106
- const configuration = useMemo(() => {
107
- const config = {
108
- enableContextEditor,
109
- enableCratePreview,
110
- enableBrowseEntities,
111
- enableTemplateSave,
112
- enableReverseLinkBrowser,
113
- enableUrlMarkup,
114
- enableEntityTimestamps,
115
- purgeUnlinkedEntities,
116
- readonly,
117
- webComponent,
118
- tabLocation,
119
- showControls,
120
- language,
121
- enableTemplateLookups: false,
122
- enableDataPackLookups: false,
123
- };
124
-
125
-
126
-
127
- if (lookup) {
128
- if (isFunction(lookup.entityTemplates)) {
129
- config.enableTemplateLookups = true;
130
- }
131
- if (isFunction(lookup.dataPacks)) {
132
- config.enableDataPackLookups = true;
133
- }
134
- }
135
-
136
- return config;
137
- }, [
138
- enableContextEditor,
139
- enableCratePreview,
140
- enableBrowseEntities,
141
- enableTemplateSave,
142
- enableReverseLinkBrowser,
143
- enableUrlMarkup,
144
- enableEntityTimestamps,
145
- purgeUnlinkedEntities,
146
- readonly,
147
- webComponent,
148
- tabLocation,
149
- showControls,
150
- language,
151
- lookup,
152
- ]);
153
-
154
- const init = useCallback(async () => {
155
-
156
- console.log("Initializing with crate:", crate);
157
- console.log("Profile loaded:", profile);
158
-
159
- i18next.changeLanguage(language);
160
-
161
- if (!crate || isEmpty(crate)) {
162
- setReady(false);
163
- setContextEntity(null);
164
- setError(false);
165
- return;
166
- }
167
-
168
- const newCm = new CrateManager({
169
- crate: crate as UnverifiedCrate,
170
- entityTimestamps: enableEntityTimestamps,
171
- });
172
-
173
- console.log("Entity:", newCm.getEntity({ id: entityId || "./" }));
174
-
175
- // Create a deep clone of the profile to avoid mutation issues
176
- const profileClone = profile ? JSON.parse(JSON.stringify(profile)) : {};
177
-
178
- const newPm = new ProfileManager({
179
- profile: profileClone,
180
- });
181
-
182
- // Add a key property to the ProfileManager for tracking changes
183
- newPm.$key = ++keys.current.pm;
184
-
185
- newCm.setProfileManager(newPm as ProfileManagerType);
186
-
187
- // Only set context if it exists
188
- if (newPm.context) newCm.setContext(newPm.context);
189
-
190
- if (lookup) {
191
- setLookups({ ...lookup, $key: ++keys.current.lookups });
192
- }
193
-
194
- const errors = newCm.getErrors();
195
- if (errors.hasError) {
196
- onError?.({ errors }); // Pass errors wrapped in an object to match Vue implementation
197
- setReady(false);
198
- //setError(true);
199
- console.error("❌ CrateManager reported errors:", errors);
200
- return;
201
- }
202
-
203
- const warnings = newCm.getWarnings();
204
- if (warnings.hasWarning) {
205
- onWarning?.({ warnings }); // Pass warnings wrapped in an object
206
- }
207
-
208
- setCm(newCm);
209
- setPm(newPm);
210
- setError(false);
211
-
212
- // Force state update to ensure UI refreshes
213
- state.configuration = configuration;
214
-
215
- try {
216
- // Add error handling for entity setting
217
- if (entityId) {
218
- handleSetCurrentEntity({ id: entityId });
219
- } else {
220
- // Make sure root entity exists and can be set
221
- const rootEntity = newCm.getEntity({ id: "./" });
222
- if (!isEmpty(rootEntity)) {
223
- setContextEntity(rootEntity);
224
- state.editorState.push({ id: rootEntity["@id"] });
225
- } else {
226
- console.warn("Root entity './' not found");
227
- setError(true);
228
- return;
229
- }
230
- }
231
-
232
- setReady(true);
233
- onReady?.();
234
- } catch (error) {
235
- console.error("Error setting current entity:", error);
236
- setError(true);
237
- onError?.({ error: "Failed to initialize entity" });
238
- }
239
- }, [crate, profile, entityId, lookup, configuration]);
240
-
241
- const handleSetCurrentEntity = useCallback((params: { id: string; updateState?: boolean }) => {
242
- const { id, updateState = true } = params;
243
- if (!id || !cm) return;
244
-
245
- try {
246
- const entity = cm.getEntity({ id });
247
- if (!isEmpty(entity)) {
248
- setContextEntity(entity);
249
- onNavigation?.({
250
- "@id": entity["@id"],
251
- "@type": entity["@type"],
252
- name: entity.name,
253
- });
254
-
255
- if (updateState) {
256
- state.editorState.push({ id: entity["@id"] });
257
- }
258
- } else {
259
- console.warn(`Entity with id ${id} not found`);
260
- // Try to fall back to root entity if not already trying to load it
261
- if (id !== "./") {
262
- handleSetCurrentEntity({ id: "./" });
263
- }
264
- }
265
- } catch (error) {
266
- console.error("Error in handleSetCurrentEntity:", error);
267
- onError?.({ error: "Failed to set entity" });
268
- }
269
- }, [cm, onNavigation]);
270
-
271
- const saveEntityAsTemplate = () => {
272
- if (!cm || !contextEntity) return;
273
- const template = cm.exportEntityTemplate({
274
- id: contextEntity["@id"],
275
- resolveDepth: 1, // Default resolveDepth or adjust as needed
276
- });
277
- onSaveEntityTemplate?.(template);
278
- };
279
-
280
- const handleWarning = () => {
281
- onWarning?.({});
282
- };
283
-
284
- const handleError = () => {
285
- onError?.({});
286
- };
287
-
288
- useEffect(() => {
289
- state.editorState.reset();
290
- init();
291
- }, [crate, profile, init]);
292
-
293
- useEffect(() => {
294
- if (entityId && entityId !== contextEntity?.["@id"]) {
295
- handleSetCurrentEntity({ id: entityId }); // Pass an object with the id property
296
- }
297
- }, [entityId, contextEntity, handleSetCurrentEntity]);
298
-
299
- const saveCrate = () => {
300
- if (!cm) return;
301
- if (purgeUnlinkedEntities) {
302
- cm.purgeUnlinkedEntities();
303
- }
304
- const exported = cm.exportCrate();
305
- onSaveCrate?.({ crate: exported });
306
- };
307
-
308
- return (
309
- <div className="recrate">
310
- <CacheProvider value={antdCache}>
311
- <ConfigProvider>
312
- <AntApp className="recrate-ant">
313
- <ProfileManagerContext.Provider value={pm}>
314
- <CrateManagerContext.Provider value={cm}>
315
- <LookupsContext.Provider value={lookups}>
316
- {ready && !error && contextEntity && (
317
- <RenderEntity
318
- ref={renderEntityRef}
319
- entity={contextEntity}
320
- onLoadEntity={handleSetCurrentEntity}
321
- onSaveCrate={saveCrate}
322
- onSaveEntityTemplate={saveEntityAsTemplate}
323
- onWarning={handleWarning}
324
- onError={handleError}
325
- />
326
- )}
327
- </LookupsContext.Provider>
328
- </CrateManagerContext.Provider>
329
- </ProfileManagerContext.Provider>
330
- </AntApp>
331
- </ConfigProvider>
332
- </CacheProvider>
333
- </div>
334
- );
335
- };
336
-
337
- export default DescriboCrateBuilder;
@@ -1,65 +0,0 @@
1
- .el-tabs__item {
2
- height: unset;
3
- }
4
-
5
- .el-select-dropdown__wrap {
6
- max-height: 500px !important;
7
- }
8
-
9
- .el-select-group__title {
10
- font-size: 14px !important;
11
- }
12
-
13
- /* ::-webkit-scrollbar {
14
- display: none;
15
- } */
16
-
17
- /* Customize website's scrollbar like Mac OS
18
- Not supports in Firefox and IE */
19
- .scrollbar {
20
- overflow: overlay
21
- }
22
-
23
- /* total width */
24
- .scrollbar::-webkit-scrollbar {
25
- background-color: rgba(0, 0, 0, 0);
26
- width: 16px;
27
- height: 16px;
28
- z-index: 999999;
29
- }
30
-
31
- /* background of the scrollbar except button or resizer */
32
- .scrollbar::-webkit-scrollbar-track {
33
- background-color: rgba(0, 0, 0, 0);
34
- }
35
-
36
- /* scrollbar itself */
37
- .scrollbar::-webkit-scrollbar-thumb {
38
- background-color: rgba(0, 0, 0, 0);
39
- border-radius: 16px;
40
- border: 0px solid #fff;
41
- }
42
-
43
- /* set button(top and bottom of the scrollbar) */
44
- .scrollbar::-webkit-scrollbar-button {
45
- display: none;
46
- }
47
-
48
-
49
- /* scrollbar when element is hovered */
50
- .scrollbar:hover::-webkit-scrollbar-thumb {
51
- background-color: #a0a0a5;
52
- border: 4px solid #fff;
53
- }
54
-
55
- /* scrollbar when scrollbar is hovered */
56
- .scrollbar::-webkit-scrollbar-thumb:hover {
57
- background-color: #a0a0a5;
58
- border: 4px solid #f4f4f4
59
- }
60
-
61
- .cm-editor {
62
- font-size: 12px;
63
- height: 350px;
64
- overflow: auto;
65
- }