@firecms/core 3.1.0-canary.1df3b2c → 3.1.0-canary.501d471
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/dist/components/EntityCollectionTable/internal/popup_field/useDraggable.d.ts +2 -2
- package/dist/components/EntityCollectionView/CollectionDataErrorBanner.d.ts +4 -0
- package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +5 -10
- package/dist/components/ErrorBoundary.d.ts +4 -2
- package/dist/components/HomePage/DefaultHomePage.d.ts +0 -1
- package/dist/components/LanguageToggle.d.ts +1 -0
- package/dist/components/UnsavedChangesDialog.d.ts +1 -0
- package/dist/components/VirtualTable/VirtualTableHeader.d.ts +2 -1
- package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
- package/dist/components/VirtualTable/VirtualTableProps.d.ts +6 -1
- package/dist/components/VirtualTable/types.d.ts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/core/DrawerNavigationGroup.d.ts +2 -2
- package/dist/editor/components/SlashCommandMenu.d.ts +6 -0
- package/dist/editor/components/editor-bubble-item.d.ts +8 -0
- package/dist/editor/components/editor-bubble.d.ts +8 -0
- package/dist/editor/components/image-bubble.d.ts +5 -0
- package/dist/editor/components/index.d.ts +16 -0
- package/dist/editor/components/table-bubble.d.ts +5 -0
- package/dist/editor/editor.d.ts +30 -0
- package/dist/editor/extensions/HighlightDecorationExtension.d.ts +24 -0
- package/dist/editor/extensions/Image/index.d.ts +6 -0
- package/dist/editor/extensions/Image.d.ts +6 -0
- package/dist/editor/extensions/TextLoadingDecorationExtension.d.ts +16 -0
- package/dist/editor/extensions/clipboard.d.ts +7 -0
- package/dist/editor/extensions/custom-keymap.d.ts +1 -0
- package/dist/editor/extensions/drag-and-drop.d.ts +9 -0
- package/dist/editor/hooks/useProseMirror.d.ts +13 -0
- package/dist/editor/hooks/useProseMirrorContext.d.ts +9 -0
- package/dist/editor/index.d.ts +2 -0
- package/dist/editor/markdown.d.ts +5 -0
- package/dist/editor/nodeViews/ImageComponent.d.ts +3 -0
- package/dist/editor/nodeViews/ReactNodeView.d.ts +29 -0
- package/dist/editor/nodeViews/TaskItemComponent.d.ts +3 -0
- package/dist/editor/nodeViews/index.d.ts +6 -0
- package/dist/editor/plugins/index.d.ts +2 -0
- package/dist/editor/plugins/inputrules.d.ts +6 -0
- package/dist/editor/plugins/placeholderPlugin.d.ts +3 -0
- package/dist/editor/plugins/slashCommandPlugin.d.ts +12 -0
- package/dist/editor/schema.d.ts +2 -0
- package/dist/editor/selectors/ai-selector.d.ts +0 -0
- package/dist/editor/selectors/color-selector.d.ts +10 -0
- package/dist/editor/selectors/link-selector.d.ts +8 -0
- package/dist/editor/selectors/node-selector.d.ts +15 -0
- package/dist/editor/selectors/text-buttons.d.ts +1 -0
- package/dist/editor/types.d.ts +5 -0
- package/dist/editor/useProseMirror.d.ts +16 -0
- package/dist/editor/utils/prosemirror-utils.d.ts +6 -0
- package/dist/editor/utils/remove_classes.d.ts +1 -0
- package/dist/editor/utils/useDebouncedCallback.d.ts +1 -0
- package/dist/form/components/ErrorFocus.d.ts +1 -1
- package/dist/form/field_bindings/MapFieldBinding.d.ts +1 -1
- package/dist/form/field_bindings/MarkdownEditorFieldBinding.d.ts +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/useBuildNavigationController.d.ts +0 -1
- package/dist/hooks/useCollapsedGroups.d.ts +3 -3
- package/dist/hooks/useTranslation.d.ts +17 -0
- package/dist/i18n/FireCMSi18nProvider.d.ts +33 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.es.js +29682 -18363
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +29681 -18382
- package/dist/index.umd.js.map +1 -1
- package/dist/internal/useRestoreScroll.d.ts +1 -1
- package/dist/locales/de.d.ts +2 -0
- package/dist/locales/en.d.ts +10 -0
- package/dist/locales/es.d.ts +10 -0
- package/dist/locales/fr.d.ts +2 -0
- package/dist/locales/hi.d.ts +2 -0
- package/dist/locales/it.d.ts +2 -0
- package/dist/locales/pt.d.ts +7 -0
- package/dist/types/analytics.d.ts +1 -1
- package/dist/types/collections.d.ts +46 -0
- package/dist/types/customization_controller.d.ts +2 -1
- package/dist/types/firecms.d.ts +2 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/navigation.d.ts +2 -2
- package/dist/types/plugins.d.ts +23 -0
- package/dist/types/properties.d.ts +9 -8
- package/dist/types/storage.d.ts +1 -0
- package/dist/types/translations.d.ts +669 -0
- package/dist/util/entities.d.ts +1 -1
- package/dist/util/index.d.ts +1 -0
- package/dist/util/lazy_eager.d.ts +7 -0
- package/dist/util/objects.d.ts +1 -0
- package/dist/util/resolutions.d.ts +2 -2
- package/dist/util/useStorageUploadController.d.ts +10 -1
- package/package.json +49 -13
- package/src/app/Scaffold.tsx +7 -5
- package/src/components/AIIcon.tsx +3 -1
- package/src/components/ArrayContainer.tsx +6 -4
- package/src/components/ClearFilterSortButton.tsx +6 -3
- package/src/components/ConfirmationDialog.tsx +4 -2
- package/src/components/DeleteEntityDialog.tsx +10 -7
- package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +9 -3
- package/src/components/EntityCollectionTable/fields/TableReferenceField.tsx +6 -3
- package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +3 -1
- package/src/components/EntityCollectionTable/internal/EntityTableCellActions.tsx +1 -1
- package/src/components/EntityCollectionTable/internal/popup_field/PopupFormField.tsx +3 -2
- package/src/components/EntityCollectionTable/internal/popup_field/useDraggable.tsx +11 -11
- package/src/components/EntityCollectionView/BoardSortableList.tsx +3 -1
- package/src/components/EntityCollectionView/CollectionDataErrorBanner.tsx +43 -0
- package/src/components/EntityCollectionView/EntityBoardCard.tsx +1 -1
- package/src/components/EntityCollectionView/EntityCard.tsx +4 -0
- package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +39 -46
- package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +17 -25
- package/src/components/EntityCollectionView/EntityCollectionView.tsx +71 -31
- package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +4 -3
- package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +4 -2
- package/src/components/EntityCollectionView/FiltersDialog.tsx +8 -5
- package/src/components/EntityCollectionView/ViewModeToggle.tsx +37 -37
- package/src/components/EntityJsonPreview.tsx +2 -1
- package/src/components/EntityView.tsx +3 -2
- package/src/components/ErrorBoundary.tsx +27 -15
- package/src/components/HomePage/DefaultHomePage.tsx +19 -13
- package/src/components/HomePage/HomePageDnD.tsx +3 -1
- package/src/components/HomePage/NavigationGroup.tsx +3 -1
- package/src/components/HomePage/RenameGroupDialog.tsx +15 -13
- package/src/components/LanguageToggle.tsx +66 -0
- package/src/components/NotFoundPage.tsx +5 -3
- package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +9 -7
- package/src/components/ReferenceWidget.tsx +3 -2
- package/src/components/SearchIconsView.tsx +3 -1
- package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +11 -0
- package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +15 -2
- package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +11 -0
- package/src/components/UnsavedChangesDialog.tsx +6 -4
- package/src/components/VirtualTable/VirtualTable.performance.test.tsx +1 -0
- package/src/components/VirtualTable/VirtualTable.tsx +121 -116
- package/src/components/VirtualTable/VirtualTableHeader.tsx +59 -56
- package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +9 -4
- package/src/components/VirtualTable/VirtualTableProps.tsx +7 -1
- package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +3 -3
- package/src/components/VirtualTable/types.tsx +1 -0
- package/src/components/common/default_entity_actions.tsx +4 -0
- package/src/components/common/useDataSourceTableController.tsx +12 -4
- package/src/components/index.tsx +1 -0
- package/src/core/DefaultAppBar.tsx +15 -11
- package/src/core/DefaultDrawer.tsx +8 -2
- package/src/core/DrawerNavigationGroup.tsx +5 -3
- package/src/core/EntityEditView.tsx +54 -8
- package/src/core/EntityEditViewFormActions.tsx +24 -17
- package/src/core/EntitySidePanel.tsx +34 -30
- package/src/core/FireCMS.tsx +33 -6
- package/src/core/field_configs.tsx +18 -11
- package/src/editor/components/SlashCommandMenu.tsx +516 -0
- package/src/editor/components/editor-bubble-item.tsx +32 -0
- package/src/editor/components/editor-bubble.tsx +118 -0
- package/src/editor/components/image-bubble.tsx +156 -0
- package/src/editor/components/index.ts +14 -0
- package/src/editor/components/table-bubble.tsx +165 -0
- package/src/editor/editor.tsx +455 -0
- package/src/editor/extensions/HighlightDecorationExtension.ts +114 -0
- package/src/editor/extensions/Image/index.ts +133 -0
- package/src/editor/extensions/Image.ts +159 -0
- package/src/editor/extensions/TextLoadingDecorationExtension.tsx +107 -0
- package/src/editor/extensions/clipboard.ts +72 -0
- package/src/editor/extensions/custom-keymap.ts +24 -0
- package/src/editor/extensions/drag-and-drop.tsx +480 -0
- package/src/editor/hooks/useProseMirror.ts +124 -0
- package/src/editor/hooks/useProseMirrorContext.ts +15 -0
- package/src/editor/index.ts +2 -0
- package/src/editor/markdown.ts +172 -0
- package/src/editor/nodeViews/ImageComponent.tsx +20 -0
- package/src/editor/nodeViews/ReactNodeView.tsx +89 -0
- package/src/editor/nodeViews/TaskItemComponent.tsx +29 -0
- package/src/editor/nodeViews/index.ts +35 -0
- package/src/editor/plugins/index.ts +58 -0
- package/src/editor/plugins/inputrules.ts +82 -0
- package/src/editor/plugins/placeholderPlugin.ts +55 -0
- package/src/editor/plugins/slashCommandPlugin.ts +61 -0
- package/src/editor/schema.ts +240 -0
- package/src/editor/selectors/ai-selector.tsx +111 -0
- package/src/editor/selectors/color-selector.tsx +200 -0
- package/src/editor/selectors/link-selector.tsx +118 -0
- package/src/editor/selectors/node-selector.tsx +157 -0
- package/src/editor/selectors/text-buttons.tsx +86 -0
- package/src/editor/types.ts +6 -0
- package/src/editor/useProseMirror.ts +126 -0
- package/src/editor/utils/prosemirror-utils.ts +108 -0
- package/src/editor/utils/remove_classes.ts +17 -0
- package/src/editor/utils/useDebouncedCallback.ts +25 -0
- package/src/form/EntityForm.tsx +149 -67
- package/src/form/EntityFormActions.tsx +19 -12
- package/src/form/PropertyFieldBinding.tsx +10 -8
- package/src/form/components/ErrorFocus.tsx +3 -3
- package/src/form/components/LocalChangesMenu.tsx +13 -13
- package/src/form/components/StorageItemPreview.tsx +3 -2
- package/src/form/components/StorageUploadProgress.tsx +18 -3
- package/src/form/field_bindings/ArrayCustomShapedFieldBinding.tsx +18 -5
- package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +22 -9
- package/src/form/field_bindings/BlockFieldBinding.tsx +26 -9
- package/src/form/field_bindings/DateTimeFieldBinding.tsx +1 -1
- package/src/form/field_bindings/KeyValueFieldBinding.tsx +46 -24
- package/src/form/field_bindings/MapFieldBinding.tsx +27 -11
- package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +74 -37
- package/src/form/field_bindings/MultiSelectFieldBinding.tsx +15 -1
- package/src/form/field_bindings/ReferenceAsStringFieldBinding.tsx +25 -11
- package/src/form/field_bindings/ReferenceFieldBinding.tsx +25 -11
- package/src/form/field_bindings/RepeatFieldBinding.tsx +21 -6
- package/src/form/field_bindings/SelectFieldBinding.tsx +7 -5
- package/src/form/field_bindings/StorageUploadFieldBinding.tsx +110 -92
- package/src/form/field_bindings/SwitchFieldBinding.tsx +31 -14
- package/src/form/field_bindings/TextFieldBinding.tsx +10 -7
- package/src/form/field_bindings/UserSelectFieldBinding.tsx +7 -5
- package/src/hooks/index.tsx +1 -0
- package/src/hooks/useBuildNavigationController.tsx +49 -22
- package/src/hooks/useCollapsedGroups.ts +7 -6
- package/src/hooks/useTranslation.ts +31 -0
- package/src/hooks/useValidateAuthenticator.tsx +1 -1
- package/src/i18n/FireCMSi18nProvider.tsx +160 -0
- package/src/index.ts +5 -0
- package/src/internal/useBuildDataSource.ts +1 -2
- package/src/internal/useBuildSideEntityController.tsx +22 -20
- package/src/locales/de.ts +718 -0
- package/src/locales/en.ts +730 -0
- package/src/locales/es.ts +730 -0
- package/src/locales/fr.ts +718 -0
- package/src/locales/hi.ts +718 -0
- package/src/locales/it.ts +718 -0
- package/src/locales/pt.ts +727 -0
- package/src/preview/PropertyPreview.tsx +4 -2
- package/src/preview/components/ReferencePreview.tsx +2 -1
- package/src/preview/components/UrlComponentPreview.tsx +4 -2
- package/src/preview/components/UserPreview.tsx +3 -1
- package/src/preview/property_previews/MapPropertyPreview.tsx +49 -27
- package/src/routes/FireCMSRoute.tsx +63 -54
- package/src/types/analytics.ts +10 -0
- package/src/types/collections.ts +49 -0
- package/src/types/customization_controller.tsx +2 -1
- package/src/types/firecms.tsx +2 -1
- package/src/types/index.ts +1 -0
- package/src/types/navigation.ts +2 -2
- package/src/types/plugins.tsx +26 -0
- package/src/types/properties.ts +12 -10
- package/src/types/storage.ts +2 -1
- package/src/types/translations.ts +752 -0
- package/src/util/entities.ts +1 -1
- package/src/util/index.ts +1 -0
- package/src/util/join_collections.ts +10 -8
- package/src/util/lazy_eager.tsx +33 -0
- package/src/util/objects.ts +15 -0
- package/src/util/previews.ts +2 -2
- package/src/util/property_utils.tsx +1 -1
- package/src/util/resolutions.ts +5 -3
- package/src/util/useStorageUploadController.tsx +23 -29
|
@@ -28,7 +28,8 @@ import {
|
|
|
28
28
|
useCustomizationController,
|
|
29
29
|
useFireCMSContext,
|
|
30
30
|
useSideEntityController,
|
|
31
|
-
useSnackbarController
|
|
31
|
+
useSnackbarController,
|
|
32
|
+
useTranslation
|
|
32
33
|
} from "../hooks";
|
|
33
34
|
import { EntityFormActionsProps } from "../form/EntityFormActions";
|
|
34
35
|
import { SideDialogController, useSideDialogContext } from "./SideDialogs";
|
|
@@ -56,6 +57,7 @@ export function EntityEditViewFormActions({
|
|
|
56
57
|
const sideEntityController = useSideEntityController();
|
|
57
58
|
const sideDialogContext = useSideDialogContext();
|
|
58
59
|
const customizationController = useCustomizationController();
|
|
60
|
+
const { t } = useTranslation();
|
|
59
61
|
|
|
60
62
|
const entityActions = useMemo((): EntityAction[] => {
|
|
61
63
|
const customEntityActions = (collection.entityActions ?? [])
|
|
@@ -90,7 +92,8 @@ export function EntityEditViewFormActions({
|
|
|
90
92
|
openEntityMode,
|
|
91
93
|
navigateBack,
|
|
92
94
|
formContext,
|
|
93
|
-
formex
|
|
95
|
+
formex,
|
|
96
|
+
t
|
|
94
97
|
})
|
|
95
98
|
: buildSideActions({
|
|
96
99
|
savingError,
|
|
@@ -106,7 +109,8 @@ export function EntityEditViewFormActions({
|
|
|
106
109
|
openEntityMode,
|
|
107
110
|
navigateBack,
|
|
108
111
|
formContext,
|
|
109
|
-
formex
|
|
112
|
+
formex,
|
|
113
|
+
t
|
|
110
114
|
});
|
|
111
115
|
}
|
|
112
116
|
|
|
@@ -123,8 +127,9 @@ type ActionsViewProps<M extends object> = {
|
|
|
123
127
|
pluginActions?: React.ReactNode[],
|
|
124
128
|
openEntityMode: "side_panel" | "full_screen";
|
|
125
129
|
navigateBack: () => void;
|
|
126
|
-
formContext: FormContext
|
|
130
|
+
formContext: FormContext;
|
|
127
131
|
formex: FormexController<any>;
|
|
132
|
+
t: any;
|
|
128
133
|
};
|
|
129
134
|
|
|
130
135
|
function buildBottomActions<M extends object>({
|
|
@@ -141,7 +146,8 @@ function buildBottomActions<M extends object>({
|
|
|
141
146
|
openEntityMode,
|
|
142
147
|
navigateBack,
|
|
143
148
|
formContext,
|
|
144
|
-
formex
|
|
149
|
+
formex,
|
|
150
|
+
t
|
|
145
151
|
}: ActionsViewProps<M>) {
|
|
146
152
|
|
|
147
153
|
const hasErrors = Object.keys(formex.errors).length > 0 && formex.submitCount > 0;
|
|
@@ -191,7 +197,7 @@ function buildBottomActions<M extends object>({
|
|
|
191
197
|
color="primary"
|
|
192
198
|
disabled={disabled || formex.isSubmitting}
|
|
193
199
|
type="reset">
|
|
194
|
-
{status === "existing" ? "
|
|
200
|
+
{status === "existing" ? t("discard") : t("clear")}
|
|
195
201
|
</Button>
|
|
196
202
|
<Button variant={canClose ? "text" : "filled"}
|
|
197
203
|
color="primary"
|
|
@@ -200,9 +206,9 @@ function buildBottomActions<M extends object>({
|
|
|
200
206
|
onClick={() => {
|
|
201
207
|
sideDialogContext.setPendingClose(false);
|
|
202
208
|
}}>
|
|
203
|
-
{status === "existing" && "
|
|
204
|
-
{status === "copy" && "
|
|
205
|
-
{status === "new" && "
|
|
209
|
+
{status === "existing" && t("save")}
|
|
210
|
+
{status === "copy" && t("create_copy")}
|
|
211
|
+
{status === "new" && t("create")}
|
|
206
212
|
</Button>
|
|
207
213
|
{canClose && <LoadingButton variant="filled"
|
|
208
214
|
color="primary"
|
|
@@ -212,9 +218,9 @@ function buildBottomActions<M extends object>({
|
|
|
212
218
|
onClick={() => {
|
|
213
219
|
sideDialogContext.setPendingClose?.(true);
|
|
214
220
|
}}>
|
|
215
|
-
{status === "existing" && "
|
|
216
|
-
{status === "copy" && "
|
|
217
|
-
{status === "new" && "
|
|
221
|
+
{status === "existing" && t("save_and_close")}
|
|
222
|
+
{status === "copy" && t("create_copy_and_close")}
|
|
223
|
+
{status === "new" && t("create_and_close")}
|
|
218
224
|
</LoadingButton>}
|
|
219
225
|
</DialogActions>;
|
|
220
226
|
}
|
|
@@ -233,7 +239,8 @@ function buildSideActions<M extends object>({
|
|
|
233
239
|
openEntityMode,
|
|
234
240
|
navigateBack,
|
|
235
241
|
formContext,
|
|
236
|
-
formex
|
|
242
|
+
formex,
|
|
243
|
+
t
|
|
237
244
|
}: ActionsViewProps<M>) {
|
|
238
245
|
|
|
239
246
|
const hasErrors = Object.keys(formex.errors).length > 0 && formex.submitCount > 0;
|
|
@@ -249,13 +256,13 @@ function buildSideActions<M extends object>({
|
|
|
249
256
|
onClick={() => {
|
|
250
257
|
sideDialogContext.setPendingClose?.(false);
|
|
251
258
|
}}>
|
|
252
|
-
{status === "existing" && "
|
|
253
|
-
{status === "copy" && "
|
|
254
|
-
{status === "new" && "
|
|
259
|
+
{status === "existing" && t("save")}
|
|
260
|
+
{status === "copy" && t("create_copy")}
|
|
261
|
+
{status === "new" && t("create")}
|
|
255
262
|
</LoadingButton>
|
|
256
263
|
|
|
257
264
|
<Button fullWidth={true} variant="text" disabled={disabled || formex.isSubmitting} type="reset">
|
|
258
|
-
{status === "existing" ? "
|
|
265
|
+
{status === "existing" ? t("discard") : t("clear")}
|
|
259
266
|
</Button>
|
|
260
267
|
|
|
261
268
|
{pluginActions}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useCallback, useEffect, useMemo } from "react";
|
|
2
2
|
|
|
3
3
|
import { EntityCollection, EntitySidePanelProps } from "../types";
|
|
4
|
-
import { useNavigationController, useSideEntityController } from "../hooks";
|
|
4
|
+
import { useNavigationController, useSideEntityController, useTranslation } from "../hooks";
|
|
5
5
|
|
|
6
6
|
import { ErrorBoundary } from "../components";
|
|
7
7
|
import { EntityEditView, OnUpdateParams } from "./EntityEditView";
|
|
@@ -41,6 +41,7 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
|
|
|
41
41
|
const sideEntityController = useSideEntityController();
|
|
42
42
|
const navigationController = useNavigationController();
|
|
43
43
|
const sideDialogsController = useSideDialogContext();
|
|
44
|
+
const { t } = useTranslation();
|
|
44
45
|
|
|
45
46
|
const onClose = () => {
|
|
46
47
|
if (props.onClose) {
|
|
@@ -77,7 +78,7 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
|
|
|
77
78
|
return navigationController.getParentCollectionIds(path);
|
|
78
79
|
}, [navigationController, path]);
|
|
79
80
|
|
|
80
|
-
const collection = navigationController.getCollection(fullIdPath ?? path)
|
|
81
|
+
const collection = props.collection ?? navigationController.getCollection(fullIdPath ?? path);
|
|
81
82
|
|
|
82
83
|
useEffect(() => {
|
|
83
84
|
function beforeunload(e: any) {
|
|
@@ -99,18 +100,19 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
|
|
|
99
100
|
|
|
100
101
|
const onValuesModified = useCallback((modified: boolean) => {
|
|
101
102
|
setBlockedNavigationMessage(modified
|
|
102
|
-
?
|
|
103
|
+
? t("unsaved_changes", { collectionName: collection?.singularName ?? collection?.name ?? "" })
|
|
103
104
|
: undefined)
|
|
104
105
|
setBlocked(modified);
|
|
105
|
-
}, [collection?.name, setBlocked, setBlockedNavigationMessage]);
|
|
106
|
+
}, [collection?.name, setBlocked, setBlockedNavigationMessage, t]);
|
|
106
107
|
|
|
107
108
|
if (!props || !collection) {
|
|
108
|
-
return <div className={"w-full"}/>;
|
|
109
|
+
return <div className={"w-full"} />;
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
return (
|
|
112
113
|
<>
|
|
113
114
|
<ErrorBoundary>
|
|
115
|
+
|
|
114
116
|
<EntityEditView
|
|
115
117
|
{...props}
|
|
116
118
|
fullIdPath={fullIdPath}
|
|
@@ -120,32 +122,34 @@ export function EntitySidePanel(props: EntitySidePanelProps) {
|
|
|
120
122
|
onValuesModified={onValuesModified}
|
|
121
123
|
onSaved={onUpdate}
|
|
122
124
|
barActions={({
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
125
|
+
status,
|
|
126
|
+
values
|
|
127
|
+
}) => <>
|
|
128
|
+
<IconButton
|
|
129
|
+
className="self-center"
|
|
130
|
+
size={"smallest"}
|
|
131
|
+
onClick={onClose}>
|
|
132
|
+
<CloseIcon size={"smallest"} />
|
|
133
|
+
</IconButton>
|
|
134
|
+
{allowFullScreen && <IconButton
|
|
135
|
+
className="self-center"
|
|
136
|
+
size={"smallest"}
|
|
137
|
+
onClick={() => {
|
|
138
|
+
const key = (status === "new" || status === "copy") ? path + "#new" : path + "/" + entityId;
|
|
139
|
+
saveEntityToMemoryCache(key, values);
|
|
140
|
+
if (entityId)
|
|
141
|
+
navigate(location.pathname + location.search);
|
|
142
|
+
else
|
|
143
|
+
navigate(location.pathname + location.search + "#new");
|
|
144
|
+
}}>
|
|
145
|
+
<OpenInFullIcon size={"smallest"} />
|
|
146
|
+
</IconButton>}
|
|
147
|
+
</>}
|
|
144
148
|
onTabChange={({
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
+
entityId,
|
|
150
|
+
selectedTab,
|
|
151
|
+
collection,
|
|
152
|
+
}) => {
|
|
149
153
|
sideEntityController.replace({
|
|
150
154
|
path,
|
|
151
155
|
entityId,
|
package/src/core/FireCMS.tsx
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import React, { useMemo } from "react";
|
|
3
|
+
import React, { useEffect, useMemo } from "react";
|
|
4
4
|
import { CenteredView, Typography } from "@firecms/ui";
|
|
5
|
+
import { AuthController } from "../types";
|
|
5
6
|
import { CustomizationController, FireCMSContext, FireCMSPlugin, FireCMSProps, User } from "../types";
|
|
6
|
-
import { AuthControllerContext } from "../contexts";
|
|
7
|
+
import { AuthControllerContext, ModeControllerProvider } from "../contexts";
|
|
7
8
|
import { useBuildSideEntityController } from "../internal/useBuildSideEntityController";
|
|
8
|
-
import { useCustomizationController, useFireCMSContext } from "../hooks";
|
|
9
|
+
import { useCustomizationController, useFireCMSContext, useTranslation, ModeController } from "../hooks";
|
|
10
|
+
import { useBuildModeController } from "../hooks/useBuildModeController";
|
|
9
11
|
import { useBuildSideDialogsController } from "../internal/useBuildSideDialogsController";
|
|
10
12
|
import { ErrorView } from "../components";
|
|
11
13
|
import { StorageSourceContext } from "../contexts/StorageSourceContext";
|
|
@@ -59,6 +61,10 @@ export function FireCMS<USER extends User>(props: FireCMSProps<USER>) {
|
|
|
59
61
|
console.warn("The `plugins` prop is deprecated in the FireCMS component. You should pass your plugins to `useBuildNavigationController` instead.");
|
|
60
62
|
}
|
|
61
63
|
|
|
64
|
+
const { t, i18n } = useTranslation();
|
|
65
|
+
|
|
66
|
+
const modeController = useBuildModeController();
|
|
67
|
+
|
|
62
68
|
const plugins = navigationController.plugins ?? _pluginsProp;
|
|
63
69
|
const userManagement = plugins?.find(p => p.userManagement)?.userManagement
|
|
64
70
|
?? _userManagement
|
|
@@ -106,6 +112,24 @@ export function FireCMS<USER extends User>(props: FireCMSProps<USER>) {
|
|
|
106
112
|
authController
|
|
107
113
|
});
|
|
108
114
|
|
|
115
|
+
// Inject plugin translations into the existing i18next instance
|
|
116
|
+
useEffect(() => {
|
|
117
|
+
if (!i18n) return;
|
|
118
|
+
plugins?.forEach(plugin => {
|
|
119
|
+
if (plugin.i18n) {
|
|
120
|
+
Object.keys(plugin.i18n).forEach(locale => {
|
|
121
|
+
i18n.addResourceBundle(
|
|
122
|
+
locale,
|
|
123
|
+
"firecms_core",
|
|
124
|
+
plugin.i18n![locale],
|
|
125
|
+
true, // deep merge
|
|
126
|
+
true // overwrite
|
|
127
|
+
);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}, [i18n, plugins]);
|
|
132
|
+
|
|
109
133
|
if (accessResponse?.message) {
|
|
110
134
|
console.warn(accessResponse.message);
|
|
111
135
|
}
|
|
@@ -133,12 +157,15 @@ export function FireCMS<USER extends User>(props: FireCMSProps<USER>) {
|
|
|
133
157
|
if (accessResponse?.blocked) {
|
|
134
158
|
return (
|
|
135
159
|
<CenteredView maxWidth={"md"} fullScreen={true} className={"flex flex-col gap-2"}>
|
|
160
|
+
{/* eslint-disable-next-line i18next/no-literal-string */}
|
|
136
161
|
<Typography variant={"h4"} gutterBottom>
|
|
137
|
-
|
|
162
|
+
{t("license_needed")}
|
|
138
163
|
</Typography>
|
|
139
164
|
<Typography>
|
|
140
|
-
|
|
141
|
-
|
|
165
|
+
{(() => {
|
|
166
|
+
const parts = t("license_description", { email: "%%EMAIL%%" }).split("%%EMAIL%%");
|
|
167
|
+
return <>{parts[0]}<a href={"mailto:hello@firecms.co"}>hello@firecms.co</a>{parts[1]}</>;
|
|
168
|
+
})()}
|
|
142
169
|
</Typography>
|
|
143
170
|
{accessResponse?.message &&
|
|
144
171
|
<Typography>{accessResponse?.message}</Typography>}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
|
|
3
|
-
import { ArrayProperty, FieldProps, Property, PropertyConfig, ResolvedProperty } from "../types";
|
|
3
|
+
import { ArrayProperty, FieldProps, NumberProperty, Property, PropertyConfig, ResolvedProperty, StringProperty } from "../types";
|
|
4
4
|
import {
|
|
5
5
|
ArrayCustomShapedFieldBinding,
|
|
6
6
|
ArrayOfReferencesFieldBinding,
|
|
@@ -8,16 +8,18 @@ import {
|
|
|
8
8
|
DateTimeFieldBinding,
|
|
9
9
|
KeyValueFieldBinding,
|
|
10
10
|
MapFieldBinding,
|
|
11
|
-
MarkdownEditorFieldBinding,
|
|
12
11
|
MultiSelectFieldBinding,
|
|
13
12
|
ReferenceAsStringFieldBinding,
|
|
14
13
|
ReferenceFieldBinding,
|
|
15
14
|
RepeatFieldBinding,
|
|
16
15
|
SelectFieldBinding,
|
|
17
|
-
StorageUploadFieldBinding,
|
|
18
16
|
SwitchFieldBinding,
|
|
19
17
|
TextFieldBinding
|
|
20
18
|
} from "../form";
|
|
19
|
+
import { lazyEager } from "../util/lazy_eager";
|
|
20
|
+
|
|
21
|
+
const MarkdownEditorFieldBinding = lazyEager<typeof import("../form/field_bindings/MarkdownEditorFieldBinding")["MarkdownEditorFieldBinding"]>(() => import("../form/field_bindings/MarkdownEditorFieldBinding"), "MarkdownEditorFieldBinding");
|
|
22
|
+
const StorageUploadFieldBinding = lazyEager<typeof import("../form/field_bindings/StorageUploadFieldBinding")["StorageUploadFieldBinding"]>(() => import("../form/field_bindings/StorageUploadFieldBinding"), "StorageUploadFieldBinding");
|
|
21
23
|
import { isPropertyBuilder, mergeDeep } from "../util";
|
|
22
24
|
|
|
23
25
|
import {
|
|
@@ -397,14 +399,19 @@ export function getDefaultFieldId(property: Property | ResolvedProperty) {
|
|
|
397
399
|
return "custom_array";
|
|
398
400
|
} else if (isPropertyBuilder(of)) {
|
|
399
401
|
return "repeat";
|
|
400
|
-
} else if (of
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
402
|
+
} else if (of) {
|
|
403
|
+
const ofProperty = of as Property;
|
|
404
|
+
if (ofProperty.dataType === "string" && (ofProperty as StringProperty).enumValues) {
|
|
405
|
+
return "multi_select";
|
|
406
|
+
} else if (ofProperty.dataType === "number" && (ofProperty as NumberProperty).enumValues) {
|
|
407
|
+
return "multi_number_select";
|
|
408
|
+
} else if (ofProperty.dataType === "string" && (ofProperty as StringProperty).storage) {
|
|
409
|
+
return "multi_file_upload";
|
|
410
|
+
} else if (ofProperty.dataType === "reference") {
|
|
411
|
+
return "multi_references";
|
|
412
|
+
} else {
|
|
413
|
+
return "repeat";
|
|
414
|
+
}
|
|
408
415
|
} else {
|
|
409
416
|
return "repeat";
|
|
410
417
|
}
|