Skip to content

Commit 3289da7

Browse files
committed
Entity history plugin
1 parent a57d719 commit 3289da7

File tree

68 files changed

+1786
-262
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+1786
-262
lines changed

demo_backend/functions/src/backup.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const firestore = require("@google-cloud/firestore");
88
* gcloud firestore export gs://firecms_firestore_backups --project firecms-demo-27150
99
* ```
1010
*/
11-
const bucket = "gs://firecms_firestore_backups/2025-03-11T20:51:40_46328";
11+
const bucket = "gs://firecms_firestore_backups/2025-05-12T17:58:18_30881";
1212

1313
// export function eraseDatabase() {
1414
// const firebase_tools = require("firebase-tools");

examples/example_cloud/src/entity_views/SampleEntityView.tsx

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
import React from "react";
2-
import { Button, Entity, EntityValues, useSnackbarController } from "@firecms/cloud";
2+
import { Button, EntityCustomViewParams, useSnackbarController } from "@firecms/cloud";
33
import { Product } from "../types";
44

55
export function SampleEntityView({
6-
entity,
7-
modifiedValues
8-
}: {
9-
entity?: Entity<Product>;
10-
modifiedValues?: EntityValues<Product>;
11-
}) {
6+
entity,
7+
modifiedValues
8+
}: EntityCustomViewParams<Product>) {
129

1310
const snackbarController = useSnackbarController();
1411

examples/example_next/src/app/cms/App.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ export function App() {
197197
const importPlugin = useImportPlugin();
198198
const exportPlugin = useExportPlugin();
199199

200+
200201
if (firebaseConfigLoading || !firebaseApp) {
201202
return <CircularProgressCenter/>;
202203
}

examples/example_pro/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"@firecms/data_enhancement": "^3.0.0-canary.235",
1212
"@firecms/data_export": "^3.0.0-canary.235",
1313
"@firecms/data_import": "^3.0.0-canary.235",
14+
"@firecms/entity_history": "^3.0.0-canary.235",
1415
"@firecms/datatalk": "^3.0.0-canary.235",
1516
"@firecms/editor": "^3.0.0-canary.235",
1617
"@firecms/formex": "^3.0.0-canary.235",

examples/example_pro/src/FirestoreApp/App.tsx

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ import { firebaseConfig, secondaryFirebaseConfig } from "../firebase_config";
4848
import { ExampleCMSView } from "./views/ExampleCMSView";
4949
import { testCollection } from "./collections/test_collection";
5050
import { usersCollection } from "./collections/users_collection";
51-
import { localeCollectionGroup, productsCollection, productsCollection2 } from "./collections/products_collection";
51+
import { localeCollectionGroup, productsCollection } from "./collections/products_collection";
5252
import { blogCollection } from "./collections/blog_collection";
5353
import { showcaseCollection } from "./collections/showcase_collection";
5454

@@ -65,6 +65,7 @@ import { useImportPlugin } from "@firecms/data_import";
6565
import { DemoImportAction } from "./DemoImportAction";
6666
import { algoliaSearchControllerBuilder } from "./text_search";
6767
import ClientUIComponentsShowcase from "./views/ClientUIComponentsShowcase";
68+
import { useEntityHistoryPlugin } from "@firecms/entity_history";
6869

6970
const signInOptions: FirebaseSignInProvider[] = ["google.com", "password"];
7071

@@ -308,12 +309,18 @@ export function App() {
308309
const importPlugin = useImportPlugin();
309310
const exportPlugin = useExportPlugin();
310311

312+
const entityHistoryPlugin = useEntityHistoryPlugin({
313+
defaultEnabled: true,
314+
getUser: userManagement.getUser
315+
});
316+
311317
const demoPlugin = useMemo(() => ({
312318
key: "demo",
313319
collectionView: {
314320
CollectionActions: [DemoImportAction]
315321
}
316322
}), []);
323+
317324
/**
318325
* Check if the user is allowed to access the main view
319326
*/
@@ -330,10 +337,20 @@ export function App() {
330337
storageSource
331338
});
332339

340+
const plugins = [
341+
userManagementPlugin,
342+
dataEnhancementPlugin,
343+
exportPlugin,
344+
entityHistoryPlugin,
345+
demoPlugin,
346+
collectionEditorPlugin
347+
];
348+
333349
const navigationController = useBuildNavigationController({
334350
disabled: authLoading || collectionConfigController.loading,
335351
// basePath: "cms",
336352
collections,
353+
plugins,
337354
// collectionPermissions: userManagement.collectionPermissions,
338355
views,
339356
adminViews: userManagementAdminViews,
@@ -364,14 +381,7 @@ export function App() {
364381
userConfigPersistence={userConfigPersistence}
365382
dataSourceDelegate={firestoreDelegate}
366383
storageSource={storageSource}
367-
368-
plugins={[
369-
userManagementPlugin,
370-
dataEnhancementPlugin,
371-
exportPlugin,
372-
demoPlugin,
373-
collectionEditorPlugin
374-
]}
384+
plugins={plugins}
375385
onAnalyticsEvent={onAnalyticsEvent}
376386
propertyConfigs={propertyConfigs}
377387
>

examples/example_pro/tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"@firecms/data_enhancement": ["../../packages/data_enhancement/src"],
2828
"@firecms/collection_editor": ["../../packages/collection_editor/src"],
2929
"@firecms/collection_editor_firebase": ["../../packages/collection_editor_firebase/src"],
30+
"@firecms/entity_history": ["../../packages/entity_history/src"],
3031
"@firecms/data_import": ["../../packages/data_import/src"],
3132
"@firecms/data_export": ["../../packages/data_export/src"],
3233
"@firecms/user_management": ["../../packages/user_management/src"]

examples/example_pro/vite.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export default defineConfig({
3030
"@firecms/firebase": path.resolve(__dirname, "../../packages/firebase_firecms/src"),
3131
"@firecms/data_enhancement": path.resolve(__dirname, "../../packages/data_enhancement/src"),
3232
"@firecms/data_import": path.resolve(__dirname, "../../packages/data_import/src"),
33+
"@firecms/entity_history": path.resolve(__dirname, "../../packages/entity_history/src"),
3334
"@firecms/data_export": path.resolve(__dirname, "../../packages/data_export/src"),
3435
"@firecms/schema_inference": path.resolve(__dirname, "../../packages/schema_inference/src"),
3536
"@firecms/collection_editor": path.resolve(__dirname, "../../packages/collection_editor/src"),

lerna.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
"packages/data_import",
1313
"packages/data_export",
1414
"packages/data_import_export",
15+
"packages/entity_history",
1516
"packages/firebase_firecms",
1617
"packages/mongodb",
1718
"packages/cli",
@@ -28,4 +29,4 @@
2829
"examples/example_pro"
2930
],
3031
"npmClient": "npm"
31-
}
32+
}

package-lock.json

Lines changed: 36 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"packages/data_import",
2525
"packages/data_export",
2626
"packages/data_import_export",
27+
"packages/entity_history",
2728
"packages/schema_inference",
2829
"packages/data_enhancement",
2930
"packages/user_management",

packages/cli/templates/template_pro/src/App.tsx

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,7 @@ import {
3131
import { firebaseConfig } from "./firebase_config";
3232
import { productsCollection } from "./collections/products";
3333
import { useDataEnhancementPlugin } from "@firecms/data_enhancement";
34-
import {
35-
useBuildUserManagement,
36-
userManagementAdminViews,
37-
useUserManagementPlugin
38-
} from "@firecms/user_management";
34+
import { useBuildUserManagement, userManagementAdminViews, useUserManagementPlugin } from "@firecms/user_management";
3935
import { useImportPlugin } from "@firecms/data_import";
4036
import { useExportPlugin } from "@firecms/data_export";
4137
import { ExampleCMSView } from "./views/ExampleCMSView";
@@ -112,7 +108,6 @@ export function App() {
112108
firebaseApp
113109
});
114110

115-
116111
/**
117112
* Controller for managing authentication
118113
*/
@@ -149,16 +144,6 @@ export function App() {
149144
storageSource
150145
});
151146

152-
const navigationController = useBuildNavigationController({
153-
disabled: authLoading || collectionConfigController.loading,
154-
collections: collectionsBuilder,
155-
collectionPermissions: userManagement.collectionPermissions,
156-
views,
157-
adminViews: userManagementAdminViews,
158-
authController,
159-
dataSourceDelegate: firestoreDelegate
160-
});
161-
162147
/**
163148
* Data enhancement plugin
164149
*/
@@ -185,6 +170,25 @@ export function App() {
185170
collectionConfigController
186171
});
187172

173+
const plugins = [
174+
dataEnhancementPlugin,
175+
importPlugin,
176+
exportPlugin,
177+
userManagementPlugin,
178+
collectionEditorPlugin
179+
];
180+
181+
const navigationController = useBuildNavigationController({
182+
disabled: authLoading || collectionConfigController.loading,
183+
collections: collectionsBuilder,
184+
collectionPermissions: userManagement.collectionPermissions,
185+
views,
186+
adminViews: userManagementAdminViews,
187+
authController,
188+
dataSourceDelegate: firestoreDelegate,
189+
plugins
190+
});
191+
188192
if (firebaseConfigLoading || !firebaseApp) {
189193
return <CircularProgressCenter/>;
190194
}
@@ -193,7 +197,6 @@ export function App() {
193197
return <>{configError}</>;
194198
}
195199

196-
197200
return (
198201
<SnackbarProvider>
199202
<ModeControllerProvider value={modeController}>
@@ -205,13 +208,7 @@ export function App() {
205208
userConfigPersistence={userConfigPersistence}
206209
dataSourceDelegate={firestoreDelegate}
207210
storageSource={storageSource}
208-
plugins={[
209-
dataEnhancementPlugin,
210-
importPlugin,
211-
exportPlugin,
212-
userManagementPlugin,
213-
collectionEditorPlugin
214-
]}
211+
plugins={plugins}
215212
>
216213
{({
217214
context,

packages/collection_editor/src/ConfigControllerProvider.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ export interface ConfigControllerProviderProps {
4949
icon: React.ReactNode
5050
};
5151

52-
getPathSuggestions?: (path?: string) => Promise<string[]>;
53-
5452
getUser?: (uid: string) => User | null
5553

5654
getData?: (path: string, parentPaths: string[]) => Promise<object[]>;
@@ -67,7 +65,6 @@ export const ConfigControllerProvider = React.memo(
6765
reservedGroups,
6866
collectionInference,
6967
extraView,
70-
getPathSuggestions,
7168
getUser,
7269
getData,
7370
onAnalyticsEvent,
@@ -230,7 +227,6 @@ export const ConfigControllerProvider = React.memo(
230227
createCollection,
231228
editProperty,
232229
configPermissions: configPermissions ?? defaultConfigPermissions,
233-
getPathSuggestions,
234230
}}>
235231

236232
{children}
@@ -244,7 +240,6 @@ export const ConfigControllerProvider = React.memo(
244240
getData={getData}
245241
reservedGroups={reservedGroups}
246242
extraView={extraView}
247-
pathSuggestions={getPathSuggestions}
248243
getUser={getUser}
249244
handleClose={(collection) => {
250245
if (currentDialog?.redirect) {

packages/collection_editor/src/types/collection_editor_controller.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,4 @@ export interface CollectionEditorController {
4141

4242
configPermissions: CollectionEditorPermissionsBuilder;
4343

44-
getPathSuggestions?: (path: string) => Promise<string[]>;
45-
4644
}

0 commit comments

Comments
 (0)