@firecms/core 3.0.0-canary.4 → 3.0.0-canary.40

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 (189) hide show
  1. package/README.md +2 -2
  2. package/dist/components/ClearFilterSortButton.d.ts +5 -0
  3. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +1 -1
  4. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
  5. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +2 -2
  6. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
  7. package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +1 -2
  8. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
  9. package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
  10. package/dist/components/EntityPreview.d.ts +25 -7
  11. package/dist/components/EntityView.d.ts +11 -0
  12. package/dist/components/FieldCaption.d.ts +5 -0
  13. package/dist/components/HomePage/NavigationCard.d.ts +8 -0
  14. package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +2 -2
  15. package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
  16. package/dist/components/HomePage/index.d.ts +3 -1
  17. package/dist/components/VirtualTable/VirtualTableProps.d.ts +1 -1
  18. package/dist/components/index.d.ts +4 -3
  19. package/dist/contexts/AuthControllerContext.d.ts +1 -1
  20. package/dist/{internal/EntityView.d.ts → core/EntityEditView.d.ts} +2 -2
  21. package/dist/core/SideEntityView.d.ts +7 -0
  22. package/dist/core/index.d.ts +0 -2
  23. package/dist/form/EntityForm.d.ts +1 -1
  24. package/dist/form/components/StorageItemPreview.d.ts +3 -2
  25. package/dist/form/components/StorageUploadProgress.d.ts +1 -1
  26. package/dist/form/components/index.d.ts +1 -0
  27. package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
  28. package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
  29. package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +4 -3
  30. package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
  31. package/dist/form/index.d.ts +1 -0
  32. package/dist/form/validation.d.ts +1 -1
  33. package/dist/hooks/data/delete.d.ts +2 -2
  34. package/dist/hooks/data/save.d.ts +1 -1
  35. package/dist/hooks/data/useDataSource.d.ts +2 -2
  36. package/dist/hooks/data/useEntityFetch.d.ts +3 -3
  37. package/dist/hooks/index.d.ts +3 -1
  38. package/dist/{core → hooks}/useBuildModeController.d.ts +1 -1
  39. package/dist/hooks/useBuildNavigationController.d.ts +6 -4
  40. package/dist/hooks/useProjectLog.d.ts +6 -2
  41. package/dist/hooks/useStorageSource.d.ts +2 -2
  42. package/dist/hooks/useValidateAuthenticator.d.ts +25 -0
  43. package/dist/index.es.js +8343 -7846
  44. package/dist/index.es.js.map +1 -1
  45. package/dist/index.umd.js +5 -5
  46. package/dist/index.umd.js.map +1 -1
  47. package/dist/internal/useBuildDataSource.d.ts +4 -0
  48. package/dist/preview/PropertyPreview.d.ts +1 -1
  49. package/dist/preview/PropertyPreviewProps.d.ts +1 -4
  50. package/dist/preview/components/BooleanPreview.d.ts +5 -1
  51. package/dist/preview/components/EnumValuesChip.d.ts +1 -1
  52. package/dist/preview/components/ReferencePreview.d.ts +1 -7
  53. package/dist/types/analytics.d.ts +1 -1
  54. package/dist/types/auth.d.ts +37 -1
  55. package/dist/types/collections.d.ts +22 -5
  56. package/dist/types/datasource.d.ts +1 -1
  57. package/dist/types/entities.d.ts +1 -1
  58. package/dist/types/entity_callbacks.d.ts +2 -2
  59. package/dist/types/entity_overrides.d.ts +6 -0
  60. package/dist/types/index.d.ts +2 -0
  61. package/dist/types/navigation.d.ts +14 -13
  62. package/dist/types/permissions.d.ts +5 -1
  63. package/dist/types/plugins.d.ts +20 -20
  64. package/dist/types/properties.d.ts +2 -2
  65. package/dist/types/property_config.d.ts +2 -2
  66. package/dist/types/roles.d.ts +31 -0
  67. package/dist/types/storage.d.ts +11 -3
  68. package/dist/types/user.d.ts +5 -0
  69. package/dist/util/collections.d.ts +9 -1
  70. package/dist/util/entities.d.ts +1 -1
  71. package/dist/util/icons.d.ts +8 -2
  72. package/dist/util/permissions.d.ts +4 -4
  73. package/dist/util/references.d.ts +4 -2
  74. package/dist/util/resolutions.d.ts +1 -1
  75. package/dist/util/useTraceUpdate.d.ts +1 -0
  76. package/package.json +24 -24
  77. package/src/components/ClearFilterSortButton.tsx +41 -0
  78. package/src/components/DeleteEntityDialog.tsx +4 -4
  79. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +2 -2
  80. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +268 -277
  81. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +1 -1
  82. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +13 -13
  83. package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +9 -16
  84. package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +3 -3
  85. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +27 -32
  86. package/src/components/EntityCollectionTable/internal/default_entity_actions.tsx +9 -5
  87. package/src/components/EntityCollectionView/EntityCollectionView.tsx +39 -49
  88. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
  89. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
  90. package/src/components/EntityCollectionView/useSelectionController.tsx +30 -0
  91. package/src/components/EntityPreview.tsx +207 -70
  92. package/src/components/EntityView.tsx +84 -0
  93. package/src/components/FieldCaption.tsx +14 -0
  94. package/src/components/FireCMSAppBar.tsx +8 -0
  95. package/src/components/HomePage/DefaultHomePage.tsx +14 -10
  96. package/src/components/HomePage/NavigationCard.tsx +69 -0
  97. package/src/components/HomePage/NavigationCardBinding.tsx +116 -0
  98. package/src/components/HomePage/SmallNavigationCard.tsx +45 -0
  99. package/src/components/HomePage/index.tsx +3 -1
  100. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +3 -4
  101. package/src/components/ReferenceWidget.tsx +4 -4
  102. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +23 -8
  103. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +35 -24
  104. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +35 -15
  105. package/src/components/VirtualTable/VirtualTableProps.tsx +1 -1
  106. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +1 -1
  107. package/src/components/common/useDataSourceEntityCollectionTableController.tsx +1 -1
  108. package/src/components/index.tsx +4 -3
  109. package/src/contexts/AuthControllerContext.tsx +1 -1
  110. package/src/core/Drawer.tsx +66 -39
  111. package/src/{internal/EntityView.tsx → core/EntityEditView.tsx} +22 -39
  112. package/src/core/EntitySidePanel.tsx +2 -2
  113. package/src/core/FireCMS.tsx +18 -2
  114. package/src/core/NavigationRoutes.tsx +8 -0
  115. package/src/core/SideEntityView.tsx +38 -0
  116. package/src/core/field_configs.tsx +1 -2
  117. package/src/core/index.tsx +0 -2
  118. package/src/form/EntityForm.tsx +20 -12
  119. package/src/form/components/StorageItemPreview.tsx +5 -3
  120. package/src/form/components/StorageUploadProgress.tsx +6 -5
  121. package/src/form/components/index.tsx +1 -0
  122. package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +2 -3
  123. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +12 -15
  124. package/src/form/field_bindings/BlockFieldBinding.tsx +2 -3
  125. package/src/form/field_bindings/DateTimeFieldBinding.tsx +4 -4
  126. package/src/form/field_bindings/KeyValueFieldBinding.tsx +18 -18
  127. package/src/form/field_bindings/MapFieldBinding.tsx +17 -17
  128. package/src/form/field_bindings/MarkdownFieldBinding.tsx +1 -2
  129. package/src/form/field_bindings/MultiSelectBinding.tsx +2 -3
  130. package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +3 -3
  131. package/src/form/field_bindings/ReferenceFieldBinding.tsx +5 -3
  132. package/src/form/field_bindings/RepeatFieldBinding.tsx +3 -3
  133. package/src/form/field_bindings/SelectFieldBinding.tsx +2 -3
  134. package/src/form/field_bindings/StorageUploadFieldBinding.tsx +15 -6
  135. package/src/form/field_bindings/SwitchFieldBinding.tsx +2 -3
  136. package/src/form/field_bindings/TextFieldBinding.tsx +10 -9
  137. package/src/form/index.tsx +1 -0
  138. package/src/form/validation.ts +3 -4
  139. package/src/hooks/data/delete.ts +3 -3
  140. package/src/hooks/data/save.ts +1 -1
  141. package/src/hooks/data/useCollectionFetch.tsx +1 -1
  142. package/src/hooks/data/useDataSource.tsx +8 -3
  143. package/src/hooks/data/useEntityFetch.tsx +4 -4
  144. package/src/hooks/index.tsx +5 -1
  145. package/src/{core → hooks}/useBuildLocalConfigurationPersistence.tsx +9 -10
  146. package/src/{core → hooks}/useBuildModeController.tsx +12 -6
  147. package/src/hooks/useBuildNavigationController.tsx +190 -72
  148. package/src/hooks/useProjectLog.tsx +16 -6
  149. package/src/hooks/useReferenceDialog.tsx +2 -2
  150. package/src/hooks/useStorageSource.tsx +7 -2
  151. package/src/hooks/useValidateAuthenticator.tsx +135 -0
  152. package/src/internal/useBuildDataSource.ts +6 -1
  153. package/src/internal/useBuildSideEntityController.tsx +18 -12
  154. package/src/preview/PropertyPreview.tsx +1 -1
  155. package/src/preview/PropertyPreviewProps.tsx +1 -11
  156. package/src/preview/components/BooleanPreview.tsx +19 -4
  157. package/src/preview/components/EnumValuesChip.tsx +1 -1
  158. package/src/preview/components/ReferencePreview.tsx +55 -147
  159. package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
  160. package/src/types/analytics.ts +1 -0
  161. package/src/types/auth.tsx +50 -1
  162. package/src/types/collections.ts +24 -5
  163. package/src/types/datasource.ts +1 -1
  164. package/src/types/entities.ts +1 -1
  165. package/src/types/entity_actions.tsx +4 -0
  166. package/src/types/entity_callbacks.ts +2 -2
  167. package/src/types/entity_overrides.tsx +7 -0
  168. package/src/types/firecms.tsx +0 -1
  169. package/src/types/index.ts +2 -0
  170. package/src/types/navigation.ts +17 -16
  171. package/src/types/permissions.ts +6 -1
  172. package/src/types/plugins.tsx +26 -28
  173. package/src/types/properties.ts +3 -2
  174. package/src/types/property_config.tsx +2 -2
  175. package/src/types/roles.ts +41 -0
  176. package/src/types/side_entity_controller.tsx +1 -0
  177. package/src/types/storage.ts +12 -3
  178. package/src/types/user.ts +7 -0
  179. package/src/util/collections.ts +22 -0
  180. package/src/util/entities.ts +1 -1
  181. package/src/util/icons.tsx +11 -3
  182. package/src/util/permissions.ts +11 -8
  183. package/src/util/references.ts +36 -5
  184. package/src/util/strings.ts +2 -2
  185. package/src/util/useTraceUpdate.tsx +2 -1
  186. package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
  187. /package/dist/{components → form/components}/LabelWithIcon.d.ts +0 -0
  188. /package/dist/{core → hooks}/useBuildLocalConfigurationPersistence.d.ts +0 -0
  189. /package/src/{components → form/components}/LabelWithIcon.tsx +0 -0
