@firecms/core 3.0.0-canary.1 → 3.0.0-canary.100

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 (301) hide show
  1. package/README.md +2 -2
  2. package/dist/app/AppBar.d.ts +12 -0
  3. package/dist/app/Drawer.d.ts +17 -0
  4. package/dist/app/Scaffold.d.ts +30 -0
  5. package/dist/app/index.d.ts +4 -0
  6. package/dist/app/useApp.d.ts +16 -0
  7. package/dist/components/CircularProgressCenter.d.ts +1 -1
  8. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  9. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -12
  10. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  11. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
  12. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
  13. package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
  14. package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +2 -0
  15. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  16. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
  17. package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +1 -1
  18. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +13 -4
  19. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  20. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  21. package/dist/components/EntityPreview.d.ts +26 -7
  22. package/dist/components/EntityView.d.ts +11 -0
  23. package/dist/components/ErrorView.d.ts +1 -1
  24. package/dist/components/FieldCaption.d.ts +5 -0
  25. package/dist/components/HomePage/DefaultHomePage.d.ts +1 -1
  26. package/dist/components/HomePage/NavigationCard.d.ts +8 -0
  27. package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +3 -3
  28. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  29. package/dist/components/HomePage/index.d.ts +3 -1
  30. package/dist/components/ReferenceWidget.d.ts +6 -4
  31. package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
  32. package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
  33. package/dist/components/VirtualTable/VirtualTableProps.d.ts +16 -13
  34. package/dist/components/VirtualTable/types.d.ts +3 -3
  35. package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
  36. package/dist/components/common/index.d.ts +1 -0
  37. package/dist/components/common/table_height.d.ts +5 -0
  38. package/dist/components/common/types.d.ts +4 -6
  39. package/dist/components/common/useColumnsIds.d.ts +2 -1
  40. package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
  41. package/dist/components/index.d.ts +6 -4
  42. package/dist/contexts/AuthControllerContext.d.ts +1 -1
  43. package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +6 -9
  44. package/dist/core/DefaultDrawer.d.ts +19 -0
  45. package/dist/core/DrawerNavigationItem.d.ts +9 -0
  46. package/dist/core/EntityEditView.d.ts +36 -0
  47. package/dist/core/FireCMS.d.ts +1 -1
  48. package/dist/core/NavigationRoutes.d.ts +3 -3
  49. package/dist/core/index.d.ts +3 -6
  50. package/dist/form/PropertiesForm.d.ts +8 -0
  51. package/dist/form/PropertyFieldBinding.d.ts +1 -1
  52. package/dist/form/components/ErrorFocus.d.ts +1 -1
  53. package/dist/form/components/FieldHelperText.d.ts +3 -3
  54. package/dist/form/components/StorageItemPreview.d.ts +4 -3
  55. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  56. package/dist/form/components/index.d.ts +1 -0
  57. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  58. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  59. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -4
  60. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
  61. package/dist/form/index.d.ts +1 -2
  62. package/dist/form/validation.d.ts +1 -1
  63. package/dist/hooks/data/delete.d.ts +2 -2
  64. package/dist/hooks/data/save.d.ts +2 -3
  65. package/dist/hooks/data/useDataSource.d.ts +2 -2
  66. package/dist/hooks/data/useEntityFetch.d.ts +3 -3
  67. package/dist/hooks/index.d.ts +4 -1
  68. package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
  69. package/dist/hooks/useBuildNavigationController.d.ts +6 -4
  70. package/dist/hooks/useProjectLog.d.ts +6 -2
  71. package/dist/hooks/useStorageSource.d.ts +2 -2
  72. package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
  73. package/dist/index.d.ts +1 -0
  74. package/dist/index.es.js +16400 -12423
  75. package/dist/index.es.js.map +1 -1
  76. package/dist/index.umd.js +19713 -7
  77. package/dist/index.umd.js.map +1 -1
  78. package/dist/internal/useBuildDataSource.d.ts +1 -12
  79. package/dist/preview/PropertyPreview.d.ts +1 -1
  80. package/dist/preview/PropertyPreviewProps.d.ts +6 -4
  81. package/dist/preview/components/BooleanPreview.d.ts +5 -1
  82. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  83. package/dist/preview/components/ReferencePreview.d.ts +3 -8
  84. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  85. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  86. package/dist/types/analytics.d.ts +1 -1
  87. package/dist/types/auth.d.ts +38 -2
  88. package/dist/types/collections.d.ts +45 -8
  89. package/dist/types/datasource.d.ts +34 -20
  90. package/dist/types/entities.d.ts +6 -1
  91. package/dist/types/entity_actions.d.ts +14 -0
  92. package/dist/types/entity_callbacks.d.ts +2 -2
  93. package/dist/types/entity_overrides.d.ts +6 -0
  94. package/dist/types/fields.d.ts +36 -30
  95. package/dist/types/index.d.ts +2 -1
  96. package/dist/types/navigation.d.ts +15 -14
  97. package/dist/types/permissions.d.ts +5 -1
  98. package/dist/types/plugins.d.ts +31 -23
  99. package/dist/types/properties.d.ts +34 -21
  100. package/dist/types/property_config.d.ts +2 -2
  101. package/dist/types/roles.d.ts +31 -0
  102. package/dist/types/storage.d.ts +11 -3
  103. package/dist/types/user.d.ts +5 -0
  104. package/dist/util/collections.d.ts +9 -1
  105. package/dist/util/entities.d.ts +1 -1
  106. package/dist/util/icon_list.d.ts +5 -1
  107. package/dist/util/icon_synonyms.d.ts +1 -97
  108. package/dist/util/icons.d.ts +9 -3
  109. package/dist/util/index.d.ts +1 -0
  110. package/dist/util/navigation_utils.d.ts +2 -2
  111. package/dist/util/objects.d.ts +1 -1
  112. package/dist/util/permissions.d.ts +4 -4
  113. package/dist/util/plurals.d.ts +0 -2
  114. package/dist/util/references.d.ts +4 -2
  115. package/dist/util/resolutions.d.ts +15 -14
  116. package/dist/util/storage.d.ts +23 -2
  117. package/dist/util/useStorageUploadController.d.ts +1 -1
  118. package/dist/util/useTraceUpdate.d.ts +1 -0
  119. package/package.json +128 -119
  120. package/src/app/AppBar.tsx +18 -0
  121. package/src/app/Drawer.tsx +25 -0
  122. package/src/app/Scaffold.tsx +251 -0
  123. package/src/app/index.ts +4 -0
  124. package/src/app/useApp.tsx +32 -0
  125. package/src/components/ArrayContainer.tsx +1 -1
  126. package/src/components/CircularProgressCenter.tsx +1 -1
  127. package/src/components/ClearFilterSortButton.tsx +41 -0
  128. package/src/components/DeleteEntityDialog.tsx +4 -4
  129. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +11 -21
  130. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +276 -279
  131. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +9 -5
  132. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +49 -45
  133. package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
  134. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +20 -18
  135. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +17 -9
  136. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
  137. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +16 -12
  138. package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +4 -5
  139. package/src/components/EntityCollectionView/EntityCollectionView.tsx +95 -92
  140. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
  141. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  142. package/src/components/EntityCollectionView/useSelectionController.tsx +42 -0
  143. package/src/components/EntityPreview.tsx +210 -70
  144. package/src/components/EntityView.tsx +84 -0
  145. package/src/components/ErrorView.tsx +1 -1
  146. package/src/components/FieldCaption.tsx +14 -0
  147. package/src/components/HomePage/DefaultHomePage.tsx +37 -24
  148. package/src/components/HomePage/NavigationCard.tsx +69 -0
  149. package/src/components/HomePage/NavigationCardBinding.tsx +116 -0
  150. package/src/components/HomePage/SmallNavigationCard.tsx +45 -0
  151. package/src/components/HomePage/index.tsx +3 -1
  152. package/src/components/PropertyIdCopyTooltipContent.tsx +2 -3
  153. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +4 -4
  154. package/src/components/ReferenceWidget.tsx +26 -16
  155. package/src/components/SearchIconsView.tsx +9 -6
  156. package/src/components/SelectableTable/SelectableTable.tsx +7 -7
  157. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
  158. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +22 -7
  159. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +38 -24
  160. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +35 -15
  161. package/src/components/VirtualTable/VirtualTable.tsx +70 -37
  162. package/src/components/VirtualTable/VirtualTableCell.tsx +1 -1
  163. package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
  164. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
  165. package/src/components/VirtualTable/VirtualTableProps.tsx +19 -15
  166. package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
  167. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +1 -1
  168. package/src/components/VirtualTable/types.tsx +2 -3
  169. package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +11 -7
  170. package/src/components/common/index.ts +1 -0
  171. package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
  172. package/src/components/common/types.tsx +4 -6
  173. package/src/components/common/useColumnsIds.tsx +23 -2
  174. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +12 -1
  175. package/src/components/common/useTableSearchHelper.ts +52 -12
  176. package/src/components/index.tsx +6 -4
  177. package/src/contexts/AuthControllerContext.tsx +1 -1
  178. package/src/contexts/DialogsProvider.tsx +2 -2
  179. package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +60 -37
  180. package/src/core/DefaultDrawer.tsx +177 -0
  181. package/src/core/DrawerNavigationItem.tsx +62 -0
  182. package/src/core/EntityEditView.tsx +1130 -0
  183. package/src/core/EntitySidePanel.tsx +3 -4
  184. package/src/core/FireCMS.tsx +55 -44
  185. package/src/core/NavigationRoutes.tsx +15 -8
  186. package/src/core/SideDialogs.tsx +1 -0
  187. package/src/core/field_configs.tsx +2 -3
  188. package/src/core/index.tsx +3 -6
  189. package/src/form/PropertiesForm.tsx +81 -0
  190. package/src/form/PropertyFieldBinding.tsx +38 -9
  191. package/src/form/components/FieldHelperText.tsx +3 -3
  192. package/src/form/components/StorageItemPreview.tsx +21 -10
  193. package/src/form/components/StorageUploadProgress.tsx +9 -8
  194. package/src/form/components/index.tsx +1 -0
  195. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +10 -8
  196. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +18 -18
  197. package/src/form/field_bindings/BlockFieldBinding.tsx +4 -5
  198. package/src/form/field_bindings/DateTimeFieldBinding.tsx +3 -3
  199. package/src/form/field_bindings/KeyValueFieldBinding.tsx +62 -57
  200. package/src/form/field_bindings/MapFieldBinding.tsx +28 -20
  201. package/src/form/field_bindings/MarkdownFieldBinding.tsx +3 -4
  202. package/src/form/field_bindings/MultiSelectBinding.tsx +2 -3
  203. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +4 -11
  204. package/src/form/field_bindings/ReferenceFieldBinding.tsx +21 -17
  205. package/src/form/field_bindings/RepeatFieldBinding.tsx +14 -11
  206. package/src/form/field_bindings/SelectFieldBinding.tsx +5 -6
  207. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +28 -40
  208. package/src/form/field_bindings/SwitchFieldBinding.tsx +3 -4
  209. package/src/form/field_bindings/TextFieldBinding.tsx +10 -9
  210. package/src/form/index.tsx +5 -4
  211. package/src/form/validation.ts +4 -21
  212. package/src/hooks/data/delete.ts +3 -3
  213. package/src/hooks/data/save.ts +4 -2
  214. package/src/hooks/data/useCollectionFetch.tsx +1 -1
  215. package/src/hooks/data/useDataSource.tsx +7 -2
  216. package/src/hooks/data/useEntityFetch.tsx +4 -4
  217. package/src/hooks/index.tsx +6 -1
  218. package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +8 -10
  219. package/src/{core → hooks}/useBuildModeController.tsx +12 -6
  220. package/src/hooks/useBuildNavigationController.tsx +208 -92
  221. package/src/hooks/useProjectLog.tsx +30 -9
  222. package/src/hooks/useReferenceDialog.tsx +2 -2
  223. package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
  224. package/src/hooks/useStorageSource.tsx +7 -2
  225. package/src/hooks/useValidateAuthenticator.tsx +115 -0
  226. package/src/index.ts +1 -0
  227. package/src/internal/useBuildDataSource.ts +56 -44
  228. package/src/internal/useBuildSideEntityController.tsx +88 -21
  229. package/src/preview/PropertyPreview.tsx +11 -18
  230. package/src/preview/PropertyPreviewProps.tsx +4 -8
  231. package/src/preview/components/BooleanPreview.tsx +19 -4
  232. package/src/preview/components/EnumValuesChip.tsx +2 -2
  233. package/src/preview/components/ImagePreview.tsx +21 -33
  234. package/src/preview/components/ReferencePreview.tsx +74 -166
  235. package/src/preview/components/StorageThumbnail.tsx +5 -1
  236. package/src/preview/components/UrlComponentPreview.tsx +44 -11
  237. package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -1
  238. package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +2 -1
  239. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -1
  240. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
  241. package/src/preview/property_previews/ArrayOneOfPreview.tsx +2 -3
  242. package/src/preview/property_previews/ArrayPropertyPreview.tsx +2 -3
  243. package/src/preview/property_previews/MapPropertyPreview.tsx +5 -5
  244. package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
  245. package/src/types/analytics.ts +1 -0
  246. package/src/types/auth.tsx +51 -2
  247. package/src/types/collections.ts +52 -8
  248. package/src/types/customization_controller.tsx +0 -1
  249. package/src/types/datasource.ts +41 -24
  250. package/src/types/entities.ts +13 -1
  251. package/src/types/entity_actions.tsx +17 -0
  252. package/src/types/entity_callbacks.ts +2 -2
  253. package/src/types/entity_overrides.tsx +7 -0
  254. package/src/types/fields.tsx +39 -33
  255. package/src/types/firecms.tsx +0 -1
  256. package/src/types/index.ts +2 -1
  257. package/src/types/navigation.ts +17 -17
  258. package/src/types/permissions.ts +6 -1
  259. package/src/types/plugins.tsx +38 -31
  260. package/src/types/properties.ts +40 -22
  261. package/src/types/property_config.tsx +2 -2
  262. package/src/types/roles.ts +41 -0
  263. package/src/types/side_entity_controller.tsx +1 -0
  264. package/src/types/storage.ts +12 -3
  265. package/src/types/user.ts +7 -0
  266. package/src/util/collections.ts +22 -0
  267. package/src/util/entities.ts +5 -4
  268. package/src/util/enums.ts +1 -1
  269. package/src/util/icon_list.ts +15 -10
  270. package/src/util/icon_synonyms.ts +3 -99
  271. package/src/util/icons.tsx +11 -3
  272. package/src/util/index.ts +1 -0
  273. package/src/util/navigation_utils.ts +6 -6
  274. package/src/util/objects.ts +25 -28
  275. package/src/util/permissions.ts +12 -8
  276. package/src/util/plurals.ts +0 -2
  277. package/src/util/references.ts +36 -5
  278. package/src/util/resolutions.ts +44 -39
  279. package/src/util/storage.ts +75 -21
  280. package/src/util/strings.ts +2 -2
  281. package/src/util/useStorageUploadController.tsx +21 -3
  282. package/src/util/useTraceUpdate.tsx +2 -1
  283. package/dist/components/VirtualTable/common.d.ts +0 -2
  284. package/dist/core/Drawer.d.ts +0 -23
  285. package/dist/core/Scaffold.d.ts +0 -55
  286. package/dist/form/EntityForm.d.ts +0 -77
  287. package/dist/internal/EntityView.d.ts +0 -22
  288. package/dist/internal/useBuildCustomizationController.d.ts +0 -2
  289. package/dist/internal/useLocaleConfig.d.ts +0 -1
  290. package/dist/types/appcheck.d.ts +0 -26
  291. package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
  292. package/src/core/Drawer.tsx +0 -164
  293. package/src/core/Scaffold.tsx +0 -281
  294. package/src/form/EntityForm.tsx +0 -720
  295. package/src/internal/EntityView.tsx +0 -578
  296. package/src/internal/useBuildCustomizationController.tsx +0 -5
  297. package/src/internal/useLocaleConfig.tsx +0 -18
  298. package/src/types/appcheck.ts +0 -29
  299. /package/dist/{components → form/components}/LabelWithIcon.d.ts +0 -0
  300. /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
  301. /package/src/{components → form/components}/LabelWithIcon.tsx +0 -0
