@firecms/core 3.0.0-alpha.71 → 3.0.0-alpha.73

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 (268) hide show
  1. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +5 -5
  2. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +1 -1
  3. package/dist/components/EntityCollectionTable/index.d.ts +1 -1
  4. package/dist/components/EntityCollectionTable/types.d.ts +15 -1
  5. package/dist/components/EntityCollectionTable/useDataSourceEntityCollectionTableController.d.ts +32 -0
  6. package/dist/components/SearchIconsView.d.ts +5 -0
  7. package/dist/components/index.d.ts +1 -0
  8. package/dist/hooks/useVerifyLicense.d.ts +0 -0
  9. package/dist/index.es.js +8808 -6804
  10. package/dist/index.es.js.map +1 -1
  11. package/dist/index.umd.js +5 -5
  12. package/dist/index.umd.js.map +1 -1
  13. package/dist/util/icon_list.d.ts +1 -0
  14. package/dist/util/icon_synonyms.d.ts +1950 -0
  15. package/dist/util/index.d.ts +2 -0
  16. package/package.json +3 -5
  17. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +5 -6
  18. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +1 -1
  19. package/src/components/EntityCollectionTable/index.tsx +1 -1
  20. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +2 -2
  21. package/src/components/EntityCollectionTable/types.tsx +15 -1
  22. package/src/components/EntityCollectionTable/{useEntityCollectionTableController.tsx → useDataSourceEntityCollectionTableController.tsx} +16 -4
  23. package/src/components/EntityCollectionView/EntityCollectionView.tsx +2 -2
  24. package/src/components/ReferenceSelectionInner.tsx +2 -2
  25. package/src/components/SearchIconsView.tsx +75 -0
  26. package/src/components/VirtualTable/VirtualTableRow.tsx +0 -1
  27. package/src/components/index.tsx +1 -0
  28. package/src/core/EntitySidePanel.tsx +0 -1
  29. package/src/form/EntityForm.tsx +6 -5
  30. package/src/form/PropertyFieldBinding.tsx +1 -1
  31. package/src/form/validation.ts +5 -1
  32. package/src/hooks/useVerifyLicense.tsx +1 -0
  33. package/src/internal/EntityView.tsx +6 -6
  34. package/src/internal/useBuildDataSource.ts +0 -2
  35. package/src/internal/useBuildSideEntityController.tsx +26 -15
  36. package/src/preview/property_previews/MapPropertyPreview.tsx +3 -1
  37. package/src/preview/property_previews/StringPropertyPreview.tsx +1 -2
  38. package/src/util/enums.ts +1 -2
  39. package/src/util/icon_list.ts +17 -0
  40. package/src/util/icon_synonyms.ts +1950 -0
  41. package/src/util/index.ts +2 -0
  42. package/dist/components/EntityCollectionTable/useEntityCollectionTableController.d.ts +0 -21
  43. package/dist/util/chip_utils.d.ts +0 -3
  44. package/src/components/ArrayContainer.d.ts +0 -42
  45. package/src/components/CircularProgressCenter.d.ts +0 -11
  46. package/src/components/DeleteConfirmationDialog.d.ts +0 -9
  47. package/src/components/EntityCollectionTable/EntityCollectionTable.d.ts +0 -30
  48. package/src/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +0 -106
  49. package/src/components/EntityCollectionTable/fields/TableReferenceField.d.ts +0 -15
  50. package/src/components/EntityCollectionTable/fields/TableStorageUpload.d.ts +0 -33
  51. package/src/components/EntityCollectionTable/filters/BooleanFilterField.d.ts +0 -9
  52. package/src/components/EntityCollectionTable/filters/DateTimeFilterField.d.ts +0 -11
  53. package/src/components/EntityCollectionTable/filters/ReferenceFilterField.d.ts +0 -14
  54. package/src/components/EntityCollectionTable/filters/StringNumberFilterField.d.ts +0 -13
  55. package/src/components/EntityCollectionTable/index.d.ts +0 -4
  56. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +0 -18
  57. package/src/components/EntityCollectionTable/internal/DeleteEntityDialog.d.ts +0 -12
  58. package/src/components/EntityCollectionTable/internal/EntityCollectionRowActions.d.ts +0 -35
  59. package/src/components/EntityCollectionTable/internal/EntityTableCell.d.ts +0 -26
  60. package/src/components/EntityCollectionTable/internal/EntityTableCellActions.d.ts +0 -9
  61. package/src/components/EntityCollectionTable/internal/PropertyTableCell.d.ts +0 -18
  62. package/src/components/EntityCollectionTable/internal/common.d.ts +0 -4
  63. package/src/components/EntityCollectionTable/internal/default_entity_actions.d.ts +0 -6
  64. package/src/components/EntityCollectionTable/internal/popup_field/ElementResizeListener.d.ts +0 -5
  65. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +0 -23
  66. package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +0 -13
  67. package/src/components/EntityCollectionTable/internal/popup_field/useWindowSize.d.ts +0 -6
  68. package/src/components/EntityCollectionTable/types.d.ts +0 -39
  69. package/src/components/EntityCollectionTable/useDebouncedData.d.ts +0 -9
  70. package/src/components/EntityCollectionTable/useEntityCollectionTableController.d.ts +0 -21
  71. package/src/components/EntityCollectionView/EntityCollectionView.d.ts +0 -37
  72. package/src/components/EntityCollectionView/EntityCollectionViewActions.d.ts +0 -14
  73. package/src/components/EntityCollectionView/useColumnsIds.d.ts +0 -4
  74. package/src/components/EntityPreview.d.ts +0 -11
  75. package/src/components/ErrorBoundary.d.ts +0 -11
  76. package/src/components/ErrorTooltip.d.ts +0 -2
  77. package/src/components/ErrorView.d.ts +0 -19
  78. package/src/components/FieldConfigBadge.d.ts +0 -4
  79. package/src/components/FireCMSAppBar.d.ts +0 -26
  80. package/src/components/FireCMSLogo.d.ts +0 -7
  81. package/src/components/HomePage/DefaultHomePage.d.ts +0 -21
  82. package/src/components/HomePage/FavouritesView.d.ts +0 -3
  83. package/src/components/HomePage/NavigationCollectionCard.d.ts +0 -17
  84. package/src/components/HomePage/NavigationGroup.d.ts +0 -4
  85. package/src/components/HomePage/index.d.ts +0 -3
  86. package/src/components/LabelWithIcon.d.ts +0 -14
  87. package/src/components/NotFoundPage.d.ts +0 -1
  88. package/src/components/ReferenceSelectionInner.d.ts +0 -58
  89. package/src/components/ReferenceWidget.d.ts +0 -28
  90. package/src/components/VirtualTable/VirtualTable.d.ts +0 -11
  91. package/src/components/VirtualTable/VirtualTableCell.d.ts +0 -14
  92. package/src/components/VirtualTable/VirtualTableHeader.d.ts +0 -27
  93. package/src/components/VirtualTable/VirtualTableHeaderRow.d.ts +0 -2
  94. package/src/components/VirtualTable/VirtualTableProps.d.ts +0 -215
  95. package/src/components/VirtualTable/VirtualTableRow.d.ts +0 -3
  96. package/src/components/VirtualTable/common.d.ts +0 -2
  97. package/src/components/VirtualTable/fields/VirtualTableDateField.d.ts +0 -11
  98. package/src/components/VirtualTable/fields/VirtualTableInput.d.ts +0 -8
  99. package/src/components/VirtualTable/fields/VirtualTableNumberInput.d.ts +0 -8
  100. package/src/components/VirtualTable/fields/VirtualTableSelect.d.ts +0 -15
  101. package/src/components/VirtualTable/fields/VirtualTableSwitch.d.ts +0 -7
  102. package/src/components/VirtualTable/index.d.ts +0 -2
  103. package/src/components/VirtualTable/types.d.ts +0 -34
  104. package/src/components/index.d.ts +0 -20
  105. package/src/contexts/AuthControllerContext.d.ts +0 -3
  106. package/src/contexts/DataSourceContext.d.ts +0 -3
  107. package/src/contexts/DialogsProvider.d.ts +0 -4
  108. package/src/contexts/ModeController.d.ts +0 -4
  109. package/src/contexts/NavigationContext.d.ts +0 -3
  110. package/src/contexts/SideDialogsControllerContext.d.ts +0 -3
  111. package/src/contexts/SideEntityControllerContext.d.ts +0 -3
  112. package/src/contexts/SnackbarProvider.d.ts +0 -2
  113. package/src/contexts/StorageSourceContext.d.ts +0 -3
  114. package/src/contexts/UserConfigurationPersistenceContext.d.ts +0 -3
  115. package/src/contexts/index.d.ts +0 -3
  116. package/src/core/Drawer.d.ts +0 -23
  117. package/src/core/EntitySidePanel.d.ts +0 -10
  118. package/src/core/FireCMS.d.ts +0 -14
  119. package/src/core/NavigationRoutes.d.ts +0 -21
  120. package/src/core/Scaffold.d.ts +0 -52
  121. package/src/core/SideDialogs.d.ts +0 -23
  122. package/src/core/field_configs.d.ts +0 -7
  123. package/src/core/index.d.ts +0 -10
  124. package/src/core/useBuildLocalConfigurationPersistence.d.ts +0 -2
  125. package/src/core/useBuildModeController.d.ts +0 -6
  126. package/src/form/EntityForm.d.ts +0 -75
  127. package/src/form/PropertyFieldBinding.d.ts +0 -30
  128. package/src/form/components/CustomIdField.d.ts +0 -9
  129. package/src/form/components/ErrorFocus.d.ts +0 -4
  130. package/src/form/components/FieldHelperText.d.ts +0 -12
  131. package/src/form/components/FormikArrayContainer.d.ts +0 -18
  132. package/src/form/components/StorageItemPreview.d.ts +0 -13
  133. package/src/form/components/StorageUploadProgress.d.ts +0 -10
  134. package/src/form/components/SwitchControl.d.ts +0 -8
  135. package/src/form/components/index.d.ts +0 -3
  136. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.d.ts +0 -9
  137. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.d.ts +0 -11
  138. package/src/form/field_bindings/BlockFieldBinding.d.ts +0 -10
  139. package/src/form/field_bindings/DateTimeFieldBinding.d.ts +0 -11
  140. package/src/form/field_bindings/KeyValueFieldBinding.d.ts +0 -7
  141. package/src/form/field_bindings/MapFieldBinding.d.ts +0 -9
  142. package/src/form/field_bindings/MarkdownFieldBinding.d.ts +0 -9
  143. package/src/form/field_bindings/MultiSelectBinding.d.ts +0 -9
  144. package/src/form/field_bindings/ReadOnlyFieldBinding.d.ts +0 -10
  145. package/src/form/field_bindings/ReferenceFieldBinding.d.ts +0 -9
  146. package/src/form/field_bindings/RepeatFieldBinding.d.ts +0 -10
  147. package/src/form/field_bindings/SelectFieldBinding.d.ts +0 -12
  148. package/src/form/field_bindings/StorageUploadFieldBinding.d.ts +0 -28
  149. package/src/form/field_bindings/SwitchFieldBinding.d.ts +0 -12
  150. package/src/form/field_bindings/TextFieldBinding.d.ts +0 -12
  151. package/src/form/index.d.ts +0 -20
  152. package/src/form/useClearRestoreValue.d.ts +0 -13
  153. package/src/form/validation.d.ts +0 -25
  154. package/src/hooks/data/delete.d.ts +0 -37
  155. package/src/hooks/data/save.d.ts +0 -42
  156. package/src/hooks/data/useCollectionFetch.d.ts +0 -50
  157. package/src/hooks/data/useDataOrder.d.ts +0 -12
  158. package/src/hooks/data/useDataSource.d.ts +0 -6
  159. package/src/hooks/data/useEntityFetch.d.ts +0 -28
  160. package/src/hooks/index.d.ts +0 -19
  161. package/src/hooks/useAuthController.d.ts +0 -11
  162. package/src/hooks/useBrowserTitleAndIcon.d.ts +0 -6
  163. package/src/hooks/useClipboard.d.ts +0 -57
  164. package/src/hooks/useDialogsController.d.ts +0 -11
  165. package/src/hooks/useFireCMSContext.d.ts +0 -12
  166. package/src/hooks/useLargeLayout.d.ts +0 -1
  167. package/src/hooks/useModeController.d.ts +0 -20
  168. package/src/hooks/useNavigationController.d.ts +0 -9
  169. package/src/hooks/useReferenceDialog.d.ts +0 -18
  170. package/src/hooks/useResolvedNavigationFrom.d.ts +0 -72
  171. package/src/hooks/useSideDialogsController.d.ts +0 -18
  172. package/src/hooks/useSideEntityController.d.ts +0 -12
  173. package/src/hooks/useSnackbarController.d.ts +0 -41
  174. package/src/hooks/useStorageSource.d.ts +0 -6
  175. package/src/hooks/useUserConfigurationPersistence.d.ts +0 -8
  176. package/src/index.d.ts +0 -8
  177. package/src/internal/EntityView.d.ts +0 -22
  178. package/src/internal/common.d.ts +0 -3
  179. package/src/internal/useBuildDataSource.d.ts +0 -22
  180. package/src/internal/useBuildNavigationController.d.ts +0 -14
  181. package/src/internal/useBuildSideDialogsController.d.ts +0 -2
  182. package/src/internal/useBuildSideEntityController.d.ts +0 -4
  183. package/src/internal/useLocaleConfig.d.ts +0 -1
  184. package/src/internal/useRestoreScroll.d.ts +0 -6
  185. package/src/internal/useUnsavedChangesDialog.d.ts +0 -14
  186. package/src/preview/PropertyPreview.d.ts +0 -7
  187. package/src/preview/PropertyPreviewProps.d.ts +0 -43
  188. package/src/preview/components/ArrayEnumPreview.d.ts +0 -11
  189. package/src/preview/components/AsyncPreviewComponent.d.ts +0 -11
  190. package/src/preview/components/BooleanPreview.d.ts +0 -7
  191. package/src/preview/components/DatePreview.d.ts +0 -7
  192. package/src/preview/components/EmptyValue.d.ts +0 -4
  193. package/src/preview/components/EnumValuesChip.d.ts +0 -13
  194. package/src/preview/components/ImagePreview.d.ts +0 -12
  195. package/src/preview/components/ReferencePreview.d.ts +0 -22
  196. package/src/preview/components/StorageThumbnail.d.ts +0 -13
  197. package/src/preview/components/UrlComponentPreview.d.ts +0 -12
  198. package/src/preview/index.d.ts +0 -23
  199. package/src/preview/property_previews/ArrayOfMapsPreview.d.ts +0 -5
  200. package/src/preview/property_previews/ArrayOfReferencesPreview.d.ts +0 -5
  201. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +0 -5
  202. package/src/preview/property_previews/ArrayOfStringsPreview.d.ts +0 -5
  203. package/src/preview/property_previews/ArrayOneOfPreview.d.ts +0 -5
  204. package/src/preview/property_previews/ArrayPropertyEnumPreview.d.ts +0 -5
  205. package/src/preview/property_previews/ArrayPropertyPreview.d.ts +0 -5
  206. package/src/preview/property_previews/MapPropertyPreview.d.ts +0 -8
  207. package/src/preview/property_previews/NumberPropertyPreview.d.ts +0 -6
  208. package/src/preview/property_previews/SkeletonPropertyComponent.d.ts +0 -14
  209. package/src/preview/property_previews/StringPropertyPreview.d.ts +0 -6
  210. package/src/preview/util.d.ts +0 -7
  211. package/src/types/analytics.d.ts +0 -1
  212. package/src/types/appcheck.d.ts +0 -26
  213. package/src/types/auth.d.ts +0 -40
  214. package/src/types/collections.d.ts +0 -451
  215. package/src/types/datasource.d.ts +0 -262
  216. package/src/types/dialogs_controller.d.ts +0 -32
  217. package/src/types/entities.d.ts +0 -57
  218. package/src/types/entity_actions.d.ts +0 -35
  219. package/src/types/entity_callbacks.d.ts +0 -171
  220. package/src/types/entity_link_builder.d.ts +0 -7
  221. package/src/types/export_import.d.ts +0 -21
  222. package/src/types/fields.d.ts +0 -181
  223. package/src/types/firecms.d.ts +0 -151
  224. package/src/types/firecms_context.d.ts +0 -110
  225. package/src/types/index.d.ts +0 -26
  226. package/src/types/local_config_persistence.d.ts +0 -21
  227. package/src/types/locales.d.ts +0 -4
  228. package/src/types/modify_collections.d.ts +0 -5
  229. package/src/types/navigation.d.ts +0 -178
  230. package/src/types/permissions.d.ts +0 -63
  231. package/src/types/plugins.d.ts +0 -179
  232. package/src/types/properties.d.ts +0 -681
  233. package/src/types/property_config.d.ts +0 -42
  234. package/src/types/resolved_entities.d.ts +0 -98
  235. package/src/types/side_dialogs_controller.d.ts +0 -57
  236. package/src/types/side_entity_controller.d.ts +0 -83
  237. package/src/types/storage.d.ts +0 -82
  238. package/src/types/user.d.ts +0 -36
  239. package/src/util/arrays.d.ts +0 -1
  240. package/src/util/builders.d.ts +0 -64
  241. package/src/util/chip_utils.d.ts +0 -3
  242. package/src/util/chip_utils.ts +0 -13
  243. package/src/util/collections.d.ts +0 -3
  244. package/src/util/common.d.ts +0 -2
  245. package/src/util/dates.d.ts +0 -1
  246. package/src/util/entities.d.ts +0 -28
  247. package/src/util/enums.d.ts +0 -7
  248. package/src/util/flatten_object.d.ts +0 -3
  249. package/src/util/hash.d.ts +0 -1
  250. package/src/util/icons.d.ts +0 -4
  251. package/src/util/index.d.ts +0 -20
  252. package/src/util/join_collections.d.ts +0 -9
  253. package/src/util/make_properties_editable.d.ts +0 -3
  254. package/src/util/navigation_from_path.d.ts +0 -24
  255. package/src/util/navigation_utils.d.ts +0 -20
  256. package/src/util/objects.d.ts +0 -10
  257. package/src/util/parent_references_from_path.d.ts +0 -6
  258. package/src/util/paths.d.ts +0 -14
  259. package/src/util/permissions.d.ts +0 -5
  260. package/src/util/plurals.d.ts +0 -18
  261. package/src/util/property_utils.d.ts +0 -23
  262. package/src/util/references.d.ts +0 -2
  263. package/src/util/regexp.d.ts +0 -7
  264. package/src/util/resolutions.d.ts +0 -64
  265. package/src/util/storage.d.ts +0 -3
  266. package/src/util/strings.d.ts +0 -6
  267. package/src/util/useDebounce.d.ts +0 -1
  268. package/src/util/useStorageUploadController.d.ts +0 -36