@@ -1,11 +1,12 @@
1
- import { EntityCollection, PropertyConfig } from "../types";
1
+ import { EntityCollection, PropertyConfig, ResolvedEntityCollection } from "../types";
2
2
  import { isReferenceProperty } from "./property_utils";
3
3
  import { isPropertyBuilder } from "./entities";
4
+ import { getFieldConfig } from "../core";
4
5
 
5
- export function getReferencePreviewKeys(targetCollection: EntityCollection<any>,
6
- fields: Record<string, PropertyConfig>,
7
- previewProperties?: string[],
8
- limit = 3) {
6
+ export function getEntityPreviewKeys(targetCollection: EntityCollection<any>,
7
+ fields: Record<string, PropertyConfig>,
8
+ previewProperties?: string[],
9
+ limit = 3) {
9
10
  const allProperties = Object.keys(targetCollection.properties);
10
11
  let listProperties = previewProperties?.filter(p => allProperties.includes(p as string));
11
12
  if (listProperties && listProperties.length > 0) {
@@ -18,3 +19,33 @@ export function getReferencePreviewKeys(targetCollection: EntityCollection<any>,
18
19
  }).slice(0, limit);
19
20
  }
20
21
  }
22
+
23
+ export function getEntityTitlePropertyKey<M extends Record<string, any>>(collection: EntityCollection<M>, propertyConfigs: Record<string, PropertyConfig<any>>): string | undefined {
24
+ if (collection.titleProperty) {
25
+ return collection.titleProperty as string;
26
+ }
27
+ // find first text field property
28
+ for (const key in collection.properties) {
29
+ const property = collection.properties[key];
30
+ if (!isPropertyBuilder(property)) {
31
+ const field = getFieldConfig(property, propertyConfigs);
32
+ if (field?.key === "text_field") {
33
+ return key;
34
+ }
35
+ }
36
+ }
37
+ return undefined;
38
+ }
39
+
40
+ export function getEntityImagePreviewPropertyKey<M extends object>(collection: ResolvedEntityCollection<M>): string | undefined {
41
+
42
+ // find first text field property
43
+ for (const key in collection.properties) {
44
+ const property = collection.properties[key];
45
+ if (property.dataType === "string" && property.storage?.acceptedFiles?.includes("image/*")) {
46
+ return key;
47
+ }
48
+
49
+ }
50
+ return undefined;
51
+ }
@@ -56,8 +56,8 @@ export function unslugify(slug?: string): string {
56
56
  const result = slug.replace(/[-_]/g, " ");
57
57
  return result.replace(/\w\S*/g, function (txt) {
58
58
  return txt.charAt(0).toUpperCase() + txt.substr(1);
59
- });
59
+ }).trim();
60
60
  } else {
61
- return slug;
61
+ return slug.trim();
62
62
  }