@@ -2,9 +2,8 @@ import React, { useCallback } from "react";
2
2
 
3
3
  import equal from "react-fast-compare"
4
4
 
5
- import { getRowHeight } from "./common";
6
5
  import { VirtualTableRowProps } from "./types";
7
- import { cn } from "@firecms/ui";
6
+ import { cls } from "@firecms/ui";
8
7
 
9
8
  export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
10
9
  function VirtualTableRow<T>({
@@ -12,7 +11,7 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
12
11
  rowIndex,
13
12
  children,
14
13
  onRowClick,
15
- size,
14
+ rowHeight,
16
15
  style,
17
16
  hoverRow,
18
17
  rowClassName
@@ -29,7 +28,7 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
29
28
 
30
29
  return (
31
30
  <div
32
- className={cn(
31
+ className={cls(
33
32
  "flex min-w-full text-sm border-b border-gray-200 dark:border-gray-800 border-opacity-40 dark:border-opacity-40",
34
33
  rowClassName ? rowClassName(rowData) : "",
35
34
  {
@@ -40,7 +39,7 @@ export const VirtualTableRow = React.memo<VirtualTableRowProps<any>>(
40
39
  onClick={onClick}
41
40
  style={{
42
41
  ...(style),
43
- height: getRowHeight(size),
42
+ height: rowHeight,
44
43
  width: "fit-content"
45
44
  }}
46
45
  >
@@ -25,7 +25,7 @@ export function VirtualTableDateField(props: {
25
25
  return (
26
26
  <DateTimeField
27
27
  value={internalValue ?? undefined}
28
- onChange={(dateValue) => updateValue(dateValue)}
28
+ onChange={(dateValue) => updateValue(dateValue ?? null)}
29
29
  size={"medium"}
30
30
  invisible={true}
31
31
  className={"w-full h-full"}
@@ -5,14 +5,13 @@ import {
5
5
  OnVirtualTableColumnResizeParams,
6
6
  VirtualTableColumn,
7
7
  VirtualTableFilterValues,
8
- VirtualTableSize,
9
8
  VirtualTableWhereFilterOp
10
9
  } from "./VirtualTableProps";
11
10
  import { FilterFormFieldProps } from "./VirtualTableHeader";
12
11
 
13
12
  export type VirtualTableRowProps<T> = {
14
13
  style: any,
15
- size: VirtualTableSize,
14
+ rowHeight: number,
16
15
  rowData: T;
17
16
  rowIndex: number;
18
17
  onRowClick?: (props: OnRowClickParams<any>) => void;
@@ -24,7 +23,7 @@ export type VirtualTableRowProps<T> = {
24
23
 
25
24
  export type VirtualTableContextProps<T extends any> = {
26
25
  data?: T[];
27
- size?: VirtualTableSize,
26
+ rowHeight?: number,
28
27
  columns: VirtualTableColumn[];
29
28
  cellRenderer: React.ComponentType<CellRendererParams<T>>;
30
29
  currentSort: "asc" | "desc" | undefined;
@@ -1,6 +1,6 @@
1
- import { EntityAction } from "../../../types";
2
1
  import { ArchiveIcon, DeleteIcon, FileCopyIcon, KeyboardTabIcon, OpenInNewIcon } from "@firecms/ui";
3
- import { DeleteEntityDialog } from "../../DeleteEntityDialog";
2
+ import { EntityAction } from "../../types";
3
+ import { DeleteEntityDialog } from "../DeleteEntityDialog";
4
4
 
5
5
  export const editEntityAction: EntityAction = {
6
6
  icon: <KeyboardTabIcon/>,
@@ -9,21 +9,23 @@ export const editEntityAction: EntityAction = {
9
9
  onClick({
10
10
  entity,
11
11
  collection,
12
+ fullPath,
12
13
  context,
13
14
  highlightEntity,
14
- unhighlightEntity
15
+ unhighlightEntity,
15
16
  }): Promise<void> {
16
17
  highlightEntity?.(entity);
17
18
  context.analyticsController?.onAnalyticsEvent?.("entity_click", {
18
19
  path: entity.path,
19
20
  entityId: entity.id
20
21
  });
22
+ const path = collection?.collectionGroup ? entity.path : (fullPath ?? entity.path);
21
23
  context.sideEntityController.open({
22
24
  entityId: entity.id,
23
- path: entity.path,
25
+ path,
24
26
  collection,
25
27
  updateUrl: true,
26
- onClose: () => unhighlightEntity?.(entity)
28
+ onClose: () => unhighlightEntity?.(entity),
27
29
  });
28
30
  return Promise.resolve(undefined);
29
31
  }
@@ -37,7 +39,7 @@ export const copyEntityAction: EntityAction = {
37
39
  collection,
38
40
  context,
39
41
  highlightEntity,
40
- unhighlightEntity
42
+ unhighlightEntity,
41
43
  }): Promise<void> {
42
44
  highlightEntity?.(entity);
43
45
  context.analyticsController?.onAnalyticsEvent?.("copy_entity_click", {
@@ -50,11 +52,12 @@ export const copyEntityAction: EntityAction = {
50
52
  copy: true,
51
53
  collection,
52
54
  updateUrl: true,
53
- onClose: () => unhighlightEntity?.(entity)
55
+ onClose: () => unhighlightEntity?.(entity),
54
56
  });
55
57
  return Promise.resolve(undefined);
56
58
  }
57
59
  }
60
+
58
61
  export const archiveEntityAction: EntityAction = {
59
62
  icon: <ArchiveIcon/>,
60
63
  name: "Archive",
@@ -69,6 +72,7 @@ export const archiveEntityAction: EntityAction = {
69
72
  return Promise.resolve(undefined);
70
73
  }
71
74
  }
75
+
72
76
  export const openWebsiteAction: EntityAction = {
73
77
  icon: <OpenInNewIcon/>,
74
78
  name: "See in website",
@@ -3,3 +3,4 @@ export * from "./useDebouncedData";
3
3
  export * from "./useColumnsIds";
4
4
  export * from "./useDataSourceEntityCollectionTableController";
5
5
  export * from "./useTableSearchHelper";
6
+ export * from "./default_entity_actions";
@@ -1,6 +1,9 @@
1
- import { VirtualTableSize } from "./VirtualTableProps";
1
+ /**
2
+ * @group Components
3
+ */
4
+ export type TableSize = "xs" | "s" | "m" | "l" | "xl";
2
5
 
3
- export function getRowHeight(size: VirtualTableSize): number {
6
+ export function getRowHeight(size: TableSize): number {
4
7
  switch (size) {
5
8
  case "xl":
6
9
  return 400;
@@ -1,4 +1,4 @@
1
- import { CollectionSize, Entity, FireCMSContext, ResolvedProperty, SelectedCellProps } from "../../types";
1
+ import { CollectionSize, ResolvedProperty, SelectedCellProps } from "../../types";
2
2
 
3
3
  export type EntityCollectionTableController<M extends Record<string, any>> = {
4
4
 
@@ -31,14 +31,12 @@ export type EntityCollectionTableController<M extends Record<string, any>> = {
31
31
  * Props passed in a callback when the content of a cell in a table has been edited
32
32
  * @group Collection components
33
33
  */
34
- export interface OnCellValueChangeParams<T = any, M extends Record<string, any> = any> {
34
+ export interface OnCellValueChangeParams<T = any, D = any> {
35
35
  value: T,
36
36
  propertyKey: string,
37
- entity: Entity<M>,
37
+ data?: D,
38
38
  onValueUpdated: () => void
39
- setError: (e: Error) => void
40
- fullPath: string
41
- context: FireCMSContext
39
+ setError: (e: Error | undefined) => void
42
40
  }
43
41
 
44
42
  /**
@@ -7,8 +7,16 @@ const COLLECTION_GROUP_PARENT_ID = "collectionGroupParent";
7
7
 
8
8
  export function useColumnIds<M extends Record<string, any>>(collection: ResolvedEntityCollection<M>, includeSubcollections: boolean): PropertyColumnConfig[] {
9
9
  return useMemo(() => {
10
- if (collection.propertiesOrder)
11
- return hideAndExpandKeys(collection, collection.propertiesOrder);
10
+ if (collection.propertiesOrder) {
11
+ const propertyColumnConfigs = hideAndExpandKeys(collection, collection.propertiesOrder);
12
+ if (collection.collectionGroup) {
13
+ propertyColumnConfigs.push({
14
+ key: COLLECTION_GROUP_PARENT_ID,
15
+ disabled: true
16
+ });
17
+ }
18
+ return propertyColumnConfigs;
19
+ }
12
20
  return getDefaultColumnKeys(collection, includeSubcollections);
13
21
  }, [collection, includeSubcollections]);
14
22
  }
@@ -98,3 +106,16 @@ export function getColumnKeysForProperty(property: ResolvedProperty, key: string
98
106
  disabled: disabled || Boolean(property.disabled) || Boolean(property.readOnly)
99
107
  }];
100
108
  }
109
+
110
+ export function getFormFieldKeys(collection: EntityCollection): string[] {
111
+ const propertyKeys = Object.keys(collection.properties);
112
+ const additionalFields = collection.additionalFields ?? [];
113
+ const allKeys = [
114
+ ...propertyKeys,
115
+ ...additionalFields.map((field) => field.key)
116
+ ];
117
+ if (collection.propertiesOrder) {
118
+ return collection.propertiesOrder.filter(key => allKeys.includes(key));
119
+ }
120
+ return allKeys;
121
+ }
@@ -12,6 +12,7 @@ import {
12
12
  User
13
13
  } from "../../types";
14
14
  import { useDebouncedData } from "./useDebouncedData";
15
+ import equal from "react-fast-compare"
15
16
 
16
17
  const DEFAULT_PAGE_SIZE = 50;
17
18
 
@@ -31,6 +32,10 @@ export type DataSourceEntityCollectionTableControllerProps<M extends Record<stri
31
32
  entitiesDisplayedFirst?: Entity<M>[];
32
33
 
33
34
  lastDeleteTimestamp?: number;
35
+
36
+ /**
37
+ * Force filter to be applied to the table.
38
+ */
34
39
  forceFilter?: FilterValues<string>;
35
40
  }
36
41
 
@@ -65,7 +70,7 @@ export function useDataSourceEntityCollectionTableController<M extends Record<st
65
70
 
66
71
  const [popupCell, setPopupCell] = React.useState<SelectedCellProps<M> | undefined>(undefined);
67
72
  const navigation = useNavigationController();
68
- const dataSource = useDataSource();
73
+ const dataSource = useDataSource(collection);
69
74
  const resolvedPath = useMemo(() => navigation.resolveAliasesFrom(fullPath), [fullPath, navigation.resolveAliasesFrom]);
70
75
 
71
76
  const forceFilter = forceFilterFromProps ?? forceFilterFromCollection;
@@ -83,6 +88,12 @@ export function useDataSourceEntityCollectionTableController<M extends Record<st
83
88
  return initialSort;
84
89
  }, [initialSort, forceFilter]);
85
90
 
91
+ useEffect(() => {
92
+ if (!equal(forceFilter, filterValues)) {
93
+ setFilterValues(forceFilter)
94
+ }
95
+ }, [forceFilter]);
96
+
86
97
  const [filterValues, setFilterValues] = React.useState<FilterValues<Extract<keyof M, string>> | undefined>(forceFilter ?? initialFilter ?? undefined);
87
98
  const [sortBy, setSortBy] = React.useState<[Extract<keyof M, string>, "asc" | "desc"] | undefined>(initialSortInternal);
88
99
 
@@ -1,7 +1,7 @@
1
1
  import { useState } from "react";
2
2
 
3
3
  import { EntityCollection } from "../../types";
4
- import { useCustomizationController, useFireCMSContext } from "../../hooks";
4
+ import { useCustomizationController, useDataSource, useFireCMSContext } from "../../hooks";
5
5
 
6
6
  export interface UseTableSearchHelperParams<M extends Record<string, any>> {
7
7
  collection: EntityCollection<M>;
@@ -9,27 +9,57 @@ export interface UseTableSearchHelperParams<M extends Record<string, any>> {
9
9
  parentCollectionIds?: string[];
10
10
  }
11
11
 
12
- export function useTableSearchHelper<M extends Record<string, any>>({ collection, fullPath, parentCollectionIds }: UseTableSearchHelperParams<M>) {
12
+ export function useTableSearchHelper<M extends Record<string, any>>({
13
+ collection,
14
+ fullPath,
15
+ parentCollectionIds
16
+ }: UseTableSearchHelperParams<M>) {
13
17
 
14
18
  const context = useFireCMSContext();
15
19
  const customizationController = useCustomizationController();
20
+ const dataSource = useDataSource();
16
21
 
17
22
  const [textSearchLoading, setTextSearchLoading] = useState<boolean>(false);
18
23
  const [textSearchInitialised, setTextSearchInitialised] = useState<boolean>(false);
24
+
19
25
  let onTextSearchClick: (() => void) | undefined;
20
26
  let textSearchEnabled = Boolean(collection.textSearchEnabled);
21
- if (customizationController?.plugins) {
22
- const addTextSearchClickListener = customizationController.plugins?.find(p => Boolean(p.collectionView?.onTextSearchClick));
27
+
28
+ const props = {
29
+ context,
30
+ path: fullPath,
31
+ collection,
32
+ parentCollectionIds
33
+ };
34
+
35
+ const searchBlocked = customizationController.plugins?.find(p => {
36
+ return p.collectionView?.blockSearch?.(props);
37
+ });
38
+
39
+ const addTextSearchClickListener = Boolean(dataSource?.initTextSearch) || customizationController.plugins?.find(p => Boolean(p.collectionView?.onTextSearchClick));
40
+
41
+ if (addTextSearchClickListener) {
23
42
 
24
43
  onTextSearchClick = addTextSearchClickListener
25
44
  ? () => {
26
45
  setTextSearchLoading(true);
27
- Promise.all(customizationController.plugins?.map(p => {
28
- if (p.collectionView?.onTextSearchClick)
29
- return p.collectionView.onTextSearchClick({ context, path: fullPath, collection, parentCollectionIds });
30
- return Promise.resolve(true);
31
- }) as Promise<boolean>[])
32
- .then((res) => {
46
+ const promises: Promise<boolean>[] = [];
47
+ if (dataSource?.initTextSearch && !searchBlocked) {
48
+ promises.push(dataSource.initTextSearch(props));
49
+ }
50
+ if (searchBlocked) {
51
+ customizationController.plugins?.forEach(p => {
52
+ if (p.collectionView?.onTextSearchClick)
53
+ promises.push(p.collectionView.onTextSearchClick({
54
+ context,
55
+ path: fullPath,
56
+ collection,
57
+ parentCollectionIds
58
+ }));
59
+ })
60
+ }
61
+ return Promise.all(promises)
62
+ .then((res: boolean[]) => {
33
63
  if (res.every(Boolean)) setTextSearchInitialised(true);
34
64
  })
35
65
  .finally(() => setTextSearchLoading(false));
@@ -39,9 +69,19 @@ export function useTableSearchHelper<M extends Record<string, any>>({ collection
39
69
  customizationController.plugins?.forEach(p => {
40
70
  if (!textSearchEnabled)
41
71
  if (p.collectionView?.showTextSearchBar) {
42
- textSearchEnabled = p.collectionView.showTextSearchBar({ context, path: fullPath, collection, parentCollectionIds });
72
+ textSearchEnabled = p.collectionView.showTextSearchBar({
73
+ context,
74
+ path: fullPath,
75
+ collection,
76
+ parentCollectionIds
77
+ });
43
78
  }
44
79
  })
45
80
  }
46
- return { textSearchLoading, textSearchInitialised, onTextSearchClick, textSearchEnabled };
81
+ return {
82
+ textSearchLoading,
83
+ textSearchInitialised,
84
+ onTextSearchClick,
85
+ textSearchEnabled
86
+ };
47
87
  }
@@ -1,8 +1,8 @@
1
1
  export type { ErrorViewProps } from "./ErrorView";
2
2
  export { ErrorView } from "./ErrorView";
3
3
 
4
- export type { EntityPreviewProps } from "./EntityPreview";
5
- export { EntityPreview } from "./EntityPreview";
4
+ export type { EntityViewProps } from "./EntityView";
5
+ export { EntityView } from "./EntityView";
6
6
 
7
7
  export type { ReferenceSelectionInnerProps } from "./ReferenceTable/ReferenceSelectionTable";
8
8
  export { ReferenceSelectionTable } from "./ReferenceTable/ReferenceSelectionTable";
@@ -13,8 +13,10 @@ export * from "./common";
13
13
 
14
14
  export * from "./HomePage";
15
15
  export * from "./SelectableTable/SelectableTable";
16
+ export * from "./SelectableTable/SelectableTableContext";
16
17
  export * from "./EntityCollectionView/EntityCollectionView";
17
18
  export * from "./EntityCollectionView/EntityCollectionViewActions";
19
+ export * from "./EntityCollectionView/useSelectionController";
18
20
 
19
21
  export * from "./PropertyConfigBadge";
20
22
 
@@ -27,9 +29,9 @@ export * from "./DeleteConfirmationDialog";
27
29
 
28
30
  export * from "./FireCMSLogo";
29
31
 
30
- export * from "./FireCMSAppBar";
32
+ export * from "../core/DefaultAppBar";
31
33
 
32
34
  export * from "./ArrayContainer";
33
35
  export * from "./ReferenceWidget";
34
- export * from "./LabelWithIcon";
35
36
  export * from "./SearchIconsView";
37
+ export * from "./FieldCaption";
@@ -1,4 +1,4 @@
1
1
  import React from "react";
2
2
  import { AuthController } from "../types";
3
3
 
4
- export const AuthControllerContext = React.createContext<AuthController>({} as AuthController);
4
+ export const AuthControllerContext = React.createContext<AuthController<any, any>>({} as AuthController<any, any>);
@@ -18,14 +18,14 @@ export const DialogsProvider: React.FC<PropsWithChildren<{}>> = ({ children }) =
18
18
  if (dialogEntries.length === 0)
19
19
  return;
20
20
 
21
- const updatedPanels = [...dialogEntries.slice(0, -1)];
21
+ const updatedPanels = [...dialogEntriesRef.current.slice(0, -1)];
22
22
  updateDialogEntries(updatedPanels);
23
23
 
24
24
  }, [dialogEntries]);
25
25
 
26
26
  const open = useCallback((dialogEntry: DialogControllerEntryProps) => {
27
27
 
28
- const updatedPanels = [...dialogEntries, dialogEntry];
28
+ const updatedPanels = [...dialogEntriesRef.current, dialogEntry];
29
29
  updateDialogEntries(updatedPanels);
30
30
 
31
31
  return {
@@ -1,10 +1,10 @@
1
1
  import React from "react";
2
2
 
3
- import { Link as ReactLink } from "react-router-dom";
4
- import { ErrorBoundary } from "../components";
3
+ import { Link as ReactLink, useNavigate } from "react-router-dom";
4
+ import { ErrorBoundary, FireCMSLogo } from "../components";
5
5
  import {
6
6
  Avatar,
7
- cn,
7
+ cls,
8
8
  DarkModeIcon,
9
9
  IconButton,
10
10
  LightModeIcon,
@@ -16,9 +16,11 @@ import {
16
16
  } from "@firecms/ui";
17
17
  import { useAuthController, useLargeLayout, useModeController, useNavigationController } from "../hooks";
18
18
  import { User } from "../types";
19
+ import { useApp } from "../app/useApp";
19
20
 
20
- export type FireCMSAppBarProps<ADDITIONAL_PROPS = object> = {
21
- title: string;
21
+ export type DefaultAppBarProps<ADDITIONAL_PROPS = object> = {
22
+
23
+ title?: React.ReactNode;
22
24
  /**
23
25
  * A component that gets rendered on the upper side of the main toolbar
24
26
  */
@@ -28,14 +30,14 @@ export type FireCMSAppBarProps<ADDITIONAL_PROPS = object> = {
28
30
 
29
31
  dropDownActions?: React.ReactNode;
30
32
 
31
- includeDrawer?: boolean;
32
-
33
- drawerOpen: boolean;
33
+ includeModeToggle?: boolean;
34
34
 
35
35
  className?: string;
36
36
 
37
37
  style?: React.CSSProperties;
38
38
 
39
+ logo?: string;
40
+
39
41
  user?: User;
40
42
  } & ADDITIONAL_PROPS;
41
43
 
@@ -43,22 +45,24 @@ export type FireCMSAppBarProps<ADDITIONAL_PROPS = object> = {
43
45
  * This component renders the main app bar of FireCMS.
44
46
  * You will likely not need to use this component directly.
45
47
  *
46
- * @param title
47
- * @param toolbarExtraWidget
48
- * @param drawerOpen
49
- * @constructor
48
+
50
49
  */
51
- export const FireCMSAppBar = function FireCMSAppBar({
50
+ export const DefaultAppBar = function DefaultAppBar({
52
51
  title,
53
52
  endAdornment,
54
53
  startAdornment,
55
- drawerOpen,
56
54
  dropDownActions,
57
- includeDrawer,
55
+ includeModeToggle = true,
58
56
  className,
59
57
  style,
60
58
  user: userProp
61
- }: FireCMSAppBarProps) {
59
+ }: DefaultAppBarProps) {
60
+
61
+ const {
62
+ hasDrawer,
63
+ drawerOpen,
64
+ logo
65
+ } = useApp();
62
66
  const navigation = useNavigationController();
63
67
 
64
68
  const authController = useAuthController();
@@ -67,6 +71,8 @@ export const FireCMSAppBar = function FireCMSAppBar({
67
71
  toggleMode
68
72
  } = useModeController();
69
73
 
74
+ const navigate = useNavigate();
75
+
70
76
  const largeLayout = useLargeLayout();
71
77
 
72
78
  const user = userProp ?? authController.user;
@@ -89,40 +95,45 @@ export const FireCMSAppBar = function FireCMSAppBar({
89
95
  return (
90
96
  <div
91
97
  style={style}
92
- className={cn("pr-2",
98
+ className={cls("w-full h-16 transition-all ease-in duration-75 fixed",
93
99
  {
94
- "ml-[17rem]": drawerOpen && largeLayout,
95
- "ml-16": includeDrawer && !(drawerOpen && largeLayout) && !startAdornment,
96
- "h-16": true,
100
+ "pl-[17rem]": drawerOpen && largeLayout,
101
+ "pl-20": hasDrawer && !(drawerOpen && largeLayout),
97
102
  "z-10": largeLayout,
98
- "transition-all": true,
99
- "ease-in": true,
100
- "duration-75": true,
101
- "w-full": !includeDrawer,
102
- "w-[calc(100%-64px)]": includeDrawer && !(drawerOpen && largeLayout),
103
- "w-[calc(100%-17rem)]": includeDrawer && (drawerOpen && largeLayout),
103
+ // "w-full": !hasDrawer,
104
+ // "w-[calc(100%-64px)]": hasDrawer && !(drawerOpen && largeLayout),
105
+ // "w-[calc(100%-17rem)]": hasDrawer && (drawerOpen && largeLayout),
104
106
  "duration-150": drawerOpen && largeLayout,
105
- fixed: true,
106
107
  },
107
108
  className)}>
108
109
 
109
110
  <div className="flex flex-row gap-2 px-4 h-full items-center">
110
111
 
111
- {startAdornment}
112
-
113
112
  {navigation && <div className="mr-8 hidden lg:block">
114
113
  <ReactLink
115
114
  className="visited:text-inherit visited:dark:text-inherit"
116
115
  to={navigation?.basePath ?? "/"}
117
116
  >
118
- <Typography variant="subtitle1"
119
- noWrap
120
- className={"ml-2 !font-medium"}>
121
- {title}
122
- </Typography>
117
+ <div className={"flex flex-row gap-4"}>
118
+ {!hasDrawer && (logo
119
+ ? <img src={logo}
120
+ alt="Logo"
121
+ className={cls("w-[32px] h-[32px] object-contain")}/>
122
+ : <FireCMSLogo width={"32px"} height={"32px"}/>)}
123
+
124
+ {typeof title === "string"
125
+ ? <Typography variant="subtitle1"
126
+ noWrap
127
+ className={"ml-2 !font-medium"}>
128
+ {title}
129
+ </Typography>
130
+ : title}
131
+ </div>
123
132
  </ReactLink>
124
133
  </div>}
125
134
 
135
+ {startAdornment}
136
+
126
137
  <div className={"flex-grow"}/>
127
138
 
128
139
  {endAdornment &&
@@ -130,7 +141,7 @@ export const FireCMSAppBar = function FireCMSAppBar({
130
141
  {endAdornment}
131
142
  </ErrorBoundary>}
132
143
 
133
- <IconButton
144
+ {includeModeToggle && <IconButton
134
145
  color="inherit"
135
146
  aria-label="Open drawer"
136
147
  onClick={toggleMode}
@@ -138,13 +149,25 @@ export const FireCMSAppBar = function FireCMSAppBar({
138
149
  {mode === "dark"
139
150
  ? <DarkModeIcon/>
140
151
  : <LightModeIcon/>}
141
- </IconButton>
152
+ </IconButton>}
142
153
 
143
154
  <Menu trigger={avatarComponent}>
155
+ {user && <div className={"px-4 py-2 mb-2"}>
156
+ {user.displayName && <Typography variant={"body1"} color={"secondary"}>
157
+ {user.displayName}
158
+ </Typography>}
159
+ {user.email && <Typography variant={"body2"} color={"secondary"}>
160
+ {user.email}
161
+ </Typography>}
162
+ </div>}
144
163
 
145
164
  {dropDownActions}
146
165
 
147
- {!dropDownActions && <MenuItem onClick={authController.signOut}>
166
+ {!dropDownActions && <MenuItem onClick={async () => {
167
+ await authController.signOut();
168
+ // replace current route with home
169
+ navigate("/");
170
+ }}>
148
171
  <LogoutIcon/>
149
172
  Log Out
150
173
  </MenuItem>}