@firecms/core 3.3.0-canary.ae3fdc5 → 3.3.0

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.
@@ -481,10 +481,18 @@ export interface FireCMSTranslations {
481
481
  auto_setup_collections_button: string;
482
482
  auto_setup_collections_title: string;
483
483
  auto_setup_collections_desc: string;
484
- this_can_take_a_minute: string;
484
+ setting_up_collections: string;
485
+ setting_up_collection: string;
485
486
  no_collections_found_to_setup: string;
486
487
  collections_have_been_setup: string;
487
488
  error_setting_up_collections: string;
489
+ setup_collections_title: string;
490
+ setup_collections_select_desc: string;
491
+ select_all: string;
492
+ deselect_all: string;
493
+ setup_collections_confirm: string;
494
+ collection_setup_success: string;
495
+ go_to_collection: string;
488
496
  add_your: string;
489
497
  database_collections: string;
490
498
  to_firecms: string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@firecms/core",
3
3
  "type": "module",
4
- "version": "3.3.0-canary.ae3fdc5",
4
+ "version": "3.3.0",
5
5
  "description": "Awesome Firebase/Firestore-based headless open-source CMS",
6
6
  "funding": {
7
7
  "url": "https://github.com/sponsors/firecmsco"
@@ -53,8 +53,8 @@
53
53
  "@dnd-kit/core": "^6.3.1",
54
54
  "@dnd-kit/modifiers": "^9.0.0",
55
55
  "@dnd-kit/sortable": "^10.0.0",
56
- "@firecms/formex": "^3.3.0-canary.ae3fdc5",
57
- "@firecms/ui": "^3.3.0-canary.ae3fdc5",
56
+ "@firecms/formex": "^3.3.0",
57
+ "@firecms/ui": "^3.3.0",
58
58
  "@floating-ui/dom": "^1.7.4",
59
59
  "@radix-ui/react-portal": "^1.1.10",
60
60
  "@radix-ui/react-slot": "^1.2.4",
@@ -70,7 +70,13 @@ export const Scaffold = React.memo<PropsWithChildren<ScaffoldProps>>(
70
70
  const includeDrawer = drawerChildren.length > 0;
71
71
  const largeLayout = useLargeLayout();
72
72
 
73
- const [drawerOpen, setDrawerOpen] = React.useState(false);
73
+ const [drawerOpen, setDrawerOpen] = React.useState(() => {
74
+ try {
75
+ return localStorage.getItem("firecms_drawer_open") === "true";
76
+ } catch {
77
+ return false;
78
+ }
79
+ });
74
80
  const [onHover, setOnHover] = React.useState(false);
75
81
 
76
82
  const setOnHoverTrue = useCallback(() => setOnHover(true), []);
@@ -78,10 +84,16 @@ export const Scaffold = React.memo<PropsWithChildren<ScaffoldProps>>(
78
84
 
79
85
  const handleDrawerOpen = useCallback(() => {
80
86
  setDrawerOpen(true);
87
+ try {
88
+ localStorage.setItem("firecms_drawer_open", "true");
89
+ } catch { /* ignore */ }
81
90
  }, []);
82
91
 
83
92
  const handleDrawerClose = useCallback(() => {
84
93
  setDrawerOpen(false);
94
+ try {
95
+ localStorage.setItem("firecms_drawer_open", "false");
96
+ } catch { /* ignore */ }
85
97
  }, []);
86
98
 
87
99
  const computedDrawerOpen: boolean = drawerOpen || Boolean(largeLayout && autoOpenDrawer && onHover);
@@ -178,7 +178,9 @@ export const EntityCollectionView = React.memo(
178
178
 
179
179
  const collection = useMemo(() => {
180
180
  const userOverride = userConfigPersistence?.getCollectionConfig<M>(fullPath);
181
- return (userOverride ? mergeDeep(collectionProp, userOverride) : collectionProp) as EntityCollection<M>;
181
+ if (!userOverride) return collectionProp;
182
+ const { properties, ...rest } = userOverride;
183
+ return mergeDeep(collectionProp, rest) as EntityCollection<M>;
182
184
  }, [collectionProp, fullPath, userConfigPersistence?.getCollectionConfig]);
183
185
 
184
186
  const openEntityMode = collection?.openEntityMode ?? DEFAULT_ENTITY_OPEN_MODE;
@@ -507,7 +509,8 @@ export const EntityCollectionView = React.memo(
507
509
  path: fullPath,
508
510
  propertyConfigs: customizationController.propertyConfigs,
509
511
  authController,
510
- }), [collection, fullPath]);
512
+ userConfigPersistence,
513
+ }), [collection, fullPath, userConfigPersistence]);
511
514
 
512
515
  // Check if Kanban view is possible (collection has at least one string enum property)