@@ -11,6 +11,8 @@ export * from "./useDebounce";
11
11
  export * from "./property_utils";
12
12
  export * from "./resolutions";
13
13
  export * from "./permissions";
14
+ export * from "./icon_list";
15
+ export * from "./icon_synonyms";
14
16
  export * from "./icons";
15
17
  export * from "./plurals";
16
18
  export * from "./references";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@firecms/core",
3
3
  "type": "module",
4
- "version": "3.0.0-alpha.71",
4
+ "version": "3.0.0-alpha.73",
5
5
  "description": "Awesome Firebase/Firestore-based headless open-source CMS",
6
6
  "funding": {
7
7
  "url": "https://github.com/sponsors/firecmsco"
@@ -38,7 +38,7 @@
38
38
  "generateIcons": "ts-node --esm src/icons/generateIcons.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@firecms/ui": "^3.0.0-alpha.71",
41
+ "@firecms/ui": "^3.0.0-alpha.73",
42
42
  "@fontsource/ibm-plex-mono": "^5.0.8",
43
43
  "@fontsource/roboto": "^5.0.8",
44
44
  "@hello-pangea/dnd": "^16.5.0",
@@ -58,7 +58,6 @@
58
58
  "yup": "^0.32.11"
59
59
  },
60
60
  "peerDependencies": {
61
- "algoliasearch": "^4.13.0",
62
61
  "firebase": "^10.5.2",
63
62
  "react": "^18.2.0",
64
63
  "react-dom": "^18.2.0",
@@ -85,7 +84,6 @@
85
84
  "@typescript-eslint/eslint-plugin": "^5.62.0",
86
85
  "@typescript-eslint/parser": "^5.62.0",
87
86
  "@vitejs/plugin-react": "^4.2.1",
88
- "algoliasearch": "^4.22.0",
89
87
  "cross-env": "^7.0.3",
90
88
  "eslint": "^8.55.0",
91
89
  "eslint-config-standard": "^17.1.0",
@@ -109,7 +107,7 @@
109
107
  "dist",
110
108
  "src"
111
109
  ],
