@firecms/core 3.0.0-canary.7 → 3.0.0-canary.70
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.
- package/README.md +2 -2
- package/dist/app/AppBar.d.ts +12 -0
- package/dist/app/Drawer.d.ts +17 -0
- package/dist/app/Scaffold.d.ts +30 -0
- package/dist/app/index.d.ts +4 -0
- package/dist/app/useApp.d.ts +16 -0
- package/dist/components/ClearFilterSortButton.d.ts +5 -0
- package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +11 -11
- package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +2 -2
- package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +5 -3
- package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +3 -2
- package/dist/components/EntityCollectionTable/column_utils.d.ts +1 -2
- package/dist/components/EntityCollectionTable/fields/TableReferenceField.d.ts +2 -0
- package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +1 -4
- package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +2 -2
- package/dist/components/EntityCollectionTable/internal/popup_field/PopupFormField.d.ts +1 -1
- package/dist/components/EntityCollectionView/EntityCollectionView.d.ts +12 -3
- package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +11 -0
- package/dist/components/EntityCollectionView/useSelectionController.d.ts +2 -0
- package/dist/components/EntityPreview.d.ts +26 -7
- package/dist/components/EntityView.d.ts +11 -0
- package/dist/components/FieldCaption.d.ts +5 -0
- package/dist/components/HomePage/NavigationCard.d.ts +8 -0
- package/dist/components/HomePage/{NavigationCollectionCard.d.ts → NavigationCardBinding.d.ts} +2 -2
- package/dist/components/HomePage/SmallNavigationCard.d.ts +6 -0
- package/dist/components/HomePage/index.d.ts +3 -1
- package/dist/components/ReferenceWidget.d.ts +3 -1
- package/dist/components/SelectableTable/SelectableTable.d.ts +1 -1
- package/dist/components/SelectableTable/filters/ReferenceFilterField.d.ts +2 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +6 -7
- package/dist/components/VirtualTable/types.d.ts +3 -3
- package/dist/components/{EntityCollectionTable/internal → common}/default_entity_actions.d.ts +1 -1
- package/dist/components/common/index.d.ts +1 -0
- package/dist/components/common/table_height.d.ts +5 -0
- package/dist/components/common/types.d.ts +4 -6
- package/dist/components/common/useDataSourceEntityCollectionTableController.d.ts +3 -0
- package/dist/components/index.d.ts +6 -3
- package/dist/contexts/AuthControllerContext.d.ts +1 -1
- package/dist/{components/FireCMSAppBar.d.ts → core/DefaultAppBar.d.ts} +5 -8
- package/dist/core/DefaultDrawer.d.ts +19 -0
- package/dist/core/DrawerNavigationItem.d.ts +9 -0
- package/dist/core/EntityEditView.d.ts +36 -0
- package/dist/core/NavigationRoutes.d.ts +2 -2
- package/dist/core/index.d.ts +3 -4
- package/dist/form/PropertiesForm.d.ts +8 -0
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/components/FieldHelperText.d.ts +3 -3
- package/dist/form/components/StorageItemPreview.d.ts +2 -3
- package/dist/form/components/StorageUploadProgress.d.ts +1 -1
- package/dist/form/field_bindings/KeyValueFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/StorageUploadFieldBinding.d.ts +3 -4
- package/dist/form/field_bindings/TextFieldBinding.d.ts +2 -2
- package/dist/form/index.d.ts +0 -2
- package/dist/form/validation.d.ts +1 -1
- package/dist/hooks/data/delete.d.ts +2 -2
- package/dist/hooks/data/save.d.ts +2 -3
- package/dist/hooks/data/useDataSource.d.ts +2 -2
- package/dist/hooks/data/useEntityFetch.d.ts +3 -3
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/useBuildNavigationController.d.ts +6 -4
- package/dist/hooks/useProjectLog.d.ts +6 -2
- package/dist/hooks/useStorageSource.d.ts +2 -2
- package/dist/hooks/useValidateAuthenticator.d.ts +21 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +10512 -9997
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +5 -5
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useBuildDataSource.d.ts +1 -16
- package/dist/preview/PropertyPreview.d.ts +1 -1
- package/dist/preview/PropertyPreviewProps.d.ts +1 -4
- package/dist/preview/components/BooleanPreview.d.ts +5 -1
- package/dist/preview/components/EnumValuesChip.d.ts +1 -1
- package/dist/preview/components/ReferencePreview.d.ts +3 -8
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/auth.d.ts +37 -1
- package/dist/types/collections.d.ts +44 -6
- package/dist/types/datasource.d.ts +21 -14
- package/dist/types/entities.d.ts +5 -1
- package/dist/types/entity_actions.d.ts +14 -0
- package/dist/types/entity_callbacks.d.ts +2 -2
- package/dist/types/entity_overrides.d.ts +6 -0
- package/dist/types/fields.d.ts +31 -30
- package/dist/types/index.d.ts +2 -1
- package/dist/types/navigation.d.ts +15 -14
- package/dist/types/permissions.d.ts +5 -1
- package/dist/types/plugins.d.ts +22 -22
- package/dist/types/properties.d.ts +13 -5
- package/dist/types/property_config.d.ts +2 -2
- package/dist/types/roles.d.ts +31 -0
- package/dist/types/storage.d.ts +11 -3
- package/dist/types/user.d.ts +5 -0
- package/dist/util/collections.d.ts +9 -1
- package/dist/util/entities.d.ts +1 -1
- package/dist/util/icon_synonyms.d.ts +1 -97
- package/dist/util/icons.d.ts +8 -2
- package/dist/util/navigation_utils.d.ts +2 -2
- package/dist/util/objects.d.ts +1 -1
- package/dist/util/permissions.d.ts +4 -4
- package/dist/util/references.d.ts +4 -2
- package/dist/util/resolutions.d.ts +14 -14
- package/dist/util/storage.d.ts +23 -2
- package/dist/util/useStorageUploadController.d.ts +1 -1
- package/dist/util/useTraceUpdate.d.ts +1 -0
- package/package.json +139 -119
- package/src/app/AppBar.tsx +18 -0
- package/src/app/Drawer.tsx +25 -0
- package/src/app/Scaffold.tsx +249 -0
- package/src/app/index.ts +4 -0
- package/src/app/useApp.tsx +32 -0
- package/src/components/ClearFilterSortButton.tsx +41 -0
- package/src/components/DeleteEntityDialog.tsx +4 -4
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +4 -4
- package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +276 -279
- package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +9 -5
- package/src/components/EntityCollectionTable/PropertyTableCell.tsx +48 -45
- package/src/components/EntityCollectionTable/column_utils.tsx +3 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +18 -17
- package/src/components/EntityCollectionTable/fields/TableStorageUpload.tsx +5 -5
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +29 -34
- package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +16 -12
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +4 -5
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +73 -72
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +5 -6
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +68 -0
- package/src/components/EntityCollectionView/useSelectionController.tsx +30 -0
- package/src/components/EntityPreview.tsx +209 -70
- package/src/components/EntityView.tsx +84 -0
- package/src/components/FieldCaption.tsx +14 -0
- package/src/components/HomePage/DefaultHomePage.tsx +15 -11
- package/src/components/HomePage/NavigationCard.tsx +69 -0
- package/src/components/HomePage/NavigationCardBinding.tsx +116 -0
- package/src/components/HomePage/SmallNavigationCard.tsx +45 -0
- package/src/components/HomePage/index.tsx +3 -1
- package/src/components/PropertyIdCopyTooltipContent.tsx +2 -3
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +4 -4
- package/src/components/ReferenceWidget.tsx +22 -12
- package/src/components/SearchIconsView.tsx +5 -5
- package/src/components/SelectableTable/SelectableTable.tsx +5 -3
- package/src/components/SelectableTable/filters/BooleanFilterField.tsx +2 -3
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +23 -8
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +38 -24
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +35 -15
- package/src/components/VirtualTable/VirtualTable.tsx +38 -29
- package/src/components/VirtualTable/VirtualTableHeader.tsx +4 -4
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +2 -2
- package/src/components/VirtualTable/VirtualTableProps.tsx +7 -7
- package/src/components/VirtualTable/VirtualTableRow.tsx +4 -5
- package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +1 -1
- package/src/components/VirtualTable/types.tsx +2 -3
- package/src/components/{EntityCollectionTable/internal → common}/default_entity_actions.tsx +11 -7
- package/src/components/common/index.ts +1 -0
- package/src/components/{VirtualTable/common.tsx → common/table_height.tsx} +5 -2
- package/src/components/common/types.tsx +4 -6
- package/src/components/common/useColumnsIds.tsx +10 -2
- package/src/components/common/useDataSourceEntityCollectionTableController.tsx +12 -1
- package/src/components/common/useTableSearchHelper.ts +39 -9
- package/src/components/index.tsx +6 -3
- package/src/contexts/AuthControllerContext.tsx +1 -1
- package/src/{components/FireCMSAppBar.tsx → core/DefaultAppBar.tsx} +51 -34
- package/src/core/DefaultDrawer.tsx +177 -0
- package/src/core/DrawerNavigationItem.tsx +62 -0
- package/src/core/EntityEditView.tsx +1101 -0
- package/src/core/EntitySidePanel.tsx +3 -4
- package/src/core/FireCMS.tsx +54 -43
- package/src/core/NavigationRoutes.tsx +14 -7
- package/src/core/field_configs.tsx +2 -3
- package/src/core/index.tsx +3 -4
- package/src/form/PropertiesForm.tsx +81 -0
- package/src/form/PropertyFieldBinding.tsx +29 -7
- package/src/form/components/FieldHelperText.tsx +3 -3
- package/src/form/components/StorageItemPreview.tsx +5 -7
- package/src/form/components/StorageUploadProgress.tsx +9 -8
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +10 -12
- package/src/form/field_bindings/BlockFieldBinding.tsx +2 -2
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +1 -1
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +19 -19
- package/src/form/field_bindings/MapFieldBinding.tsx +25 -17
- package/src/form/field_bindings/MarkdownFieldBinding.tsx +2 -2
- package/src/form/field_bindings/ReadOnlyFieldBinding.tsx +2 -9
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +16 -13
- package/src/form/field_bindings/SelectFieldBinding.tsx +3 -3
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +14 -35
- package/src/form/field_bindings/TextFieldBinding.tsx +7 -5
- package/src/form/index.tsx +4 -4
- package/src/form/validation.ts +4 -21
- package/src/hooks/data/delete.ts +3 -3
- package/src/hooks/data/save.ts +4 -2
- package/src/hooks/data/useCollectionFetch.tsx +1 -1
- package/src/hooks/data/useDataSource.tsx +8 -3
- package/src/hooks/data/useEntityFetch.tsx +4 -4
- package/src/hooks/index.tsx +3 -0
- package/src/hooks/useBuildLocalConfigurationPersistence.tsx +8 -10
- package/src/hooks/useBuildModeController.tsx +11 -5
- package/src/hooks/useBuildNavigationController.tsx +200 -83
- package/src/hooks/useProjectLog.tsx +17 -7
- package/src/hooks/useReferenceDialog.tsx +2 -2
- package/src/hooks/useResolvedNavigationFrom.tsx +1 -1
- package/src/hooks/useStorageSource.tsx +7 -2
- package/src/hooks/useValidateAuthenticator.tsx +115 -0
- package/src/index.ts +1 -0
- package/src/internal/useBuildDataSource.ts +54 -47
- package/src/internal/useBuildSideEntityController.tsx +88 -21
- package/src/preview/PropertyPreview.tsx +5 -15
- package/src/preview/PropertyPreviewProps.tsx +1 -11
- package/src/preview/components/BooleanPreview.tsx +19 -4
- package/src/preview/components/EnumValuesChip.tsx +2 -2
- package/src/preview/components/ReferencePreview.tsx +72 -165
- package/src/preview/property_previews/ArrayOfMapsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOfReferencesPreview.tsx +2 -1
- package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOfStringsPreview.tsx +0 -1
- package/src/preview/property_previews/ArrayOneOfPreview.tsx +2 -3
- package/src/preview/property_previews/ArrayPropertyPreview.tsx +2 -3
- package/src/preview/property_previews/MapPropertyPreview.tsx +5 -5
- package/src/preview/property_previews/StringPropertyPreview.tsx +8 -7
- package/src/types/analytics.ts +1 -0
- package/src/types/auth.tsx +50 -1
- package/src/types/collections.ts +51 -6
- package/src/types/customization_controller.tsx +0 -1
- package/src/types/datasource.ts +24 -17
- package/src/types/entities.ts +9 -1
- package/src/types/entity_actions.tsx +17 -0
- package/src/types/entity_callbacks.ts +2 -2
- package/src/types/entity_overrides.tsx +7 -0
- package/src/types/fields.tsx +33 -33
- package/src/types/firecms.tsx +0 -1
- package/src/types/index.ts +2 -1
- package/src/types/navigation.ts +17 -17
- package/src/types/permissions.ts +6 -1
- package/src/types/plugins.tsx +28 -30
- package/src/types/properties.ts +19 -7
- package/src/types/property_config.tsx +2 -2
- package/src/types/roles.ts +41 -0
- package/src/types/side_entity_controller.tsx +1 -0
- package/src/types/storage.ts +12 -3
- package/src/types/user.ts +7 -0
- package/src/util/collections.ts +22 -0
- package/src/util/entities.ts +2 -1
- package/src/util/enums.ts +1 -1
- package/src/util/icon_list.ts +2 -2
- package/src/util/icon_synonyms.ts +3 -99
- package/src/util/icons.tsx +11 -3
- package/src/util/navigation_utils.ts +6 -6
- package/src/util/objects.ts +8 -21
- package/src/util/permissions.ts +12 -8
- package/src/util/references.ts +36 -5
- package/src/util/resolutions.ts +32 -31
- package/src/util/storage.ts +75 -21
- package/src/util/strings.ts +2 -2
- package/src/util/useStorageUploadController.tsx +21 -3
- package/src/util/useTraceUpdate.tsx +2 -1
- package/dist/components/VirtualTable/common.d.ts +0 -2
- package/dist/core/Drawer.d.ts +0 -23
- package/dist/core/EntityView.d.ts +0 -22
- package/dist/core/Scaffold.d.ts +0 -55
- package/dist/core/SideEntityView.d.ts +0 -7
- package/dist/form/EntityForm.d.ts +0 -77
- package/dist/internal/useBuildCustomizationController.d.ts +0 -2
- package/dist/internal/useLocaleConfig.d.ts +0 -1
- package/dist/types/appcheck.d.ts +0 -26
- package/src/components/HomePage/NavigationCollectionCard.tsx +0 -146
- package/src/core/Drawer.tsx +0 -164
- package/src/core/EntityView.tsx +0 -578
- package/src/core/Scaffold.tsx +0 -281
- package/src/core/SideEntityView.tsx +0 -38
- package/src/form/EntityForm.tsx +0 -720
- package/src/internal/useBuildCustomizationController.tsx +0 -5
- package/src/internal/useLocaleConfig.tsx +0 -18
- package/src/types/appcheck.ts +0 -29
|
@@ -46,7 +46,7 @@ export function useStorageUploadController<M extends object>({
|
|
|
46
46
|
entityId: string,
|
|
47
47
|
entityValues: EntityValues<M>,
|
|
48
48
|
value: string | string[] | null;
|
|
49
|
-
path
|
|
49
|
+
path?: string,
|
|
50
50
|
propertyKey: string,
|
|
51
51
|
property: ResolvedStringProperty | ResolvedArrayProperty<string[]>,
|
|
52
52
|
storageSource: StorageSource,
|
|
@@ -95,7 +95,16 @@ export function useStorageUploadController<M extends object>({
|
|
|
95
95
|
|
|
96
96
|
const fileNameBuilder = useCallback(async (file: File) => {
|
|
97
97
|
if (storage.fileName) {
|
|
98
|
-
const fileName = await resolveFilenameString(
|
|
98
|
+
const fileName = await resolveFilenameString({
|
|
99
|
+
input: storage.fileName,
|
|
100
|
+
storage,
|
|
101
|
+
values: entityValues,
|
|
102
|
+
entityId,
|
|
103
|
+
path,
|
|
104
|
+
property,
|
|
105
|
+
file,
|
|
106
|
+
propertyKey
|
|
107
|
+
});
|
|
99
108
|
if (!fileName || fileName.length === 0) {
|
|
100
109
|
throw Error("You need to return a valid filename");
|
|
101
110
|
}
|
|
@@ -105,7 +114,16 @@ export function useStorageUploadController<M extends object>({
|
|
|
105
114
|
}, [entityId, entityValues, path, property, propertyKey, storage]);
|
|
106
115
|
|
|
107
116
|
const storagePathBuilder = useCallback((file: File) => {
|
|
108
|
-
return resolveStoragePathString(
|
|
117
|
+
return resolveStoragePathString({
|
|
118
|
+
input: storage.storagePath,
|
|
119
|
+
storage,
|
|
120
|
+
values: entityValues,
|
|
121
|
+
entityId,
|
|
122
|
+
path,
|
|
123
|
+
property,
|
|
124
|
+
file,
|
|
125
|
+
propertyKey
|
|
126
|
+
}) ?? "/";
|
|
109
127
|
}, [entityId, entityValues, path, property, propertyKey, storage]);
|
|
110
128
|
|
|
111
129
|
const onFileUploadComplete = useCallback(async (uploadedPath: string,
|
|
@@ -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
|
});
|
package/dist/core/Drawer.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
/**
|
|
3
|
-
* Props used in case you need to override the default drawer
|
|
4
|
-
* @group Core
|
|
5
|
-
*/
|
|
6
|
-
export type DrawerProps<T = {}> = T & {
|
|
7
|
-
hovered: boolean;
|
|
8
|
-
drawerOpen: boolean;
|
|
9
|
-
closeDrawer: () => any;
|
|
10
|
-
};
|
|
11
|
-
/**
|
|
12
|
-
* Default drawer used in the CMS
|
|
13
|
-
* @group Core
|
|
14
|
-
*/
|
|
15
|
-
export declare function Drawer({ hovered, drawerOpen, closeDrawer }: DrawerProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
-
export declare function DrawerNavigationItem({ name, icon, drawerOpen, tooltipsOpen, url, onClick }: {
|
|
17
|
-
icon: React.ReactElement;
|
|
18
|
-
name: string;
|
|
19
|
-
tooltipsOpen: boolean;
|
|
20
|
-
drawerOpen: boolean;
|
|
21
|
-
url: string;
|
|
22
|
-
onClick?: () => void;
|
|
23
|
-
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Entity, EntityCollection, User } from "../types";
|
|
2
|
-
export interface EntityViewProps<M extends Record<string, any>> {
|
|
3
|
-
path: string;
|
|
4
|
-
collection: EntityCollection<M>;
|
|
5
|
-
entityId?: string;
|
|
6
|
-
copy?: boolean;
|
|
7
|
-
selectedSubPath?: string;
|
|
8
|
-
parentCollectionIds: string[];
|
|
9
|
-
formWidth?: number | string;
|
|
10
|
-
onValuesAreModified: (modified: boolean) => void;
|
|
11
|
-
onUpdate?: (params: {
|
|
12
|
-
entity: Entity<any>;
|
|
13
|
-
}) => void;
|
|
14
|
-
onClose?: () => void;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* This is the default view that is used as the content of a side panel when
|
|
18
|
-
* an entity is opened.
|
|
19
|
-
* You probably don't want to use this view directly since it is bound to the
|
|
20
|
-
* side panel. Instead, you might want to use {@link EntityForm} or {@link EntityCollectionView}
|
|
21
|
-
*/
|
|
22
|
-
export declare function EntityView<M extends Record<string, any>, UserType extends User>({ path, entityId, selectedSubPath, copy, collection, parentCollectionIds, onValuesAreModified, formWidth, onUpdate, onClose }: EntityViewProps<M>): import("react/jsx-runtime").JSX.Element;
|
package/dist/core/Scaffold.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { DrawerProps } from "./Drawer";
|
|
3
|
-
import { FireCMSAppBarProps } from "../components";
|
|
4
|
-
export declare const DRAWER_WIDTH = 280;
|
|
5
|
-
/**
|
|
6
|
-
* @group Core
|
|
7
|
-
*/
|
|
8
|
-
export interface ScaffoldProps<ExtraDrawerProps = object, ExtraAppbarProps = object> {
|
|
9
|
-
/**
|
|
10
|
-
* Name of the app, displayed as the main title and in the tab title
|
|
11
|
-
*/
|
|
12
|
-
name: string;
|
|
13
|
-
/**
|
|
14
|
-
* Logo to be displayed in the drawer of the CMS
|
|
15
|
-
*/
|
|
16
|
-
logo?: string;
|
|
17
|
-
/**
|
|
18
|
-
* Whether to include the drawer in the scaffold
|
|
19
|
-
*/
|
|
20
|
-
includeDrawer?: boolean;
|
|
21
|
-
/**
|
|
22
|
-
* In case you need to override the view that gets rendered as a drawer
|
|
23
|
-
* @see DefaultDrawer
|
|
24
|
-
*/
|
|
25
|
-
Drawer?: React.ComponentType<DrawerProps<ExtraDrawerProps>>;
|
|
26
|
-
/**
|
|
27
|
-
* Additional props passed to the custom Drawer
|
|
28
|
-
*/
|
|
29
|
-
drawerProps?: Partial<DrawerProps> & ExtraDrawerProps;
|
|
30
|
-
/**
|
|
31
|
-
* Open the drawer on hover
|
|
32
|
-
*/
|
|
33
|
-
autoOpenDrawer?: boolean;
|
|
34
|
-
/**
|
|
35
|
-
* A component that gets rendered on the upper side of the main toolbar.
|
|
36
|
-
* `toolbarExtraWidget` has no effect if this is set.
|
|
37
|
-
*/
|
|
38
|
-
FireCMSAppBar?: React.ComponentType<FireCMSAppBarProps<ExtraAppbarProps>>;
|
|
39
|
-
/**
|
|
40
|
-
* Additional props passed to the custom AppBar
|
|
41
|
-
*/
|
|
42
|
-
fireCMSAppBarProps?: Partial<FireCMSAppBarProps> & ExtraAppbarProps;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* This view acts as a scaffold for FireCMS.
|
|
46
|
-
*
|
|
47
|
-
* It is in charge of displaying the navigation drawer, top bar and main
|
|
48
|
-
* collection views.
|
|
49
|
-
* This component needs a parent {@link FireCMS}
|
|
50
|
-
*
|
|
51
|
-
* @param props
|
|
52
|
-
* @constructor
|
|
53
|
-
* @group Core
|
|
54
|
-
*/
|
|
55
|
-
export declare const Scaffold: React.NamedExoticComponent<React.PropsWithChildren<ScaffoldProps<object, object>>>;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { EntityViewProps } from "./EntityView";
|
|
2
|
-
import { User } from "../types";
|
|
3
|
-
export type SideEntityViewProps<M extends Record<string, any>> = EntityViewProps<M> & {
|
|
4
|
-
formWidth?: number | string;
|
|
5
|
-
onClose?: () => void;
|
|
6
|
-
};
|
|
7
|
-
export declare function SideEntityView<M extends Record<string, any>, UserType extends User>({ path, entityId, selectedSubPath, copy, collection, parentCollectionIds, onValuesAreModified, formWidth, onUpdate, onClose }: SideEntityViewProps<M>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { Entity, EntityCollection, EntityStatus, EntityValues, FormContext, ResolvedEntityCollection } from "../types";
|
|
2
|
-
import { ValidationError } from "yup";
|
|
3
|
-
/**
|
|
4
|
-
* @group Components
|
|
5
|
-
*/
|
|
6
|
-
export interface EntityFormProps<M extends Record<string, any>> {
|
|
7
|
-
/**
|
|
8
|
-
* New or existing status
|
|
9
|
-
*/
|
|
10
|
-
status: EntityStatus;
|
|
11
|
-
/**
|
|
12
|
-
* Path of the collection this entity is located
|
|
13
|
-
*/
|
|
14
|
-
path: string;
|
|
15
|
-
/**
|
|
16
|
-
* The collection is used to build the fields of the form
|
|
17
|
-
*/
|
|
18
|
-
collection: EntityCollection<M>;
|
|
19
|
-
/**
|
|
20
|
-
* The updated entity is passed from the parent component when the underlying data
|
|
21
|
-
* has changed in the datasource
|
|
22
|
-
*/
|
|
23
|
-
entity?: Entity<M>;
|
|
24
|
-
/**
|
|
25
|
-
* The callback function called when Save is clicked and validation is correct
|
|
26
|
-
*/
|
|
27
|
-
onEntitySaveRequested: (props: EntityFormSaveParams<M>) => Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
* The callback function called when discard is clicked
|
|
30
|
-
*/
|
|
31
|
-
onDiscard?: () => void;
|
|
32
|
-
/**
|
|
33
|
-
* The callback function when the form is dirty, so the values are different
|
|
34
|
-
* from the original ones
|
|
35
|
-
*/
|
|
36
|
-
onModified?: (dirty: boolean) => void;
|
|
37
|
-
/**
|
|
38
|
-
* The callback function when the form original values have been modified
|
|
39
|
-
*/
|
|
40
|
-
onValuesChanged?: (values?: EntityValues<M>) => void;
|
|
41
|
-
/**
|
|
42
|
-
*
|
|
43
|
-
* @param id
|
|
44
|
-
*/
|
|
45
|
-
onIdChange?: (id: string) => void;
|
|
46
|
-
currentEntityId?: string;
|
|
47
|
-
onFormContextChange?: (formContext: FormContext<M>) => void;
|
|
48
|
-
hideId?: boolean;
|
|
49
|
-
autoSave?: boolean;
|
|
50
|
-
onIdUpdateError?: (error: any) => void;
|
|
51
|
-
}
|
|
52
|
-
export type EntityFormSaveParams<M extends Record<string, any>> = {
|
|
53
|
-
collection: ResolvedEntityCollection<M>;
|
|
54
|
-
path: string;
|
|
55
|
-
entityId: string | undefined;
|
|
56
|
-
values: EntityValues<M>;
|
|
57
|
-
previousValues?: EntityValues<M>;
|
|
58
|
-
closeAfterSave: boolean;
|
|
59
|
-
autoSave: boolean;
|
|
60
|
-
};
|
|
61
|
-
/**
|
|
62
|
-
* This is the form used internally by the CMS
|
|
63
|
-
* @param status
|
|
64
|
-
* @param path
|
|
65
|
-
* @param collection
|
|
66
|
-
* @param entity
|
|
67
|
-
* @param onEntitySave
|
|
68
|
-
* @param onDiscard
|
|
69
|
-
* @param onModified
|
|
70
|
-
* @param onValuesChanged
|
|
71
|
-
* @constructor
|
|
72
|
-
* @group Components
|
|
73
|
-
*/
|
|
74
|
-
export declare const EntityForm: typeof EntityFormInternal;
|
|
75
|
-
declare function EntityFormInternal<M extends Record<string, any>>({ status, path, collection: inputCollection, entity, onEntitySaveRequested, onDiscard, onModified, onValuesChanged, onIdChange, onFormContextChange, hideId, autoSave, onIdUpdateError }: EntityFormProps<M>): import("react/jsx-runtime").JSX.Element;
|
|
76
|
-
export declare function yupToFormErrors(yupError: ValidationError): Record<string, any>;
|
|
77
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function useLocaleConfig(locale?: string): void;
|
package/dist/types/appcheck.d.ts
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { FirebaseApp } from "firebase/app";
|
|
2
|
-
/**
|
|
3
|
-
* @group Firebase
|
|
4
|
-
*/
|
|
5
|
-
export interface AppCheck {
|
|
6
|
-
firebaseApp?: FirebaseApp;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* @group Firebase
|
|
10
|
-
*/
|
|
11
|
-
export interface AppCheckOptions {
|
|
12
|
-
providerKey: string;
|
|
13
|
-
useEnterpriseRecaptcha: boolean;
|
|
14
|
-
isTokenAutoRefreshEnabled?: boolean;
|
|
15
|
-
debugToken?: string;
|
|
16
|
-
forceRefresh?: boolean;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* @group Firebase
|
|
20
|
-
*/
|
|
21
|
-
export declare interface AppCheckTokenResult {
|
|
22
|
-
/**
|
|
23
|
-
* The token string in JWT format.
|
|
24
|
-
*/
|
|
25
|
-
readonly token: string;
|
|
26
|
-
}
|
|
@@ -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
|
-
}
|
package/src/core/Drawer.tsx
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import React, { useCallback } from "react";
|
|
2
|
-
|
|
3
|
-
import { useLargeLayout, useNavigationController } from "../hooks";
|
|
4
|
-
|
|
5
|
-
import { NavLink } from "react-router-dom";
|
|
6
|
-
import { CMSAnalyticsEvent, TopNavigationEntry, TopNavigationResult } from "../types";
|
|
7
|
-
import { IconForView } from "../util";
|
|
8
|
-
import { cn, Tooltip, Typography } from "@firecms/ui";
|
|
9
|
-
import { useAnalyticsController } from "../hooks/useAnalyticsController";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Props used in case you need to override the default drawer
|
|
13
|
-
* @group Core
|
|
14
|
-
*/
|
|
15
|
-
export type DrawerProps<T = {}> = T & {
|
|
16
|
-
hovered: boolean,
|
|
17
|
-
drawerOpen: boolean,
|
|
18
|
-
closeDrawer: () => any,
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Default drawer used in the CMS
|
|
23
|
-
* @group Core
|
|
24
|
-
*/
|
|
25
|
-
export function Drawer({
|
|
26
|
-
hovered,
|
|
27
|
-
drawerOpen,
|
|
28
|
-
closeDrawer
|
|
29
|
-
}: DrawerProps) {
|
|
30
|
-
|
|
31
|
-
const analyticsController = useAnalyticsController();
|
|
32
|
-
const navigation = useNavigationController();
|
|
33
|
-
|
|
34
|
-
const tooltipsOpen = hovered && !drawerOpen;
|
|
35
|
-
const largeLayout = useLargeLayout();
|
|
36
|
-
|
|
37
|
-
if (!navigation.topLevelNavigation)
|
|
38
|
-
throw Error("Navigation not ready in Drawer");
|
|
39
|
-
|
|
40
|
-
const {
|
|
41
|
-
navigationEntries,
|
|
42
|
-
groups
|
|
43
|
-
}: TopNavigationResult = navigation.topLevelNavigation;
|
|
44
|
-
|
|
45
|
-
const ungroupedNavigationViews = Object.values(navigationEntries).filter(e => !e.group);
|
|
46
|
-
|
|
47
|
-
const buildGroupHeader = useCallback((group?: string) => {
|
|
48
|
-
if (!drawerOpen) return <div className="h-12 w-full"/>;
|
|
49
|
-
return <div
|
|
50
|
-
className="pt-8 pl-6 pr-8 pb-2 flex flex-row items-center">
|
|
51
|
-
<Typography variant={"caption"}
|
|
52
|
-
color={"secondary"}
|
|
53
|
-
className="font-medium flex-grow line-clamp-1">
|
|
54
|
-
{group ? group.toUpperCase() : "Views".toUpperCase()}
|
|
55
|
-
</Typography>
|
|
56
|
-
|
|
57
|
-
</div>;
|
|
58
|
-
}, [drawerOpen]);
|
|
59
|
-
|
|
60
|
-
const onClick = (view: TopNavigationEntry) => {
|
|
61
|
-
const eventName: CMSAnalyticsEvent = view.type === "collection"
|
|
62
|
-
? "drawer_navigate_to_collection"
|
|
63
|
-
: (view.type === "view" ? "drawer_navigate_to_view" : "unmapped_event");
|
|
64
|
-
analyticsController.onAnalyticsEvent?.(eventName, { url: view.url });
|
|
65
|
-
if (!largeLayout)
|
|
66
|
-
closeDrawer();
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
return (
|
|
70
|
-
<div className={"flex-grow overflow-scroll no-scrollbar"}>
|
|
71
|
-
|
|
72
|
-
{groups.map((group) => (
|
|
73
|
-
<React.Fragment
|
|
74
|
-
key={`drawer_group_${group}`}>
|
|
75
|
-
{buildGroupHeader(group)}
|
|
76
|
-
{Object.values(navigationEntries)
|
|
77
|
-
.filter(e => e.group === group)
|
|
78
|
-
.map((view, index) =>
|
|
79
|
-
<DrawerNavigationItem
|
|
80
|
-
key={`navigation_${index}`}
|
|
81
|
-
icon={<IconForView collectionOrView={view.collection ?? view.view}/>}
|
|
82
|
-
tooltipsOpen={tooltipsOpen}
|
|
83
|
-
drawerOpen={drawerOpen}
|
|
84
|
-
onClick={() => onClick(view)}
|
|
85
|
-
url={view.url}
|
|
86
|
-
name={view.name}/>)}
|
|
87
|
-
</React.Fragment>
|
|
88
|
-
))}
|
|
89
|
-
|
|
90
|
-
{ungroupedNavigationViews.length > 0 && buildGroupHeader()}
|
|
91
|
-
|
|
92
|
-
{ungroupedNavigationViews.map((view, index) => {
|
|
93
|
-
|
|
94
|
-
return <DrawerNavigationItem
|
|
95
|
-
key={`navigation_${index}`}
|
|
96
|
-
icon={<IconForView collectionOrView={view.collection ?? view.view}/>}
|
|
97
|
-
tooltipsOpen={tooltipsOpen}
|
|
98
|
-
onClick={() => onClick(view)}
|
|
99
|
-
drawerOpen={drawerOpen}
|
|
100
|
-
url={view.url}
|
|
101
|
-
name={view.name}/>;
|
|
102
|
-
})}
|
|
103
|
-
|
|
104
|
-
</div>
|
|
105
|
-
);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
export function DrawerNavigationItem({
|
|
109
|
-
name,
|
|
110
|
-
icon,
|
|
111
|
-
drawerOpen,
|
|
112
|
-
tooltipsOpen,
|
|
113
|
-
url,
|
|
114
|
-
onClick
|
|
115
|
-
}: {
|
|
116
|
-
icon: React.ReactElement,
|
|
117
|
-
name: string,
|
|
118
|
-
tooltipsOpen: boolean,
|
|
119
|
-
drawerOpen: boolean,
|
|
120
|
-
url: string,
|
|
121
|
-
onClick?: () => void,
|
|
122
|
-
}) {
|
|
123
|
-
|
|
124
|
-
const iconWrap = <div
|
|
125
|
-
className={"text-gray-600 dark:text-gray-500"}>
|
|
126
|
-
{icon}
|
|
127
|
-
</div>;
|
|
128
|
-
|
|
129
|
-
const listItem = <NavLink
|
|
130
|
-
onClick={onClick}
|
|
131
|
-
style={{
|
|
132
|
-
width: !drawerOpen ? "72px" : "280px",
|
|
133
|
-
transition: drawerOpen ? "width 150ms ease-in" : undefined
|
|
134
|
-
}}
|
|
135
|
-
className={({ isActive }: any) => cn("rounded-r-xl truncate",
|
|
136
|
-
"hover:bg-slate-300 hover:bg-opacity-75 dark:hover:bg-gray-700 dark:hover:bg-opacity-75 text-gray-800 dark:text-gray-200 hover:text-gray-900 hover:dark:text-gray-100",
|
|
137
|
-
"flex flex-row items-center mr-8",
|
|
138
|
-
// "transition-all ease-in-out delay-100 duration-300",
|
|
139
|
-
// drawerOpen ? "w-full" : "w-18",
|
|
140
|
-
drawerOpen ? "pl-8 h-12" : "pl-6 h-11",
|
|
141
|
-
"font-medium text-sm",
|
|
142
|
-
isActive ? "bg-slate-200 bg-opacity-75 dark:bg-gray-800" : ""
|
|
143
|
-
)}
|
|
144
|
-
to={url}
|
|
145
|
-
>
|
|
146
|
-
|
|
147
|
-
{iconWrap}
|
|
148
|
-
|
|
149
|
-
<div
|
|
150
|
-
className={cn(
|
|
151
|
-
drawerOpen ? "opacity-100" : "opacity-0 hidden",
|
|
152
|
-
"ml-4 font-inherit text-inherit"
|
|
153
|
-
)}>
|
|
154
|
-
{name.toUpperCase()}
|
|
155
|
-
</div>
|
|
156
|
-
</NavLink>;
|
|
157
|
-
|
|
158
|
-
return <Tooltip
|
|
159
|
-
open={drawerOpen ? false : tooltipsOpen}
|
|
160
|
-
side="right"
|
|
161
|
-
title={name}>
|
|
162
|
-
{listItem}
|
|
163
|
-
</Tooltip>;
|
|
164
|
-
}
|