@strapi/admin 5.54.0 → 5.55.1
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/LanguageProvider.js +35 -1
- package/dist/admin/admin/src/components/LanguageProvider.js.map +1 -1
- package/dist/admin/admin/src/components/LanguageProvider.mjs +17 -2
- package/dist/admin/admin/src/components/LanguageProvider.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +113 -35
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +115 -37
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNavFolder.js +188 -0
- package/dist/admin/admin/src/components/SubNavFolder.js.map +1 -0
- package/dist/admin/admin/src/components/SubNavFolder.mjs +186 -0
- package/dist/admin/admin/src/components/SubNavFolder.mjs.map +1 -0
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +1 -1
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +1 -1
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +4 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +4 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useAIAvailability.js +1 -6
- package/dist/admin/ee/admin/src/hooks/useAIAvailability.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs +1 -6
- package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +7 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +7 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +5 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +5 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +0 -4
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +0 -4
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
- package/dist/admin/src/components/SubNav.d.ts +27 -8
- package/dist/admin/src/components/SubNavFolder.d.ts +15 -0
- package/dist/admin/src/features/Tracking.d.ts +2 -1
- package/dist/admin/src/services/admin.d.ts +1 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +4 -0
- package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js +1 -5
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +1 -5
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +2 -0
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +2 -0
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.js +3 -3
- package/dist/server/server/src/ai/controllers/ai.js.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.mjs +3 -3
- package/dist/server/server/src/ai/controllers/ai.mjs.map +1 -1
- package/dist/server/server/src/ai/services/ai.js +37 -12
- package/dist/server/server/src/ai/services/ai.js.map +1 -1
- package/dist/server/server/src/ai/services/ai.mjs +37 -12
- package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/tokens.js +106 -0
- package/dist/server/server/src/audit-logs/tokens.js.map +1 -0
- package/dist/server/server/src/audit-logs/tokens.mjs +99 -0
- package/dist/server/server/src/audit-logs/tokens.mjs.map +1 -0
- package/dist/server/server/src/controllers/admin.js +10 -1
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +10 -1
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +106 -4
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +107 -5
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/token.js +56 -4
- package/dist/server/server/src/services/transfer/token.js.map +1 -1
- package/dist/server/server/src/services/transfer/token.mjs +57 -5
- package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
- package/dist/server/src/ai/services/ai.d.ts +3 -1
- package/dist/server/src/ai/services/ai.d.ts.map +1 -1
- package/dist/server/src/audit-logs/tokens.d.ts +86 -0
- package/dist/server/src/audit-logs/tokens.d.ts.map +1 -0
- package/dist/server/src/controllers/admin.d.ts +1 -0
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +1 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/api-token.d.ts.map +1 -1
- package/dist/server/src/services/transfer/token.d.ts.map +1 -1
- package/dist/shared/contracts/admin.d.ts +1 -0
- package/dist/shared/contracts/admin.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
const useAIAvailability = ()=>
|
|
2
|
-
const isAiEnabled = window.strapi.ai?.enabled !== false;
|
|
3
|
-
const isEE = window.strapi?.isEE;
|
|
4
|
-
const isAiFeatureEnabled = window.strapi.features.isEnabled('cms-ai');
|
|
5
|
-
return !!isEE && isAiEnabled && isAiFeatureEnabled;
|
|
6
|
-
};
|
|
1
|
+
const useAIAvailability = ()=>window.strapi?.isEE === true && window.strapi.ai?.enabled === true;
|
|
7
2
|
|
|
8
3
|
export { useAIAvailability };
|
|
9
4
|
//# sourceMappingURL=useAIAvailability.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAIAvailability.mjs","sources":["../../../../../../ee/admin/src/hooks/useAIAvailability.ts"],"sourcesContent":["export const useAIAvailability = (): boolean
|
|
1
|
+
{"version":3,"file":"useAIAvailability.mjs","sources":["../../../../../../ee/admin/src/hooks/useAIAvailability.ts"],"sourcesContent":["export const useAIAvailability = (): boolean =>\n window.strapi?.isEE === true && window.strapi.ai?.enabled === true;\n"],"names":["useAIAvailability","window","strapi","isEE","ai","enabled"],"mappings":"AAAO,MAAMA,iBAAAA,GAAoB,IAC/BC,MAAAA,CAAOC,MAAM,EAAEC,IAAAA,KAAS,IAAA,IAAQF,MAAAA,CAAOC,MAAM,CAACE,EAAE,EAAEC,YAAY;;;;"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js
CHANGED
|
@@ -4,6 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
4
4
|
var designSystem = require('@strapi/design-system');
|
|
5
5
|
var reactIntl = require('react-intl');
|
|
6
6
|
var styledComponents = require('styled-components');
|
|
7
|
+
var useAIAvailability = require('../../../../../hooks/useAIAvailability.js');
|
|
7
8
|
var ai = require('../../../../../services/ai.js');
|
|
8
9
|
|
|
9
10
|
const StyledProgressBar = styledComponents.styled(designSystem.ProgressBar)`
|
|
@@ -20,9 +21,14 @@ const StyledGridItem = styledComponents.styled(designSystem.Grid.Item)`
|
|
|
20
21
|
`;
|
|
21
22
|
const AIUsage = ()=>{
|
|
22
23
|
const { formatMessage } = reactIntl.useIntl();
|
|
24
|
+
const isAIAvailable = useAIAvailability.useAIAvailability();
|
|
23
25
|
const { data, isLoading, error } = ai.useGetAiUsageQuery(undefined, {
|
|
24
|
-
refetchOnMountOrArgChange: true
|
|
26
|
+
refetchOnMountOrArgChange: true,
|
|
27
|
+
skip: !isAIAvailable
|
|
25
28
|
});
|
|
29
|
+
if (!isAIAvailable) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
26
32
|
if (isLoading) {
|
|
27
33
|
return null;
|
|
28
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIUsage.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.tsx"],"sourcesContent":["import { Flex, Typography, Grid, ProgressBar } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useGetAiUsageQuery } from '../../../../../services/ai';\n\nconst StyledProgressBar = styled(ProgressBar)`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.neutral200};\n > div {\n background-color: ${({ theme }) => theme.colors.neutral700};\n }\n`;\n\nconst StyledGridItem = styled(Grid.Item)`\n ${({ theme }) => theme.breakpoints.large} {\n grid-column: 7 / 13;\n }\n`;\n\nexport const AIUsage = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetAiUsageQuery(undefined, {\n refetchOnMountOrArgChange: true,\n });\n\n if (isLoading) {\n return null;\n }\n\n if (error || !data) {\n return null;\n }\n\n if (!data.subscription?.cmsAiEnabled) {\n return null;\n }\n\n // Calculate remaining credits and total\n const totalCredits = data.subscription.cmsAiCreditsBase;\n const usedCredits = data.cmsAiCreditsUsed;\n const maxCredits = data.subscription.cmsAiCreditsMaxUsage;\n const overage = usedCredits - totalCredits;\n const percentRemaining = (usedCredits / totalCredits) * 100;\n const percentOverage = (usedCredits / maxCredits) * 100;\n\n const isInOverages = overage > 0 && maxCredits !== totalCredits;\n\n return (\n <StyledGridItem col={6} s={12} direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.ai-usage',\n defaultMessage: 'AI Usage',\n })}\n </Typography>\n <Flex gap={2} direction=\"column\" alignItems=\"flex-start\">\n {!isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentRemaining} size=\"M\" />\n </Flex>\n <Typography variant=\"omega\">\n {`${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n {isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentOverage} size=\"M\" color=\"danger\" />\n </Flex>\n <Typography variant=\"omega\" textColor=\"danger600\">\n {`${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n </Flex>\n </StyledGridItem>\n );\n};\n"],"names":["StyledProgressBar","styled","ProgressBar","theme","colors","neutral200","neutral700","StyledGridItem","Grid","Item","breakpoints","large","AIUsage","formatMessage","useIntl","data","isLoading","error","useGetAiUsageQuery","undefined","refetchOnMountOrArgChange","subscription","cmsAiEnabled","totalCredits","cmsAiCreditsBase","usedCredits","cmsAiCreditsUsed","maxCredits","cmsAiCreditsMaxUsage","overage","percentRemaining","percentOverage","isInOverages","_jsxs","col","s","direction","alignItems","gap","_jsx","Typography","variant","textColor","id","defaultMessage","Flex","_Fragment","width","value","size","toFixed","color"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AIUsage.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.tsx"],"sourcesContent":["import { Flex, Typography, Grid, ProgressBar } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useAIAvailability } from '../../../../../hooks/useAIAvailability';\nimport { useGetAiUsageQuery } from '../../../../../services/ai';\n\nconst StyledProgressBar = styled(ProgressBar)`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.neutral200};\n > div {\n background-color: ${({ theme }) => theme.colors.neutral700};\n }\n`;\n\nconst StyledGridItem = styled(Grid.Item)`\n ${({ theme }) => theme.breakpoints.large} {\n grid-column: 7 / 13;\n }\n`;\n\nexport const AIUsage = () => {\n const { formatMessage } = useIntl();\n const isAIAvailable = useAIAvailability();\n const { data, isLoading, error } = useGetAiUsageQuery(undefined, {\n refetchOnMountOrArgChange: true,\n skip: !isAIAvailable,\n });\n\n if (!isAIAvailable) {\n return null;\n }\n\n if (isLoading) {\n return null;\n }\n\n if (error || !data) {\n return null;\n }\n\n if (!data.subscription?.cmsAiEnabled) {\n return null;\n }\n\n // Calculate remaining credits and total\n const totalCredits = data.subscription.cmsAiCreditsBase;\n const usedCredits = data.cmsAiCreditsUsed;\n const maxCredits = data.subscription.cmsAiCreditsMaxUsage;\n const overage = usedCredits - totalCredits;\n const percentRemaining = (usedCredits / totalCredits) * 100;\n const percentOverage = (usedCredits / maxCredits) * 100;\n\n const isInOverages = overage > 0 && maxCredits !== totalCredits;\n\n return (\n <StyledGridItem col={6} s={12} direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.ai-usage',\n defaultMessage: 'AI Usage',\n })}\n </Typography>\n <Flex gap={2} direction=\"column\" alignItems=\"flex-start\">\n {!isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentRemaining} size=\"M\" />\n </Flex>\n <Typography variant=\"omega\">\n {`${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n {isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentOverage} size=\"M\" color=\"danger\" />\n </Flex>\n <Typography variant=\"omega\" textColor=\"danger600\">\n {`${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n </Flex>\n </StyledGridItem>\n );\n};\n"],"names":["StyledProgressBar","styled","ProgressBar","theme","colors","neutral200","neutral700","StyledGridItem","Grid","Item","breakpoints","large","AIUsage","formatMessage","useIntl","isAIAvailable","useAIAvailability","data","isLoading","error","useGetAiUsageQuery","undefined","refetchOnMountOrArgChange","skip","subscription","cmsAiEnabled","totalCredits","cmsAiCreditsBase","usedCredits","cmsAiCreditsUsed","maxCredits","cmsAiCreditsMaxUsage","overage","percentRemaining","percentOverage","isInOverages","_jsxs","col","s","direction","alignItems","gap","_jsx","Typography","variant","textColor","id","defaultMessage","Flex","_Fragment","width","value","size","toFixed","color"],"mappings":"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"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs
CHANGED
|
@@ -2,6 +2,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
|
2
2
|
import { Typography, Flex, Grid, ProgressBar } from '@strapi/design-system';
|
|
3
3
|
import { useIntl } from 'react-intl';
|
|
4
4
|
import { styled } from 'styled-components';
|
|
5
|
+
import { useAIAvailability } from '../../../../../hooks/useAIAvailability.mjs';
|
|
5
6
|
import { useGetAiUsageQuery } from '../../../../../services/ai.mjs';
|
|
6
7
|
|
|
7
8
|
const StyledProgressBar = styled(ProgressBar)`
|
|
@@ -18,9 +19,14 @@ const StyledGridItem = styled(Grid.Item)`
|
|
|
18
19
|
`;
|
|
19
20
|
const AIUsage = ()=>{
|
|
20
21
|
const { formatMessage } = useIntl();
|
|
22
|
+
const isAIAvailable = useAIAvailability();
|
|
21
23
|
const { data, isLoading, error } = useGetAiUsageQuery(undefined, {
|
|
22
|
-
refetchOnMountOrArgChange: true
|
|
24
|
+
refetchOnMountOrArgChange: true,
|
|
25
|
+
skip: !isAIAvailable
|
|
23
26
|
});
|
|
27
|
+
if (!isAIAvailable) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
24
30
|
if (isLoading) {
|
|
25
31
|
return null;
|
|
26
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIUsage.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.tsx"],"sourcesContent":["import { Flex, Typography, Grid, ProgressBar } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useGetAiUsageQuery } from '../../../../../services/ai';\n\nconst StyledProgressBar = styled(ProgressBar)`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.neutral200};\n > div {\n background-color: ${({ theme }) => theme.colors.neutral700};\n }\n`;\n\nconst StyledGridItem = styled(Grid.Item)`\n ${({ theme }) => theme.breakpoints.large} {\n grid-column: 7 / 13;\n }\n`;\n\nexport const AIUsage = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetAiUsageQuery(undefined, {\n refetchOnMountOrArgChange: true,\n });\n\n if (isLoading) {\n return null;\n }\n\n if (error || !data) {\n return null;\n }\n\n if (!data.subscription?.cmsAiEnabled) {\n return null;\n }\n\n // Calculate remaining credits and total\n const totalCredits = data.subscription.cmsAiCreditsBase;\n const usedCredits = data.cmsAiCreditsUsed;\n const maxCredits = data.subscription.cmsAiCreditsMaxUsage;\n const overage = usedCredits - totalCredits;\n const percentRemaining = (usedCredits / totalCredits) * 100;\n const percentOverage = (usedCredits / maxCredits) * 100;\n\n const isInOverages = overage > 0 && maxCredits !== totalCredits;\n\n return (\n <StyledGridItem col={6} s={12} direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.ai-usage',\n defaultMessage: 'AI Usage',\n })}\n </Typography>\n <Flex gap={2} direction=\"column\" alignItems=\"flex-start\">\n {!isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentRemaining} size=\"M\" />\n </Flex>\n <Typography variant=\"omega\">\n {`${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n {isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentOverage} size=\"M\" color=\"danger\" />\n </Flex>\n <Typography variant=\"omega\" textColor=\"danger600\">\n {`${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n </Flex>\n </StyledGridItem>\n );\n};\n"],"names":["StyledProgressBar","styled","ProgressBar","theme","colors","neutral200","neutral700","StyledGridItem","Grid","Item","breakpoints","large","AIUsage","formatMessage","useIntl","data","isLoading","error","useGetAiUsageQuery","undefined","refetchOnMountOrArgChange","subscription","cmsAiEnabled","totalCredits","cmsAiCreditsBase","usedCredits","cmsAiCreditsUsed","maxCredits","cmsAiCreditsMaxUsage","overage","percentRemaining","percentOverage","isInOverages","_jsxs","col","s","direction","alignItems","gap","_jsx","Typography","variant","textColor","id","defaultMessage","Flex","_Fragment","width","value","size","toFixed","color"],"mappings":"
|
|
1
|
+
{"version":3,"file":"AIUsage.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.tsx"],"sourcesContent":["import { Flex, Typography, Grid, ProgressBar } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useAIAvailability } from '../../../../../hooks/useAIAvailability';\nimport { useGetAiUsageQuery } from '../../../../../services/ai';\n\nconst StyledProgressBar = styled(ProgressBar)`\n width: 100%;\n background-color: ${({ theme }) => theme.colors.neutral200};\n > div {\n background-color: ${({ theme }) => theme.colors.neutral700};\n }\n`;\n\nconst StyledGridItem = styled(Grid.Item)`\n ${({ theme }) => theme.breakpoints.large} {\n grid-column: 7 / 13;\n }\n`;\n\nexport const AIUsage = () => {\n const { formatMessage } = useIntl();\n const isAIAvailable = useAIAvailability();\n const { data, isLoading, error } = useGetAiUsageQuery(undefined, {\n refetchOnMountOrArgChange: true,\n skip: !isAIAvailable,\n });\n\n if (!isAIAvailable) {\n return null;\n }\n\n if (isLoading) {\n return null;\n }\n\n if (error || !data) {\n return null;\n }\n\n if (!data.subscription?.cmsAiEnabled) {\n return null;\n }\n\n // Calculate remaining credits and total\n const totalCredits = data.subscription.cmsAiCreditsBase;\n const usedCredits = data.cmsAiCreditsUsed;\n const maxCredits = data.subscription.cmsAiCreditsMaxUsage;\n const overage = usedCredits - totalCredits;\n const percentRemaining = (usedCredits / totalCredits) * 100;\n const percentOverage = (usedCredits / maxCredits) * 100;\n\n const isInOverages = overage > 0 && maxCredits !== totalCredits;\n\n return (\n <StyledGridItem col={6} s={12} direction=\"column\" alignItems=\"start\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.application.ai-usage',\n defaultMessage: 'AI Usage',\n })}\n </Typography>\n <Flex gap={2} direction=\"column\" alignItems=\"flex-start\">\n {!isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentRemaining} size=\"M\" />\n </Flex>\n <Typography variant=\"omega\">\n {`${usedCredits.toFixed(2)} credits used from ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n {isInOverages && (\n <>\n <Flex width=\"100%\">\n <StyledProgressBar value={percentOverage} size=\"M\" color=\"danger\" />\n </Flex>\n <Typography variant=\"omega\" textColor=\"danger600\">\n {`${overage.toFixed(2)} credits used above the ${totalCredits} credits available in your plan`}\n </Typography>\n </>\n )}\n </Flex>\n </StyledGridItem>\n );\n};\n"],"names":["StyledProgressBar","styled","ProgressBar","theme","colors","neutral200","neutral700","StyledGridItem","Grid","Item","breakpoints","large","AIUsage","formatMessage","useIntl","isAIAvailable","useAIAvailability","data","isLoading","error","useGetAiUsageQuery","undefined","refetchOnMountOrArgChange","skip","subscription","cmsAiEnabled","totalCredits","cmsAiCreditsBase","usedCredits","cmsAiCreditsUsed","maxCredits","cmsAiCreditsMaxUsage","overage","percentRemaining","percentOverage","isInOverages","_jsxs","col","s","direction","alignItems","gap","_jsx","Typography","variant","textColor","id","defaultMessage","Flex","_Fragment","width","value","size","toFixed","color"],"mappings":"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"}
|
|
@@ -41,7 +41,11 @@ const actionTypes = {
|
|
|
41
41
|
'locale.create': 'Create locale',
|
|
42
42
|
'locale.update': 'Update locale',
|
|
43
43
|
'locale.delete': 'Delete locale',
|
|
44
|
-
'locale.default.update': 'Change default locale'
|
|
44
|
+
'locale.default.update': 'Change default locale',
|
|
45
|
+
'token.create': 'Create token',
|
|
46
|
+
'token.update': 'Update token',
|
|
47
|
+
'token.delete': 'Delete token',
|
|
48
|
+
'token.regenerate': 'Regenerate token'
|
|
45
49
|
};
|
|
46
50
|
const getDefaultMessage = (value)=>{
|
|
47
51
|
return actionTypes[value] || value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getActionTypesDefaultMessages.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.ts"],"sourcesContent":["export const actionTypes = {\n 'entry.create': 'Create entry{model, select, undefined {} other { ({model})}}',\n 'entry.update': 'Update entry{model, select, undefined {} other { ({model})}}',\n 'entry.delete': 'Delete entry{model, select, undefined {} other { ({model})}}',\n 'entry.publish': 'Publish entry{model, select, undefined {} other { ({model})}}',\n 'entry.unpublish': 'Unpublish entry{model, select, undefined {} other { ({model})}}',\n 'media.create': 'Create media',\n 'media.update': 'Update media',\n 'media.delete': 'Delete media',\n 'media-folder.create': 'Create media folder',\n 'media-folder.update': 'Update media folder',\n 'media-folder.delete': 'Delete media folder',\n 'user.create': 'Create user',\n 'user.update': 'Update user',\n 'user.delete': 'Delete user',\n 'admin.auth.success': 'Admin login',\n 'admin.logout': 'Admin logout',\n 'content-type.create': 'Create content type',\n 'content-type.update': 'Update content type',\n 'content-type.delete': 'Delete content type',\n 'component.create': 'Create component',\n 'component.update': 'Update component',\n 'component.delete': 'Delete component',\n 'role.create': 'Create role',\n 'role.update': 'Update role',\n 'role.delete': 'Delete role',\n 'permission.create': 'Create permission',\n 'permission.update': 'Update permission',\n 'permission.delete': 'Delete permission',\n 'release.create': 'Create release',\n 'release.update': 'Update release',\n 'release.delete': 'Delete release',\n 'release.trigger': 'Trigger release',\n 'release.entry.add': 'Add entry to release',\n 'release.entry.update': 'Change entry on release',\n 'release.entry.remove': 'Remove entry from release',\n 'release.settings.update': 'Update release settings',\n 'audit-log.export': 'Export audit logs',\n 'locale.create': 'Create locale',\n 'locale.update': 'Update locale',\n 'locale.delete': 'Delete locale',\n 'locale.default.update': 'Change default locale',\n};\n\nexport const getDefaultMessage = (value: keyof typeof actionTypes) => {\n return actionTypes[value] || value;\n};\n"],"names":["actionTypes","getDefaultMessage","value"],"mappings":";;MAAaA,WAAAA,GAAc;IACzB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,eAAA,EAAiB,+DAAA;IACjB,iBAAA,EAAmB,iEAAA;IACnB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,oBAAA,EAAsB,aAAA;IACtB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,iBAAA,EAAmB,iBAAA;IACnB,mBAAA,EAAqB,sBAAA;IACrB,sBAAA,EAAwB,yBAAA;IACxB,sBAAA,EAAwB,2BAAA;IACxB,yBAAA,EAA2B,yBAAA;IAC3B,kBAAA,EAAoB,mBAAA;IACpB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,uBAAA,EAAyB;
|
|
1
|
+
{"version":3,"file":"getActionTypesDefaultMessages.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.ts"],"sourcesContent":["export const actionTypes = {\n 'entry.create': 'Create entry{model, select, undefined {} other { ({model})}}',\n 'entry.update': 'Update entry{model, select, undefined {} other { ({model})}}',\n 'entry.delete': 'Delete entry{model, select, undefined {} other { ({model})}}',\n 'entry.publish': 'Publish entry{model, select, undefined {} other { ({model})}}',\n 'entry.unpublish': 'Unpublish entry{model, select, undefined {} other { ({model})}}',\n 'media.create': 'Create media',\n 'media.update': 'Update media',\n 'media.delete': 'Delete media',\n 'media-folder.create': 'Create media folder',\n 'media-folder.update': 'Update media folder',\n 'media-folder.delete': 'Delete media folder',\n 'user.create': 'Create user',\n 'user.update': 'Update user',\n 'user.delete': 'Delete user',\n 'admin.auth.success': 'Admin login',\n 'admin.logout': 'Admin logout',\n 'content-type.create': 'Create content type',\n 'content-type.update': 'Update content type',\n 'content-type.delete': 'Delete content type',\n 'component.create': 'Create component',\n 'component.update': 'Update component',\n 'component.delete': 'Delete component',\n 'role.create': 'Create role',\n 'role.update': 'Update role',\n 'role.delete': 'Delete role',\n 'permission.create': 'Create permission',\n 'permission.update': 'Update permission',\n 'permission.delete': 'Delete permission',\n 'release.create': 'Create release',\n 'release.update': 'Update release',\n 'release.delete': 'Delete release',\n 'release.trigger': 'Trigger release',\n 'release.entry.add': 'Add entry to release',\n 'release.entry.update': 'Change entry on release',\n 'release.entry.remove': 'Remove entry from release',\n 'release.settings.update': 'Update release settings',\n 'audit-log.export': 'Export audit logs',\n 'locale.create': 'Create locale',\n 'locale.update': 'Update locale',\n 'locale.delete': 'Delete locale',\n 'locale.default.update': 'Change default locale',\n 'token.create': 'Create token',\n 'token.update': 'Update token',\n 'token.delete': 'Delete token',\n 'token.regenerate': 'Regenerate token',\n};\n\nexport const getDefaultMessage = (value: keyof typeof actionTypes) => {\n return actionTypes[value] || value;\n};\n"],"names":["actionTypes","getDefaultMessage","value"],"mappings":";;MAAaA,WAAAA,GAAc;IACzB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,eAAA,EAAiB,+DAAA;IACjB,iBAAA,EAAmB,iEAAA;IACnB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,oBAAA,EAAsB,aAAA;IACtB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,iBAAA,EAAmB,iBAAA;IACnB,mBAAA,EAAqB,sBAAA;IACrB,sBAAA,EAAwB,yBAAA;IACxB,sBAAA,EAAwB,2BAAA;IACxB,yBAAA,EAA2B,yBAAA;IAC3B,kBAAA,EAAoB,mBAAA;IACpB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,uBAAA,EAAyB,uBAAA;IACzB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,kBAAA,EAAoB;AACtB;AAEO,MAAMC,oBAAoB,CAACC,KAAAA,GAAAA;IAChC,OAAOF,WAAW,CAACE,KAAAA,CAAM,IAAIA,KAAAA;AAC/B;;;;;"}
|
|
@@ -39,7 +39,11 @@ const actionTypes = {
|
|
|
39
39
|
'locale.create': 'Create locale',
|
|
40
40
|
'locale.update': 'Update locale',
|
|
41
41
|
'locale.delete': 'Delete locale',
|
|
42
|
-
'locale.default.update': 'Change default locale'
|
|
42
|
+
'locale.default.update': 'Change default locale',
|
|
43
|
+
'token.create': 'Create token',
|
|
44
|
+
'token.update': 'Update token',
|
|
45
|
+
'token.delete': 'Delete token',
|
|
46
|
+
'token.regenerate': 'Regenerate token'
|
|
43
47
|
};
|
|
44
48
|
const getDefaultMessage = (value)=>{
|
|
45
49
|
return actionTypes[value] || value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getActionTypesDefaultMessages.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.ts"],"sourcesContent":["export const actionTypes = {\n 'entry.create': 'Create entry{model, select, undefined {} other { ({model})}}',\n 'entry.update': 'Update entry{model, select, undefined {} other { ({model})}}',\n 'entry.delete': 'Delete entry{model, select, undefined {} other { ({model})}}',\n 'entry.publish': 'Publish entry{model, select, undefined {} other { ({model})}}',\n 'entry.unpublish': 'Unpublish entry{model, select, undefined {} other { ({model})}}',\n 'media.create': 'Create media',\n 'media.update': 'Update media',\n 'media.delete': 'Delete media',\n 'media-folder.create': 'Create media folder',\n 'media-folder.update': 'Update media folder',\n 'media-folder.delete': 'Delete media folder',\n 'user.create': 'Create user',\n 'user.update': 'Update user',\n 'user.delete': 'Delete user',\n 'admin.auth.success': 'Admin login',\n 'admin.logout': 'Admin logout',\n 'content-type.create': 'Create content type',\n 'content-type.update': 'Update content type',\n 'content-type.delete': 'Delete content type',\n 'component.create': 'Create component',\n 'component.update': 'Update component',\n 'component.delete': 'Delete component',\n 'role.create': 'Create role',\n 'role.update': 'Update role',\n 'role.delete': 'Delete role',\n 'permission.create': 'Create permission',\n 'permission.update': 'Update permission',\n 'permission.delete': 'Delete permission',\n 'release.create': 'Create release',\n 'release.update': 'Update release',\n 'release.delete': 'Delete release',\n 'release.trigger': 'Trigger release',\n 'release.entry.add': 'Add entry to release',\n 'release.entry.update': 'Change entry on release',\n 'release.entry.remove': 'Remove entry from release',\n 'release.settings.update': 'Update release settings',\n 'audit-log.export': 'Export audit logs',\n 'locale.create': 'Create locale',\n 'locale.update': 'Update locale',\n 'locale.delete': 'Delete locale',\n 'locale.default.update': 'Change default locale',\n};\n\nexport const getDefaultMessage = (value: keyof typeof actionTypes) => {\n return actionTypes[value] || value;\n};\n"],"names":["actionTypes","getDefaultMessage","value"],"mappings":"MAAaA,WAAAA,GAAc;IACzB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,eAAA,EAAiB,+DAAA;IACjB,iBAAA,EAAmB,iEAAA;IACnB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,oBAAA,EAAsB,aAAA;IACtB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,iBAAA,EAAmB,iBAAA;IACnB,mBAAA,EAAqB,sBAAA;IACrB,sBAAA,EAAwB,yBAAA;IACxB,sBAAA,EAAwB,2BAAA;IACxB,yBAAA,EAA2B,yBAAA;IAC3B,kBAAA,EAAoB,mBAAA;IACpB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,uBAAA,EAAyB;
|
|
1
|
+
{"version":3,"file":"getActionTypesDefaultMessages.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.ts"],"sourcesContent":["export const actionTypes = {\n 'entry.create': 'Create entry{model, select, undefined {} other { ({model})}}',\n 'entry.update': 'Update entry{model, select, undefined {} other { ({model})}}',\n 'entry.delete': 'Delete entry{model, select, undefined {} other { ({model})}}',\n 'entry.publish': 'Publish entry{model, select, undefined {} other { ({model})}}',\n 'entry.unpublish': 'Unpublish entry{model, select, undefined {} other { ({model})}}',\n 'media.create': 'Create media',\n 'media.update': 'Update media',\n 'media.delete': 'Delete media',\n 'media-folder.create': 'Create media folder',\n 'media-folder.update': 'Update media folder',\n 'media-folder.delete': 'Delete media folder',\n 'user.create': 'Create user',\n 'user.update': 'Update user',\n 'user.delete': 'Delete user',\n 'admin.auth.success': 'Admin login',\n 'admin.logout': 'Admin logout',\n 'content-type.create': 'Create content type',\n 'content-type.update': 'Update content type',\n 'content-type.delete': 'Delete content type',\n 'component.create': 'Create component',\n 'component.update': 'Update component',\n 'component.delete': 'Delete component',\n 'role.create': 'Create role',\n 'role.update': 'Update role',\n 'role.delete': 'Delete role',\n 'permission.create': 'Create permission',\n 'permission.update': 'Update permission',\n 'permission.delete': 'Delete permission',\n 'release.create': 'Create release',\n 'release.update': 'Update release',\n 'release.delete': 'Delete release',\n 'release.trigger': 'Trigger release',\n 'release.entry.add': 'Add entry to release',\n 'release.entry.update': 'Change entry on release',\n 'release.entry.remove': 'Remove entry from release',\n 'release.settings.update': 'Update release settings',\n 'audit-log.export': 'Export audit logs',\n 'locale.create': 'Create locale',\n 'locale.update': 'Update locale',\n 'locale.delete': 'Delete locale',\n 'locale.default.update': 'Change default locale',\n 'token.create': 'Create token',\n 'token.update': 'Update token',\n 'token.delete': 'Delete token',\n 'token.regenerate': 'Regenerate token',\n};\n\nexport const getDefaultMessage = (value: keyof typeof actionTypes) => {\n return actionTypes[value] || value;\n};\n"],"names":["actionTypes","getDefaultMessage","value"],"mappings":"MAAaA,WAAAA,GAAc;IACzB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,eAAA,EAAiB,+DAAA;IACjB,iBAAA,EAAmB,iEAAA;IACnB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,oBAAA,EAAsB,aAAA;IACtB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,iBAAA,EAAmB,iBAAA;IACnB,mBAAA,EAAqB,sBAAA;IACrB,sBAAA,EAAwB,yBAAA;IACxB,sBAAA,EAAwB,2BAAA;IACxB,yBAAA,EAA2B,yBAAA;IAC3B,kBAAA,EAAoB,mBAAA;IACpB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,uBAAA,EAAyB,uBAAA;IACzB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,kBAAA,EAAoB;AACtB;AAEO,MAAMC,oBAAoB,CAACC,KAAAA,GAAAA;IAChC,OAAOF,WAAW,CAACE,KAAAA,CAAM,IAAIA,KAAAA;AAC/B;;;;"}
|
|
@@ -193,10 +193,6 @@ const SingleSignOnPage = ()=>{
|
|
|
193
193
|
label: name,
|
|
194
194
|
value: id.toString()
|
|
195
195
|
})),
|
|
196
|
-
placeholder: formatMessage({
|
|
197
|
-
id: 'components.InputSelect.option.placeholder',
|
|
198
|
-
defaultMessage: 'Choose here'
|
|
199
|
-
}),
|
|
200
196
|
size: 6,
|
|
201
197
|
type: 'enumeration'
|
|
202
198
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SingleSignOnPage.js","sources":["../../../../../../../../ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.tsx"],"sourcesContent":["import {\n Button,\n Flex,\n Grid,\n MultiSelect,\n MultiSelectOption,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport {\n Form,\n FormHelpers,\n InputProps,\n useField,\n} from '../../../../../../admin/src/components/Form';\nimport { InputRenderer } from '../../../../../../admin/src/components/FormInputs/Renderer';\nimport { GradientBadge } from '../../../../../../admin/src/components/GradientBadge';\nimport { Layouts } from '../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../admin/src/components/PageHelpers';\nimport { useTypedSelector } from '../../../../../../admin/src/core/store/hooks';\nimport { useNotification } from '../../../../../../admin/src/features/Notifications';\nimport { useAdminRoles } from '../../../../../../admin/src/hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../../admin/src/hooks/useRBAC';\nimport {\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n} from '../../../../../../admin/src/services/auth';\nimport { isBaseQueryError } from '../../../../../../admin/src/utils/baseQuery';\nimport { translatedErrors } from '../../../../../../admin/src/utils/translatedErrors';\nimport { ProvidersOptions } from '../../../../../../shared/contracts/admin';\n\nconst SCHEMA = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport const SingleSignOnPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { toggleNotification } = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingProviderOptions, data } = useGetProviderOptionsQuery();\n\n const [updateProviderOptions, { isLoading: isSubmittingForm }] =\n useUpdateProviderOptionsMutation();\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canRead: canReadRoles },\n } = useRBAC({\n ...permissions.settings?.sso,\n readRoles: permissions.settings?.roles.read ?? [],\n });\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n skip: !canReadRoles,\n });\n\n const handleSubmit = async (\n body: ProvidersOptions.Request['body'],\n helpers: FormHelpers<ProvidersOptions.Request['body']>\n ) => {\n try {\n const res = await updateProviderOptions(body);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again.',\n }),\n });\n }\n };\n\n const isLoadingData = isLoadingRoles || isLoadingPermissions || isLoadingProviderOptions;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'SSO',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isSubmittingForm || isLoadingData} tabIndex={-1}>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n validationSchema={SCHEMA}\n disabled={!canUpdate}\n initialValues={\n data || {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n }\n }\n >\n {({ modified, isSubmitting }) => (\n <>\n <Layouts.Header\n primaryAction={\n <Button\n disabled={!modified}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.sso.title',\n defaultMessage: 'Single Sign-On',\n })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n />\n <Layouts.Content>\n {isSubmitting || isLoadingData ? (\n <Page.Loading />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root gap={4}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n }),\n name: 'autoRegister',\n size: 6,\n type: 'boolean' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n }),\n name: 'defaultRole',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n }),\n name: 'ssoLockedRoles',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'multi' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FormInputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n )}\n </Layouts.Content>\n </>\n )}\n </Form>\n </Page.Main>\n </>\n );\n};\n\ntype FormInputProps = InputProps | MultiSelectInputProps;\n\nconst FormInputRenderer = (props: FormInputProps) => {\n switch (props.type) {\n case 'multi':\n return <MultiSelectInput {...props} />;\n default:\n return <InputRenderer {...props} />;\n }\n};\n\ntype MultiSelectInputProps = Omit<Extract<InputProps, { type: 'enumeration' }>, 'type'> & {\n type: 'multi';\n};\n\nconst MultiSelectInput = ({ hint, label, name, options, ...props }: MultiSelectInputProps) => {\n const field = useField<string[]>(name);\n\n return (\n <Field.Root name={name} hint={hint} error={field.error}>\n <Field.Label>{label}</Field.Label>\n <MultiSelect\n onChange={(value) => field.onChange('ssoLockedRoles', value)}\n onClear={() => field.onChange('ssoLockedRoles', [])}\n value={field.value ?? []}\n withTags\n {...props}\n >\n {options.map(({ label, value }) => (\n <MultiSelectOption key={value} value={value}>\n {label}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport const ProtectedSSO = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.sso?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <SingleSignOnPage />\n </Page.Protect>\n );\n};\n"],"names":["SCHEMA","yup","object","shape","autoRegister","bool","required","translatedErrors","defaultRole","mixed","when","value","initSchema","nullable","ssoLockedRoles","array","of","SingleSignOnPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingProviderOptions","data","useGetProviderOptionsQuery","updateProviderOptions","isSubmittingForm","useUpdateProviderOptionsMutation","isLoadingPermissions","allowedActions","canUpdate","canRead","canReadRoles","useRBAC","settings","sso","readRoles","roles","read","isLoadingRoles","useAdminRoles","undefined","skip","handleSubmit","body","helpers","res","isBaseQueryError","error","name","setErrors","type","message","id","defaultMessage","isLoadingData","_jsxs","_Fragment","_jsx","Page","Title","Main","aria-busy","tabIndex","Form","method","onSubmit","validationSchema","disabled","initialValues","modified","isSubmitting","Layouts","Header","primaryAction","Button","loading","startIcon","Check","fullWidth","title","subtitle","secondaryAction","GradientBadge","label","Content","Loading","Flex","direction","alignItems","gap","background","padding","shadow","hasRadius","Typography","variant","tag","Grid","Root","hint","size","options","map","toString","placeholder","field","Item","col","xs","FormInputRenderer","props","MultiSelectInput","InputRenderer","useField","Field","Label","MultiSelect","onChange","onClear","withTags","MultiSelectOption","Hint","Error","ProtectedSSO","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SingleSignOnPage.js","sources":["../../../../../../../../ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.tsx"],"sourcesContent":["import {\n Button,\n Flex,\n Grid,\n MultiSelect,\n MultiSelectOption,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport {\n Form,\n FormHelpers,\n InputProps,\n useField,\n} from '../../../../../../admin/src/components/Form';\nimport { InputRenderer } from '../../../../../../admin/src/components/FormInputs/Renderer';\nimport { GradientBadge } from '../../../../../../admin/src/components/GradientBadge';\nimport { Layouts } from '../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../admin/src/components/PageHelpers';\nimport { useTypedSelector } from '../../../../../../admin/src/core/store/hooks';\nimport { useNotification } from '../../../../../../admin/src/features/Notifications';\nimport { useAdminRoles } from '../../../../../../admin/src/hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../../admin/src/hooks/useRBAC';\nimport {\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n} from '../../../../../../admin/src/services/auth';\nimport { isBaseQueryError } from '../../../../../../admin/src/utils/baseQuery';\nimport { translatedErrors } from '../../../../../../admin/src/utils/translatedErrors';\nimport { ProvidersOptions } from '../../../../../../shared/contracts/admin';\n\nconst SCHEMA = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport const SingleSignOnPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { toggleNotification } = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingProviderOptions, data } = useGetProviderOptionsQuery();\n\n const [updateProviderOptions, { isLoading: isSubmittingForm }] =\n useUpdateProviderOptionsMutation();\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canRead: canReadRoles },\n } = useRBAC({\n ...permissions.settings?.sso,\n readRoles: permissions.settings?.roles.read ?? [],\n });\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n skip: !canReadRoles,\n });\n\n const handleSubmit = async (\n body: ProvidersOptions.Request['body'],\n helpers: FormHelpers<ProvidersOptions.Request['body']>\n ) => {\n try {\n const res = await updateProviderOptions(body);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again.',\n }),\n });\n }\n };\n\n const isLoadingData = isLoadingRoles || isLoadingPermissions || isLoadingProviderOptions;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'SSO',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isSubmittingForm || isLoadingData} tabIndex={-1}>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n validationSchema={SCHEMA}\n disabled={!canUpdate}\n initialValues={\n data || {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n }\n }\n >\n {({ modified, isSubmitting }) => (\n <>\n <Layouts.Header\n primaryAction={\n <Button\n disabled={!modified}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.sso.title',\n defaultMessage: 'Single Sign-On',\n })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n />\n <Layouts.Content>\n {isSubmitting || isLoadingData ? (\n <Page.Loading />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root gap={4}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n }),\n name: 'autoRegister',\n size: 6,\n type: 'boolean' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n }),\n name: 'defaultRole',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n }),\n name: 'ssoLockedRoles',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'multi' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FormInputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n )}\n </Layouts.Content>\n </>\n )}\n </Form>\n </Page.Main>\n </>\n );\n};\n\ntype FormInputProps = InputProps | MultiSelectInputProps;\n\nconst FormInputRenderer = (props: FormInputProps) => {\n switch (props.type) {\n case 'multi':\n return <MultiSelectInput {...props} />;\n default:\n return <InputRenderer {...props} />;\n }\n};\n\ntype MultiSelectInputProps = Omit<Extract<InputProps, { type: 'enumeration' }>, 'type'> & {\n type: 'multi';\n};\n\nconst MultiSelectInput = ({ hint, label, name, options, ...props }: MultiSelectInputProps) => {\n const field = useField<string[]>(name);\n\n return (\n <Field.Root name={name} hint={hint} error={field.error}>\n <Field.Label>{label}</Field.Label>\n <MultiSelect\n onChange={(value) => field.onChange('ssoLockedRoles', value)}\n onClear={() => field.onChange('ssoLockedRoles', [])}\n value={field.value ?? []}\n withTags\n {...props}\n >\n {options.map(({ label, value }) => (\n <MultiSelectOption key={value} value={value}>\n {label}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport const ProtectedSSO = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.sso?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <SingleSignOnPage />\n </Page.Protect>\n );\n};\n"],"names":["SCHEMA","yup","object","shape","autoRegister","bool","required","translatedErrors","defaultRole","mixed","when","value","initSchema","nullable","ssoLockedRoles","array","of","SingleSignOnPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingProviderOptions","data","useGetProviderOptionsQuery","updateProviderOptions","isSubmittingForm","useUpdateProviderOptionsMutation","isLoadingPermissions","allowedActions","canUpdate","canRead","canReadRoles","useRBAC","settings","sso","readRoles","roles","read","isLoadingRoles","useAdminRoles","undefined","skip","handleSubmit","body","helpers","res","isBaseQueryError","error","name","setErrors","type","message","id","defaultMessage","isLoadingData","_jsxs","_Fragment","_jsx","Page","Title","Main","aria-busy","tabIndex","Form","method","onSubmit","validationSchema","disabled","initialValues","modified","isSubmitting","Layouts","Header","primaryAction","Button","loading","startIcon","Check","fullWidth","title","subtitle","secondaryAction","GradientBadge","label","Content","Loading","Flex","direction","alignItems","gap","background","padding","shadow","hasRadius","Typography","variant","tag","Grid","Root","hint","size","options","map","toString","placeholder","field","Item","col","xs","FormInputRenderer","props","MultiSelectInput","InputRenderer","useField","Field","Label","MultiSelect","onChange","onClear","withTags","MultiSelectOption","Hint","Error","ProtectedSSO","main","Protect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,MAAMA,MAAAA,GAASC,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAChCC,IAAAA,YAAAA,EAAcH,eAAII,IAAI,EAAA,CAAGC,QAAQ,CAACC,kCAAiBD,QAAQ,CAAA;AAC3DE,IAAAA,WAAAA,EAAaP,eAAIQ,KAAK,EAAA,CAAGC,IAAI,CAAC,cAAA,EAAgB,CAACC,KAAAA,EAAOC,UAAAA,GAAAA;QACpD,OAAOD,KAAAA,GAAQC,WAAWN,QAAQ,CAACC,kCAAiBD,QAAQ,CAAA,GAAIM,WAAWC,QAAQ,EAAA;AACrF,IAAA,CAAA,CAAA;AACAC,IAAAA,cAAAA,EAAgBb,cAAAA,CACbc,KAAK,EAAA,CACLF,QAAQ,GACRG,EAAE,CACDf,cAAAA,CAAIQ,KAAK,EAAA,CAAGC,IAAI,CAAC,gBAAA,EAAkB,CAACC,KAAAA,EAAOC,UAAAA,GAAAA;QACzC,OAAOD,KAAAA,GAAQC,WAAWN,QAAQ,CAACC,kCAAiBD,QAAQ,CAAA,GAAIM,WAAWC,QAAQ,EAAA;AACrF,IAAA,CAAA,CAAA;AAEN,CAAA,CAAA;MAEaI,gBAAAA,GAAmB,IAAA;IAC9B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,cAAcC,sBAAAA,CAAiB,CAACC,QAAUA,KAAAA,CAAMC,SAAS,CAACH,WAAW,CAAA;IAC3E,MAAM,EAAEI,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAM,EACJC,uBAAAA,EAAyBC,cAAc,EACvCC,+BAAAA,EAAiCC,sBAAsB,EACxD,GAAGC,qCAAAA,EAAAA;AAEJ,IAAA,MAAM,EAAEC,SAAAA,EAAWC,wBAAwB,EAAEC,IAAI,EAAE,GAAGC,+BAAAA,EAAAA;AAEtD,IAAA,MAAM,CAACC,qBAAAA,EAAuB,EAAEJ,WAAWK,gBAAgB,EAAE,CAAC,GAC5DC,qCAAAA,EAAAA;AAEF,IAAA,MAAM,EACJN,SAAAA,EAAWO,oBAAoB,EAC/BC,cAAAA,EAAgB,EAAEC,SAAS,EAAEC,OAAAA,EAASC,YAAY,EAAE,EACrD,GAAGC,eAAAA,CAAQ;QACV,GAAGvB,WAAAA,CAAYwB,QAAQ,EAAEC,GAAG;AAC5BC,QAAAA,SAAAA,EAAW1B,WAAAA,CAAYwB,QAAQ,EAAEG,KAAAA,CAAMC,QAAQ;AACjD,KAAA,CAAA;IAEA,MAAM,EAAED,KAAK,EAAEhB,SAAAA,EAAWkB,cAAc,EAAE,GAAGC,4BAAcC,SAAAA,EAAW;AACpEC,QAAAA,IAAAA,EAAM,CAACV;AACT,KAAA,CAAA;IAEA,MAAMW,YAAAA,GAAe,OACnBC,IAAAA,EACAC,OAAAA,GAAAA;QAEA,IAAI;YACF,MAAMC,GAAAA,GAAM,MAAMrB,qBAAAA,CAAsBmB,IAAAA,CAAAA;AAExC,YAAA,IAAI,WAAWE,GAAAA,EAAK;gBAClB,IAAIC,0BAAAA,CAAiBD,IAAIE,KAAK,CAAA,IAAKF,IAAIE,KAAK,CAACC,IAAI,KAAK,iBAAA,EAAmB;AACvEJ,oBAAAA,OAAAA,CAAQK,SAAS,CAAC/B,sBAAAA,CAAuB2B,GAAAA,CAAIE,KAAK,CAAA,CAAA;gBACpD,CAAA,MAAO;oBACLlC,kBAAAA,CAAmB;wBACjBqC,IAAAA,EAAM,QAAA;wBACNC,OAAAA,EAASnC,cAAAA,CAAe6B,IAAIE,KAAK;AACnC,qBAAA,CAAA;AACF,gBAAA;AAEA,gBAAA;AACF,YAAA;YAEAlC,kBAAAA,CAAmB;gBACjBqC,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAAS5C,aAAAA,CAAc;oBAAE6C,EAAAA,EAAI;AAA6B,iBAAA;AAC5D,aAAA,CAAA;AACF,QAAA,CAAA,CAAE,OAAM;YACNvC,kBAAAA,CAAmB;gBACjBqC,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAAS5C,aAAAA,CAAc;oBACrB6C,EAAAA,EAAI,oBAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,MAAMC,aAAAA,GAAgBhB,kBAAkBX,oBAAAA,IAAwBN,wBAAAA;IAEhE,qBACEkC,eAAA,CAAAC,mBAAA,EAAA;;AACE,0BAAAC,cAAA,CAACC,iBAAKC,KAAK,EAAA;0BACRpD,aAAAA,CACC;oBAAE6C,EAAAA,EAAI,oBAAA;oBAAsBC,cAAAA,EAAgB;iBAAoB,EAChE;oBACEL,IAAAA,EAAM;AACR,iBAAA;;AAGJ,0BAAAS,cAAA,CAACC,iBAAKE,IAAI,EAAA;AAACC,gBAAAA,WAAAA,EAAWpC,gBAAAA,IAAoB6B,aAAAA;AAAeQ,gBAAAA,QAAAA,EAAU,EAAC;AAClE,gBAAA,QAAA,gBAAAL,cAAA,CAACM,SAAAA,EAAAA;oBACCC,MAAAA,EAAO,KAAA;oBACPC,QAAAA,EAAUvB,YAAAA;oBACVwB,gBAAAA,EAAkB7E,MAAAA;AAClB8E,oBAAAA,QAAAA,EAAU,CAACtC,SAAAA;AACXuC,oBAAAA,aAAAA,EACE9C,IAAAA,IAAQ;wBACN7B,YAAAA,EAAc,KAAA;wBACdI,WAAAA,EAAa,IAAA;wBACbM,cAAAA,EAAgB;AAClB,qBAAA;AAGD,oBAAA,QAAA,EAAA,CAAC,EAAEkE,QAAQ,EAAEC,YAAY,EAAE,iBAC1Bf,eAAA,CAAAC,mBAAA,EAAA;;AACE,8CAAAC,cAAA,CAACc,eAAQC,MAAM,EAAA;AACbC,oCAAAA,aAAAA,gBACEhB,cAAA,CAACiB,mBAAAA,EAAAA;AACCP,wCAAAA,QAAAA,EAAU,CAACE,QAAAA;wCACXM,OAAAA,EAASL,YAAAA;AACTM,wCAAAA,SAAAA,gBAAWnB,cAAA,CAACoB,WAAAA,EAAAA,EAAAA,CAAAA;wCACZ3B,IAAAA,EAAK,QAAA;wCACL4B,SAAS,EAAA,IAAA;kDAERvE,aAAAA,CAAc;4CACb6C,EAAAA,EAAI,aAAA;4CACJC,cAAAA,EAAgB;AAClB,yCAAA;;AAGJ0B,oCAAAA,KAAAA,EAAOxE,aAAAA,CAAc;wCACnB6C,EAAAA,EAAI,oBAAA;wCACJC,cAAAA,EAAgB;AAClB,qCAAA,CAAA;AACA2B,oCAAAA,QAAAA,EAAUzE,aAAAA,CAAc;wCACtB6C,EAAAA,EAAI,0BAAA;wCACJC,cAAAA,EAAgB;AAClB,qCAAA,CAAA;AACA4B,oCAAAA,eAAAA,gBACExB,cAAA,CAACyB,2BAAAA,EAAAA;AACCC,wCAAAA,KAAAA,EAAO5E,aAAAA,CAAc;4CACnB6C,EAAAA,EAAI,iCAAA;4CACJC,cAAAA,EAAgB;AAClB,yCAAA;;;AAIN,8CAAAI,cAAA,CAACc,eAAQa,OAAO,EAAA;AACbd,oCAAAA,QAAAA,EAAAA,YAAAA,IAAgBhB,aAAAA,iBACfG,cAAA,CAACC,gBAAAA,CAAK2B,OAAO,sBAEb9B,eAAA,CAAC+B,iBAAAA,EAAAA;wCACCC,SAAAA,EAAU,QAAA;wCACVC,UAAAA,EAAW,SAAA;wCACXC,GAAAA,EAAK,CAAA;wCACLC,UAAAA,EAAW,UAAA;wCACXC,OAAAA,EAAS,CAAA;wCACTC,MAAAA,EAAO,cAAA;wCACPC,SAAS,EAAA,IAAA;;0DAETpC,cAAA,CAACqC,uBAAAA,EAAAA;gDAAWC,OAAAA,EAAQ,OAAA;gDAAQC,GAAAA,EAAI,IAAA;0DAC7BzF,aAAAA,CAAc;oDACb6C,EAAAA,EAAI,iBAAA;oDACJC,cAAAA,EAAgB;AAClB,iDAAA;;AAEF,0DAAAI,cAAA,CAACwC,kBAAKC,IAAI,EAAA;gDAACT,GAAAA,EAAK,CAAA;AACb,gDAAA,QAAA,EAAA;AACC,oDAAA;AACEU,wDAAAA,IAAAA,EAAM5F,aAAAA,CAAc;4DAClB6C,EAAAA,EAAI,4CAAA;4DACJC,cAAAA,EAAgB;AAClB,yDAAA,CAAA;AACA8B,wDAAAA,KAAAA,EAAO5E,aAAAA,CAAc;4DACnB6C,EAAAA,EAAI,sCAAA;4DACJC,cAAAA,EAAgB;AAClB,yDAAA,CAAA;wDACAL,IAAAA,EAAM,cAAA;wDACNoD,IAAAA,EAAM,CAAA;wDACNlD,IAAAA,EAAM;AACR,qDAAA;AACA,oDAAA;AACEiD,wDAAAA,IAAAA,EAAM5F,aAAAA,CAAc;4DAClB6C,EAAAA,EAAI,2CAAA;4DACJC,cAAAA,EACE;AACJ,yDAAA,CAAA;AACA8B,wDAAAA,KAAAA,EAAO5E,aAAAA,CAAc;4DACnB6C,EAAAA,EAAI,qCAAA;4DACJC,cAAAA,EAAgB;AAClB,yDAAA,CAAA;wDACAL,IAAAA,EAAM,aAAA;wDACNqD,OAAAA,EAASjE,KAAAA,CAAMkE,GAAG,CAAC,CAAC,EAAElD,EAAE,EAAEJ,IAAI,EAAE,IAAM;gEACpCmC,KAAAA,EAAOnC,IAAAA;AACPhD,gEAAAA,KAAAA,EAAOoD,GAAGmD,QAAQ;6DACpB,CAAA,CAAA;wDACAH,IAAAA,EAAM,CAAA;wDACNlD,IAAAA,EAAM;AACR,qDAAA;AACA,oDAAA;AACEiD,wDAAAA,IAAAA,EAAM5F,aAAAA,CAAc;4DAClB6C,EAAAA,EAAI,uDAAA;4DACJC,cAAAA,EACE;AACJ,yDAAA,CAAA;AACA8B,wDAAAA,KAAAA,EAAO5E,aAAAA,CAAc;4DACnB6C,EAAAA,EAAI,iDAAA;4DACJC,cAAAA,EAAgB;AAClB,yDAAA,CAAA;wDACAL,IAAAA,EAAM,gBAAA;wDACNqD,OAAAA,EAASjE,KAAAA,CAAMkE,GAAG,CAAC,CAAC,EAAElD,EAAE,EAAEJ,IAAI,EAAE,IAAM;gEACpCmC,KAAAA,EAAOnC,IAAAA;AACPhD,gEAAAA,KAAAA,EAAOoD,GAAGmD,QAAQ;6DACpB,CAAA,CAAA;AACAC,wDAAAA,WAAAA,EAAajG,aAAAA,CAAc;4DACzB6C,EAAAA,EAAI,2CAAA;4DACJC,cAAAA,EAAgB;AAClB,yDAAA,CAAA;wDACA+C,IAAAA,EAAM,CAAA;wDACNlD,IAAAA,EAAM;AACR;iDACD,CAACoD,GAAG,CAAC,CAAC,EAAEF,IAAI,EAAE,GAAGK,KAAAA,EAAO,iBACvBhD,cAAA,CAACwC,iBAAAA,CAAKS,IAAI,EAAA;wDAERC,GAAAA,EAAKP,IAAAA;wDACLQ,EAAAA,EAAI,EAAA;wDACJrB,SAAAA,EAAU,QAAA;wDACVC,UAAAA,EAAW,SAAA;AAEX,wDAAA,QAAA,gBAAA/B,cAAA,CAACoD,iBAAAA,EAAAA;AAAmB,4DAAA,GAAGJ;;AANlBA,qDAAAA,EAAAA,KAAAA,CAAMzD,IAAI,CAAA;;;;;;;;;;;AAmBzC;AAIA,MAAM6D,oBAAoB,CAACC,KAAAA,GAAAA;AACzB,IAAA,OAAQA,MAAM5D,IAAI;QAChB,KAAK,OAAA;AACH,YAAA,qBAAOO,cAAA,CAACsD,gBAAAA,EAAAA;AAAkB,gBAAA,GAAGD;;AAC/B,QAAA;AACE,YAAA,qBAAOrD,cAAA,CAACuD,sBAAAA,EAAAA;AAAe,gBAAA,GAAGF;;AAC9B;AACF,CAAA;AAMA,MAAMC,gBAAAA,GAAmB,CAAC,EAAEZ,IAAI,EAAEhB,KAAK,EAAEnC,IAAI,EAAEqD,OAAO,EAAE,GAAGS,KAAAA,EAA8B,GAAA;AACvF,IAAA,MAAML,QAAQQ,aAAAA,CAAmBjE,IAAAA,CAAAA;IAEjC,qBACEO,eAAA,CAAC2D,mBAAMhB,IAAI,EAAA;QAAClD,IAAAA,EAAMA,IAAAA;QAAMmD,IAAAA,EAAMA,IAAAA;AAAMpD,QAAAA,KAAAA,EAAO0D,MAAM1D,KAAK;;AACpD,0BAAAU,cAAA,CAACyD,mBAAMC,KAAK,EAAA;AAAEhC,gBAAAA,QAAAA,EAAAA;;0BACd1B,cAAA,CAAC2D,wBAAAA,EAAAA;AACCC,gBAAAA,QAAAA,EAAU,CAACrH,KAAAA,GAAUyG,KAAAA,CAAMY,QAAQ,CAAC,gBAAA,EAAkBrH,KAAAA,CAAAA;AACtDsH,gBAAAA,OAAAA,EAAS,IAAMb,KAAAA,CAAMY,QAAQ,CAAC,kBAAkB,EAAE,CAAA;gBAClDrH,KAAAA,EAAOyG,KAAAA,CAAMzG,KAAK,IAAI,EAAE;gBACxBuH,QAAQ,EAAA,IAAA;AACP,gBAAA,GAAGT,KAAK;0BAERT,OAAAA,CAAQC,GAAG,CAAC,CAAC,EAAEnB,KAAK,EAAEnF,KAAK,EAAE,iBAC5ByD,cAAA,CAAC+D,8BAAAA,EAAAA;wBAA8BxH,KAAAA,EAAOA,KAAAA;AACnCmF,wBAAAA,QAAAA,EAAAA;AADqBnF,qBAAAA,EAAAA,KAAAA,CAAAA;;AAK5B,0BAAAyD,cAAA,CAACyD,mBAAMO,IAAI,EAAA,EAAA,CAAA;AACX,0BAAAhE,cAAA,CAACyD,mBAAMQ,KAAK,EAAA,EAAA;;;AAGlB,CAAA;MAEaC,YAAAA,GAAe,IAAA;IAC1B,MAAMlH,WAAAA,GAAcC,sBAAAA,CAAiB,CAACC,KAAAA,GAAUA,KAAAA,CAAMC,SAAS,CAACH,WAAW,CAACwB,QAAQ,EAAEC,GAAAA,EAAK0F,IAAAA,CAAAA;IAE3F,qBACEnE,cAAA,CAACC,iBAAKmE,OAAO,EAAA;QAACpH,WAAAA,EAAaA,WAAAA;AACzB,QAAA,QAAA,gBAAAgD,cAAA,CAACnD,gBAAAA,EAAAA,EAAAA;;AAGP;;;;;"}
|
|
@@ -171,10 +171,6 @@ const SingleSignOnPage = ()=>{
|
|
|
171
171
|
label: name,
|
|
172
172
|
value: id.toString()
|
|
173
173
|
})),
|
|
174
|
-
placeholder: formatMessage({
|
|
175
|
-
id: 'components.InputSelect.option.placeholder',
|
|
176
|
-
defaultMessage: 'Choose here'
|
|
177
|
-
}),
|
|
178
174
|
size: 6,
|
|
179
175
|
type: 'enumeration'
|
|
180
176
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SingleSignOnPage.mjs","sources":["../../../../../../../../ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.tsx"],"sourcesContent":["import {\n Button,\n Flex,\n Grid,\n MultiSelect,\n MultiSelectOption,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport {\n Form,\n FormHelpers,\n InputProps,\n useField,\n} from '../../../../../../admin/src/components/Form';\nimport { InputRenderer } from '../../../../../../admin/src/components/FormInputs/Renderer';\nimport { GradientBadge } from '../../../../../../admin/src/components/GradientBadge';\nimport { Layouts } from '../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../admin/src/components/PageHelpers';\nimport { useTypedSelector } from '../../../../../../admin/src/core/store/hooks';\nimport { useNotification } from '../../../../../../admin/src/features/Notifications';\nimport { useAdminRoles } from '../../../../../../admin/src/hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../../admin/src/hooks/useRBAC';\nimport {\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n} from '../../../../../../admin/src/services/auth';\nimport { isBaseQueryError } from '../../../../../../admin/src/utils/baseQuery';\nimport { translatedErrors } from '../../../../../../admin/src/utils/translatedErrors';\nimport { ProvidersOptions } from '../../../../../../shared/contracts/admin';\n\nconst SCHEMA = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport const SingleSignOnPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { toggleNotification } = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingProviderOptions, data } = useGetProviderOptionsQuery();\n\n const [updateProviderOptions, { isLoading: isSubmittingForm }] =\n useUpdateProviderOptionsMutation();\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canRead: canReadRoles },\n } = useRBAC({\n ...permissions.settings?.sso,\n readRoles: permissions.settings?.roles.read ?? [],\n });\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n skip: !canReadRoles,\n });\n\n const handleSubmit = async (\n body: ProvidersOptions.Request['body'],\n helpers: FormHelpers<ProvidersOptions.Request['body']>\n ) => {\n try {\n const res = await updateProviderOptions(body);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again.',\n }),\n });\n }\n };\n\n const isLoadingData = isLoadingRoles || isLoadingPermissions || isLoadingProviderOptions;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'SSO',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isSubmittingForm || isLoadingData} tabIndex={-1}>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n validationSchema={SCHEMA}\n disabled={!canUpdate}\n initialValues={\n data || {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n }\n }\n >\n {({ modified, isSubmitting }) => (\n <>\n <Layouts.Header\n primaryAction={\n <Button\n disabled={!modified}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.sso.title',\n defaultMessage: 'Single Sign-On',\n })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n />\n <Layouts.Content>\n {isSubmitting || isLoadingData ? (\n <Page.Loading />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root gap={4}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n }),\n name: 'autoRegister',\n size: 6,\n type: 'boolean' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n }),\n name: 'defaultRole',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n }),\n name: 'ssoLockedRoles',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'multi' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FormInputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n )}\n </Layouts.Content>\n </>\n )}\n </Form>\n </Page.Main>\n </>\n );\n};\n\ntype FormInputProps = InputProps | MultiSelectInputProps;\n\nconst FormInputRenderer = (props: FormInputProps) => {\n switch (props.type) {\n case 'multi':\n return <MultiSelectInput {...props} />;\n default:\n return <InputRenderer {...props} />;\n }\n};\n\ntype MultiSelectInputProps = Omit<Extract<InputProps, { type: 'enumeration' }>, 'type'> & {\n type: 'multi';\n};\n\nconst MultiSelectInput = ({ hint, label, name, options, ...props }: MultiSelectInputProps) => {\n const field = useField<string[]>(name);\n\n return (\n <Field.Root name={name} hint={hint} error={field.error}>\n <Field.Label>{label}</Field.Label>\n <MultiSelect\n onChange={(value) => field.onChange('ssoLockedRoles', value)}\n onClear={() => field.onChange('ssoLockedRoles', [])}\n value={field.value ?? []}\n withTags\n {...props}\n >\n {options.map(({ label, value }) => (\n <MultiSelectOption key={value} value={value}>\n {label}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport const ProtectedSSO = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.sso?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <SingleSignOnPage />\n </Page.Protect>\n );\n};\n"],"names":["SCHEMA","yup","object","shape","autoRegister","bool","required","translatedErrors","defaultRole","mixed","when","value","initSchema","nullable","ssoLockedRoles","array","of","SingleSignOnPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingProviderOptions","data","useGetProviderOptionsQuery","updateProviderOptions","isSubmittingForm","useUpdateProviderOptionsMutation","isLoadingPermissions","allowedActions","canUpdate","canRead","canReadRoles","useRBAC","settings","sso","readRoles","roles","read","isLoadingRoles","useAdminRoles","undefined","skip","handleSubmit","body","helpers","res","isBaseQueryError","error","name","setErrors","type","message","id","defaultMessage","isLoadingData","_jsxs","_Fragment","_jsx","Page","Title","Main","aria-busy","tabIndex","Form","method","onSubmit","validationSchema","disabled","initialValues","modified","isSubmitting","Layouts","Header","primaryAction","Button","loading","startIcon","Check","fullWidth","title","subtitle","secondaryAction","GradientBadge","label","Content","Loading","Flex","direction","alignItems","gap","background","padding","shadow","hasRadius","Typography","variant","tag","Grid","Root","hint","size","options","map","toString","placeholder","field","Item","col","xs","FormInputRenderer","props","MultiSelectInput","InputRenderer","useField","Field","Label","MultiSelect","onChange","onClear","withTags","MultiSelectOption","Hint","Error","ProtectedSSO","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SingleSignOnPage.mjs","sources":["../../../../../../../../ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.tsx"],"sourcesContent":["import {\n Button,\n Flex,\n Grid,\n MultiSelect,\n MultiSelectOption,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport {\n Form,\n FormHelpers,\n InputProps,\n useField,\n} from '../../../../../../admin/src/components/Form';\nimport { InputRenderer } from '../../../../../../admin/src/components/FormInputs/Renderer';\nimport { GradientBadge } from '../../../../../../admin/src/components/GradientBadge';\nimport { Layouts } from '../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../admin/src/components/PageHelpers';\nimport { useTypedSelector } from '../../../../../../admin/src/core/store/hooks';\nimport { useNotification } from '../../../../../../admin/src/features/Notifications';\nimport { useAdminRoles } from '../../../../../../admin/src/hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../../admin/src/hooks/useRBAC';\nimport {\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n} from '../../../../../../admin/src/services/auth';\nimport { isBaseQueryError } from '../../../../../../admin/src/utils/baseQuery';\nimport { translatedErrors } from '../../../../../../admin/src/utils/translatedErrors';\nimport { ProvidersOptions } from '../../../../../../shared/contracts/admin';\n\nconst SCHEMA = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport const SingleSignOnPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { toggleNotification } = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingProviderOptions, data } = useGetProviderOptionsQuery();\n\n const [updateProviderOptions, { isLoading: isSubmittingForm }] =\n useUpdateProviderOptionsMutation();\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canRead: canReadRoles },\n } = useRBAC({\n ...permissions.settings?.sso,\n readRoles: permissions.settings?.roles.read ?? [],\n });\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n skip: !canReadRoles,\n });\n\n const handleSubmit = async (\n body: ProvidersOptions.Request['body'],\n helpers: FormHelpers<ProvidersOptions.Request['body']>\n ) => {\n try {\n const res = await updateProviderOptions(body);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again.',\n }),\n });\n }\n };\n\n const isLoadingData = isLoadingRoles || isLoadingPermissions || isLoadingProviderOptions;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'SSO',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isSubmittingForm || isLoadingData} tabIndex={-1}>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n validationSchema={SCHEMA}\n disabled={!canUpdate}\n initialValues={\n data || {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n }\n }\n >\n {({ modified, isSubmitting }) => (\n <>\n <Layouts.Header\n primaryAction={\n <Button\n disabled={!modified}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.sso.title',\n defaultMessage: 'Single Sign-On',\n })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n />\n <Layouts.Content>\n {isSubmitting || isLoadingData ? (\n <Page.Loading />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root gap={4}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n }),\n name: 'autoRegister',\n size: 6,\n type: 'boolean' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n }),\n name: 'defaultRole',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n }),\n name: 'ssoLockedRoles',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'multi' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FormInputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n )}\n </Layouts.Content>\n </>\n )}\n </Form>\n </Page.Main>\n </>\n );\n};\n\ntype FormInputProps = InputProps | MultiSelectInputProps;\n\nconst FormInputRenderer = (props: FormInputProps) => {\n switch (props.type) {\n case 'multi':\n return <MultiSelectInput {...props} />;\n default:\n return <InputRenderer {...props} />;\n }\n};\n\ntype MultiSelectInputProps = Omit<Extract<InputProps, { type: 'enumeration' }>, 'type'> & {\n type: 'multi';\n};\n\nconst MultiSelectInput = ({ hint, label, name, options, ...props }: MultiSelectInputProps) => {\n const field = useField<string[]>(name);\n\n return (\n <Field.Root name={name} hint={hint} error={field.error}>\n <Field.Label>{label}</Field.Label>\n <MultiSelect\n onChange={(value) => field.onChange('ssoLockedRoles', value)}\n onClear={() => field.onChange('ssoLockedRoles', [])}\n value={field.value ?? []}\n withTags\n {...props}\n >\n {options.map(({ label, value }) => (\n <MultiSelectOption key={value} value={value}>\n {label}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport const ProtectedSSO = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.sso?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <SingleSignOnPage />\n </Page.Protect>\n );\n};\n"],"names":["SCHEMA","yup","object","shape","autoRegister","bool","required","translatedErrors","defaultRole","mixed","when","value","initSchema","nullable","ssoLockedRoles","array","of","SingleSignOnPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingProviderOptions","data","useGetProviderOptionsQuery","updateProviderOptions","isSubmittingForm","useUpdateProviderOptionsMutation","isLoadingPermissions","allowedActions","canUpdate","canRead","canReadRoles","useRBAC","settings","sso","readRoles","roles","read","isLoadingRoles","useAdminRoles","undefined","skip","handleSubmit","body","helpers","res","isBaseQueryError","error","name","setErrors","type","message","id","defaultMessage","isLoadingData","_jsxs","_Fragment","_jsx","Page","Title","Main","aria-busy","tabIndex","Form","method","onSubmit","validationSchema","disabled","initialValues","modified","isSubmitting","Layouts","Header","primaryAction","Button","loading","startIcon","Check","fullWidth","title","subtitle","secondaryAction","GradientBadge","label","Content","Loading","Flex","direction","alignItems","gap","background","padding","shadow","hasRadius","Typography","variant","tag","Grid","Root","hint","size","options","map","toString","placeholder","field","Item","col","xs","FormInputRenderer","props","MultiSelectInput","InputRenderer","useField","Field","Label","MultiSelect","onChange","onClear","withTags","MultiSelectOption","Hint","Error","ProtectedSSO","main","Protect"],"mappings":"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"}
|
|
@@ -1,8 +1,27 @@
|
|
|
1
|
-
declare const StyledLink: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<import("react-router-dom").NavLinkProps & import("react").RefAttributes<HTMLAnchorElement>, "ref"> & {
|
|
1
|
+
declare const StyledLink: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<Omit<import("react-router-dom").NavLinkProps & import("react").RefAttributes<HTMLAnchorElement>, "ref"> & {
|
|
2
2
|
ref?: ((instance: HTMLAnchorElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLAnchorElement> | null | undefined;
|
|
3
|
-
},
|
|
3
|
+
}, "$depth"> & {
|
|
4
|
+
$depth?: number;
|
|
5
|
+
}, never> & Partial<Pick<import("styled-components").FastOmit<Omit<import("react-router-dom").NavLinkProps & import("react").RefAttributes<HTMLAnchorElement>, "ref"> & {
|
|
4
6
|
ref?: ((instance: HTMLAnchorElement | null) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<HTMLAnchorElement> | null | undefined;
|
|
7
|
+
}, "$depth"> & {
|
|
8
|
+
$depth?: number;
|
|
5
9
|
}, never>>> & string & Omit<import("react").ForwardRefExoticComponent<import("react-router-dom").NavLinkProps & import("react").RefAttributes<HTMLAnchorElement>>, keyof import("react").Component<any, {}, any>>;
|
|
10
|
+
type SectionMenuItem = {
|
|
11
|
+
startIcon?: React.ReactNode;
|
|
12
|
+
onSelect: () => void;
|
|
13
|
+
label: string;
|
|
14
|
+
};
|
|
15
|
+
type SectionLink = {
|
|
16
|
+
label: string;
|
|
17
|
+
onClick?: () => void;
|
|
18
|
+
menu?: SectionMenuItem[];
|
|
19
|
+
/**
|
|
20
|
+
* This suppresses the default behavior, where input focus returns to the "+" trigger when the popover closes.
|
|
21
|
+
* This allows popover actions to change the focused element without it being immediately undone.
|
|
22
|
+
*/
|
|
23
|
+
suppressFocusCaptureOnMenuClose?: boolean;
|
|
24
|
+
};
|
|
6
25
|
export declare const SubNav: {
|
|
7
26
|
Main: ({ children, isFullPage, ...props }: {
|
|
8
27
|
children: React.ReactNode;
|
|
@@ -14,10 +33,12 @@ export declare const SubNav: {
|
|
|
14
33
|
Header: ({ label }: {
|
|
15
34
|
label: string;
|
|
16
35
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
17
|
-
Link: (props: Omit<React.ComponentProps<typeof StyledLink>, "label"> & {
|
|
18
|
-
label: React.ReactNode;
|
|
36
|
+
Link: (props: Omit<React.ComponentProps<typeof StyledLink>, "label" | "$depth"> & {
|
|
19
37
|
endAction?: React.ReactNode;
|
|
20
38
|
handleClick?: () => void;
|
|
39
|
+
label: React.ReactNode;
|
|
40
|
+
depth?: number;
|
|
41
|
+
bulleted?: boolean;
|
|
21
42
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
22
43
|
Sections: ({ children, ...props }: {
|
|
23
44
|
children: React.ReactNode[];
|
|
@@ -26,10 +47,7 @@ export declare const SubNav: {
|
|
|
26
47
|
Section: ({ label, children, link, sectionId, badgeLabel, }: {
|
|
27
48
|
label: string;
|
|
28
49
|
children: React.ReactNode[];
|
|
29
|
-
link?:
|
|
30
|
-
label: string;
|
|
31
|
-
onClick: () => void;
|
|
32
|
-
};
|
|
50
|
+
link?: SectionLink;
|
|
33
51
|
sectionId?: string;
|
|
34
52
|
badgeLabel?: string;
|
|
35
53
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -37,6 +55,7 @@ export declare const SubNav: {
|
|
|
37
55
|
label: string;
|
|
38
56
|
children: React.ReactNode[];
|
|
39
57
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
Folder: ({ defaultOpen, open: openProp, isDropTarget, endAction, children, onToggle, rowRef, label, depth, }: import("./SubNavFolder").SubNavFolderProps) => import("react/jsx-runtime").JSX.Element;
|
|
40
59
|
PageWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Omit<import("@strapi/design-system").TransientBoxProps & {
|
|
41
60
|
children?: React.ReactNode;
|
|
42
61
|
} & import("@strapi/design-system/dist/types").AsProp<import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements>> & Omit<Omit<any, "ref">, "children" | keyof import("@strapi/design-system/dist/types").AsProp<C> | keyof import("@strapi/design-system").TransientBoxProps> & {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface SubNavFolderProps {
|
|
2
|
+
label: string;
|
|
3
|
+
depth?: number;
|
|
4
|
+
open?: boolean;
|
|
5
|
+
defaultOpen?: boolean;
|
|
6
|
+
onToggle?: (open: boolean) => void;
|
|
7
|
+
endAction?: React.ReactNode;
|
|
8
|
+
/** Ref attached to the row element used as a drag-and-drop drop target. */
|
|
9
|
+
rowRef?: React.Ref<HTMLDivElement>;
|
|
10
|
+
isDropTarget?: boolean;
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
declare const SubNavFolder: ({ defaultOpen, open: openProp, isDropTarget, endAction, children, onToggle, rowRef, label, depth, }: SubNavFolderProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export { SubNavFolder };
|
|
15
|
+
export type { SubNavFolderProps };
|
|
@@ -8,6 +8,7 @@ export interface TelemetryProperties {
|
|
|
8
8
|
numberOfAllContentTypes?: number;
|
|
9
9
|
numberOfComponents?: number;
|
|
10
10
|
numberOfDynamicZones?: number;
|
|
11
|
+
numberOfContentTypeFolders?: number;
|
|
11
12
|
}
|
|
12
13
|
export interface TrackingContextValue {
|
|
13
14
|
uuid?: string | boolean;
|
|
@@ -25,7 +26,7 @@ declare const TrackingProvider: ({ children }: TrackingProviderProps) => import(
|
|
|
25
26
|
* event so understanding which properties go with which event is very helpful.
|
|
26
27
|
*/
|
|
27
28
|
export interface EventWithoutProperties {
|
|
28
|
-
name: 'changeComponentsOrder' | 'didAddComponentToDynamicZone' | 'didBulkDeleteEntries' | 'didNotBulkDeleteEntries' | 'didChangeDisplayedFields' | 'didCheckDraftRelations' | 'didClickGuidedTourHomepageApiTokens' | 'didClickGuidedTourHomepageContentManager' | 'didClickGuidedTourHomepageContentTypeBuilder' | 'didClickGuidedTourStep1CollectionType' | 'didClickGuidedTourStep2ContentManager' | 'didClickGuidedTourStep3ApiTokens' | 'didClickonBlogSection' | 'didClickonCodeExampleSection' | 'didClickonReadTheDocumentationSection' | 'didClickOnTryStrapiCloudSection' | 'didClickonTutorialSection' | 'didCreateGuidedTourCollectionType' | 'didCreateGuidedTourEntry' | 'didCreateNewRole' | 'didCreateRole' | 'didDeleteToken' | 'didDuplicateRole' | 'didEditEditSettings' | 'didEditEmailTemplates' | 'didEditFieldNameOnContentType' | 'didEditListSettings' | 'didEditMediaLibraryConfig' | 'didEditNameOfContentType' | 'didGenerateGuidedTourApiTokens' | 'didLaunchGuidedtour' | 'didNotCreateFirstAdmin' | 'didNotSaveComponent' | 'didPluginLearnMore' | 'didBulkPublishEntries' | 'didNotBulkPublishEntries' | 'didUnpublishEntry' | 'didBulkUnpublishEntries' | 'didNotBulkUnpublishEntries' | 'didSaveComponent' | 'didSaveContentType' | 'didSearch' | 'didSkipGuidedtour' | 'didSubmitPlugin' | 'didSubmitProvider' | 'didUpdateConditions' | 'didSelectAllMediaLibraryElements' | 'didSelectContentTypeFieldSettings' | 'didSelectContentTypeSettings' | 'didEditAuthenticationProvider' | 'didRestoreHistoryVersion' | 'hasClickedCTBAddFieldBanner' | 'removeComponentFromDynamicZone' | 'willAddMoreFieldToContentType' | 'willBulkDeleteEntries' | 'willBulkPublishEntries' | 'willBulkUnpublishEntries' | 'willChangeNumberOfEntriesPerPage' | 'willCheckDraftRelations' | 'willCreateComponent' | 'willCreateComponentFromAttributesModal' | 'willCreateContentType' | 'willCreateFirstAdmin' | 'willCreateNewRole' | 'willCreateRole' | 'willCreateSingleType' | 'willCreateStage' | 'willCreateWorkflow' | 'willDeleteEntryFromList' | 'willDeleteFieldOfContentType' | 'willDuplicateRole' | 'willEditEditLayout' | 'willEditEmailTemplates' | 'willEditEntryFromButton' | 'willEditEntryFromList' | 'willEditReleaseFromHome' | 'willEditFieldOfContentType' | 'willEditMediaLibraryConfig' | 'willEditNameOfContentType' | 'willEditNameOfSingleType' | 'willEditAuthenticationProvider' | 'willEditFieldNameOnContentType' | 'willEditStage' | 'willFilterEntries' | 'willInstallPlugin' | 'willOpenAuditLogDetailsFromHome' | 'willUnpublishEntry' | 'willSaveComponent' | 'willSaveContentType' | 'willSaveContentTypeLayout' | 'didEditFieldNameOnContentType' | 'didCreateRelease' | 'didStartNewChat' | 'didLaunchGuidedtour' | 'didEditAICaption' | 'didEditAIAlternativeText' | 'didGenerateMetadataRetroactively';
|
|
29
|
+
name: 'changeComponentsOrder' | 'didAddComponentToDynamicZone' | 'didBulkDeleteEntries' | 'didNotBulkDeleteEntries' | 'didChangeDisplayedFields' | 'didCheckDraftRelations' | 'didClickGuidedTourHomepageApiTokens' | 'didClickGuidedTourHomepageContentManager' | 'didClickGuidedTourHomepageContentTypeBuilder' | 'didClickGuidedTourStep1CollectionType' | 'didClickGuidedTourStep2ContentManager' | 'didClickGuidedTourStep3ApiTokens' | 'didClickonBlogSection' | 'didClickonCodeExampleSection' | 'didClickonReadTheDocumentationSection' | 'didClickOnTryStrapiCloudSection' | 'didClickonTutorialSection' | 'didCreateGuidedTourCollectionType' | 'didCreateGuidedTourEntry' | 'didCreateNewRole' | 'didCreateRole' | 'didDeleteToken' | 'didDuplicateRole' | 'didEditEditSettings' | 'didEditEmailTemplates' | 'didEditFieldNameOnContentType' | 'didEditListSettings' | 'didEditMediaLibraryConfig' | 'didEditNameOfContentType' | 'didGenerateGuidedTourApiTokens' | 'didLaunchGuidedtour' | 'didNotCreateFirstAdmin' | 'didNotSaveComponent' | 'didPluginLearnMore' | 'didBulkPublishEntries' | 'didNotBulkPublishEntries' | 'didUnpublishEntry' | 'didBulkUnpublishEntries' | 'didNotBulkUnpublishEntries' | 'didSaveComponent' | 'didSaveContentType' | 'didSearch' | 'didSkipGuidedtour' | 'didSubmitPlugin' | 'didSubmitProvider' | 'didUpdateConditions' | 'didSelectAllMediaLibraryElements' | 'didSelectContentTypeFieldSettings' | 'didSelectContentTypeSettings' | 'didEditAuthenticationProvider' | 'didRestoreHistoryVersion' | 'hasClickedCTBAddFieldBanner' | 'removeComponentFromDynamicZone' | 'willAddMoreFieldToContentType' | 'willBulkDeleteEntries' | 'willBulkPublishEntries' | 'willBulkUnpublishEntries' | 'willChangeNumberOfEntriesPerPage' | 'willCheckDraftRelations' | 'willCreateComponent' | 'willCreateComponentFromAttributesModal' | 'willCreateContentType' | 'willCreateFirstAdmin' | 'willCreateNewRole' | 'willCreateRole' | 'willCreateSingleType' | 'willCreateStage' | 'willCreateWorkflow' | 'willDeleteEntryFromList' | 'willDeleteFieldOfContentType' | 'willDuplicateRole' | 'willEditEditLayout' | 'willEditEmailTemplates' | 'willEditEntryFromButton' | 'willEditEntryFromList' | 'willEditReleaseFromHome' | 'willEditFieldOfContentType' | 'willEditMediaLibraryConfig' | 'willEditNameOfContentType' | 'willEditNameOfSingleType' | 'willEditAuthenticationProvider' | 'willEditFieldNameOnContentType' | 'willEditStage' | 'willFilterEntries' | 'willInstallPlugin' | 'willOpenAuditLogDetailsFromHome' | 'willUnpublishEntry' | 'willSaveComponent' | 'willSaveContentType' | 'willSaveContentTypeLayout' | 'didEditFieldNameOnContentType' | 'didCreateRelease' | 'didStartNewChat' | 'didLaunchGuidedtour' | 'didEditAICaption' | 'didEditAIAlternativeText' | 'didGenerateMetadataRetroactively' | 'didActOnFolders';
|
|
29
30
|
properties?: never;
|
|
30
31
|
}
|
|
31
32
|
interface DidAccessAuthenticatedAdministrationEvent {
|
|
@@ -18,6 +18,7 @@ declare const useInitQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks
|
|
|
18
18
|
numberOfAllContentTypes: number;
|
|
19
19
|
numberOfComponents: number;
|
|
20
20
|
numberOfDynamicZones: number;
|
|
21
|
+
numberOfContentTypeFolders: number;
|
|
21
22
|
}, "adminApi">>, useInformationQuery: import("@reduxjs/toolkit/dist/query/react/buildHooks").UseQuery<import("@reduxjs/toolkit/query").QueryDefinition<void, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("..").QueryArguments, unknown, import("..").BaseQueryError | import("@reduxjs/toolkit").SerializedError>, "GuidedTourMeta" | "HomepageKeyStatistics" | "AiUsage" | "AiFeatureConfig" | "ProjectSettings" | "LicenseLimits" | "LicenseTrialTimeLeft", {
|
|
22
23
|
currentEnvironment: string;
|
|
23
24
|
autoReload: boolean;
|