112
- "gitHead": "cf8ced8b7900922f517900d498beca9a19853b3b",
110
+ "gitHead": "df625cc7bd6af087b7012d1c9ae77d3a6c17a320",
113
111
  "publishConfig": {
114
112
  "access": "public"
115
113
  }
@@ -39,8 +39,7 @@ export const useEntityCollectionTableController = () => useContext<EntityCollect
39
39
 
40
40
  /**
41
41
  * This component is in charge of rendering a collection table with a high
42
- * degree of customization. It is in charge of fetching data from
43
- * the {@link DataSource} and holding the state of filtering and sorting.
42
+ * degree of customization.
44
43
  *
45
44
  * This component is used internally by {@link EntityCollectionView} and
46
45
  * {@link useReferenceDialog}
@@ -51,10 +50,11 @@ export const useEntityCollectionTableController = () => useContext<EntityCollect
51
50
  *
52
51
  * If you want to bind a {@link EntityCollection} to a table with the default
53
52
  * options you see in collections in the top level navigation, you can
54
- * check {@link EntityCollectionView}
53
+ * check {@link EntityCollectionView}.
55
54
  *
56
- * If you need a table that is not bound to the datasource or entities and
57
- * properties at all, you can check {@link VirtualTable}
55
+ * The data displayed in the table is managed by a {@link TableController}.
56
+ * You can build the default, bound to a path in the datasource, by using the hook
57
+ * {@link useDataSourceEntityCollectionTableController}
58
58
  *
59
59
  * @see EntityCollectionTableProps
60
60
  * @see EntityCollectionView
@@ -385,7 +385,6 @@ export const EntityCollectionTable = React.memo<EntityCollectionTableProps<any>>
385
385
  onValueChange,
386
386
  size,
387
387
  selectedCell,
388
- selectedEntityIds
389
388
  }}
390
389
  >
391
390
 
@@ -92,7 +92,7 @@ export type EntityCollectionTableProps<M extends Record<string, any>,
92
92
 
93
93
  /**
94
94
  * Controller holding the logic for the table
95
- * {@link useEntityCollectionTableController}
95
+ * {@link useDataSourceEntityCollectionTableController}
96
96
  * {@link TableController}
97
97
  */
