@strapi/admin 5.18.1 → 5.20.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.
- package/dist/admin/admin/src/components/Filters.js +10 -1
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +10 -1
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.js +22 -17
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.mjs +21 -16
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Overview.js +41 -15
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Overview.mjs +42 -16
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.js +33 -17
- package/dist/admin/admin/src/components/GuidedTour/Step.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.mjs +34 -18
- package/dist/admin/admin/src/components/GuidedTour/Step.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.js +41 -40
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.mjs +36 -35
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -0
- package/dist/admin/admin/src/components/LeftMenu.js +52 -29
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs +52 -29
- package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavLink.js +4 -42
- package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavLink.mjs +4 -23
- package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/components/Providers.js +9 -10
- package/dist/admin/admin/src/components/Providers.js.map +1 -1
- package/dist/admin/admin/src/components/Providers.mjs +9 -10
- package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +18 -12
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +19 -13
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.js +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.mjs +2 -2
- package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js +34 -16
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs +34 -16
- package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js +34 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +34 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/usePersistentState.js +10 -0
- package/dist/admin/admin/src/hooks/usePersistentState.js.map +1 -1
- package/dist/admin/admin/src/hooks/usePersistentState.mjs +10 -1
- package/dist/admin/admin/src/hooks/usePersistentState.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +1 -18
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +1 -18
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +0 -11
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +0 -11
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +2 -3
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +2 -3
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js +2 -2
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs +3 -3
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs +2 -2
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +297 -254
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs +297 -254
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +12 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +12 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +6 -6
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +6 -6
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +1 -7
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +2 -8
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +1 -8
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +1 -8
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +0 -2
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +0 -2
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +11 -3
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +11 -3
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/tests/utils.js +25 -28
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +25 -28
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/ee/admin/src/constants.js +4 -2
- package/dist/admin/ee/admin/src/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/constants.mjs +4 -2
- package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +3 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +3 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/index.js +2 -4
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/Filters.d.ts +3 -1
- package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.d.ts +5 -3
- package/dist/admin/src/components/GuidedTour/Overview.d.ts +1 -0
- package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.d.ts +1 -1
- package/dist/admin/src/components/SubNav.d.ts +2 -1
- package/dist/admin/src/core/apis/Widgets.d.ts +8 -5
- package/dist/admin/src/features/Tracking.d.ts +22 -3
- package/dist/admin/src/hooks/usePersistentState.d.ts +2 -1
- package/dist/admin/src/index.d.ts +2 -3
- package/dist/admin/src/pages/Settings/components/Tokens/TokenBox.d.ts +1 -1
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +9 -8
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +9 -8
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/server/src/domain/user.js +3 -1
- package/dist/server/server/src/domain/user.js.map +1 -1
- package/dist/server/server/src/domain/user.mjs +3 -1
- package/dist/server/server/src/domain/user.mjs.map +1 -1
- package/dist/server/src/domain/user.d.ts.map +1 -1
- package/package.json +8 -9
- package/dist/admin/admin/src/components/GuidedTour/Homepage.js +0 -132
- package/dist/admin/admin/src/components/GuidedTour/Homepage.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Homepage.mjs +0 -130
- package/dist/admin/admin/src/components/GuidedTour/Homepage.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Modal.js +0 -278
- package/dist/admin/admin/src/components/GuidedTour/Modal.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Modal.mjs +0 -276
- package/dist/admin/admin/src/components/GuidedTour/Modal.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.js +0 -54
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.mjs +0 -51
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.js +0 -206
- package/dist/admin/admin/src/components/GuidedTour/Provider.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.mjs +0 -184
- package/dist/admin/admin/src/components/GuidedTour/Provider.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/constants.js +0 -167
- package/dist/admin/admin/src/components/GuidedTour/constants.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/constants.mjs +0 -164
- package/dist/admin/admin/src/components/GuidedTour/constants.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.js +0 -19
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.js.map +0 -1
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.mjs +0 -17
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.mjs.map +0 -1
- package/dist/admin/src/components/GuidedTour/Homepage.d.ts +0 -2
- package/dist/admin/src/components/GuidedTour/Modal.d.ts +0 -2
- package/dist/admin/src/components/GuidedTour/Ornaments.d.ts +0 -13
- package/dist/admin/src/components/GuidedTour/Provider.d.ts +0 -39
- package/dist/admin/src/components/GuidedTour/constants.d.ts +0 -165
- package/dist/admin/src/components/UnstableGuidedTour/Overview.d.ts +0 -1
- package/dist/admin/src/pages/Home/components/GuidedTour.d.ts +0 -1
- /package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycles.js","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { scheduleJob } from 'node-schedule';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays < licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n state.deleteExpiredJob = scheduleJob('0 0 * * *', () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\n });\n\n return this;\n },\n\n unsubscribe() {\n if (state.eeDisableUnsubscribe) {\n state.eeDisableUnsubscribe();\n }\n\n if (state.eventHubUnsubscribe) {\n state.eventHubUnsubscribe();\n }\n\n if (state.deleteExpiredJob) {\n state.deleteExpiredJob.cancel();\n }\n\n return this;\n },\n\n destroy() {\n return this.unsubscribe();\n },\n };\n};\n\nexport { createAuditLogsLifecycleService };\n"],"names":["DEFAULT_RETENTION_DAYS","defaultEvents","getEventMap","getDefaultPayload","args","reduce","acc","event","getRetentionDays","strapi","featureConfig","ee","features","get","licenseRetentionDays","options","retentionDays","userRetentionDays","config","createAuditLogsLifecycleService","state","auditLogsService","eventMap","processEvent","name","requestState","requestContext","isUsingAdminAuth","route","info","type","user","getPayload","ignoredUids","includes","uid","action","date","Date","toISOString","payload","userId","id","handleEvent","processedEvent","saveEvent","register","eeEnableUnsubscribe","eventHub","on","destroy","eeUpdateUnsubscribe","eeDisableUnsubscribe","isEnabled","eventHubUnsubscribe","subscribe","deleteExpiredJob","scheduleJob","expirationDate","now","deleteExpiredEvents","unsubscribe","cancel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lifecycles.js","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays < licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n\n strapi.cron.add({\n deleteExpiredAuditLogs: {\n task: async () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\n },\n options: '0 0 * * *',\n },\n });\n\n return this;\n },\n\n unsubscribe() {\n if (state.eeDisableUnsubscribe) {\n state.eeDisableUnsubscribe();\n }\n\n if (state.eventHubUnsubscribe) {\n state.eventHubUnsubscribe();\n }\n\n strapi.cron.remove('deleteExpiredAuditLogs');\n\n return this;\n },\n\n destroy() {\n return this.unsubscribe();\n },\n };\n};\n\nexport { createAuditLogsLifecycleService };\n"],"names":["DEFAULT_RETENTION_DAYS","defaultEvents","getEventMap","getDefaultPayload","args","reduce","acc","event","getRetentionDays","strapi","featureConfig","ee","features","get","licenseRetentionDays","options","retentionDays","userRetentionDays","config","createAuditLogsLifecycleService","state","auditLogsService","eventMap","processEvent","name","requestState","requestContext","isUsingAdminAuth","route","info","type","user","getPayload","ignoredUids","includes","uid","action","date","Date","toISOString","payload","userId","id","handleEvent","processedEvent","saveEvent","register","eeEnableUnsubscribe","eventHub","on","destroy","eeUpdateUnsubscribe","eeDisableUnsubscribe","isEnabled","eventHubUnsubscribe","subscribe","cron","add","deleteExpiredAuditLogs","task","expirationDate","now","deleteExpiredEvents","unsubscribe","remove"],"mappings":"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"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { scheduleJob } from 'node-schedule';
|
|
2
|
-
|
|
3
1
|
const DEFAULT_RETENTION_DAYS = 90;
|
|
4
2
|
const defaultEvents = [
|
|
5
3
|
'entry.create',
|
|
@@ -133,9 +131,14 @@ const getRetentionDays = (strapi)=>{
|
|
|
133
131
|
state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);
|
|
134
132
|
// Manage audit logs auto deletion
|
|
135
133
|
const retentionDays = getRetentionDays(strapi);
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
134
|
+
strapi.cron.add({
|
|
135
|
+
deleteExpiredAuditLogs: {
|
|
136
|
+
task: async ()=>{
|
|
137
|
+
const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);
|
|
138
|
+
auditLogsService.deleteExpiredEvents(expirationDate);
|
|
139
|
+
},
|
|
140
|
+
options: '0 0 * * *'
|
|
141
|
+
}
|
|
139
142
|
});
|
|
140
143
|
return this;
|
|
141
144
|
},
|
|
@@ -146,9 +149,7 @@ const getRetentionDays = (strapi)=>{
|
|
|
146
149
|
if (state.eventHubUnsubscribe) {
|
|
147
150
|
state.eventHubUnsubscribe();
|
|
148
151
|
}
|
|
149
|
-
|
|
150
|
-
state.deleteExpiredJob.cancel();
|
|
151
|
-
}
|
|
152
|
+
strapi.cron.remove('deleteExpiredAuditLogs');
|
|
152
153
|
return this;
|
|
153
154
|
},
|
|
154
155
|
destroy () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycles.mjs","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { scheduleJob } from 'node-schedule';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays < licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n state.deleteExpiredJob = scheduleJob('0 0 * * *', () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\n });\n\n return this;\n },\n\n unsubscribe() {\n if (state.eeDisableUnsubscribe) {\n state.eeDisableUnsubscribe();\n }\n\n if (state.eventHubUnsubscribe) {\n state.eventHubUnsubscribe();\n }\n\n if (state.deleteExpiredJob) {\n state.deleteExpiredJob.cancel();\n }\n\n return this;\n },\n\n destroy() {\n return this.unsubscribe();\n },\n };\n};\n\nexport { createAuditLogsLifecycleService };\n"],"names":["DEFAULT_RETENTION_DAYS","defaultEvents","getEventMap","getDefaultPayload","args","reduce","acc","event","getRetentionDays","strapi","featureConfig","ee","features","get","licenseRetentionDays","options","retentionDays","userRetentionDays","config","createAuditLogsLifecycleService","state","auditLogsService","eventMap","processEvent","name","requestState","requestContext","isUsingAdminAuth","route","info","type","user","getPayload","ignoredUids","includes","uid","action","date","Date","toISOString","payload","userId","id","handleEvent","processedEvent","saveEvent","register","eeEnableUnsubscribe","eventHub","on","destroy","eeUpdateUnsubscribe","eeDisableUnsubscribe","isEnabled","eventHubUnsubscribe","subscribe","deleteExpiredJob","scheduleJob","expirationDate","now","deleteExpiredEvents","unsubscribe","cancel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lifecycles.mjs","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays < licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n\n strapi.cron.add({\n deleteExpiredAuditLogs: {\n task: async () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\n },\n options: '0 0 * * *',\n },\n });\n\n return this;\n },\n\n unsubscribe() {\n if (state.eeDisableUnsubscribe) {\n state.eeDisableUnsubscribe();\n }\n\n if (state.eventHubUnsubscribe) {\n state.eventHubUnsubscribe();\n }\n\n strapi.cron.remove('deleteExpiredAuditLogs');\n\n return this;\n },\n\n destroy() {\n return this.unsubscribe();\n },\n };\n};\n\nexport { createAuditLogsLifecycleService };\n"],"names":["DEFAULT_RETENTION_DAYS","defaultEvents","getEventMap","getDefaultPayload","args","reduce","acc","event","getRetentionDays","strapi","featureConfig","ee","features","get","licenseRetentionDays","options","retentionDays","userRetentionDays","config","createAuditLogsLifecycleService","state","auditLogsService","eventMap","processEvent","name","requestState","requestContext","isUsingAdminAuth","route","info","type","user","getPayload","ignoredUids","includes","uid","action","date","Date","toISOString","payload","userId","id","handleEvent","processedEvent","saveEvent","register","eeEnableUnsubscribe","eventHub","on","destroy","eeUpdateUnsubscribe","eeDisableUnsubscribe","isEnabled","eventHubUnsubscribe","subscribe","cron","add","deleteExpiredAuditLogs","task","expirationDate","now","deleteExpiredEvents","unsubscribe","remove"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sources":["../../../../../server/src/domain/user.ts"],"sourcesContent":["import constants from '../services/constants';\n\nimport type {\n AdminUser,\n AdminRole,\n AdminUserCreationPayload,\n} from '../../../shared/contracts/shared';\n\nconst { SUPER_ADMIN_CODE } = constants;\n\n/**\n * Create a new user model by merging default and specified attributes\n * @param attributes A partial user object\n */\nexport function createUser(attributes: Partial<AdminUserCreationPayload>) {\n return {\n roles: [],\n isActive: false,\n username: null,\n ...attributes,\n };\n}\n\nexport const hasSuperAdminRole = (user: AdminUser) => {\n return user.roles.filter((role: AdminRole) => role.code === SUPER_ADMIN_CODE).length > 0;\n};\n\nexport const ADMIN_USER_ALLOWED_FIELDS = ['id'
|
|
1
|
+
{"version":3,"file":"user.js","sources":["../../../../../server/src/domain/user.ts"],"sourcesContent":["import constants from '../services/constants';\n\nimport type {\n AdminUser,\n AdminRole,\n AdminUserCreationPayload,\n} from '../../../shared/contracts/shared';\n\nconst { SUPER_ADMIN_CODE } = constants;\n\n/**\n * Create a new user model by merging default and specified attributes\n * @param attributes A partial user object\n */\nexport function createUser(attributes: Partial<AdminUserCreationPayload>) {\n return {\n roles: [],\n isActive: false,\n username: null,\n ...attributes,\n };\n}\n\nexport const hasSuperAdminRole = (user: AdminUser) => {\n return user.roles.filter((role: AdminRole) => role.code === SUPER_ADMIN_CODE).length > 0;\n};\n\nexport const ADMIN_USER_ALLOWED_FIELDS = [\n 'id',\n 'firstname',\n 'lastname',\n 'username',\n 'email',\n 'isActive',\n];\n\nexport default {\n createUser,\n hasSuperAdminRole,\n ADMIN_USER_ALLOWED_FIELDS,\n};\n"],"names":["SUPER_ADMIN_CODE","constants","createUser","attributes","roles","isActive","username","hasSuperAdminRole","user","filter","role","code","length","ADMIN_USER_ALLOWED_FIELDS"],"mappings":";;;;AAQA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,SAAAA;AAE7B;;;IAIO,SAASC,UAAAA,CAAWC,UAA6C,EAAA;IACtE,OAAO;AACLC,QAAAA,KAAAA,EAAO,EAAE;QACTC,QAAU,EAAA,KAAA;QACVC,QAAU,EAAA,IAAA;AACV,QAAA,GAAGH;AACL,KAAA;AACF;AAEO,MAAMI,oBAAoB,CAACC,IAAAA,GAAAA;AAChC,IAAA,OAAOA,IAAKJ,CAAAA,KAAK,CAACK,MAAM,CAAC,CAACC,IAAoBA,GAAAA,IAAAA,CAAKC,IAAI,KAAKX,gBAAkBY,CAAAA,CAAAA,MAAM,GAAG,CAAA;AACzF;MAEaC,yBAA4B,GAAA;AACvC,IAAA,IAAA;AACA,IAAA,WAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.mjs","sources":["../../../../../server/src/domain/user.ts"],"sourcesContent":["import constants from '../services/constants';\n\nimport type {\n AdminUser,\n AdminRole,\n AdminUserCreationPayload,\n} from '../../../shared/contracts/shared';\n\nconst { SUPER_ADMIN_CODE } = constants;\n\n/**\n * Create a new user model by merging default and specified attributes\n * @param attributes A partial user object\n */\nexport function createUser(attributes: Partial<AdminUserCreationPayload>) {\n return {\n roles: [],\n isActive: false,\n username: null,\n ...attributes,\n };\n}\n\nexport const hasSuperAdminRole = (user: AdminUser) => {\n return user.roles.filter((role: AdminRole) => role.code === SUPER_ADMIN_CODE).length > 0;\n};\n\nexport const ADMIN_USER_ALLOWED_FIELDS = ['id'
|
|
1
|
+
{"version":3,"file":"user.mjs","sources":["../../../../../server/src/domain/user.ts"],"sourcesContent":["import constants from '../services/constants';\n\nimport type {\n AdminUser,\n AdminRole,\n AdminUserCreationPayload,\n} from '../../../shared/contracts/shared';\n\nconst { SUPER_ADMIN_CODE } = constants;\n\n/**\n * Create a new user model by merging default and specified attributes\n * @param attributes A partial user object\n */\nexport function createUser(attributes: Partial<AdminUserCreationPayload>) {\n return {\n roles: [],\n isActive: false,\n username: null,\n ...attributes,\n };\n}\n\nexport const hasSuperAdminRole = (user: AdminUser) => {\n return user.roles.filter((role: AdminRole) => role.code === SUPER_ADMIN_CODE).length > 0;\n};\n\nexport const ADMIN_USER_ALLOWED_FIELDS = [\n 'id',\n 'firstname',\n 'lastname',\n 'username',\n 'email',\n 'isActive',\n];\n\nexport default {\n createUser,\n hasSuperAdminRole,\n ADMIN_USER_ALLOWED_FIELDS,\n};\n"],"names":["SUPER_ADMIN_CODE","constants","createUser","attributes","roles","isActive","username","hasSuperAdminRole","user","filter","role","code","length","ADMIN_USER_ALLOWED_FIELDS"],"mappings":";;AAQA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,SAAAA;AAE7B;;;IAIO,SAASC,UAAAA,CAAWC,UAA6C,EAAA;IACtE,OAAO;AACLC,QAAAA,KAAAA,EAAO,EAAE;QACTC,QAAU,EAAA,KAAA;QACVC,QAAU,EAAA,IAAA;AACV,QAAA,GAAGH;AACL,KAAA;AACF;AAEO,MAAMI,oBAAoB,CAACC,IAAAA,GAAAA;AAChC,IAAA,OAAOA,IAAKJ,CAAAA,KAAK,CAACK,MAAM,CAAC,CAACC,IAAoBA,GAAAA,IAAAA,CAAKC,IAAI,KAAKX,gBAAkBY,CAAAA,CAAAA,MAAM,GAAG,CAAA;AACzF;MAEaC,yBAA4B,GAAA;AACvC,IAAA,IAAA;AACA,IAAA,WAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../server/src/domain/user.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EAET,wBAAwB,EACzB,MAAM,kCAAkC,CAAC;AAI1C;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,wBAAwB,CAAC;;;;;;;;;;;EAOvE;AAED,eAAO,MAAM,iBAAiB,SAAU,SAAS,YAEhD,CAAC;AAEF,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../server/src/domain/user.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EAET,wBAAwB,EACzB,MAAM,kCAAkC,CAAC;AAI1C;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,wBAAwB,CAAC;;;;;;;;;;;EAOvE;AAED,eAAO,MAAM,iBAAiB,SAAU,SAAS,YAEhD,CAAC;AAEF,eAAO,MAAM,yBAAyB,UAOrC,CAAC;;;;;;AAEF,wBAIE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/admin",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.20.0",
|
|
4
4
|
"description": "Strapi Admin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -86,10 +86,10 @@
|
|
|
86
86
|
"@reduxjs/toolkit": "1.9.7",
|
|
87
87
|
"@strapi/design-system": "2.0.0-rc.29",
|
|
88
88
|
"@strapi/icons": "2.0.0-rc.29",
|
|
89
|
-
"@strapi/permissions": "5.
|
|
90
|
-
"@strapi/types": "5.
|
|
91
|
-
"@strapi/typescript-utils": "5.
|
|
92
|
-
"@strapi/utils": "5.
|
|
89
|
+
"@strapi/permissions": "5.20.0",
|
|
90
|
+
"@strapi/types": "5.20.0",
|
|
91
|
+
"@strapi/typescript-utils": "5.20.0",
|
|
92
|
+
"@strapi/utils": "5.20.0",
|
|
93
93
|
"@testing-library/dom": "10.1.0",
|
|
94
94
|
"@testing-library/react": "15.0.7",
|
|
95
95
|
"@testing-library/user-event": "14.5.2",
|
|
@@ -118,7 +118,6 @@
|
|
|
118
118
|
"koa-static": "5.0.0",
|
|
119
119
|
"koa2-ratelimit": "^1.1.3",
|
|
120
120
|
"lodash": "4.17.21",
|
|
121
|
-
"node-schedule": "2.1.1",
|
|
122
121
|
"ora": "5.4.1",
|
|
123
122
|
"p-map": "4.0.0",
|
|
124
123
|
"passport-local": "1.0.0",
|
|
@@ -141,11 +140,11 @@
|
|
|
141
140
|
"typescript": "5.4.4",
|
|
142
141
|
"use-context-selector": "1.4.1",
|
|
143
142
|
"yup": "0.32.9",
|
|
144
|
-
"zod": "3.
|
|
143
|
+
"zod": "3.25.67"
|
|
145
144
|
},
|
|
146
145
|
"devDependencies": {
|
|
147
|
-
"@strapi/admin-test-utils": "5.
|
|
148
|
-
"@strapi/data-transfer": "5.
|
|
146
|
+
"@strapi/admin-test-utils": "5.20.0",
|
|
147
|
+
"@strapi/data-transfer": "5.20.0",
|
|
149
148
|
"@types/codemirror5": "npm:@types/codemirror@^5.60.15",
|
|
150
149
|
"@types/fs-extra": "11.0.4",
|
|
151
150
|
"@types/invariant": "2.2.36",
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
var designSystem = require('@strapi/design-system');
|
|
5
|
-
var icons = require('@strapi/icons');
|
|
6
|
-
var reactIntl = require('react-intl');
|
|
7
|
-
var reactRouterDom = require('react-router-dom');
|
|
8
|
-
var Tracking = require('../../features/Tracking.js');
|
|
9
|
-
var constants = require('./constants.js');
|
|
10
|
-
var Ornaments = require('./Ornaments.js');
|
|
11
|
-
var Provider = require('./Provider.js');
|
|
12
|
-
|
|
13
|
-
const GuidedTourHomepage = ()=>{
|
|
14
|
-
const guidedTourState = Provider.useGuidedTour('GuidedTourHomepage', (state)=>state.guidedTourState);
|
|
15
|
-
const setSkipped = Provider.useGuidedTour('GuidedTourHomepage', (state)=>state.setSkipped);
|
|
16
|
-
const { formatMessage } = reactIntl.useIntl();
|
|
17
|
-
const { trackUsage } = Tracking.useTracking();
|
|
18
|
-
const sections = Object.entries(constants.LAYOUT_DATA).map(([key, val])=>({
|
|
19
|
-
key: key,
|
|
20
|
-
title: val.home.title,
|
|
21
|
-
content: /*#__PURE__*/ jsxRuntime.jsx(designSystem.LinkButton, {
|
|
22
|
-
onClick: ()=>trackUsage(val.home.trackingEvent),
|
|
23
|
-
tag: reactRouterDom.NavLink,
|
|
24
|
-
to: val.home.cta.target,
|
|
25
|
-
endIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.ArrowRight, {}),
|
|
26
|
-
children: formatMessage(val.home.cta.title)
|
|
27
|
-
}),
|
|
28
|
-
isDone: Object.values(guidedTourState[key]).every((value)=>value === true)
|
|
29
|
-
}));
|
|
30
|
-
const activeSectionIndex = sections.findIndex((section)=>!section.isDone);
|
|
31
|
-
const handleSkip = ()=>{
|
|
32
|
-
setSkipped(true);
|
|
33
|
-
trackUsage('didSkipGuidedtour');
|
|
34
|
-
};
|
|
35
|
-
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
|
|
36
|
-
hasRadius: true,
|
|
37
|
-
shadow: "tableShadow",
|
|
38
|
-
paddingTop: 7,
|
|
39
|
-
paddingRight: 4,
|
|
40
|
-
paddingLeft: 7,
|
|
41
|
-
paddingBottom: 4,
|
|
42
|
-
background: "neutral0",
|
|
43
|
-
children: [
|
|
44
|
-
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
45
|
-
direction: "column",
|
|
46
|
-
alignItems: "stretch",
|
|
47
|
-
gap: 6,
|
|
48
|
-
children: [
|
|
49
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
50
|
-
variant: "beta",
|
|
51
|
-
tag: "h2",
|
|
52
|
-
children: formatMessage({
|
|
53
|
-
id: 'app.components.GuidedTour.title',
|
|
54
|
-
defaultMessage: '3 steps to get started'
|
|
55
|
-
})
|
|
56
|
-
}),
|
|
57
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
58
|
-
children: sections.map((section, index)=>{
|
|
59
|
-
const state = getState(activeSectionIndex, index);
|
|
60
|
-
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
|
|
61
|
-
children: [
|
|
62
|
-
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
63
|
-
children: [
|
|
64
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
65
|
-
minWidth: `3rem`,
|
|
66
|
-
marginRight: 5,
|
|
67
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(Ornaments.Number, {
|
|
68
|
-
state: state,
|
|
69
|
-
children: index + 1
|
|
70
|
-
})
|
|
71
|
-
}),
|
|
72
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
73
|
-
variant: "delta",
|
|
74
|
-
tag: "h3",
|
|
75
|
-
children: formatMessage(section.title)
|
|
76
|
-
})
|
|
77
|
-
]
|
|
78
|
-
}),
|
|
79
|
-
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
80
|
-
alignItems: "flex-start",
|
|
81
|
-
children: [
|
|
82
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
83
|
-
justifyContent: "center",
|
|
84
|
-
minWidth: `3rem`,
|
|
85
|
-
marginBottom: 3,
|
|
86
|
-
marginTop: 3,
|
|
87
|
-
marginRight: 5,
|
|
88
|
-
children: index === sections.length - 1 ? null : /*#__PURE__*/ jsxRuntime.jsx(Ornaments.VerticalDivider, {
|
|
89
|
-
state: state
|
|
90
|
-
})
|
|
91
|
-
}),
|
|
92
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
93
|
-
marginTop: 2,
|
|
94
|
-
children: state === constants.STATES.IS_ACTIVE ? section.content : null
|
|
95
|
-
})
|
|
96
|
-
]
|
|
97
|
-
})
|
|
98
|
-
]
|
|
99
|
-
}, section.key);
|
|
100
|
-
})
|
|
101
|
-
})
|
|
102
|
-
]
|
|
103
|
-
}),
|
|
104
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
105
|
-
justifyContent: "flex-end",
|
|
106
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
107
|
-
variant: "tertiary",
|
|
108
|
-
onClick: handleSkip,
|
|
109
|
-
children: formatMessage({
|
|
110
|
-
id: 'app.components.GuidedTour.skip',
|
|
111
|
-
defaultMessage: 'Skip the tour'
|
|
112
|
-
})
|
|
113
|
-
})
|
|
114
|
-
})
|
|
115
|
-
]
|
|
116
|
-
});
|
|
117
|
-
};
|
|
118
|
-
const getState = (activeSectionIndex, index)=>{
|
|
119
|
-
if (activeSectionIndex === -1) {
|
|
120
|
-
return constants.STATES.IS_DONE;
|
|
121
|
-
}
|
|
122
|
-
if (index < activeSectionIndex) {
|
|
123
|
-
return constants.STATES.IS_DONE;
|
|
124
|
-
}
|
|
125
|
-
if (index > activeSectionIndex) {
|
|
126
|
-
return constants.STATES.IS_NOT_DONE;
|
|
127
|
-
}
|
|
128
|
-
return constants.STATES.IS_ACTIVE;
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
exports.GuidedTourHomepage = GuidedTourHomepage;
|
|
132
|
-
//# sourceMappingURL=Homepage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Homepage.js","sources":["../../../../../../admin/src/components/GuidedTour/Homepage.tsx"],"sourcesContent":["import { Box, Button, Flex, Typography, LinkButton } from '@strapi/design-system';\nimport { ArrowRight } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useTracking } from '../../features/Tracking';\n\nimport { LAYOUT_DATA, States, STATES } from './constants';\nimport { Number, VerticalDivider } from './Ornaments';\nimport { GuidedTourContextValue, useGuidedTour } from './Provider';\n\ntype SectionName = keyof GuidedTourContextValue['guidedTourState'];\n\nconst GuidedTourHomepage = () => {\n const guidedTourState = useGuidedTour('GuidedTourHomepage', (state) => state.guidedTourState);\n const setSkipped = useGuidedTour('GuidedTourHomepage', (state) => state.setSkipped);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const sections = Object.entries(LAYOUT_DATA).map(([key, val]) => ({\n key: key,\n title: val.home.title,\n content: (\n <LinkButton\n onClick={() => trackUsage(val.home.trackingEvent)}\n tag={NavLink}\n to={val.home.cta.target}\n endIcon={<ArrowRight />}\n >\n {formatMessage(val.home.cta.title)}\n </LinkButton>\n ),\n isDone: Object.values(guidedTourState[key as SectionName]).every((value) => value === true),\n }));\n\n const activeSectionIndex = sections.findIndex((section) => !section.isDone);\n\n const handleSkip = () => {\n setSkipped(true);\n trackUsage('didSkipGuidedtour');\n };\n\n return (\n <Box\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={7}\n paddingRight={4}\n paddingLeft={7}\n paddingBottom={4}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Typography variant=\"beta\" tag=\"h2\">\n {formatMessage({\n id: 'app.components.GuidedTour.title',\n defaultMessage: '3 steps to get started',\n })}\n </Typography>\n <Box>\n {sections.map((section, index) => {\n const state = getState(activeSectionIndex, index);\n\n return (\n <Box key={section.key}>\n <Flex>\n <Box minWidth={`3rem`} marginRight={5}>\n <Number state={state}>{index + 1}</Number>\n </Box>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage(section.title)}\n </Typography>\n </Flex>\n <Flex alignItems=\"flex-start\">\n <Flex\n justifyContent=\"center\"\n minWidth={`3rem`}\n marginBottom={3}\n marginTop={3}\n marginRight={5}\n >\n {index === sections.length - 1 ? null : <VerticalDivider state={state} />}\n </Flex>\n <Box marginTop={2}>{state === STATES.IS_ACTIVE ? section.content : null}</Box>\n </Flex>\n </Box>\n );\n })}\n </Box>\n </Flex>\n <Flex justifyContent=\"flex-end\">\n <Button variant=\"tertiary\" onClick={handleSkip}>\n {formatMessage({ id: 'app.components.GuidedTour.skip', defaultMessage: 'Skip the tour' })}\n </Button>\n </Flex>\n </Box>\n );\n};\n\nconst getState = (activeSectionIndex: number, index: number): States => {\n if (activeSectionIndex === -1) {\n return STATES.IS_DONE;\n }\n if (index < activeSectionIndex) {\n return STATES.IS_DONE;\n }\n if (index > activeSectionIndex) {\n return STATES.IS_NOT_DONE;\n }\n return STATES.IS_ACTIVE;\n};\n\nexport { GuidedTourHomepage };\n"],"names":["GuidedTourHomepage","guidedTourState","useGuidedTour","state","setSkipped","formatMessage","useIntl","trackUsage","useTracking","sections","Object","entries","LAYOUT_DATA","map","key","val","title","home","content","_jsx","LinkButton","onClick","trackingEvent","tag","NavLink","to","cta","target","endIcon","ArrowRight","isDone","values","every","value","activeSectionIndex","findIndex","section","handleSkip","_jsxs","Box","hasRadius","shadow","paddingTop","paddingRight","paddingLeft","paddingBottom","background","Flex","direction","alignItems","gap","Typography","variant","id","defaultMessage","index","getState","minWidth","marginRight","Number","justifyContent","marginBottom","marginTop","length","VerticalDivider","STATES","IS_ACTIVE","Button","IS_DONE","IS_NOT_DONE"],"mappings":";;;;;;;;;;;;AAaA,MAAMA,kBAAqB,GAAA,IAAA;AACzB,IAAA,MAAMC,kBAAkBC,sBAAc,CAAA,oBAAA,EAAsB,CAACC,KAAAA,GAAUA,MAAMF,eAAe,CAAA;AAC5F,IAAA,MAAMG,aAAaF,sBAAc,CAAA,oBAAA,EAAsB,CAACC,KAAAA,GAAUA,MAAMC,UAAU,CAAA;IAClF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;AAEvB,IAAA,MAAMC,QAAWC,GAAAA,MAAAA,CAAOC,OAAO,CAACC,qBAAaC,CAAAA,CAAAA,GAAG,CAAC,CAAC,CAACC,GAAAA,EAAKC,GAAI,CAAA,IAAM;YAChED,GAAKA,EAAAA,GAAAA;YACLE,KAAOD,EAAAA,GAAAA,CAAIE,IAAI,CAACD,KAAK;AACrBE,YAAAA,OAAAA,gBACEC,cAACC,CAAAA,uBAAAA,EAAAA;AACCC,gBAAAA,OAAAA,EAAS,IAAMd,UAAAA,CAAWQ,GAAIE,CAAAA,IAAI,CAACK,aAAa,CAAA;gBAChDC,GAAKC,EAAAA,sBAAAA;AACLC,gBAAAA,EAAAA,EAAIV,GAAIE,CAAAA,IAAI,CAACS,GAAG,CAACC,MAAM;AACvBC,gBAAAA,OAAAA,gBAAST,cAACU,CAAAA,gBAAAA,EAAAA,EAAAA,CAAAA;AAETxB,gBAAAA,QAAAA,EAAAA,aAAAA,CAAcU,GAAIE,CAAAA,IAAI,CAACS,GAAG,CAACV,KAAK;;YAGrCc,MAAQpB,EAAAA,MAAAA,CAAOqB,MAAM,CAAC9B,eAAe,CAACa,GAAmB,CAAA,CAAA,CAAEkB,KAAK,CAAC,CAACC,KAAAA,GAAUA,KAAU,KAAA,IAAA;SACxF,CAAA,CAAA;IAEA,MAAMC,kBAAAA,GAAqBzB,SAAS0B,SAAS,CAAC,CAACC,OAAY,GAAA,CAACA,QAAQN,MAAM,CAAA;AAE1E,IAAA,MAAMO,UAAa,GAAA,IAAA;QACjBjC,UAAW,CAAA,IAAA,CAAA;QACXG,UAAW,CAAA,mBAAA,CAAA;AACb,KAAA;AAEA,IAAA,qBACE+B,eAACC,CAAAA,gBAAAA,EAAAA;QACCC,SAAS,EAAA,IAAA;QACTC,MAAO,EAAA,aAAA;QACPC,UAAY,EAAA,CAAA;QACZC,YAAc,EAAA,CAAA;QACdC,WAAa,EAAA,CAAA;QACbC,aAAe,EAAA,CAAA;QACfC,UAAW,EAAA,UAAA;;0BAEXR,eAACS,CAAAA,iBAAAA,EAAAA;gBAAKC,SAAU,EAAA,QAAA;gBAASC,UAAW,EAAA,SAAA;gBAAUC,GAAK,EAAA,CAAA;;kCACjD/B,cAACgC,CAAAA,uBAAAA,EAAAA;wBAAWC,OAAQ,EAAA,MAAA;wBAAO7B,GAAI,EAAA,IAAA;kCAC5BlB,aAAc,CAAA;4BACbgD,EAAI,EAAA,iCAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA;;kCAEFnC,cAACoB,CAAAA,gBAAAA,EAAAA;kCACE9B,QAASI,CAAAA,GAAG,CAAC,CAACuB,OAASmB,EAAAA,KAAAA,GAAAA;4BACtB,MAAMpD,KAAAA,GAAQqD,SAAStB,kBAAoBqB,EAAAA,KAAAA,CAAAA;AAE3C,4BAAA,qBACEjB,eAACC,CAAAA,gBAAAA,EAAAA;;kDACCD,eAACS,CAAAA,iBAAAA,EAAAA;;0DACC5B,cAACoB,CAAAA,gBAAAA,EAAAA;gDAAIkB,QAAU,EAAA,CAAC,IAAI,CAAC;gDAAEC,WAAa,EAAA,CAAA;AAClC,gDAAA,QAAA,gBAAAvC,cAACwC,CAAAA,gBAAAA,EAAAA;oDAAOxD,KAAOA,EAAAA,KAAAA;8DAAQoD,KAAQ,GAAA;;;0DAEjCpC,cAACgC,CAAAA,uBAAAA,EAAAA;gDAAWC,OAAQ,EAAA,OAAA;gDAAQ7B,GAAI,EAAA,IAAA;AAC7BlB,gDAAAA,QAAAA,EAAAA,aAAAA,CAAc+B,QAAQpB,KAAK;;;;kDAGhCsB,eAACS,CAAAA,iBAAAA,EAAAA;wCAAKE,UAAW,EAAA,YAAA;;0DACf9B,cAAC4B,CAAAA,iBAAAA,EAAAA;gDACCa,cAAe,EAAA,QAAA;gDACfH,QAAU,EAAA,CAAC,IAAI,CAAC;gDAChBI,YAAc,EAAA,CAAA;gDACdC,SAAW,EAAA,CAAA;gDACXJ,WAAa,EAAA,CAAA;AAEZH,gDAAAA,QAAAA,EAAAA,KAAAA,KAAU9C,QAASsD,CAAAA,MAAM,GAAG,CAAA,GAAI,qBAAO5C,cAAC6C,CAAAA,yBAAAA,EAAAA;oDAAgB7D,KAAOA,EAAAA;;;0DAElEgB,cAACoB,CAAAA,gBAAAA,EAAAA;gDAAIuB,SAAW,EAAA,CAAA;AAAI3D,gDAAAA,QAAAA,EAAAA,KAAAA,KAAU8D,gBAAOC,CAAAA,SAAS,GAAG9B,OAAAA,CAAQlB,OAAO,GAAG;;;;;AAnB7DkB,6BAAAA,EAAAA,OAAAA,CAAQtB,GAAG,CAAA;AAuBzB,yBAAA;;;;0BAGJK,cAAC4B,CAAAA,iBAAAA,EAAAA;gBAAKa,cAAe,EAAA,UAAA;AACnB,gBAAA,QAAA,gBAAAzC,cAACgD,CAAAA,mBAAAA,EAAAA;oBAAOf,OAAQ,EAAA,UAAA;oBAAW/B,OAASgB,EAAAA,UAAAA;8BACjChC,aAAc,CAAA;wBAAEgD,EAAI,EAAA,gCAAA;wBAAkCC,cAAgB,EAAA;AAAgB,qBAAA;;;;;AAKjG;AAEA,MAAME,QAAAA,GAAW,CAACtB,kBAA4BqB,EAAAA,KAAAA,GAAAA;IAC5C,IAAIrB,kBAAAA,KAAuB,CAAC,CAAG,EAAA;AAC7B,QAAA,OAAO+B,iBAAOG,OAAO;AACvB;AACA,IAAA,IAAIb,QAAQrB,kBAAoB,EAAA;AAC9B,QAAA,OAAO+B,iBAAOG,OAAO;AACvB;AACA,IAAA,IAAIb,QAAQrB,kBAAoB,EAAA;AAC9B,QAAA,OAAO+B,iBAAOI,WAAW;AAC3B;AACA,IAAA,OAAOJ,iBAAOC,SAAS;AACzB,CAAA;;;;"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { LinkButton, Box, Flex, Typography, Button } from '@strapi/design-system';
|
|
3
|
-
import { ArrowRight } from '@strapi/icons';
|
|
4
|
-
import { useIntl } from 'react-intl';
|
|
5
|
-
import { NavLink } from 'react-router-dom';
|
|
6
|
-
import { useTracking } from '../../features/Tracking.mjs';
|
|
7
|
-
import { LAYOUT_DATA, STATES } from './constants.mjs';
|
|
8
|
-
import { Number, VerticalDivider } from './Ornaments.mjs';
|
|
9
|
-
import { useGuidedTour } from './Provider.mjs';
|
|
10
|
-
|
|
11
|
-
const GuidedTourHomepage = ()=>{
|
|
12
|
-
const guidedTourState = useGuidedTour('GuidedTourHomepage', (state)=>state.guidedTourState);
|
|
13
|
-
const setSkipped = useGuidedTour('GuidedTourHomepage', (state)=>state.setSkipped);
|
|
14
|
-
const { formatMessage } = useIntl();
|
|
15
|
-
const { trackUsage } = useTracking();
|
|
16
|
-
const sections = Object.entries(LAYOUT_DATA).map(([key, val])=>({
|
|
17
|
-
key: key,
|
|
18
|
-
title: val.home.title,
|
|
19
|
-
content: /*#__PURE__*/ jsx(LinkButton, {
|
|
20
|
-
onClick: ()=>trackUsage(val.home.trackingEvent),
|
|
21
|
-
tag: NavLink,
|
|
22
|
-
to: val.home.cta.target,
|
|
23
|
-
endIcon: /*#__PURE__*/ jsx(ArrowRight, {}),
|
|
24
|
-
children: formatMessage(val.home.cta.title)
|
|
25
|
-
}),
|
|
26
|
-
isDone: Object.values(guidedTourState[key]).every((value)=>value === true)
|
|
27
|
-
}));
|
|
28
|
-
const activeSectionIndex = sections.findIndex((section)=>!section.isDone);
|
|
29
|
-
const handleSkip = ()=>{
|
|
30
|
-
setSkipped(true);
|
|
31
|
-
trackUsage('didSkipGuidedtour');
|
|
32
|
-
};
|
|
33
|
-
return /*#__PURE__*/ jsxs(Box, {
|
|
34
|
-
hasRadius: true,
|
|
35
|
-
shadow: "tableShadow",
|
|
36
|
-
paddingTop: 7,
|
|
37
|
-
paddingRight: 4,
|
|
38
|
-
paddingLeft: 7,
|
|
39
|
-
paddingBottom: 4,
|
|
40
|
-
background: "neutral0",
|
|
41
|
-
children: [
|
|
42
|
-
/*#__PURE__*/ jsxs(Flex, {
|
|
43
|
-
direction: "column",
|
|
44
|
-
alignItems: "stretch",
|
|
45
|
-
gap: 6,
|
|
46
|
-
children: [
|
|
47
|
-
/*#__PURE__*/ jsx(Typography, {
|
|
48
|
-
variant: "beta",
|
|
49
|
-
tag: "h2",
|
|
50
|
-
children: formatMessage({
|
|
51
|
-
id: 'app.components.GuidedTour.title',
|
|
52
|
-
defaultMessage: '3 steps to get started'
|
|
53
|
-
})
|
|
54
|
-
}),
|
|
55
|
-
/*#__PURE__*/ jsx(Box, {
|
|
56
|
-
children: sections.map((section, index)=>{
|
|
57
|
-
const state = getState(activeSectionIndex, index);
|
|
58
|
-
return /*#__PURE__*/ jsxs(Box, {
|
|
59
|
-
children: [
|
|
60
|
-
/*#__PURE__*/ jsxs(Flex, {
|
|
61
|
-
children: [
|
|
62
|
-
/*#__PURE__*/ jsx(Box, {
|
|
63
|
-
minWidth: `3rem`,
|
|
64
|
-
marginRight: 5,
|
|
65
|
-
children: /*#__PURE__*/ jsx(Number, {
|
|
66
|
-
state: state,
|
|
67
|
-
children: index + 1
|
|
68
|
-
})
|
|
69
|
-
}),
|
|
70
|
-
/*#__PURE__*/ jsx(Typography, {
|
|
71
|
-
variant: "delta",
|
|
72
|
-
tag: "h3",
|
|
73
|
-
children: formatMessage(section.title)
|
|
74
|
-
})
|
|
75
|
-
]
|
|
76
|
-
}),
|
|
77
|
-
/*#__PURE__*/ jsxs(Flex, {
|
|
78
|
-
alignItems: "flex-start",
|
|
79
|
-
children: [
|
|
80
|
-
/*#__PURE__*/ jsx(Flex, {
|
|
81
|
-
justifyContent: "center",
|
|
82
|
-
minWidth: `3rem`,
|
|
83
|
-
marginBottom: 3,
|
|
84
|
-
marginTop: 3,
|
|
85
|
-
marginRight: 5,
|
|
86
|
-
children: index === sections.length - 1 ? null : /*#__PURE__*/ jsx(VerticalDivider, {
|
|
87
|
-
state: state
|
|
88
|
-
})
|
|
89
|
-
}),
|
|
90
|
-
/*#__PURE__*/ jsx(Box, {
|
|
91
|
-
marginTop: 2,
|
|
92
|
-
children: state === STATES.IS_ACTIVE ? section.content : null
|
|
93
|
-
})
|
|
94
|
-
]
|
|
95
|
-
})
|
|
96
|
-
]
|
|
97
|
-
}, section.key);
|
|
98
|
-
})
|
|
99
|
-
})
|
|
100
|
-
]
|
|
101
|
-
}),
|
|
102
|
-
/*#__PURE__*/ jsx(Flex, {
|
|
103
|
-
justifyContent: "flex-end",
|
|
104
|
-
children: /*#__PURE__*/ jsx(Button, {
|
|
105
|
-
variant: "tertiary",
|
|
106
|
-
onClick: handleSkip,
|
|
107
|
-
children: formatMessage({
|
|
108
|
-
id: 'app.components.GuidedTour.skip',
|
|
109
|
-
defaultMessage: 'Skip the tour'
|
|
110
|
-
})
|
|
111
|
-
})
|
|
112
|
-
})
|
|
113
|
-
]
|
|
114
|
-
});
|
|
115
|
-
};
|
|
116
|
-
const getState = (activeSectionIndex, index)=>{
|
|
117
|
-
if (activeSectionIndex === -1) {
|
|
118
|
-
return STATES.IS_DONE;
|
|
119
|
-
}
|
|
120
|
-
if (index < activeSectionIndex) {
|
|
121
|
-
return STATES.IS_DONE;
|
|
122
|
-
}
|
|
123
|
-
if (index > activeSectionIndex) {
|
|
124
|
-
return STATES.IS_NOT_DONE;
|
|
125
|
-
}
|
|
126
|
-
return STATES.IS_ACTIVE;
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
export { GuidedTourHomepage };
|
|
130
|
-
//# sourceMappingURL=Homepage.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Homepage.mjs","sources":["../../../../../../admin/src/components/GuidedTour/Homepage.tsx"],"sourcesContent":["import { Box, Button, Flex, Typography, LinkButton } from '@strapi/design-system';\nimport { ArrowRight } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { NavLink } from 'react-router-dom';\n\nimport { useTracking } from '../../features/Tracking';\n\nimport { LAYOUT_DATA, States, STATES } from './constants';\nimport { Number, VerticalDivider } from './Ornaments';\nimport { GuidedTourContextValue, useGuidedTour } from './Provider';\n\ntype SectionName = keyof GuidedTourContextValue['guidedTourState'];\n\nconst GuidedTourHomepage = () => {\n const guidedTourState = useGuidedTour('GuidedTourHomepage', (state) => state.guidedTourState);\n const setSkipped = useGuidedTour('GuidedTourHomepage', (state) => state.setSkipped);\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const sections = Object.entries(LAYOUT_DATA).map(([key, val]) => ({\n key: key,\n title: val.home.title,\n content: (\n <LinkButton\n onClick={() => trackUsage(val.home.trackingEvent)}\n tag={NavLink}\n to={val.home.cta.target}\n endIcon={<ArrowRight />}\n >\n {formatMessage(val.home.cta.title)}\n </LinkButton>\n ),\n isDone: Object.values(guidedTourState[key as SectionName]).every((value) => value === true),\n }));\n\n const activeSectionIndex = sections.findIndex((section) => !section.isDone);\n\n const handleSkip = () => {\n setSkipped(true);\n trackUsage('didSkipGuidedtour');\n };\n\n return (\n <Box\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={7}\n paddingRight={4}\n paddingLeft={7}\n paddingBottom={4}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Typography variant=\"beta\" tag=\"h2\">\n {formatMessage({\n id: 'app.components.GuidedTour.title',\n defaultMessage: '3 steps to get started',\n })}\n </Typography>\n <Box>\n {sections.map((section, index) => {\n const state = getState(activeSectionIndex, index);\n\n return (\n <Box key={section.key}>\n <Flex>\n <Box minWidth={`3rem`} marginRight={5}>\n <Number state={state}>{index + 1}</Number>\n </Box>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage(section.title)}\n </Typography>\n </Flex>\n <Flex alignItems=\"flex-start\">\n <Flex\n justifyContent=\"center\"\n minWidth={`3rem`}\n marginBottom={3}\n marginTop={3}\n marginRight={5}\n >\n {index === sections.length - 1 ? null : <VerticalDivider state={state} />}\n </Flex>\n <Box marginTop={2}>{state === STATES.IS_ACTIVE ? section.content : null}</Box>\n </Flex>\n </Box>\n );\n })}\n </Box>\n </Flex>\n <Flex justifyContent=\"flex-end\">\n <Button variant=\"tertiary\" onClick={handleSkip}>\n {formatMessage({ id: 'app.components.GuidedTour.skip', defaultMessage: 'Skip the tour' })}\n </Button>\n </Flex>\n </Box>\n );\n};\n\nconst getState = (activeSectionIndex: number, index: number): States => {\n if (activeSectionIndex === -1) {\n return STATES.IS_DONE;\n }\n if (index < activeSectionIndex) {\n return STATES.IS_DONE;\n }\n if (index > activeSectionIndex) {\n return STATES.IS_NOT_DONE;\n }\n return STATES.IS_ACTIVE;\n};\n\nexport { GuidedTourHomepage };\n"],"names":["GuidedTourHomepage","guidedTourState","useGuidedTour","state","setSkipped","formatMessage","useIntl","trackUsage","useTracking","sections","Object","entries","LAYOUT_DATA","map","key","val","title","home","content","_jsx","LinkButton","onClick","trackingEvent","tag","NavLink","to","cta","target","endIcon","ArrowRight","isDone","values","every","value","activeSectionIndex","findIndex","section","handleSkip","_jsxs","Box","hasRadius","shadow","paddingTop","paddingRight","paddingLeft","paddingBottom","background","Flex","direction","alignItems","gap","Typography","variant","id","defaultMessage","index","getState","minWidth","marginRight","Number","justifyContent","marginBottom","marginTop","length","VerticalDivider","STATES","IS_ACTIVE","Button","IS_DONE","IS_NOT_DONE"],"mappings":"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"}
|