513
516
  const hasEnumProperty = useMemo(() => {
@@ -1,6 +1,6 @@
1
1
  import { useNavigate } from "react-router-dom";
2
2
 
3
- import { useCustomizationController, useFireCMSContext } from "../../hooks";
3
+ import { useCustomizationController, useFireCMSContext, useTranslation } from "../../hooks";
4
4
  import { NavigationEntry, PluginHomePageActionsProps } from "../../types";
5
5
  import { IconForView } from "../../util";
6
6
  import { useUserConfigurationPersistence } from "../../hooks/useUserConfigurationPersistence";
@@ -38,6 +38,7 @@ export function NavigationCardBinding({
38
38
  }) {
39
39
 
40
40
  const userConfigurationPersistence = useUserConfigurationPersistence();
41
+ const { t } = useTranslation();
41
42
  const collectionIcon = <IconForView collectionOrView={collection ?? view}/>;
42
43
 
43
44
  const navigate = useNavigate();
@@ -92,15 +93,17 @@ export function NavigationCardBinding({
92
93
  {actionsArray}
93
94
  </>
94
95
 
96
+ const translatedName = t(name);
97
+
95
98
  if (type === "admin") {
96
99
  return <SmallNavigationCard icon={collectionIcon}
97
- name={name}
100
+ name={translatedName}
98
101
  url={url}/>;
99
102
  }
100
103
 
101
104
  return <NavigationCard
102
105
  icon={collectionIcon}
103
- name={name}
106
+ name={translatedName}
104
107
  description={description}
105
108
  actions={actions}
106
109
  onClick={() => {
@@ -128,7 +128,7 @@ export function DefaultDrawer({
128
128
  }}
129
129
  key={entry.id}>
130
130
  {<IconForView collectionOrView={entry.view} />}
131
- {t(entry.name as any)}
131
+ {t(entry.name)}
132
132
  </MenuItem>)}
133
133
 
134
134
  </Menu>}
@@ -414,7 +414,11 @@ export function useBuildNavigationController<EC extends EntityCollection, USER e
414
414
  const baseCollection = getCollectionByPathOrId(removeInitialAndTrailingSlashes(idOrPath), collections);
415
415
 
416
416
  const userOverride = includeUserOverride ? userConfigPersistence?.getCollectionConfig(idOrPath) : undefined;
417
- const overriddenCollection = baseCollection ? mergeDeep(baseCollection, userOverride ?? {}) : undefined;
417
+ let overriddenCollection = baseCollection;
418
+ if (baseCollection && userOverride) {
419
+ const { properties, ...rest } = userOverride;
420
+ overriddenCollection = mergeDeep(baseCollection, rest);
421
+ }
418
422
 
419
423
  let result: Partial<EntityCollection> | undefined = overriddenCollection;
420
424
 
package/src/locales/de.ts CHANGED
@@ -514,10 +514,18 @@ export const de: FireCMSTranslations = {
514
514
  auto_setup_collections_button: "Sammlungen automatisch einrichten",
515
515
  auto_setup_collections_title: "Sammlungen automatisch einrichten?",
516
516
  auto_setup_collections_desc: "Dadurch werden automatisch Sammlungskonfigurationen für Sammlungen erstellt, die noch <b>NICHT</b> zugeordnet sind.",
517
- this_can_take_a_minute: "Dies kann ein bis zwei Minuten dauern",
517
+ setting_up_collections: "Sammlungen werden eingerichtet",
518
+ setting_up_collection: "{{name}} wird eingerichtet",
518
519
  no_collections_found_to_setup: "Keine einzurichtenden Sammlungen gefunden",
519
520
  collections_have_been_setup: "Sammlungen wurden automatisch eingerichtet",
520
521
  error_setting_up_collections: "Fehler beim automatischen Einrichten der Sammlungen",
522
+ setup_collections_title: "Set up collections",
523
+ setup_collections_select_desc: "Select which collections to automatically set up:",
524
+ select_all: "Select all",
525
+ deselect_all: "Deselect all",
526
+ setup_collections_confirm: "Set up ({{count}})",
527
+ collection_setup_success: "{{name}} has been set up",
528
+ go_to_collection: "Go to collection",
521
529
  add_your: "Fügen Sie Ihre",
522
530
  database_collections: "Datenbanksammlungen",
523
531
  to_firecms: "zu FireCMS hinzu",
package/src/locales/en.ts CHANGED
@@ -522,10 +522,18 @@ export const en: FireCMSTranslations = {
522
522
  auto_setup_collections_button: "Automatically set up collections",
523
523
  auto_setup_collections_title: "Automatically set up collections?",
524
524
  auto_setup_collections_desc: "This will automatically create collection configs for collections that are <b>NOT</b> already mapped",
525
- this_can_take_a_minute: "This can take a minute or two",
525
+ setting_up_collections: "Setting up collections",
526
+ setting_up_collection: "Setting up {{name}}",
526
527
  no_collections_found_to_setup: "No collections found to setup.",
527
528
  collections_have_been_setup: "Collections have been automatically setup.",
528
529
  error_setting_up_collections: "Error automatically setting up collections",
530
+ setup_collections_title: "Set up collections",
531
+ setup_collections_select_desc: "Select which collections to automatically set up:",
532
+ select_all: "Select all",
533
+ deselect_all: "Deselect all",
534
+ setup_collections_confirm: "Set up ({{count}})",
535
+ collection_setup_success: "{{name}} has been set up",
536
+ go_to_collection: "Go to collection",
529
537
 
530
538
  // --- Home Suggestions ---
531
539
  add_your: "Add your",
package/src/locales/es.ts CHANGED
@@ -522,10 +522,18 @@ export const es: FireCMSTranslations = {
522
522
  auto_setup_collections_button: "Configurar colecciones automáticamente",
523
523
  auto_setup_collections_title: "¿Configurar colecciones automáticamente?",
524
524
  auto_setup_collections_desc: "Esto creará automáticamente la configuración de las colecciones que <b>NO</b> estén mapeadas",
525
- this_can_take_a_minute: "Esto puede tardar un minuto o dos",
525
+ setting_up_collections: "Configurando colecciones",
526
+ setting_up_collection: "Configurando {{name}}",
526
527
  no_collections_found_to_setup: "No se encontraron colecciones para configurar",
527
528
  collections_have_been_setup: "¡Tus colecciones han sido configuradas!",
528
529
  error_setting_up_collections: "Error al configurar colecciones",
530
+ setup_collections_title: "Set up collections",
531
+ setup_collections_select_desc: "Select which collections to automatically set up:",
532
+ select_all: "Select all",
533
+ deselect_all: "Deselect all",
534
+ setup_collections_confirm: "Set up ({{count}})",
535
+ collection_setup_success: "{{name}} has been set up",
536
+ go_to_collection: "Go to collection",
529
537
 
530
538
  // --- Home Suggestions ---
531
539
  add_your: "Añade tus",
package/src/locales/fr.ts CHANGED
@@ -514,10 +514,18 @@ export const fr: FireCMSTranslations = {
514
514
  auto_setup_collections_button: "Configurer les collections automatiquement",
515
515
  auto_setup_collections_title: "Configurer les collections automatiquement ?",
516
516
  auto_setup_collections_desc: "Cela créera automatiquement des configurations de collection pour les collections qui ne sont <b>PAS</b> déjà mappées",
517
- this_can_take_a_minute: "Cela peut prendre une minute",
517
+ setting_up_collections: "Configuration des collections",
518
+ setting_up_collection: "Configuration de {{name}}",
518
519
  no_collections_found_to_setup: "Aucune collection à configurer trouvée",
519
520
  collections_have_been_setup: "Les collections ont été configurées",
520
521
  error_setting_up_collections: "Erreur lors de la configuration des collections",
522
+ setup_collections_title: "Set up collections",
523
+ setup_collections_select_desc: "Select which collections to automatically set up:",
524
+ select_all: "Select all",
525
+ deselect_all: "Deselect all",
526
+ setup_collections_confirm: "Set up ({{count}})",
527
+ collection_setup_success: "{{name}} has been set up",
528
+ go_to_collection: "Go to collection",
521
529
  add_your: "Ajoutez vos",
522
530
  database_collections: "collections de base de données",
523
531
  to_firecms: "à FireCMS",
package/src/locales/hi.ts CHANGED
@@ -514,10 +514,18 @@ export const hi: FireCMSTranslations = {
514
514
  auto_setup_collections_button: "संग्रहों को स्वचालित रूप से सेट करें",
515
515
  auto_setup_collections_title: "संग्रहों की स्वचालित सेटअप",
516
516
  auto_setup_collections_desc: "अपने मौजूदा Firestore डेटा के आधार पर संग्रहों को स्वचालित रूप से सेट करें। FireCMS को आपके लिए परफेक्ट CMS कॉन्फ़िगर करने दें।",
517
- this_can_take_a_minute: "इसमें एक मिनट लग सकता है",
517
+ setting_up_collections: "संग्रह सेट किए जा रहे हैं",
518
+ setting_up_collection: "{{name}} सेट किया जा रहा है",
518
519
  no_collections_found_to_setup: "सेट करने के लिए कोई संग्रह नहीं मिला",
519
520
  collections_have_been_setup: "संग्रहों को सेट कर दिया गया है",
520
521
  error_setting_up_collections: "संग्रह सेट करने में त्रुटि",
522
+ setup_collections_title: "Set up collections",
523
+ setup_collections_select_desc: "Select which collections to automatically set up:",
524
+ select_all: "Select all",
525
+ deselect_all: "Deselect all",
526
+ setup_collections_confirm: "Set up ({{count}})",
527
+ collection_setup_success: "{{name}} has been set up",
528
+ go_to_collection: "Go to collection",
521
529
  add_your: "अपने",
522
530
  database_collections: "डेटाबेस संग्रह",
523
531
  to_firecms: "को FireCMS में जोड़ें",
package/src/locales/it.ts CHANGED
@@ -514,10 +514,18 @@ export const it: FireCMSTranslations = {
514
514
  auto_setup_collections_button: "Configura le collezioni automaticamente",
515
515
  auto_setup_collections_title: "Configurazione automatica delle collezioni",
516
516
  auto_setup_collections_desc: "Configura le collezioni automaticamente in base ai dati Firestore esistenti. Lascia che FireCMS configuri il CMS perfetto per te.",
517
- this_can_take_a_minute: "Potrebbe richiedere qualche minuto",
517
+ setting_up_collections: "Configurazione delle collezioni",
518
+ setting_up_collection: "Configurazione di {{name}}",
518
519
  no_collections_found_to_setup: "Nessuna collezione trovata da configurare",
519
520
  collections_have_been_setup: "Le collezioni sono state configurate",
520
521
  error_setting_up_collections: "Errore durante la configurazione delle collezioni",
522
+ setup_collections_title: "Set up collections",
523
+ setup_collections_select_desc: "Select which collections to automatically set up:",
524
+ select_all: "Select all",
525
+ deselect_all: "Deselect all",
526
+ setup_collections_confirm: "Set up ({{count}})",
527
+ collection_setup_success: "{{name}} has been set up",
528
+ go_to_collection: "Go to collection",
521
529
  add_your: "Aggiungi le tue",
522
530
  database_collections: "collezioni del database",
523
531
  to_firecms: "a FireCMS",
package/src/locales/pt.ts CHANGED
@@ -519,10 +519,18 @@ export const pt: FireCMSTranslations = {
519
519
  auto_setup_collections_button: "Configurar coleções automaticamente",
520
520
  auto_setup_collections_title: "Configurar coleções automaticamente?",
521
521
  auto_setup_collections_desc: "Isto criará automaticamente configurações de coleção para coleções que <b>NÃO</b> estão já mapeadas",
522
- this_can_take_a_minute: "Isto pode demorar um ou dois minutos",
522
+ setting_up_collections: "Configurando coleções",
523
+ setting_up_collection: "Configurando {{name}}",
523
524
  no_collections_found_to_setup: "Nenhuma coleção encontrada para configurar.",
524
525
  collections_have_been_setup: "As coleções foram configuradas automaticamente.",
525
526
  error_setting_up_collections: "Erro ao configurar coleções automaticamente",
527
+ setup_collections_title: "Set up collections",
528
+ setup_collections_select_desc: "Select which collections to automatically set up:",
529
+ select_all: "Select all",
530
+ deselect_all: "Deselect all",
531
+ setup_collections_confirm: "Set up ({{count}})",
532
+ collection_setup_success: "{{name}} has been set up",
533
+ go_to_collection: "Go to collection",
526
534
 
527
535
  // --- Home Suggestions ---
528
536
  add_your: "Adicione as suas",
@@ -544,10 +544,18 @@ export interface FireCMSTranslations {
544
544
  auto_setup_collections_button: string;
545
545
  auto_setup_collections_title: string;
546
546
  auto_setup_collections_desc: string;
547
- this_can_take_a_minute: string;
547
+ setting_up_collections: string;
548
+ setting_up_collection: string;
548
549
  no_collections_found_to_setup: string;
549
550
  collections_have_been_setup: string;
550
551
  error_setting_up_collections: string;
552
+ setup_collections_title: string;
553
+ setup_collections_select_desc: string;
554
+ select_all: string;
555
+ deselect_all: string;
556
+ setup_collections_confirm: string;
557
+ collection_setup_success: string;
558
+ go_to_collection: string;
551
559
 
552
560
  // --- Home Suggestions ---
553
561
  add_your: string;
@@ -90,8 +90,11 @@ export const resolveCollection = <M extends Record<string, any>,>
90
90
  .map(([id, property]) => ({ [id]: property }))
91
91
  .reduce((a, b) => ({ ...a, ...b }), {});
92
92
 
93
+ const { properties: overrideProps, ...restOverrides } = collectionOverride ?? {};
94
+
93
95
  return {
94
96
  ...collection,
97
+ ...restOverrides,
95
98
  properties: cleanedProperties,
96
99
  originalCollection: collection
97
100
  } as ResolvedEntityCollection<M>;