98
98
  tableController: TableController<M>;
@@ -13,4 +13,4 @@ export type {
13
13
  OnCellValueChangeParams
14
14
  } from "./types";
15
15
 
16
- export * from "./useEntityCollectionTableController";
16
+ export * from "./useDataSourceEntityCollectionTableController";
@@ -71,9 +71,9 @@ export function CollectionTableToolbar(props: CollectionTableToolbarProps) {
71
71
 
72
72
  return (
73
73
  <div
74
- className={cn(defaultBorderMixin, "no-scrollbar min-h-[56px] overflow-x-auto px-4 bg-gray-50 dark:bg-gray-900 border-b flex flex-row justify-between items-center w-full")}>
74
+ className={cn(defaultBorderMixin, "no-scrollbar min-h-[56px] overflow-x-auto px-2 md:px-4 bg-gray-50 dark:bg-gray-900 border-b flex flex-row justify-between items-center w-full")}>
75
75
 
76
- <div className="flex items-center gap-2">
76
+ <div className="flex items-center gap-2 md:mr-4 mr-2">
77
77
 
78
78
  {props.title && <div className={"hidden lg:block"}>
79
79
  {props.title}
@@ -2,11 +2,25 @@ import { CollectionSize, Entity, FireCMSContext, ResolvedProperty, SelectedCellP
2
2
 
3
3
  export type EntityCollectionTableController<M extends Record<string, any>> = {
4
4
 
5
+ /**
6
+ * This cell is displayed as selected
7
+ */
5
8
  selectedCell?: SelectedCellProps<any>;
9
+ /**
10
+ * Select a table cell
11
+ * @param cell
12
+ */
6
13
  select: (cell?: SelectedCellProps<M>) => void;
14
+ /**
15
+ * The cell that is displayed as a popup view.
16
+ * @param cell
17
+ */
7
18
  setPopupCell?: (cell?: SelectedCellProps<M>) => void;
19
+ /**
20
+ * Callback used when the value of a cell has changed.
21
+ * @param params
22
+ */
8
23
  onValueChange?: (params: OnCellValueChangeParams<any, M>) => void;
9
- selectedEntityIds?: string[];
10
24
  /**
11
25
  * Size of the elements in the collection
12
26
  */
@@ -15,34 +15,46 @@ import { useDebouncedData } from "./useDebouncedData";
15
15
 
16
16
  const DEFAULT_PAGE_SIZE = 50;
17
17
 
18
- export type EntityCollectionTableControllerProps<M extends Record<string, any> = any> = {
18
+ export type DataSourceEntityCollectionTableControllerProps<M extends Record<string, any> = any> = {
19
+ /**
20
+ * Full path where the data of this table is located
21
+ */
19
22
  fullPath: string;
23
+ /**
24
+ * The collection that is represented by this config.
25
+ */
20
26
  collection: EntityCollection<M>;
21
27
  /**
22
28
  * List of entities that will be displayed on top, no matter the ordering.
23
29
  * This is used for reference fields selection
24
30
  */
25
31
  entitiesDisplayedFirst?: Entity<M>[];
32
+
26
33
  lastDeleteTimestamp?: number;
27
34
  forceFilter?: FilterValues<string>;
28
35
  }
29
36
 
30
37
  /**
31
- * Use this hook to build a controller for the {@link EntityCollectionTable}
38
+ * Use this hook to build a controller for the {@link EntityCollectionTable}.
39
+ * This controller is bound to data in a path in your specified datasource.
40
+ *
41
+ * Note that you can build your own hook returning a {@link TableController}
42
+ * if you would like to display different data.
43
+ *
32
44
  * @param fullPath
33
45
  * @param collection
34
46
  * @param entitiesDisplayedFirst
35
47
  * @param lastDeleteTimestamp
36
48
  * @param forceFilterFromProps
37
49
  */
38
- export function useEntityCollectionTableController<M extends Record<string, any> = any, UserType extends User = User>(
50
+ export function useDataSourceEntityCollectionTableController<M extends Record<string, any> = any, UserType extends User = User>(
39
51
  {
40
52
  fullPath,
41
53
  collection,
42
54
  entitiesDisplayedFirst,
43
55
  lastDeleteTimestamp,
44
56
  forceFilter: forceFilterFromProps,
45
- }: EntityCollectionTableControllerProps<M>)
57
+ }: DataSourceEntityCollectionTableControllerProps<M>)
46
58
  : TableController<M> {
47
59
 
48
60
  const {
@@ -47,7 +47,7 @@ import {
47
47
  } from "../../hooks";
48
48
  import { useUserConfigurationPersistence } from "../../hooks/useUserConfigurationPersistence";
49
49
  import { EntityCollectionViewActions } from "./EntityCollectionViewActions";
50
- import { useEntityCollectionTableController } from "../EntityCollectionTable/useEntityCollectionTableController";
50
+ import { useDataSourceEntityCollectionTableController } from "../EntityCollectionTable/useDataSourceEntityCollectionTableController";
51
51
  import {
52
52
  AddIcon,
53
53
  Button,
@@ -176,7 +176,7 @@ export const EntityCollectionView = React.memo(
176
176
  setDeleteEntityClicked(undefined);
177
177
  }, [selectedEntities]);
178
178
 
179
- const tableController = useEntityCollectionTableController<M>({
179
+ const tableController = useDataSourceEntityCollectionTableController<M>({
180
180
  fullPath,
181
181
  collection,
182
182
  entitiesDisplayedFirst: [],
@@ -15,7 +15,7 @@ import { ErrorView } from "./ErrorView";
15
15
  import { AddIcon, Button, DialogActions, Typography } from "@firecms/ui";
16
16
  import { canCreateEntity, fullPathToCollectionSegments, resolveCollection } from "../util";
17
17
  import { useSelectionController } from "./EntityCollectionView/EntityCollectionView";
18
- import { useEntityCollectionTableController } from "./EntityCollectionTable/useEntityCollectionTableController";
18
+ import { useDataSourceEntityCollectionTableController } from "./EntityCollectionTable/useDataSourceEntityCollectionTableController";
19
19
  import { useColumnIds } from "./EntityCollectionView/useColumnsIds";
20
20
  import { useSideDialogContext } from "../core";
21
21
 
@@ -258,7 +258,7 @@ export function ReferenceSelectionInner<M extends Record<string, any>>(
258
258
  const displayedColumnIds = useColumnIds(resolvedCollection, false);
259
259
 
260
260
  // eslint-disable-next-line react-hooks/rules-of-hooks
261
- const tableController = useEntityCollectionTableController<M>({
261
+ const tableController = useDataSourceEntityCollectionTableController<M>({
262
262
  fullPath,
263
263
  collection,
264
264
  entitiesDisplayedFirst,
@@ -0,0 +1,75 @@
1
+ import React from "react";
2
+
3
+ import { coolIconKeys, debounce, Icon, IconButton, iconKeys, SearchBar, Tooltip } from "@firecms/ui";
4
+ import { icon_synonyms, iconsSearch } from "../util";
5
+
6
+ const UPDATE_SEARCH_INDEX_WAIT_MS = 220;
7
+
8
+ if (process.env.NODE_ENV !== "production") {
9
+ Object.keys(icon_synonyms).forEach((icon: string) => {
10
+ if (!iconKeys.includes(icon)) {
11
+ console.warn(`The icon ${icon} no longer exists. Remove it from \`icon_synonyms\``);
12
+ }
13
+ });
14
+ }
15
+
16
+ export interface SearchIconsProps {
17
+ selectedIcon?: string;
18
+ onIconSelected?: (icon: string) => void;
19
+ }
20
+
21
+ export function SearchIconsView({
22
+ selectedIcon = "",
23
+ onIconSelected
24
+ }: SearchIconsProps) {
25
+ const [keys, setKeys] = React.useState<string[] | null>(null);
26
+ const [query, setQuery] = React.useState<string>("");
27
+
28
+ const updateSearchResults = React.useMemo(() =>
29
+ debounce((value: string) => {
30
+ if (!value || value === "") {
31
+ setKeys(null);
32
+ } else {
33
+ const searchResult = iconsSearch.search(value);
34
+ setKeys(searchResult.map((e: any) => e.key));
35
+ }
36
+ }, UPDATE_SEARCH_INDEX_WAIT_MS), []
37
+ );
38
+
39
+ React.useEffect(() => {
40
+ updateSearchResults(query);
41
+ return () => {
42
+ updateSearchResults.clear();
43
+ };
44
+ }, [query, updateSearchResults]);
45
+
46
+ const icons = keys === null ? coolIconKeys : keys;
47
+
48
+ return (
49
+ <>
50
+ <SearchBar
51
+ autoFocus
52
+ innerClassName={"w-full sticky top-0 z-10"}
53
+ onTextSearch={(value?: string) => setQuery(value ?? "")}
54
+ placeholder="Search for more icons…"
55
+ />
56
+
57
+ <div className={"flex max-w-full flex-wrap mt-4"}>
58
+ {icons.map((icon: string) => {
59
+ return (
60
+ <Tooltip title={icon} key={icon}>
61
+ <IconButton
62
+ shape={"square"}
63
+ toggled={selectedIcon === icon}
64
+ onClick={onIconSelected ? () => onIconSelected(icon) : undefined}
65
+ className="box-content m-1"
66
+ >
67
+ <Icon iconKey={icon} size={24}/>
68
+ </IconButton>
69
+ </Tooltip>
70
+ );
71
+ })}
72
+ </div>
73
+ </>
74
+ );
75
+ }
@@ -19,7 +19,6 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
19
19
  }: VirtualTableRowProps<T>) {
20
20
 
21
21
  const onClick = useCallback((event: React.SyntheticEvent) => {
22
- console.debug("VirtualTableRow click");
23
22
  if (onRowClick)
24
23
  onRowClick({
25
24
  rowData,
@@ -28,3 +28,4 @@ export * from "./FireCMSAppBar";
28
28
  export * from "./ArrayContainer";
29
29
  export * from "./ReferenceWidget";
30
30
  export * from "./LabelWithIcon";
31
+ export * from "./SearchIconsView";
@@ -74,7 +74,6 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
74
74
 
75
75
  return (
76
76
  <>
77
-
78
77
  <ErrorBoundary>
79
78
  <EntityView
80
79
  {...props}
@@ -28,7 +28,7 @@ import {
28
28
  import { useAuthController, useDataSource, useFireCMSContext, useSideEntityController } from "../hooks";
29
29
  import { ErrorFocus } from "./components/ErrorFocus";
30
30
  import { CustomIdField } from "./components/CustomIdField";
31
- import { Button, cn, DialogActions, IconButton, Typography } from "@firecms/ui";
31
+ import { Alert, Button, cn, DialogActions, IconButton, Typography } from "@firecms/ui";
32
32
  import { ErrorBoundary } from "../components";
33
33
  import {
34
34
  copyEntityAction,
@@ -400,9 +400,7 @@ function EntityFormInternal<M extends Record<string, any>>({
400
400
  )).filter(Boolean));
401
401
  }
402
402
 
403
- return <div
404
- className="h-full overflow-auto"
405
- >
403
+ return <div className="h-full overflow-auto">
406
404
 
407
405
  {pluginActions.length > 0 && <div
408
406
  className={cn("w-full flex justify-end items-center sticky top-0 right-0 left-0 z-10 bg-opacity-60 bg-slate-200 dark:bg-opacity-60 dark:bg-slate-800 backdrop-blur-md")}>
@@ -413,12 +411,15 @@ function EntityFormInternal<M extends Record<string, any>>({
413
411
  className="pl-4 pr-4 pt-12 pb-16 md:pl-8"
414
412
  >
415
413
  <div
416
- className={`w-full py-2 flex items-center mt-${4 + (pluginActions ? 8 : 0)} lg:mt-${8 + (pluginActions ? 8 : 0)} mb-8`}>
414
+ className={`w-full py-2 flex flex-col items-start mt-${4 + (pluginActions ? 8 : 0)} lg:mt-${8 + (pluginActions ? 8 : 0)} mb-8`}>
417
415
 
418
416
  <Typography
419
417
  className={"mt-4 flex-grow " + inputCollection.hideIdFromForm ? "mb-2" : "mb-0"}
420
418
  variant={"h4"}>{inputCollection.singularName ?? inputCollection.name}
421
419
  </Typography>
420
+ <Alert color={"base"} className={"w-full"} size={"small"}>
421
+ <code className={"text-sm select-all"}>{path}/{entityId}</code>
422
+ </Alert>
422
423
  </div>
423
424
 
424
425
  {!hideId &&
@@ -202,7 +202,7 @@ function FieldInternal<T extends CMSType, CustomProps, M extends Record<string,
202
202
  (!Array.isArray(error) || !!error.filter((e: any) => !!e).length);
203
203
 
204
204
  const WrappedComponent: ComponentType<FieldProps<T, any, M>> | null = useWrappedComponent(context.path, context.collection, propertyKey, property, Component, plugins);
205
- const UsedComponent: ComponentType<FieldProps<T>> = Component;
205
+ const UsedComponent: ComponentType<FieldProps<T>> = WrappedComponent ?? Component;
206
206
 
207
207
  const isSubmitting = fieldProps.form.isSubmitting;
208
208
 
@@ -109,7 +109,11 @@ export function getYupMapObjectSchema<M extends Record<string, any>>({
109
109
  });
110
110
  });
111
111
 
112
- return yup.object().shape(objectSchema);
112
+ const shape = yup.object().shape(objectSchema);
113
+ if (validation?.required) {
114
+ return shape.required(validation?.requiredMessage ? validation.requiredMessage : "Required").nullable(true);
115
+ }
116
+ return shape.nullable(true);
113
117
  // const object: ObjectSchema<any> = yup.object().shape(objectSchema);
114
118
  // return validation?.required
115
119
  // ? object.required(validation?.requiredMessage ? validation.requiredMessage : "Required").nullable(true)
@@ -0,0 +1 @@
1
+ // export
@@ -68,7 +68,6 @@ export function EntityView<M extends Record<string, any>, UserType extends User>
68
68
  onClose
69
69
  }: EntityViewProps<M>) {
70
70
 
71
-
72
71
  if (collection.customId && collection.formAutoSave) {
73
72
  console.warn(`The collection ${collection.path} has customId and formAutoSave enabled. This is not supported and formAutoSave will be ignored`);
74
73
  }
@@ -502,11 +501,12 @@ export function EntityView<M extends Record<string, any>, UserType extends User>
502
501
 
503
502
  <div
504
503
  className="pb-1 self-center">
505
- <IconButton onClick={() => {
506
- onClose?.();
507
- return sideDialogContext.close(false);
508
- }}
509
- size="large">
504
+ <IconButton
505
+ onClick={() => {
506
+ onClose?.();
507
+ return sideDialogContext.close(false);
508
+ }}
509
+ size="large">
510
510
  <CloseIcon/>
511
511
  </IconButton>
512
512
  </div>
@@ -225,8 +225,6 @@ export function useBuildDataSource({
225
225
  })
226
226
  : firestoreValues;
227
227
 
228
- console.debug("Saving entity", path, entityId, updatedFirestoreValues);
229
-
230
228
  return delegate.saveEntity({
231
229
  path,
232
230
  entityId,
@@ -61,6 +61,7 @@ export const useBuildSideEntityController = (navigation: NavigationController,
61
61
  if (props.copy && !props.entityId) {
62
62
  throw Error("If you want to copy an entity you need to provide an entityId");
63
63
  }
64
+
64
65
  const defaultSelectedView = resolveDefaultSelectedView(
65
66
  props.collection ? props.collection.defaultSelectedView : undefined,
66
67
  {
@@ -69,7 +70,10 @@ export const useBuildSideEntityController = (navigation: NavigationController,
69
70
  }
70
71
  );
71
72
 
72
- sideDialogsController.open(propsToSidePanel({ selectedSubPath: defaultSelectedView, ...props }, navigation, smallLayout));
73
+ sideDialogsController.open(propsToSidePanel({
74
+ selectedSubPath: defaultSelectedView,
75
+ ...props,
76
+ }, navigation, smallLayout));
73
77
 
74
78
  }, [sideDialogsController, navigation, smallLayout]);
75
79
 
@@ -144,17 +148,24 @@ export function buildSidePanelsFromUrl(path: string, collections: EntityCollecti
144
148
 
145
149
  const propsToSidePanel = (props: EntitySidePanelProps<any>, navigation: NavigationController, smallLayout: boolean): SideDialogPanelProps => {
146
150
 
147
- const collectionPath = removeInitialAndTrailingSlashes(props.path);
148
- const newPath = props.entityId
149
- ? navigation.buildUrlCollectionPath(`${collectionPath}/${props.entityId}/${props.selectedSubPath || ""}`)
150
- : navigation.buildUrlCollectionPath(`${collectionPath}#${NEW_URL_HASH}`);
151
-
152
- return ({
153
- key: `${props.path}/${props.entityId}`,
154
- component: <EntitySidePanel {...props}/>,
155
- urlPath: newPath,
156
- parentUrlPath: navigation.buildUrlCollectionPath(collectionPath),
157
- width: getEntityViewWidth(props, smallLayout),
158
- onClose: props.onClose
159
- });
160
- };
151
+ const collectionPath = removeInitialAndTrailingSlashes(props.path);
152
+ const newPath = props.entityId
153
+ ? navigation.buildUrlCollectionPath(`${collectionPath}/${props.entityId}/${props.selectedSubPath || ""}`)
154
+ : navigation.buildUrlCollectionPath(`${collectionPath}#${NEW_URL_HASH}`);
155
+ const resolvedPath = navigation.resolveAliasesFrom(props.path);
156
+
157
+ const resolvedPanelProps: EntitySidePanelProps<any> = {
158
+ ...props,
159
+ path: resolvedPath
160
+ };
161
+
162
+ return ({
163
+ key: `${props.path}/${props.entityId}`,
164
+ component: <EntitySidePanel {...resolvedPanelProps}/>,
165
+ urlPath: newPath,
166
+ parentUrlPath: navigation.buildUrlCollectionPath(collectionPath),
167
+ width: getEntityViewWidth(props, smallLayout),
168
+ onClose: props.onClose
169
+ });
170
+ }
171
+ ;
@@ -5,6 +5,7 @@ import { PropertyPreviewProps } from "../PropertyPreviewProps";
5
5
  import { PropertyPreview } from "../PropertyPreview";
6
6
  import { cn, defaultBorderMixin, Typography } from "@firecms/ui";
7
7
  import { ErrorBoundary } from "../../components";
8
+ import { EmptyValue } from "../components/EmptyValue";
8
9
 
9
10
  /**
10
11
  * @group Preview components
@@ -43,7 +44,7 @@ export function MapPropertyPreview<T extends Record<string, any> = Record<string
43
44
  <PropertyPreview propertyKey={key}
44
45
  value={(value)[key]}
45
46
  property={mapProperty.properties![key]}
46
- // entity={entity}
47
+ // entity={entity}
47
48
  size={size}/>
48
49
  </ErrorBoundary>
49
50
  </div>
@@ -105,6 +106,7 @@ export function MapPropertyPreview<T extends Record<string, any> = Record<string
105
106
 
106
107
  export function KeyValuePreview({ value }: { value: any }) {
107
108
  if (typeof value !== "object") return null;
109
+ if (!value) return <EmptyValue/>;
108
110
  return <div
109
111
  className="flex flex-col gap-1 w-full">
110
112
  {
@@ -2,12 +2,11 @@ import React from "react";
2
2
 
3
3
  import { resolvePropertyEnum } from "../../util";
4
4
  import { EnumValuesChip } from "../components/EnumValuesChip";
5
- import { getColorSchemeForSeed } from "../../util/chip_utils";
6
5
  import { PreviewType } from "../../types";
7
6
  import { UrlComponentPreview } from "../components/UrlComponentPreview";
8
7
  import { PropertyPreviewProps } from "../PropertyPreviewProps";
9
8
  import { ErrorBoundary } from "../../components";
10
- import { Chip } from "@firecms/ui";
9
+ import { Chip, getColorSchemeForSeed } from "@firecms/ui";
11
10
 
12
11
  /**
13
12
  * @group Preview components
package/src/util/enums.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { EnumValueConfig, EnumValues } from "../types";
2
- import { CHIP_COLORS, ChipColorScheme } from "@firecms/ui";
3
- import { getColorSchemeForSeed } from "./chip_utils";
2
+ import { CHIP_COLORS, ChipColorScheme, getColorSchemeForSeed } from "@firecms/ui";
4
3
 
5
4
  export function enumToObjectEntries(enumValues: EnumValues): EnumValueConfig[] {
6
5
  if (Array.isArray(enumValues)) {
@@ -0,0 +1,17 @@
1
+ import { icon_synonyms } from "./icon_synonyms";
2
+ import { iconKeys } from "@firecms/ui";
3
+
4
+ // @ts-ignore
5
+ import * as JsSearch from "js-search";
6
+
7
+ export const iconsSearch = new JsSearch.Search("key");
8
+ iconsSearch.addIndex("synonyms");
9
+
10
+ iconsSearch.addDocuments(iconKeys
11
+ .map((importName) => {
12
+ return {
13
+ key: importName,
14
+ // @ts-ignore
15
+ synonyms: icon_synonyms[importName] ?? [],
16
+ }
17
+ }));