63
63
  }
@@ -1,6 +1,6 @@
1
1
  import { useEffect, useRef } from "react";
2
2
 
3
- function printChanged(props: any, prev: any, path = "", depth = 0, maxDepth: number) {
3
+ export function printChanged(props: any, prev: any, path: string | undefined = "", depth: number | undefined = 0, maxDepth: number | undefined = 10) {
4
4
  if (depth > maxDepth) {
5
5
  return;
6
6
  }
@@ -17,6 +17,7 @@ function printChanged(props: any, prev: any, path = "", depth = 0, maxDepth: num
17
17
  export function useTraceUpdate(props: any, maxDepth = 3) {
18
18
  const prev = useRef(props);
19
19
  useEffect(() => {
20
+ console.log("Changed props:");
20
21
  printChanged(props, prev.current, "", 0, maxDepth);
21
22
  prev.current = props;
22
23
  });
@@ -1,146 +0,0 @@
1
- import { useNavigate } from "react-router-dom";
2
-
3
- import { useCustomizationController, useFireCMSContext } from "../../hooks";
4
- import { PluginHomePageActionsProps, TopNavigationEntry } from "../../types";
5
- import { IconForView } from "../../util";
6
- import { useUserConfigurationPersistence } from "../../hooks/useUserConfigurationPersistence";
7
- import { ArrowForwardIcon, Card, cn, IconButton, Markdown, StarBorderIcon, StarIcon, Typography } from "@firecms/ui";
8
-
9
- /**
10
- * This is the component used in the home page to render a card for each
11
- * collection.
12
- * @group Components
13
- * @param view
14
- * @param path
15
- * @param collection
16
- * @param url
17
- * @param name
18
- * @param description
19
- * @param onClick
20
- * @constructor
21
- */
22
- export function NavigationCollectionCard({
23
- view,
24
- path,
25
- collection,
26
- url,
27
- name,
28
- description,
29
- onClick
30
- }: TopNavigationEntry & {
31
- onClick?: () => void
32
- }) {
33
-
34
- const userConfigurationPersistence = useUserConfigurationPersistence();
35
- const collectionIcon = <IconForView collectionOrView={collection ?? view}/>;
36
-
37
- const navigate = useNavigate();
38
- const context = useFireCMSContext();
39
- const customizationController = useCustomizationController();
40
-
41
- const favourite = (userConfigurationPersistence?.favouritePaths ?? []).includes(path);
42
-
43
- let actions: React.ReactNode | undefined;
44
- if (customizationController.plugins && collection) {
45
- const actionProps: PluginHomePageActionsProps = {
46
- path,
47
- collection,
48
- context
49
- };
50
- actions = <>
51
- {customizationController.plugins.map((plugin, i) => (
52
- plugin.homePage?.CollectionActions
53
- ? <plugin.homePage.CollectionActions
54
- key={`actions_${i}`}
55
- {...actionProps}
56
- extraProps={plugin.homePage.extraProps}
57
- />
58
- : null
59
- ))}
60
- </>
61
- ;
62
- }
63
-
64
- return (
65
- <Card
66
- className={cn("h-full p-4 cursor-pointer min-h-[230px]")}
67
- onClick={() => {
68
- onClick?.();
69
- navigate(url);
70
- if (userConfigurationPersistence) {
71
- userConfigurationPersistence.setRecentlyVisitedPaths(
72
- [path, ...(userConfigurationPersistence.recentlyVisitedPaths ?? []).filter(p => p !== path)]
73
- );
74
- }
75
- }}>
76
-
77
- <div className="flex flex-col items-start h-full">
78
- <div
79
- className="flex-grow w-full">
80
-
81
- <div
82
- className="h-10 flex items-center w-full justify-between text-gray-300 dark:text-gray-600">
83
-
84
- {collectionIcon}
85
-
86
- <div
87
- className="flex items-center gap-1"
88
- onClick={(event: React.MouseEvent) => {
89
- event.preventDefault();
90
- event.stopPropagation();
91
- }}>
92
-
93
- {actions}
94
-
95
- {userConfigurationPersistence &&
96
- <IconButton
97
- onClick={(e) => {
98
- e.preventDefault();
99
- e.stopPropagation();
100
- if (favourite) {
101
- userConfigurationPersistence.setFavouritePaths(
102
- userConfigurationPersistence.favouritePaths.filter(p => p !== path)
103
- );
104
- } else {
105
- userConfigurationPersistence.setFavouritePaths(
106
- [...userConfigurationPersistence.favouritePaths, path]
107
- );
108
- }
109
- }}>
110
- {
111
- favourite
112
- ? <StarIcon
113
- size={18}
114
- className={"text-secondary"}/>
115
- : <StarBorderIcon
116
- size={18}
117
- className={"text-gray-400 dark:text-gray-500"}/>}
118
- </IconButton>}
119
-
120
- </div>
121
-
122
- </div>
123
-
124
- <Typography gutterBottom variant="h5"
125
- component="h2">
126
- {name}
127
- </Typography>
128
-
129
- {description && <Typography variant="body2"
130
- color="secondary"
131
- component="div">
132
- <Markdown source={description}/>
133
- </Typography>}
134
- </div>
135
-
136
- <div style={{ alignSelf: "flex-end" }}>
137
-
138
- <div className={"p-4"}>
139
- <ArrowForwardIcon className="text-primary"/>
140
- </div>
141
- </div>
142
-
143
- </div>
144
-
145
- </Card>);
146
- }