node_modules ignore

This commit is contained in:
oier committed 2025-05-08 23:43:47 +02:00
1 parent e19d52f172
commit 4574544c9f
65041 files changed
+10593536

No files matched your search

@@ -0,0 +1,49 @@
'use strict';
const getMethodColor = (verb)=>{
switch(verb){
case 'POST':
{
return {
text: 'success600',
border: 'success200',
background: 'success100'
};
}
case 'GET':
{
return {
text: 'secondary600',
border: 'secondary200',
background: 'secondary100'
};
}
case 'PUT':
{
return {
text: 'warning600',
border: 'warning200',
background: 'warning100'
};
}
case 'DELETE':
{
return {
text: 'danger600',
border: 'danger200',
background: 'danger100'
};
}
default:
{
return {
text: 'neutral600',
border: 'neutral200',
background: 'neutral100'
};
}
}
};
module.exports = getMethodColor;
//# sourceMappingURL=getMethodColor.js.map
@@ -0,0 +1 @@
{"version":3,"file":"getMethodColor.js","sources":["../../../../admin/src/components/BoundRoute/getMethodColor.js"],"sourcesContent":["const getMethodColor = (verb) => {\n switch (verb) {\n case 'POST': {\n return {\n text: 'success600',\n border: 'success200',\n background: 'success100',\n };\n }\n case 'GET': {\n return {\n text: 'secondary600',\n border: 'secondary200',\n background: 'secondary100',\n };\n }\n case 'PUT': {\n return {\n text: 'warning600',\n border: 'warning200',\n background: 'warning100',\n };\n }\n case 'DELETE': {\n return {\n text: 'danger600',\n border: 'danger200',\n background: 'danger100',\n };\n }\n default: {\n return {\n text: 'neutral600',\n border: 'neutral200',\n background: 'neutral100',\n };\n }\n }\n};\n\nexport default getMethodColor;\n"],"names":["getMethodColor","verb","text","border","background"],"mappings":";;AAAA,MAAMA,iBAAiB,CAACC,IAAAA,GAAAA;IACtB,OAAQA,IAAAA;QACN,KAAK,MAAA;AAAQ,YAAA;gBACX,OAAO;oBACLC,IAAM,EAAA,YAAA;oBACNC,MAAQ,EAAA,YAAA;oBACRC,UAAY,EAAA;AACd,iBAAA;AACF;QACA,KAAK,KAAA;AAAO,YAAA;gBACV,OAAO;oBACLF,IAAM,EAAA,cAAA;oBACNC,MAAQ,EAAA,cAAA;oBACRC,UAAY,EAAA;AACd,iBAAA;AACF;QACA,KAAK,KAAA;AAAO,YAAA;gBACV,OAAO;oBACLF,IAAM,EAAA,YAAA;oBACNC,MAAQ,EAAA,YAAA;oBACRC,UAAY,EAAA;AACd,iBAAA;AACF;QACA,KAAK,QAAA;AAAU,YAAA;gBACb,OAAO;oBACLF,IAAM,EAAA,WAAA;oBACNC,MAAQ,EAAA,WAAA;oBACRC,UAAY,EAAA;AACd,iBAAA;AACF;AACA,QAAA;AAAS,YAAA;gBACP,OAAO;oBACLF,IAAM,EAAA,YAAA;oBACNC,MAAQ,EAAA,YAAA;oBACRC,UAAY,EAAA;AACd,iBAAA;AACF;AACF;AACF;;;;"}
@@ -0,0 +1,47 @@
const getMethodColor = (verb)=>{
switch(verb){
case 'POST':
{
return {
text: 'success600',
border: 'success200',
background: 'success100'
};
}
case 'GET':
{
return {
text: 'secondary600',
border: 'secondary200',
background: 'secondary100'
};
}
case 'PUT':
{
return {
text: 'warning600',
border: 'warning200',
background: 'warning100'
};
}
case 'DELETE':
{
return {
text: 'danger600',
border: 'danger200',
background: 'danger100'
};
}
default:
{
return {
text: 'neutral600',
border: 'neutral200',
background: 'neutral100'
};
}
}
};
export { getMethodColor as default };
//# sourceMappingURL=getMethodColor.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"getMethodColor.mjs","sources":["../../../../admin/src/components/BoundRoute/getMethodColor.js"],"sourcesContent":["const getMethodColor = (verb) => {\n switch (verb) {\n case 'POST': {\n return {\n text: 'success600',\n border: 'success200',\n background: 'success100',\n };\n }\n case 'GET': {\n return {\n text: 'secondary600',\n border: 'secondary200',\n background: 'secondary100',\n };\n }\n case 'PUT': {\n return {\n text: 'warning600',\n border: 'warning200',\n background: 'warning100',\n };\n }\n case 'DELETE': {\n return {\n text: 'danger600',\n border: 'danger200',\n background: 'danger100',\n };\n }\n default: {\n return {\n text: 'neutral600',\n border: 'neutral200',\n background: 'neutral100',\n };\n }\n }\n};\n\nexport default getMethodColor;\n"],"names":["getMethodColor","verb","text","border","background"],"mappings":"AAAA,MAAMA,iBAAiB,CAACC,IAAAA,GAAAA;IACtB,OAAQA,IAAAA;QACN,KAAK,MAAA;AAAQ,YAAA;gBACX,OAAO;oBACLC,IAAM,EAAA,YAAA;oBACNC,MAAQ,EAAA,YAAA;oBACRC,UAAY,EAAA;AACd,iBAAA;AACF;QACA,KAAK,KAAA;AAAO,YAAA;gBACV,OAAO;oBACLF,IAAM,EAAA,cAAA;oBACNC,MAAQ,EAAA,cAAA;oBACRC,UAAY,EAAA;AACd,iBAAA;AACF;QACA,KAAK,KAAA;AAAO,YAAA;gBACV,OAAO;oBACLF,IAAM,EAAA,YAAA;oBACNC,MAAQ,EAAA,YAAA;oBACRC,UAAY,EAAA;AACd,iBAAA;AACF;QACA,KAAK,QAAA;AAAU,YAAA;gBACb,OAAO;oBACLF,IAAM,EAAA,WAAA;oBACNC,MAAQ,EAAA,WAAA;oBACRC,UAAY,EAAA;AACd,iBAAA;AACF;AACA,QAAA;AAAS,YAAA;gBACP,OAAO;oBACLF,IAAM,EAAA,YAAA;oBACNC,MAAQ,EAAA,YAAA;oBACRC,UAAY,EAAA;AACd,iBAAA;AACF;AACF;AACF;;;;"}
@@ -0,0 +1,98 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
require('react');
var designSystem = require('@strapi/design-system');
var map = require('lodash/map');
var tail = require('lodash/tail');
var PropTypes = require('prop-types');
var reactIntl = require('react-intl');
var styledComponents = require('styled-components');
var getMethodColor = require('./getMethodColor.js');
const MethodBox = styledComponents.styled(designSystem.Box)`
margin: -1px;
border-radius: ${({ theme })=>theme.spaces[1]} 0 0 ${({ theme })=>theme.spaces[1]};
`;
function BoundRoute({ route }) {
const { formatMessage } = reactIntl.useIntl();
const { method, handler: title, path } = route;
const formattedRoute = path ? tail(path.split('/')) : [];
const [controller = '', action = ''] = title ? title.split('.') : [];
const colors = getMethodColor(route.method);
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
direction: "column",
alignItems: "stretch",
gap: 2,
children: [
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Typography, {
variant: "delta",
tag: "h3",
children: [
formatMessage({
id: 'users-permissions.BoundRoute.title',
defaultMessage: 'Bound route to'
}),
" ",
/*#__PURE__*/ jsxRuntime.jsx("span", {
children: controller
}),
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Typography, {
variant: "delta",
textColor: "primary600",
children: [
".",
action
]
})
]
}),
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
hasRadius: true,
background: "neutral0",
borderColor: "neutral200",
gap: 0,
children: [
/*#__PURE__*/ jsxRuntime.jsx(MethodBox, {
background: colors.background,
borderColor: colors.border,
padding: 2,
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
fontWeight: "bold",
textColor: colors.text,
children: method
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
paddingLeft: 2,
paddingRight: 2,
children: map(formattedRoute, (value)=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Typography, {
textColor: value.includes(':') ? 'neutral600' : 'neutral900',
children: [
"/",
value
]
}, value))
})
]
})
]
});
}
BoundRoute.defaultProps = {
route: {
handler: 'Nocontroller.error',
method: 'GET',
path: '/there-is-no-path'
}
};
BoundRoute.propTypes = {
route: PropTypes.shape({
handler: PropTypes.string,
method: PropTypes.string,
path: PropTypes.string
})
};
module.exports = BoundRoute;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../../../admin/src/components/BoundRoute/index.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport map from 'lodash/map';\nimport tail from 'lodash/tail';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport getMethodColor from './getMethodColor';\n\nconst MethodBox = styled(Box)`\n margin: -1px;\n border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};\n`;\n\nfunction BoundRoute({ route }) {\n const { formatMessage } = useIntl();\n\n const { method, handler: title, path } = route;\n const formattedRoute = path ? tail(path.split('/')) : [];\n const [controller = '', action = ''] = title ? title.split('.') : [];\n const colors = getMethodColor(route.method);\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'users-permissions.BoundRoute.title',\n defaultMessage: 'Bound route to',\n })}\n &nbsp;\n <span>{controller}</span>\n <Typography variant=\"delta\" textColor=\"primary600\">\n .{action}\n </Typography>\n </Typography>\n <Flex hasRadius background=\"neutral0\" borderColor=\"neutral200\" gap={0}>\n <MethodBox background={colors.background} borderColor={colors.border} padding={2}>\n <Typography fontWeight=\"bold\" textColor={colors.text}>\n {method}\n </Typography>\n </MethodBox>\n <Box paddingLeft={2} paddingRight={2}>\n {map(formattedRoute, (value) => (\n <Typography key={value} textColor={value.includes(':') ? 'neutral600' : 'neutral900'}>\n /{value}\n </Typography>\n ))}\n </Box>\n </Flex>\n </Flex>\n );\n}\n\nBoundRoute.defaultProps = {\n route: {\n handler: 'Nocontroller.error',\n method: 'GET',\n path: '/there-is-no-path',\n },\n};\n\nBoundRoute.propTypes = {\n route: PropTypes.shape({\n handler: PropTypes.string,\n method: PropTypes.string,\n path: PropTypes.string,\n }),\n};\n\nexport default BoundRoute;\n"],"names":["MethodBox","styled","Box","theme","spaces","BoundRoute","route","formatMessage","useIntl","method","handler","title","path","formattedRoute","tail","split","controller","action","colors","getMethodColor","_jsxs","Flex","direction","alignItems","gap","Typography","variant","tag","id","defaultMessage","_jsx","span","textColor","hasRadius","background","borderColor","border","padding","fontWeight","text","paddingLeft","paddingRight","map","value","includes","defaultProps","propTypes","PropTypes","shape","string"],"mappings":";;;;;;;;;;;;AAWA,MAAMA,SAAAA,GAAYC,uBAAOC,CAAAA,gBAAAA,CAAI;;iBAEZ,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,CAAE,CAAA,CAAC,KAAK,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,CAAA,CAAE,CAAC;AACxF,CAAC;AAED,SAASC,UAAAA,CAAW,EAAEC,KAAK,EAAE,EAAA;IAC3B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAE1B,MAAM,EAAEC,MAAM,EAAEC,OAAAA,EAASC,KAAK,EAAEC,IAAI,EAAE,GAAGN,KAAAA;AACzC,IAAA,MAAMO,iBAAiBD,IAAOE,GAAAA,IAAAA,CAAKF,KAAKG,KAAK,CAAC,QAAQ,EAAE;AACxD,IAAA,MAAM,CAACC,UAAAA,GAAa,EAAE,EAAEC,MAAS,GAAA,EAAE,CAAC,GAAGN,KAAQA,GAAAA,KAAAA,CAAMI,KAAK,CAAC,OAAO,EAAE;IACpE,MAAMG,MAAAA,GAASC,cAAeb,CAAAA,KAAAA,CAAMG,MAAM,CAAA;AAE1C,IAAA,qBACEW,eAACC,CAAAA,iBAAAA,EAAAA;QAAKC,SAAU,EAAA,QAAA;QAASC,UAAW,EAAA,SAAA;QAAUC,GAAK,EAAA,CAAA;;0BACjDJ,eAACK,CAAAA,uBAAAA,EAAAA;gBAAWC,OAAQ,EAAA,OAAA;gBAAQC,GAAI,EAAA,IAAA;;oBAC7BpB,aAAc,CAAA;wBACbqB,EAAI,EAAA,oCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;AAAG,oBAAA,GAAA;kCAEHC,cAACC,CAAAA,MAAAA,EAAAA;AAAMf,wBAAAA,QAAAA,EAAAA;;kCACPI,eAACK,CAAAA,uBAAAA,EAAAA;wBAAWC,OAAQ,EAAA,OAAA;wBAAQM,SAAU,EAAA,YAAA;;AAAa,4BAAA,GAAA;AAC/Cf,4BAAAA;;;;;0BAGNG,eAACC,CAAAA,iBAAAA,EAAAA;gBAAKY,SAAS,EAAA,IAAA;gBAACC,UAAW,EAAA,UAAA;gBAAWC,WAAY,EAAA,YAAA;gBAAaX,GAAK,EAAA,CAAA;;kCAClEM,cAAC9B,CAAAA,SAAAA,EAAAA;AAAUkC,wBAAAA,UAAAA,EAAYhB,OAAOgB,UAAU;AAAEC,wBAAAA,WAAAA,EAAajB,OAAOkB,MAAM;wBAAEC,OAAS,EAAA,CAAA;AAC7E,wBAAA,QAAA,gBAAAP,cAACL,CAAAA,uBAAAA,EAAAA;4BAAWa,UAAW,EAAA,MAAA;AAAON,4BAAAA,SAAAA,EAAWd,OAAOqB,IAAI;AACjD9B,4BAAAA,QAAAA,EAAAA;;;kCAGLqB,cAAC5B,CAAAA,gBAAAA,EAAAA;wBAAIsC,WAAa,EAAA,CAAA;wBAAGC,YAAc,EAAA,CAAA;kCAChCC,GAAI7B,CAAAA,cAAAA,EAAgB,CAAC8B,KAAAA,iBACpBvB,eAACK,CAAAA,uBAAAA,EAAAA;AAAuBO,gCAAAA,SAAAA,EAAWW,KAAMC,CAAAA,QAAQ,CAAC,GAAA,CAAA,GAAO,YAAe,GAAA,YAAA;;AAAc,oCAAA,GAAA;AAClFD,oCAAAA;;AADaA,6BAAAA,EAAAA,KAAAA,CAAAA;;;;;;AAQ7B;AAEAtC,UAAAA,CAAWwC,YAAY,GAAG;IACxBvC,KAAO,EAAA;QACLI,OAAS,EAAA,oBAAA;QACTD,MAAQ,EAAA,KAAA;QACRG,IAAM,EAAA;AACR;AACF,CAAA;AAEAP,UAAAA,CAAWyC,SAAS,GAAG;IACrBxC,KAAOyC,EAAAA,SAAAA,CAAUC,KAAK,CAAC;AACrBtC,QAAAA,OAAAA,EAASqC,UAAUE,MAAM;AACzBxC,QAAAA,MAAAA,EAAQsC,UAAUE,MAAM;AACxBrC,QAAAA,IAAAA,EAAMmC,UAAUE;AAClB,KAAA;AACF,CAAA;;;;"}
@@ -0,0 +1,96 @@
import { jsxs, jsx } from 'react/jsx-runtime';
import 'react';
import { Box, Flex, Typography } from '@strapi/design-system';
import map from 'lodash/map';
import tail from 'lodash/tail';
import PropTypes from 'prop-types';
import { useIntl } from 'react-intl';
import { styled } from 'styled-components';
import getMethodColor from './getMethodColor.mjs';
const MethodBox = styled(Box)`
margin: -1px;
border-radius: ${({ theme })=>theme.spaces[1]} 0 0 ${({ theme })=>theme.spaces[1]};
`;
function BoundRoute({ route }) {
const { formatMessage } = useIntl();
const { method, handler: title, path } = route;
const formattedRoute = path ? tail(path.split('/')) : [];
const [controller = '', action = ''] = title ? title.split('.') : [];
const colors = getMethodColor(route.method);
return /*#__PURE__*/ jsxs(Flex, {
direction: "column",
alignItems: "stretch",
gap: 2,
children: [
/*#__PURE__*/ jsxs(Typography, {
variant: "delta",
tag: "h3",
children: [
formatMessage({
id: 'users-permissions.BoundRoute.title',
defaultMessage: 'Bound route to'
}),
" ",
/*#__PURE__*/ jsx("span", {
children: controller
}),
/*#__PURE__*/ jsxs(Typography, {
variant: "delta",
textColor: "primary600",
children: [
".",
action
]
})
]
}),
/*#__PURE__*/ jsxs(Flex, {
hasRadius: true,
background: "neutral0",
borderColor: "neutral200",
gap: 0,
children: [
/*#__PURE__*/ jsx(MethodBox, {
background: colors.background,
borderColor: colors.border,
padding: 2,
children: /*#__PURE__*/ jsx(Typography, {
fontWeight: "bold",
textColor: colors.text,
children: method
})
}),
/*#__PURE__*/ jsx(Box, {
paddingLeft: 2,
paddingRight: 2,
children: map(formattedRoute, (value)=>/*#__PURE__*/ jsxs(Typography, {
textColor: value.includes(':') ? 'neutral600' : 'neutral900',
children: [
"/",
value
]
}, value))
})
]
})
]
});
}
BoundRoute.defaultProps = {
route: {
handler: 'Nocontroller.error',
method: 'GET',
path: '/there-is-no-path'
}
};
BoundRoute.propTypes = {
route: PropTypes.shape({
handler: PropTypes.string,
method: PropTypes.string,
path: PropTypes.string
})
};
export { BoundRoute as default };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../../../admin/src/components/BoundRoute/index.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport map from 'lodash/map';\nimport tail from 'lodash/tail';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport getMethodColor from './getMethodColor';\n\nconst MethodBox = styled(Box)`\n margin: -1px;\n border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};\n`;\n\nfunction BoundRoute({ route }) {\n const { formatMessage } = useIntl();\n\n const { method, handler: title, path } = route;\n const formattedRoute = path ? tail(path.split('/')) : [];\n const [controller = '', action = ''] = title ? title.split('.') : [];\n const colors = getMethodColor(route.method);\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'users-permissions.BoundRoute.title',\n defaultMessage: 'Bound route to',\n })}\n &nbsp;\n <span>{controller}</span>\n <Typography variant=\"delta\" textColor=\"primary600\">\n .{action}\n </Typography>\n </Typography>\n <Flex hasRadius background=\"neutral0\" borderColor=\"neutral200\" gap={0}>\n <MethodBox background={colors.background} borderColor={colors.border} padding={2}>\n <Typography fontWeight=\"bold\" textColor={colors.text}>\n {method}\n </Typography>\n </MethodBox>\n <Box paddingLeft={2} paddingRight={2}>\n {map(formattedRoute, (value) => (\n <Typography key={value} textColor={value.includes(':') ? 'neutral600' : 'neutral900'}>\n /{value}\n </Typography>\n ))}\n </Box>\n </Flex>\n </Flex>\n );\n}\n\nBoundRoute.defaultProps = {\n route: {\n handler: 'Nocontroller.error',\n method: 'GET',\n path: '/there-is-no-path',\n },\n};\n\nBoundRoute.propTypes = {\n route: PropTypes.shape({\n handler: PropTypes.string,\n method: PropTypes.string,\n path: PropTypes.string,\n }),\n};\n\nexport default BoundRoute;\n"],"names":["MethodBox","styled","Box","theme","spaces","BoundRoute","route","formatMessage","useIntl","method","handler","title","path","formattedRoute","tail","split","controller","action","colors","getMethodColor","_jsxs","Flex","direction","alignItems","gap","Typography","variant","tag","id","defaultMessage","_jsx","span","textColor","hasRadius","background","borderColor","border","padding","fontWeight","text","paddingLeft","paddingRight","map","value","includes","defaultProps","propTypes","PropTypes","shape","string"],"mappings":";;;;;;;;;;AAWA,MAAMA,SAAAA,GAAYC,MAAOC,CAAAA,GAAAA,CAAI;;iBAEZ,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,CAAE,CAAA,CAAC,KAAK,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAMC,CAAAA,MAAM,CAAC,CAAA,CAAE,CAAC;AACxF,CAAC;AAED,SAASC,UAAAA,CAAW,EAAEC,KAAK,EAAE,EAAA;IAC3B,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,MAAM,EAAEC,MAAM,EAAEC,OAAAA,EAASC,KAAK,EAAEC,IAAI,EAAE,GAAGN,KAAAA;AACzC,IAAA,MAAMO,iBAAiBD,IAAOE,GAAAA,IAAAA,CAAKF,KAAKG,KAAK,CAAC,QAAQ,EAAE;AACxD,IAAA,MAAM,CAACC,UAAAA,GAAa,EAAE,EAAEC,MAAS,GAAA,EAAE,CAAC,GAAGN,KAAQA,GAAAA,KAAAA,CAAMI,KAAK,CAAC,OAAO,EAAE;IACpE,MAAMG,MAAAA,GAASC,cAAeb,CAAAA,KAAAA,CAAMG,MAAM,CAAA;AAE1C,IAAA,qBACEW,IAACC,CAAAA,IAAAA,EAAAA;QAAKC,SAAU,EAAA,QAAA;QAASC,UAAW,EAAA,SAAA;QAAUC,GAAK,EAAA,CAAA;;0BACjDJ,IAACK,CAAAA,UAAAA,EAAAA;gBAAWC,OAAQ,EAAA,OAAA;gBAAQC,GAAI,EAAA,IAAA;;oBAC7BpB,aAAc,CAAA;wBACbqB,EAAI,EAAA,oCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CAAA;AAAG,oBAAA,GAAA;kCAEHC,GAACC,CAAAA,MAAAA,EAAAA;AAAMf,wBAAAA,QAAAA,EAAAA;;kCACPI,IAACK,CAAAA,UAAAA,EAAAA;wBAAWC,OAAQ,EAAA,OAAA;wBAAQM,SAAU,EAAA,YAAA;;AAAa,4BAAA,GAAA;AAC/Cf,4BAAAA;;;;;0BAGNG,IAACC,CAAAA,IAAAA,EAAAA;gBAAKY,SAAS,EAAA,IAAA;gBAACC,UAAW,EAAA,UAAA;gBAAWC,WAAY,EAAA,YAAA;gBAAaX,GAAK,EAAA,CAAA;;kCAClEM,GAAC9B,CAAAA,SAAAA,EAAAA;AAAUkC,wBAAAA,UAAAA,EAAYhB,OAAOgB,UAAU;AAAEC,wBAAAA,WAAAA,EAAajB,OAAOkB,MAAM;wBAAEC,OAAS,EAAA,CAAA;AAC7E,wBAAA,QAAA,gBAAAP,GAACL,CAAAA,UAAAA,EAAAA;4BAAWa,UAAW,EAAA,MAAA;AAAON,4BAAAA,SAAAA,EAAWd,OAAOqB,IAAI;AACjD9B,4BAAAA,QAAAA,EAAAA;;;kCAGLqB,GAAC5B,CAAAA,GAAAA,EAAAA;wBAAIsC,WAAa,EAAA,CAAA;wBAAGC,YAAc,EAAA,CAAA;kCAChCC,GAAI7B,CAAAA,cAAAA,EAAgB,CAAC8B,KAAAA,iBACpBvB,IAACK,CAAAA,UAAAA,EAAAA;AAAuBO,gCAAAA,SAAAA,EAAWW,KAAMC,CAAAA,QAAQ,CAAC,GAAA,CAAA,GAAO,YAAe,GAAA,YAAA;;AAAc,oCAAA,GAAA;AAClFD,oCAAAA;;AADaA,6BAAAA,EAAAA,KAAAA,CAAAA;;;;;;AAQ7B;AAEAtC,UAAAA,CAAWwC,YAAY,GAAG;IACxBvC,KAAO,EAAA;QACLI,OAAS,EAAA,oBAAA;QACTD,MAAQ,EAAA,KAAA;QACRG,IAAM,EAAA;AACR;AACF,CAAA;AAEAP,UAAAA,CAAWyC,SAAS,GAAG;IACrBxC,KAAOyC,EAAAA,SAAAA,CAAUC,KAAK,CAAC;AACrBtC,QAAAA,OAAAA,EAASqC,UAAUE,MAAM;AACzBxC,QAAAA,MAAAA,EAAQsC,UAAUE,MAAM;AACxBrC,QAAAA,IAAAA,EAAMmC,UAAUE;AAClB,KAAA;AACF,CAAA;;;;"}
@@ -0,0 +1,123 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
require('react');
var designSystem = require('@strapi/design-system');
var PropTypes = require('prop-types');
var reactIntl = require('react-intl');
const Input = ({ description, disabled, intlLabel, error, name, onChange, placeholder, providerToEditName, type, value })=>{
const { formatMessage } = reactIntl.useIntl();
const inputValue = name === 'noName' ? `${window.strapi.backendURL}/api/connect/${providerToEditName}/callback` : value;
const label = formatMessage({
id: intlLabel.id,
defaultMessage: intlLabel.defaultMessage
}, {
provider: providerToEditName,
...intlLabel.values
});
const hint = description ? formatMessage({
id: description.id,
defaultMessage: description.defaultMessage
}, {
provider: providerToEditName,
...description.values
}) : '';
if (type === 'bool') {
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
hint: hint,
name: name,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
children: label
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Toggle, {
"aria-label": name,
checked: value,
disabled: disabled,
offLabel: formatMessage({
id: 'app.components.ToggleCheckbox.off-label',
defaultMessage: 'Off'
}),
onLabel: formatMessage({
id: 'app.components.ToggleCheckbox.on-label',
defaultMessage: 'On'
}),
onChange: (e)=>{
onChange({
target: {
name,
value: e.target.checked
}
});
}
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Hint, {})
]
});
}
const formattedPlaceholder = placeholder ? formatMessage({
id: placeholder.id,
defaultMessage: placeholder.defaultMessage
}, {
...placeholder.values
}) : '';
const errorMessage = error ? formatMessage({
id: error,
defaultMessage: error
}) : '';
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Field.Root, {
error: errorMessage,
name: name,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Label, {
children: label
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.TextInput, {
disabled: disabled,
onChange: onChange,
placeholder: formattedPlaceholder,
type: type,
value: inputValue
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Field.Error, {})
]
});
};
Input.defaultProps = {
description: null,
disabled: false,
error: '',
placeholder: null,
value: ''
};
Input.propTypes = {
description: PropTypes.shape({
id: PropTypes.string.isRequired,
defaultMessage: PropTypes.string.isRequired,
values: PropTypes.object
}),
disabled: PropTypes.bool,
error: PropTypes.string,
intlLabel: PropTypes.shape({
id: PropTypes.string.isRequired,
defaultMessage: PropTypes.string.isRequired,
values: PropTypes.object
}).isRequired,
name: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired,
placeholder: PropTypes.shape({
id: PropTypes.string.isRequired,
defaultMessage: PropTypes.string.isRequired,
values: PropTypes.object
}),
providerToEditName: PropTypes.string.isRequired,
type: PropTypes.string.isRequired,
value: PropTypes.oneOfType([
PropTypes.bool,
PropTypes.string
])
};
module.exports = Input;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../../../../admin/src/components/FormModal/Input/index.jsx"],"sourcesContent":["/**\n *\n * Input\n *\n */\n\nimport * as React from 'react';\n\nimport { TextInput, Toggle, Field } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst Input = ({\n description,\n disabled,\n intlLabel,\n error,\n name,\n onChange,\n placeholder,\n providerToEditName,\n type,\n value,\n}) => {\n const { formatMessage } = useIntl();\n const inputValue =\n name === 'noName'\n ? `${window.strapi.backendURL}/api/connect/${providerToEditName}/callback`\n : value;\n\n const label = formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { provider: providerToEditName, ...intlLabel.values }\n );\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { provider: providerToEditName, ...description.values }\n )\n : '';\n\n if (type === 'bool') {\n return (\n <Field.Root hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <Toggle\n aria-label={name}\n checked={value}\n disabled={disabled}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.checked } });\n }}\n />\n <Field.Hint />\n </Field.Root>\n );\n }\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n\n return (\n <Field.Root error={errorMessage} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput\n disabled={disabled}\n onChange={onChange}\n placeholder={formattedPlaceholder}\n type={type}\n value={inputValue}\n />\n <Field.Error />\n </Field.Root>\n );\n};\n\nInput.defaultProps = {\n description: null,\n disabled: false,\n error: '',\n placeholder: null,\n value: '',\n};\n\nInput.propTypes = {\n description: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n disabled: PropTypes.bool,\n error: PropTypes.string,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n placeholder: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n providerToEditName: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n};\n\nexport default Input;\n"],"names":["Input","description","disabled","intlLabel","error","name","onChange","placeholder","providerToEditName","type","value","formatMessage","useIntl","inputValue","window","strapi","backendURL","label","id","defaultMessage","provider","values","hint","_jsxs","Field","Root","_jsx","Label","Toggle","aria-label","checked","offLabel","onLabel","e","target","Hint","formattedPlaceholder","errorMessage","TextInput","Error","defaultProps","propTypes","PropTypes","shape","string","isRequired","object","bool","func","oneOfType"],"mappings":";;;;;;;;AAYMA,MAAAA,KAAAA,GAAQ,CAAC,EACbC,WAAW,EACXC,QAAQ,EACRC,SAAS,EACTC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,WAAW,EACXC,kBAAkB,EAClBC,IAAI,EACJC,KAAK,EACN,GAAA;IACC,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,UACJR,GAAAA,IAAAA,KAAS,QACL,GAAA,CAAC,EAAES,MAAOC,CAAAA,MAAM,CAACC,UAAU,CAAC,aAAa,EAAER,kBAAmB,CAAA,SAAS,CAAC,GACxEE,KAAAA;AAEN,IAAA,MAAMO,QAAQN,aACZ,CAAA;AAAEO,QAAAA,EAAAA,EAAIf,UAAUe,EAAE;AAAEC,QAAAA,cAAAA,EAAgBhB,UAAUgB;KAC9C,EAAA;QAAEC,QAAUZ,EAAAA,kBAAAA;AAAoB,QAAA,GAAGL,UAAUkB;AAAO,KAAA,CAAA;IAEtD,MAAMC,IAAAA,GAAOrB,cACTU,aACE,CAAA;AAAEO,QAAAA,EAAAA,EAAIjB,YAAYiB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBlB,YAAYkB;KAClD,EAAA;QAAEC,QAAUZ,EAAAA,kBAAAA;AAAoB,QAAA,GAAGP,YAAYoB;KAEjD,CAAA,GAAA,EAAA;AAEJ,IAAA,IAAIZ,SAAS,MAAQ,EAAA;QACnB,qBACEc,eAAA,CAACC,mBAAMC,IAAI,EAAA;YAACH,IAAMA,EAAAA,IAAAA;YAAMjB,IAAMA,EAAAA,IAAAA;;AAC5B,8BAAAqB,cAAA,CAACF,mBAAMG,KAAK,EAAA;AAAEV,oBAAAA,QAAAA,EAAAA;;8BACdS,cAACE,CAAAA,mBAAAA,EAAAA;oBACCC,YAAYxB,EAAAA,IAAAA;oBACZyB,OAASpB,EAAAA,KAAAA;oBACTR,QAAUA,EAAAA,QAAAA;AACV6B,oBAAAA,QAAAA,EAAUpB,aAAc,CAAA;wBACtBO,EAAI,EAAA,yCAAA;wBACJC,cAAgB,EAAA;AAClB,qBLine truncated
@@ -0,0 +1,121 @@
import { jsxs, jsx } from 'react/jsx-runtime';
import 'react';
import { Field, Toggle, TextInput } from '@strapi/design-system';
import PropTypes from 'prop-types';
import { useIntl } from 'react-intl';
const Input = ({ description, disabled, intlLabel, error, name, onChange, placeholder, providerToEditName, type, value })=>{
const { formatMessage } = useIntl();
const inputValue = name === 'noName' ? `${window.strapi.backendURL}/api/connect/${providerToEditName}/callback` : value;
const label = formatMessage({
id: intlLabel.id,
defaultMessage: intlLabel.defaultMessage
}, {
provider: providerToEditName,
...intlLabel.values
});
const hint = description ? formatMessage({
id: description.id,
defaultMessage: description.defaultMessage
}, {
provider: providerToEditName,
...description.values
}) : '';
if (type === 'bool') {
return /*#__PURE__*/ jsxs(Field.Root, {
hint: hint,
name: name,
children: [
/*#__PURE__*/ jsx(Field.Label, {
children: label
}),
/*#__PURE__*/ jsx(Toggle, {
"aria-label": name,
checked: value,
disabled: disabled,
offLabel: formatMessage({
id: 'app.components.ToggleCheckbox.off-label',
defaultMessage: 'Off'
}),
onLabel: formatMessage({
id: 'app.components.ToggleCheckbox.on-label',
defaultMessage: 'On'
}),
onChange: (e)=>{
onChange({
target: {
name,
value: e.target.checked
}
});
}
}),
/*#__PURE__*/ jsx(Field.Hint, {})
]
});
}
const formattedPlaceholder = placeholder ? formatMessage({
id: placeholder.id,
defaultMessage: placeholder.defaultMessage
}, {
...placeholder.values
}) : '';
const errorMessage = error ? formatMessage({
id: error,
defaultMessage: error
}) : '';
return /*#__PURE__*/ jsxs(Field.Root, {
error: errorMessage,
name: name,
children: [
/*#__PURE__*/ jsx(Field.Label, {
children: label
}),
/*#__PURE__*/ jsx(TextInput, {
disabled: disabled,
onChange: onChange,
placeholder: formattedPlaceholder,
type: type,
value: inputValue
}),
/*#__PURE__*/ jsx(Field.Error, {})
]
});
};
Input.defaultProps = {
description: null,
disabled: false,
error: '',
placeholder: null,
value: ''
};
Input.propTypes = {
description: PropTypes.shape({
id: PropTypes.string.isRequired,
defaultMessage: PropTypes.string.isRequired,
values: PropTypes.object
}),
disabled: PropTypes.bool,
error: PropTypes.string,
intlLabel: PropTypes.shape({
id: PropTypes.string.isRequired,
defaultMessage: PropTypes.string.isRequired,
values: PropTypes.object
}).isRequired,
name: PropTypes.string.isRequired,
onChange: PropTypes.func.isRequired,
placeholder: PropTypes.shape({
id: PropTypes.string.isRequired,
defaultMessage: PropTypes.string.isRequired,
values: PropTypes.object
}),
providerToEditName: PropTypes.string.isRequired,
type: PropTypes.string.isRequired,
value: PropTypes.oneOfType([
PropTypes.bool,
PropTypes.string
])
};
export { Input as default };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../../../../admin/src/components/FormModal/Input/index.jsx"],"sourcesContent":["/**\n *\n * Input\n *\n */\n\nimport * as React from 'react';\n\nimport { TextInput, Toggle, Field } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst Input = ({\n description,\n disabled,\n intlLabel,\n error,\n name,\n onChange,\n placeholder,\n providerToEditName,\n type,\n value,\n}) => {\n const { formatMessage } = useIntl();\n const inputValue =\n name === 'noName'\n ? `${window.strapi.backendURL}/api/connect/${providerToEditName}/callback`\n : value;\n\n const label = formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { provider: providerToEditName, ...intlLabel.values }\n );\n const hint = description\n ? formatMessage(\n { id: description.id, defaultMessage: description.defaultMessage },\n { provider: providerToEditName, ...description.values }\n )\n : '';\n\n if (type === 'bool') {\n return (\n <Field.Root hint={hint} name={name}>\n <Field.Label>{label}</Field.Label>\n <Toggle\n aria-label={name}\n checked={value}\n disabled={disabled}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n onChange={(e) => {\n onChange({ target: { name, value: e.target.checked } });\n }}\n />\n <Field.Hint />\n </Field.Root>\n );\n }\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const errorMessage = error ? formatMessage({ id: error, defaultMessage: error }) : '';\n\n return (\n <Field.Root error={errorMessage} name={name}>\n <Field.Label>{label}</Field.Label>\n <TextInput\n disabled={disabled}\n onChange={onChange}\n placeholder={formattedPlaceholder}\n type={type}\n value={inputValue}\n />\n <Field.Error />\n </Field.Root>\n );\n};\n\nInput.defaultProps = {\n description: null,\n disabled: false,\n error: '',\n placeholder: null,\n value: '',\n};\n\nInput.propTypes = {\n description: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n disabled: PropTypes.bool,\n error: PropTypes.string,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n placeholder: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n providerToEditName: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n};\n\nexport default Input;\n"],"names":["Input","description","disabled","intlLabel","error","name","onChange","placeholder","providerToEditName","type","value","formatMessage","useIntl","inputValue","window","strapi","backendURL","label","id","defaultMessage","provider","values","hint","_jsxs","Field","Root","_jsx","Label","Toggle","aria-label","checked","offLabel","onLabel","e","target","Hint","formattedPlaceholder","errorMessage","TextInput","Error","defaultProps","propTypes","PropTypes","shape","string","isRequired","object","bool","func","oneOfType"],"mappings":";;;;;;AAYMA,MAAAA,KAAAA,GAAQ,CAAC,EACbC,WAAW,EACXC,QAAQ,EACRC,SAAS,EACTC,KAAK,EACLC,IAAI,EACJC,QAAQ,EACRC,WAAW,EACXC,kBAAkB,EAClBC,IAAI,EACJC,KAAK,EACN,GAAA;IACC,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,UACJR,GAAAA,IAAAA,KAAS,QACL,GAAA,CAAC,EAAES,MAAOC,CAAAA,MAAM,CAACC,UAAU,CAAC,aAAa,EAAER,kBAAmB,CAAA,SAAS,CAAC,GACxEE,KAAAA;AAEN,IAAA,MAAMO,QAAQN,aACZ,CAAA;AAAEO,QAAAA,EAAAA,EAAIf,UAAUe,EAAE;AAAEC,QAAAA,cAAAA,EAAgBhB,UAAUgB;KAC9C,EAAA;QAAEC,QAAUZ,EAAAA,kBAAAA;AAAoB,QAAA,GAAGL,UAAUkB;AAAO,KAAA,CAAA;IAEtD,MAAMC,IAAAA,GAAOrB,cACTU,aACE,CAAA;AAAEO,QAAAA,EAAAA,EAAIjB,YAAYiB,EAAE;AAAEC,QAAAA,cAAAA,EAAgBlB,YAAYkB;KAClD,EAAA;QAAEC,QAAUZ,EAAAA,kBAAAA;AAAoB,QAAA,GAAGP,YAAYoB;KAEjD,CAAA,GAAA,EAAA;AAEJ,IAAA,IAAIZ,SAAS,MAAQ,EAAA;QACnB,qBACEc,IAAA,CAACC,MAAMC,IAAI,EAAA;YAACH,IAAMA,EAAAA,IAAAA;YAAMjB,IAAMA,EAAAA,IAAAA;;AAC5B,8BAAAqB,GAAA,CAACF,MAAMG,KAAK,EAAA;AAAEV,oBAAAA,QAAAA,EAAAA;;8BACdS,GAACE,CAAAA,MAAAA,EAAAA;oBACCC,YAAYxB,EAAAA,IAAAA;oBACZyB,OAASpB,EAAAA,KAAAA;oBACTR,QAAUA,EAAAA,QAAAA;AACV6B,oBAAAA,QAAAA,EAAUpB,aAAc,CAAA;wBACtBO,EAAI,EAAA,yCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA,CLine truncated
@@ -0,0 +1,110 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
require('react');
var designSystem = require('@strapi/design-system');
var formik = require('formik');
var PropTypes = require('prop-types');
var reactIntl = require('react-intl');
var index = require('./Input/index.js');
const FormModal = ({ headerBreadcrumbs, initialData, isSubmiting, layout, isOpen, onSubmit, onToggle, providerToEditName })=>{
const { formatMessage } = reactIntl.useIntl();
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Root, {
open: isOpen,
onOpenChange: onToggle,
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Content, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Breadcrumbs, {
label: headerBreadcrumbs.join(', '),
children: headerBreadcrumbs.map((crumb, index, arr)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Crumb, {
isCurrent: index === arr.length - 1,
children: crumb
}, crumb))
})
}),
/*#__PURE__*/ jsxRuntime.jsx(formik.Formik, {
onSubmit: (values)=>onSubmit(values),
initialValues: initialData,
validationSchema: layout.schema,
validateOnChange: false,
children: ({ errors, handleChange, values })=>{
return /*#__PURE__*/ jsxRuntime.jsxs(formik.Form, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
direction: "column",
alignItems: "stretch",
gap: 1,
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
gap: 5,
children: layout.form.map((row)=>{
return row.map((input)=>{
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
col: input.size,
xs: 12,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxRuntime.jsx(index, {
...input,
error: errors[input.name],
onChange: handleChange,
value: values[input.name],
providerToEditName: providerToEditName
})
}, input.name);
});
})
})
})
}),
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Footer, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
variant: "tertiary",
onClick: onToggle,
type: "button",
children: formatMessage({
id: 'app.components.Button.cancel',
defaultMessage: 'Cancel'
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
type: "submit",
loading: isSubmiting,
children: formatMessage({
id: 'global.save',
defaultMessage: 'Save'
})
})
]
})
]
});
}
})
]
})
});
};
FormModal.defaultProps = {
initialData: null,
providerToEditName: null
};
FormModal.propTypes = {
headerBreadcrumbs: PropTypes.arrayOf(PropTypes.string).isRequired,
initialData: PropTypes.object,
layout: PropTypes.shape({
form: PropTypes.arrayOf(PropTypes.array),
schema: PropTypes.object
}).isRequired,
isOpen: PropTypes.bool.isRequired,
isSubmiting: PropTypes.bool.isRequired,
onSubmit: PropTypes.func.isRequired,
onToggle: PropTypes.func.isRequired,
providerToEditName: PropTypes.string
};
module.exports = FormModal;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../../../admin/src/components/FormModal/index.jsx"],"sourcesContent":["/**\n *\n * FormModal\n *\n */\n\nimport * as React from 'react';\n\nimport { Button, Flex, Grid, Modal, Breadcrumbs, Crumb } from '@strapi/design-system';\nimport { Form, Formik } from 'formik';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport Input from './Input';\n\nconst FormModal = ({\n headerBreadcrumbs,\n initialData,\n isSubmiting,\n layout,\n isOpen,\n onSubmit,\n onToggle,\n providerToEditName,\n}) => {\n const { formatMessage } = useIntl();\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onToggle}>\n <Modal.Content>\n <Modal.Header>\n <Breadcrumbs label={headerBreadcrumbs.join(', ')}>\n {headerBreadcrumbs.map((crumb, index, arr) => (\n <Crumb isCurrent={index === arr.length - 1} key={crumb}>\n {crumb}\n </Crumb>\n ))}\n </Breadcrumbs>\n </Modal.Header>\n <Formik\n onSubmit={(values) => onSubmit(values)}\n initialValues={initialData}\n validationSchema={layout.schema}\n validateOnChange={false}\n >\n {({ errors, handleChange, values }) => {\n return (\n <Form>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Grid.Root gap={5}>\n {layout.form.map((row) => {\n return row.map((input) => {\n return (\n <Grid.Item\n key={input.name}\n col={input.size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Input\n {...input}\n error={errors[input.name]}\n onChange={handleChange}\n value={values[input.name]}\n providerToEditName={providerToEditName}\n />\n </Grid.Item>\n );\n });\n })}\n </Grid.Root>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"tertiary\" onClick={onToggle} type=\"button\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmiting}>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n </Modal.Footer>\n </Form>\n );\n }}\n </Formik>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nFormModal.defaultProps = {\n initialData: null,\n providerToEditName: null,\n};\n\nFormModal.propTypes = {\n headerBreadcrumbs: PropTypes.arrayOf(PropTypes.string).isRequired,\n initialData: PropTypes.object,\n layout: PropTypes.shape({\n form: PropTypes.arrayOf(PropTypes.array),\n schema: PropTypes.object,\n }).isRequired,\n isOpen: PropTypes.bool.isRequired,\n isSubmiting: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onToggle: PropTypes.func.isRequired,\n providerToEditName: PropTypes.string,\n};\n\nexport default FormModal;\n"],"names":["FormModal","headerBreadcrumbs","initialData","isSubmiting","layout","isOpen","onSubmit","onToggle","providerToEditName","formatMessage","useIntl","_jsx","Modal","Root","open","onOpenChange","_jsxs","Content","Header","Breadcrumbs","label","join","map","crumb","index","arr","Crumb","isCurrent","length","Formik","values","initialValues","validationSchema","schema","validateOnChange","errors","handleChange","Form","Body","Flex","direction","alignItems","gap","Grid","form","row","input","Item","col","size","xs","Input","error","name","onChange","value","Footer","Button","variant","onClick","type","id","defaultMessage","loading","defaultProps","propTypes","PropTypes","arrayOf","string","isRequired","object","shape","array","bool","func"],"mappings":";;;;;;;;;;AAeA,MAAMA,YAAY,CAAC,EACjBC,iBAAiB,EACjBC,WAAW,EACXC,WAAW,EACXC,MAAM,EACNC,MAAM,EACNC,QAAQ,EACRC,QAAQ,EACRC,kBAAkB,EACnB,GAAA;IACC,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAE1B,qBACEC,cAAA,CAACC,mBAAMC,IAAI,EAAA;QAACC,IAAMT,EAAAA,MAAAA;QAAQU,YAAcR,EAAAA,QAAAA;gCACtCS,eAAA,CAACJ,mBAAMK,OAAO,EAAA;;AACZ,8BAAAN,cAAA,CAACC,mBAAMM,MAAM,EAAA;AACX,oBAAA,QAAA,gBAAAP,cAACQ,CAAAA,wBAAAA,EAAAA;wBAAYC,KAAOnB,EAAAA,iBAAAA,CAAkBoB,IAAI,CAAC,IAAA,CAAA;AACxCpB,wBAAAA,QAAAA,ELine truncated
@@ -0,0 +1,108 @@
import { jsx, jsxs } from 'react/jsx-runtime';
import 'react';
import { Modal, Breadcrumbs, Crumb, Flex, Grid, Button } from '@strapi/design-system';
import { Formik, Form } from 'formik';
import PropTypes from 'prop-types';
import { useIntl } from 'react-intl';
import Input from './Input/index.mjs';
const FormModal = ({ headerBreadcrumbs, initialData, isSubmiting, layout, isOpen, onSubmit, onToggle, providerToEditName })=>{
const { formatMessage } = useIntl();
return /*#__PURE__*/ jsx(Modal.Root, {
open: isOpen,
onOpenChange: onToggle,
children: /*#__PURE__*/ jsxs(Modal.Content, {
children: [
/*#__PURE__*/ jsx(Modal.Header, {
children: /*#__PURE__*/ jsx(Breadcrumbs, {
label: headerBreadcrumbs.join(', '),
children: headerBreadcrumbs.map((crumb, index, arr)=>/*#__PURE__*/ jsx(Crumb, {
isCurrent: index === arr.length - 1,
children: crumb
}, crumb))
})
}),
/*#__PURE__*/ jsx(Formik, {
onSubmit: (values)=>onSubmit(values),
initialValues: initialData,
validationSchema: layout.schema,
validateOnChange: false,
children: ({ errors, handleChange, values })=>{
return /*#__PURE__*/ jsxs(Form, {
children: [
/*#__PURE__*/ jsx(Modal.Body, {
children: /*#__PURE__*/ jsx(Flex, {
direction: "column",
alignItems: "stretch",
gap: 1,
children: /*#__PURE__*/ jsx(Grid.Root, {
gap: 5,
children: layout.form.map((row)=>{
return row.map((input)=>{
return /*#__PURE__*/ jsx(Grid.Item, {
col: input.size,
xs: 12,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsx(Input, {
...input,
error: errors[input.name],
onChange: handleChange,
value: values[input.name],
providerToEditName: providerToEditName
})
}, input.name);
});
})
})
})
}),
/*#__PURE__*/ jsxs(Modal.Footer, {
children: [
/*#__PURE__*/ jsx(Button, {
variant: "tertiary",
onClick: onToggle,
type: "button",
children: formatMessage({
id: 'app.components.Button.cancel',
defaultMessage: 'Cancel'
})
}),
/*#__PURE__*/ jsx(Button, {
type: "submit",
loading: isSubmiting,
children: formatMessage({
id: 'global.save',
defaultMessage: 'Save'
})
})
]
})
]
});
}
})
]
})
});
};
FormModal.defaultProps = {
initialData: null,
providerToEditName: null
};
FormModal.propTypes = {
headerBreadcrumbs: PropTypes.arrayOf(PropTypes.string).isRequired,
initialData: PropTypes.object,
layout: PropTypes.shape({
form: PropTypes.arrayOf(PropTypes.array),
schema: PropTypes.object
}).isRequired,
isOpen: PropTypes.bool.isRequired,
isSubmiting: PropTypes.bool.isRequired,
onSubmit: PropTypes.func.isRequired,
onToggle: PropTypes.func.isRequired,
providerToEditName: PropTypes.string
};
export { FormModal as default };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../../../admin/src/components/FormModal/index.jsx"],"sourcesContent":["/**\n *\n * FormModal\n *\n */\n\nimport * as React from 'react';\n\nimport { Button, Flex, Grid, Modal, Breadcrumbs, Crumb } from '@strapi/design-system';\nimport { Form, Formik } from 'formik';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport Input from './Input';\n\nconst FormModal = ({\n headerBreadcrumbs,\n initialData,\n isSubmiting,\n layout,\n isOpen,\n onSubmit,\n onToggle,\n providerToEditName,\n}) => {\n const { formatMessage } = useIntl();\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onToggle}>\n <Modal.Content>\n <Modal.Header>\n <Breadcrumbs label={headerBreadcrumbs.join(', ')}>\n {headerBreadcrumbs.map((crumb, index, arr) => (\n <Crumb isCurrent={index === arr.length - 1} key={crumb}>\n {crumb}\n </Crumb>\n ))}\n </Breadcrumbs>\n </Modal.Header>\n <Formik\n onSubmit={(values) => onSubmit(values)}\n initialValues={initialData}\n validationSchema={layout.schema}\n validateOnChange={false}\n >\n {({ errors, handleChange, values }) => {\n return (\n <Form>\n <Modal.Body>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Grid.Root gap={5}>\n {layout.form.map((row) => {\n return row.map((input) => {\n return (\n <Grid.Item\n key={input.name}\n col={input.size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Input\n {...input}\n error={errors[input.name]}\n onChange={handleChange}\n value={values[input.name]}\n providerToEditName={providerToEditName}\n />\n </Grid.Item>\n );\n });\n })}\n </Grid.Root>\n </Flex>\n </Modal.Body>\n <Modal.Footer>\n <Button variant=\"tertiary\" onClick={onToggle} type=\"button\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmiting}>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n </Modal.Footer>\n </Form>\n );\n }}\n </Formik>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nFormModal.defaultProps = {\n initialData: null,\n providerToEditName: null,\n};\n\nFormModal.propTypes = {\n headerBreadcrumbs: PropTypes.arrayOf(PropTypes.string).isRequired,\n initialData: PropTypes.object,\n layout: PropTypes.shape({\n form: PropTypes.arrayOf(PropTypes.array),\n schema: PropTypes.object,\n }).isRequired,\n isOpen: PropTypes.bool.isRequired,\n isSubmiting: PropTypes.bool.isRequired,\n onSubmit: PropTypes.func.isRequired,\n onToggle: PropTypes.func.isRequired,\n providerToEditName: PropTypes.string,\n};\n\nexport default FormModal;\n"],"names":["FormModal","headerBreadcrumbs","initialData","isSubmiting","layout","isOpen","onSubmit","onToggle","providerToEditName","formatMessage","useIntl","_jsx","Modal","Root","open","onOpenChange","_jsxs","Content","Header","Breadcrumbs","label","join","map","crumb","index","arr","Crumb","isCurrent","length","Formik","values","initialValues","validationSchema","schema","validateOnChange","errors","handleChange","Form","Body","Flex","direction","alignItems","gap","Grid","form","row","input","Item","col","size","xs","Input","error","name","onChange","value","Footer","Button","variant","onClick","type","id","defaultMessage","loading","defaultProps","propTypes","PropTypes","arrayOf","string","isRequired","object","shape","array","bool","func"],"mappings":";;;;;;;;AAeA,MAAMA,YAAY,CAAC,EACjBC,iBAAiB,EACjBC,WAAW,EACXC,WAAW,EACXC,MAAM,EACNC,MAAM,EACNC,QAAQ,EACRC,QAAQ,EACRC,kBAAkB,EACnB,GAAA;IACC,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,qBACEC,GAAA,CAACC,MAAMC,IAAI,EAAA;QAACC,IAAMT,EAAAA,MAAAA;QAAQU,YAAcR,EAAAA,QAAAA;gCACtCS,IAAA,CAACJ,MAAMK,OAAO,EAAA;;AACZ,8BAAAN,GAAA,CAACC,MAAMM,MAAM,EAAA;AACX,oBAAA,QAAA,gBAAAP,GAACQ,CAAAA,WAAAA,EAAAA;wBAAYC,KAAOnB,EAAAA,iBAAAA,CAAkBoB,IAAI,CAAC,IAAA,CAAA;AACxCpB,wBAAAA,QAAAA,EAAAA,iLine truncated
@@ -0,0 +1,33 @@
'use strict';
var designSystem = require('@strapi/design-system');
var styledComponents = require('styled-components');
const activeCheckboxWrapperStyles = styledComponents.css`
background: ${(props)=>props.theme.colors.primary100};
#cog {
opacity: 1;
}
`;
const CheckboxWrapper = styledComponents.styled(designSystem.Box)`
display: flex;
justify-content: space-between;
align-items: center;
#cog {
opacity: 0;
path {
fill: ${(props)=>props.theme.colors.primary600};
}
}
/* Show active style both on hover and when the action is selected */
${(props)=>props.isActive && activeCheckboxWrapperStyles}
&:hover {
${activeCheckboxWrapperStyles}
}
`;
module.exports = CheckboxWrapper;
//# sourceMappingURL=CheckboxWrapper.js.map
@@ -0,0 +1 @@
{"version":3,"file":"CheckboxWrapper.js","sources":["../../../../../admin/src/components/Permissions/PermissionRow/CheckboxWrapper.jsx"],"sourcesContent":["import { Box } from '@strapi/design-system';\nimport { styled, css } from 'styled-components';\n\nconst activeCheckboxWrapperStyles = css`\n background: ${(props) => props.theme.colors.primary100};\n\n #cog {\n opacity: 1;\n }\n`;\n\nconst CheckboxWrapper = styled(Box)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n #cog {\n opacity: 0;\n path {\n fill: ${(props) => props.theme.colors.primary600};\n }\n }\n\n /* Show active style both on hover and when the action is selected */\n ${(props) => props.isActive && activeCheckboxWrapperStyles}\n &:hover {\n ${activeCheckboxWrapperStyles}\n }\n`;\n\nexport default CheckboxWrapper;\n"],"names":["activeCheckboxWrapperStyles","css","props","theme","colors","primary100","CheckboxWrapper","styled","Box","primary600","isActive"],"mappings":";;;;;AAGA,MAAMA,2BAAAA,GAA8BC,oBAAG;cACzB,EAAE,CAACC,QAAUA,KAAMC,CAAAA,KAAK,CAACC,MAAM,CAACC,UAAU,CAAC;;;;;AAKzD,CAAC;AAEKC,MAAAA,eAAAA,GAAkBC,uBAAOC,CAAAA,gBAAAA,CAAI;;;;;;;;YAQvB,EAAE,CAACN,QAAUA,KAAMC,CAAAA,KAAK,CAACC,MAAM,CAACK,UAAU,CAAC;;;;;AAKrD,EAAA,EAAE,CAACP,KAAAA,GAAUA,KAAMQ,CAAAA,QAAQ,IAAIV,2BAA4B;;AAEzD,IAAA,EAAEA,2BAA4B;;AAElC;;;;"}
@@ -0,0 +1,31 @@
import { Box } from '@strapi/design-system';
import { css, styled } from 'styled-components';
const activeCheckboxWrapperStyles = css`
background: ${(props)=>props.theme.colors.primary100};
#cog {
opacity: 1;
}
`;
const CheckboxWrapper = styled(Box)`
display: flex;
justify-content: space-between;
align-items: center;
#cog {
opacity: 0;
path {
fill: ${(props)=>props.theme.colors.primary600};
}
}
/* Show active style both on hover and when the action is selected */
${(props)=>props.isActive && activeCheckboxWrapperStyles}
&:hover {
${activeCheckboxWrapperStyles}
}
`;
export { CheckboxWrapper as default };
//# sourceMappingURL=CheckboxWrapper.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"CheckboxWrapper.mjs","sources":["../../../../../admin/src/components/Permissions/PermissionRow/CheckboxWrapper.jsx"],"sourcesContent":["import { Box } from '@strapi/design-system';\nimport { styled, css } from 'styled-components';\n\nconst activeCheckboxWrapperStyles = css`\n background: ${(props) => props.theme.colors.primary100};\n\n #cog {\n opacity: 1;\n }\n`;\n\nconst CheckboxWrapper = styled(Box)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n #cog {\n opacity: 0;\n path {\n fill: ${(props) => props.theme.colors.primary600};\n }\n }\n\n /* Show active style both on hover and when the action is selected */\n ${(props) => props.isActive && activeCheckboxWrapperStyles}\n &:hover {\n ${activeCheckboxWrapperStyles}\n }\n`;\n\nexport default CheckboxWrapper;\n"],"names":["activeCheckboxWrapperStyles","css","props","theme","colors","primary100","CheckboxWrapper","styled","Box","primary600","isActive"],"mappings":";;;AAGA,MAAMA,2BAAAA,GAA8BC,GAAG;cACzB,EAAE,CAACC,QAAUA,KAAMC,CAAAA,KAAK,CAACC,MAAM,CAACC,UAAU,CAAC;;;;;AAKzD,CAAC;AAEKC,MAAAA,eAAAA,GAAkBC,MAAOC,CAAAA,GAAAA,CAAI;;;;;;;;YAQvB,EAAE,CAACN,QAAUA,KAAMC,CAAAA,KAAK,CAACC,MAAM,CAACK,UAAU,CAAC;;;;;AAKrD,EAAA,EAAE,CAACP,KAAAA,GAAUA,KAAMQ,CAAAA,QAAQ,IAAIV,2BAA4B;;AAEzD,IAAA,EAAEA,2BAA4B;;AAElC;;;;"}
@@ -0,0 +1,156 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var get = require('lodash/get');
var PropTypes = require('prop-types');
var reactIntl = require('react-intl');
var styledComponents = require('styled-components');
var index = require('../../../contexts/UsersPermissionsContext/index.js');
var CheckboxWrapper = require('./CheckboxWrapper.js');
const Border = styledComponents.styled.div`
flex: 1;
align-self: center;
border-top: 1px solid ${({ theme })=>theme.colors.neutral150};
`;
const SubCategory = ({ subCategory })=>{
const { formatMessage } = reactIntl.useIntl();
const { onChange, onChangeSelectAll, onSelectedAction, selectedAction, modifiedData } = index.useUsersPermissions();
const currentScopedModifiedData = React.useMemo(()=>{
return get(modifiedData, subCategory.name, {});
}, [
modifiedData,
subCategory
]);
const hasAllActionsSelected = React.useMemo(()=>{
return Object.values(currentScopedModifiedData).every((action)=>action.enabled === true);
}, [
currentScopedModifiedData
]);
const hasSomeActionsSelected = React.useMemo(()=>{
return Object.values(currentScopedModifiedData).some((action)=>action.enabled === true) && !hasAllActionsSelected;
}, [
currentScopedModifiedData,
hasAllActionsSelected
]);
const handleChangeSelectAll = React.useCallback(({ target: { name } })=>{
onChangeSelectAll({
target: {
name,
value: !hasAllActionsSelected
}
});
}, [
hasAllActionsSelected,
onChangeSelectAll
]);
const isActionSelected = React.useCallback((actionName)=>{
return selectedAction === actionName;
}, [
selectedAction
]);
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
children: [
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
justifyContent: "space-between",
alignItems: "center",
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
paddingRight: 4,
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
variant: "sigma",
textColor: "neutral600",
children: subCategory.label
})
}),
/*#__PURE__*/ jsxRuntime.jsx(Border, {}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
paddingLeft: 4,
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
name: subCategory.name,
checked: hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected,
onCheckedChange: (value)=>handleChangeSelectAll({
target: {
name: subCategory.name,
value
}
}),
children: formatMessage({
id: 'app.utils.select-all',
defaultMessage: 'Select all'
})
})
})
]
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
paddingTop: 6,
paddingBottom: 6,
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
gap: 2,
style: {
flex: 1
},
children: subCategory.actions.map((action)=>{
const name = `${action.name}.enabled`;
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
col: 6,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxRuntime.jsxs(CheckboxWrapper, {
isActive: isActionSelected(action.name),
padding: 2,
hasRadius: true,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
checked: get(modifiedData, name, false),
name: name,
onCheckedChange: (value)=>onChange({
target: {
name,
value
}
}),
children: action.label
}),
/*#__PURE__*/ jsxRuntime.jsxs("button", {
type: "button",
onClick: ()=>onSelectedAction(action.name),
style: {
display: 'inline-flex',
alignItems: 'center'
},
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
tag: "span",
children: formatMessage({
id: 'app.utils.show-bound-route',
defaultMessage: 'Show bound route for {route}'
}, {
route: action.name
})
}),
/*#__PURE__*/ jsxRuntime.jsx(icons.Cog, {
id: "cog",
cursor: "pointer"
})
]
})
]
})
}, action.name);
})
})
})
]
});
};
SubCategory.propTypes = {
subCategory: PropTypes.object.isRequired
};
module.exports = SubCategory;
//# sourceMappingURL=SubCategory.js.map
@@ -0,0 +1 @@
{"version":3,"file":"SubCategory.js","sources":["../../../../../admin/src/components/Permissions/PermissionRow/SubCategory.jsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react';\n\nimport { Box, Checkbox, Flex, Typography, Grid, VisuallyHidden } from '@strapi/design-system';\nimport { Cog } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useUsersPermissions } from '../../../contexts/UsersPermissionsContext';\n\nimport CheckboxWrapper from './CheckboxWrapper';\n\nconst Border = styled.div`\n flex: 1;\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst SubCategory = ({ subCategory }) => {\n const { formatMessage } = useIntl();\n const { onChange, onChangeSelectAll, onSelectedAction, selectedAction, modifiedData } =\n useUsersPermissions();\n\n const currentScopedModifiedData = useMemo(() => {\n return get(modifiedData, subCategory.name, {});\n }, [modifiedData, subCategory]);\n\n const hasAllActionsSelected = useMemo(() => {\n return Object.values(currentScopedModifiedData).every((action) => action.enabled === true);\n }, [currentScopedModifiedData]);\n\n const hasSomeActionsSelected = useMemo(() => {\n return (\n Object.values(currentScopedModifiedData).some((action) => action.enabled === true) &&\n !hasAllActionsSelected\n );\n }, [currentScopedModifiedData, hasAllActionsSelected]);\n\n const handleChangeSelectAll = useCallback(\n ({ target: { name } }) => {\n onChangeSelectAll({ target: { name, value: !hasAllActionsSelected } });\n },\n [hasAllActionsSelected, onChangeSelectAll]\n );\n\n const isActionSelected = useCallback(\n (actionName) => {\n return selectedAction === actionName;\n },\n [selectedAction]\n );\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategory.label}\n </Typography>\n </Box>\n <Border />\n <Box paddingLeft={4}>\n <Checkbox\n name={subCategory.name}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n onCheckedChange={(value) =>\n handleChangeSelectAll({ target: { name: subCategory.name, value } })\n }\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {subCategory.actions.map((action) => {\n const name = `${action.name}.enabled`;\n\n return (\n <Grid.Item col={6} key={action.name} direction=\"column\" alignItems=\"stretch\">\n <CheckboxWrapper isActive={isActionSelected(action.name)} padding={2} hasRadius>\n <Checkbox\n checked={get(modifiedData, name, false)}\n name={name}\n onCheckedChange={(value) => onChange({ target: { name, value } })}\n >\n {action.label}\n </Checkbox>\n <button\n type=\"button\"\n onClick={() => onSelectedAction(action.name)}\n style={{ display: 'inline-flex', alignItems: 'center' }}\n >\n <VisuallyHidden tag=\"span\">\n {formatMessage(\n {\n id: 'app.utils.show-bound-route',\n defaultMessage: 'Show bound route for {route}',\n },\n {\n route: action.name,\n }\n )}\n </VisuallyHidden>\n <Cog id=\"cog\" cursor=\"pointer\" />\n </button>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Flex>\n </Box>\n );\n};\n\nSubCategory.propTypes = {\n subCategory: PropTypes.object.isRequired,\n};\n\nexport default SubCategory;\n"],"names":["Border","styled","div","theme","colors","neutral150","SubCategory","subCategory","formatMessage","useIntl","onChange","onChangeSelectAll","onSelectedAction","selectedAction","modifiedData","useUsersPermissions","currentScopedModifiedData","useMemo","get","name","hasAllActionsSelected","Object","values","every","action","enabled","hasSomeActionsSelected","some","handleChangeSelectAll","useCallback","target","value","isActionSelected","actionName","_jsxs","Box","Flex","justifyContent","alignItems","_jsx","paddingRight","Typography","variant","textColor",Line truncated
@@ -0,0 +1,154 @@
import { jsxs, jsx } from 'react/jsx-runtime';
import { useMemo, useCallback } from 'react';
import { Box, Flex, Typography, Checkbox, Grid, VisuallyHidden } from '@strapi/design-system';
import { Cog } from '@strapi/icons';
import get from 'lodash/get';
import PropTypes from 'prop-types';
import { useIntl } from 'react-intl';
import { styled } from 'styled-components';
import { useUsersPermissions } from '../../../contexts/UsersPermissionsContext/index.mjs';
import CheckboxWrapper from './CheckboxWrapper.mjs';
const Border = styled.div`
flex: 1;
align-self: center;
border-top: 1px solid ${({ theme })=>theme.colors.neutral150};
`;
const SubCategory = ({ subCategory })=>{
const { formatMessage } = useIntl();
const { onChange, onChangeSelectAll, onSelectedAction, selectedAction, modifiedData } = useUsersPermissions();
const currentScopedModifiedData = useMemo(()=>{
return get(modifiedData, subCategory.name, {});
}, [
modifiedData,
subCategory
]);
const hasAllActionsSelected = useMemo(()=>{
return Object.values(currentScopedModifiedData).every((action)=>action.enabled === true);
}, [
currentScopedModifiedData
]);
const hasSomeActionsSelected = useMemo(()=>{
return Object.values(currentScopedModifiedData).some((action)=>action.enabled === true) && !hasAllActionsSelected;
}, [
currentScopedModifiedData,
hasAllActionsSelected
]);
const handleChangeSelectAll = useCallback(({ target: { name } })=>{
onChangeSelectAll({
target: {
name,
value: !hasAllActionsSelected
}
});
}, [
hasAllActionsSelected,
onChangeSelectAll
]);
const isActionSelected = useCallback((actionName)=>{
return selectedAction === actionName;
}, [
selectedAction
]);
return /*#__PURE__*/ jsxs(Box, {
children: [
/*#__PURE__*/ jsxs(Flex, {
justifyContent: "space-between",
alignItems: "center",
children: [
/*#__PURE__*/ jsx(Box, {
paddingRight: 4,
children: /*#__PURE__*/ jsx(Typography, {
variant: "sigma",
textColor: "neutral600",
children: subCategory.label
})
}),
/*#__PURE__*/ jsx(Border, {}),
/*#__PURE__*/ jsx(Box, {
paddingLeft: 4,
children: /*#__PURE__*/ jsx(Checkbox, {
name: subCategory.name,
checked: hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected,
onCheckedChange: (value)=>handleChangeSelectAll({
target: {
name: subCategory.name,
value
}
}),
children: formatMessage({
id: 'app.utils.select-all',
defaultMessage: 'Select all'
})
})
})
]
}),
/*#__PURE__*/ jsx(Flex, {
paddingTop: 6,
paddingBottom: 6,
children: /*#__PURE__*/ jsx(Grid.Root, {
gap: 2,
style: {
flex: 1
},
children: subCategory.actions.map((action)=>{
const name = `${action.name}.enabled`;
return /*#__PURE__*/ jsx(Grid.Item, {
col: 6,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxs(CheckboxWrapper, {
isActive: isActionSelected(action.name),
padding: 2,
hasRadius: true,
children: [
/*#__PURE__*/ jsx(Checkbox, {
checked: get(modifiedData, name, false),
name: name,
onCheckedChange: (value)=>onChange({
target: {
name,
value
}
}),
children: action.label
}),
/*#__PURE__*/ jsxs("button", {
type: "button",
onClick: ()=>onSelectedAction(action.name),
style: {
display: 'inline-flex',
alignItems: 'center'
},
children: [
/*#__PURE__*/ jsx(VisuallyHidden, {
tag: "span",
children: formatMessage({
id: 'app.utils.show-bound-route',
defaultMessage: 'Show bound route for {route}'
}, {
route: action.name
})
}),
/*#__PURE__*/ jsx(Cog, {
id: "cog",
cursor: "pointer"
})
]
})
]
})
}, action.name);
})
})
})
]
});
};
SubCategory.propTypes = {
subCategory: PropTypes.object.isRequired
};
export { SubCategory as default };
//# sourceMappingURL=SubCategory.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"SubCategory.mjs","sources":["../../../../../admin/src/components/Permissions/PermissionRow/SubCategory.jsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react';\n\nimport { Box, Checkbox, Flex, Typography, Grid, VisuallyHidden } from '@strapi/design-system';\nimport { Cog } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useUsersPermissions } from '../../../contexts/UsersPermissionsContext';\n\nimport CheckboxWrapper from './CheckboxWrapper';\n\nconst Border = styled.div`\n flex: 1;\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst SubCategory = ({ subCategory }) => {\n const { formatMessage } = useIntl();\n const { onChange, onChangeSelectAll, onSelectedAction, selectedAction, modifiedData } =\n useUsersPermissions();\n\n const currentScopedModifiedData = useMemo(() => {\n return get(modifiedData, subCategory.name, {});\n }, [modifiedData, subCategory]);\n\n const hasAllActionsSelected = useMemo(() => {\n return Object.values(currentScopedModifiedData).every((action) => action.enabled === true);\n }, [currentScopedModifiedData]);\n\n const hasSomeActionsSelected = useMemo(() => {\n return (\n Object.values(currentScopedModifiedData).some((action) => action.enabled === true) &&\n !hasAllActionsSelected\n );\n }, [currentScopedModifiedData, hasAllActionsSelected]);\n\n const handleChangeSelectAll = useCallback(\n ({ target: { name } }) => {\n onChangeSelectAll({ target: { name, value: !hasAllActionsSelected } });\n },\n [hasAllActionsSelected, onChangeSelectAll]\n );\n\n const isActionSelected = useCallback(\n (actionName) => {\n return selectedAction === actionName;\n },\n [selectedAction]\n );\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategory.label}\n </Typography>\n </Box>\n <Border />\n <Box paddingLeft={4}>\n <Checkbox\n name={subCategory.name}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n onCheckedChange={(value) =>\n handleChangeSelectAll({ target: { name: subCategory.name, value } })\n }\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {subCategory.actions.map((action) => {\n const name = `${action.name}.enabled`;\n\n return (\n <Grid.Item col={6} key={action.name} direction=\"column\" alignItems=\"stretch\">\n <CheckboxWrapper isActive={isActionSelected(action.name)} padding={2} hasRadius>\n <Checkbox\n checked={get(modifiedData, name, false)}\n name={name}\n onCheckedChange={(value) => onChange({ target: { name, value } })}\n >\n {action.label}\n </Checkbox>\n <button\n type=\"button\"\n onClick={() => onSelectedAction(action.name)}\n style={{ display: 'inline-flex', alignItems: 'center' }}\n >\n <VisuallyHidden tag=\"span\">\n {formatMessage(\n {\n id: 'app.utils.show-bound-route',\n defaultMessage: 'Show bound route for {route}',\n },\n {\n route: action.name,\n }\n )}\n </VisuallyHidden>\n <Cog id=\"cog\" cursor=\"pointer\" />\n </button>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n </Flex>\n </Box>\n );\n};\n\nSubCategory.propTypes = {\n subCategory: PropTypes.object.isRequired,\n};\n\nexport default SubCategory;\n"],"names":["Border","styled","div","theme","colors","neutral150","SubCategory","subCategory","formatMessage","useIntl","onChange","onChangeSelectAll","onSelectedAction","selectedAction","modifiedData","useUsersPermissions","currentScopedModifiedData","useMemo","get","name","hasAllActionsSelected","Object","values","every","action","enabled","hasSomeActionsSelected","some","handleChangeSelectAll","useCallback","target","value","isActionSelected","actionName","_jsxs","Box","Flex","justifyContent","alignItems","_jsx","paddingRight","Typography","variant","textColor"Line truncated
@@ -0,0 +1,50 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var designSystem = require('@strapi/design-system');
var sortBy = require('lodash/sortBy');
var PropTypes = require('prop-types');
var SubCategory = require('./SubCategory.js');
const PermissionRow = ({ name, permissions })=>{
const subCategories = React.useMemo(()=>{
return sortBy(Object.values(permissions.controllers).reduce((acc, curr, index)=>{
const currentName = `${name}.controllers.${Object.keys(permissions.controllers)[index]}`;
const actions = sortBy(Object.keys(curr).reduce((acc, current)=>{
return [
...acc,
{
...curr[current],
label: current,
name: `${currentName}.${current}`
}
];
}, []), 'label');
return [
...acc,
{
actions,
label: Object.keys(permissions.controllers)[index],
name: currentName
}
];
}, []), 'label');
}, [
name,
permissions
]);
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
padding: 6,
children: subCategories.map((subCategory)=>/*#__PURE__*/ jsxRuntime.jsx(SubCategory, {
subCategory: subCategory
}, subCategory.name))
});
};
PermissionRow.propTypes = {
name: PropTypes.string.isRequired,
permissions: PropTypes.object.isRequired
};
module.exports = PermissionRow;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../../../../admin/src/components/Permissions/PermissionRow/index.jsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport sortBy from 'lodash/sortBy';\nimport PropTypes from 'prop-types';\n\nimport SubCategory from './SubCategory';\n\nconst PermissionRow = ({ name, permissions }) => {\n const subCategories = useMemo(() => {\n return sortBy(\n Object.values(permissions.controllers).reduce((acc, curr, index) => {\n const currentName = `${name}.controllers.${Object.keys(permissions.controllers)[index]}`;\n const actions = sortBy(\n Object.keys(curr).reduce((acc, current) => {\n return [\n ...acc,\n {\n ...curr[current],\n label: current,\n name: `${currentName}.${current}`,\n },\n ];\n }, []),\n 'label'\n );\n\n return [\n ...acc,\n {\n actions,\n label: Object.keys(permissions.controllers)[index],\n name: currentName,\n },\n ];\n }, []),\n 'label'\n );\n }, [name, permissions]);\n\n return (\n <Box padding={6}>\n {subCategories.map((subCategory) => (\n <SubCategory key={subCategory.name} subCategory={subCategory} />\n ))}\n </Box>\n );\n};\n\nPermissionRow.propTypes = {\n name: PropTypes.string.isRequired,\n permissions: PropTypes.object.isRequired,\n};\n\nexport default PermissionRow;\n"],"names":["PermissionRow","name","permissions","subCategories","useMemo","sortBy","Object","values","controllers","reduce","acc","curr","index","currentName","keys","actions","current","label","_jsx","Box","padding","map","subCategory","SubCategory","propTypes","PropTypes","string","isRequired","object"],"mappings":";;;;;;;;;AAQA,MAAMA,gBAAgB,CAAC,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAA;AAC1C,IAAA,MAAMC,gBAAgBC,aAAQ,CAAA,IAAA;QAC5B,OAAOC,MAAAA,CACLC,MAAOC,CAAAA,MAAM,CAACL,WAAAA,CAAYM,WAAW,CAAA,CAAEC,MAAM,CAAC,CAACC,GAAAA,EAAKC,IAAMC,EAAAA,KAAAA,GAAAA;AACxD,YAAA,MAAMC,WAAc,GAAA,CAAC,EAAEZ,IAAAA,CAAK,aAAa,EAAEK,MAAAA,CAAOQ,IAAI,CAACZ,YAAYM,WAAW,CAAC,CAACI,KAAAA,CAAM,CAAC,CAAC;YACxF,MAAMG,OAAAA,GAAUV,OACdC,MAAOQ,CAAAA,IAAI,CAACH,IAAMF,CAAAA,CAAAA,MAAM,CAAC,CAACC,GAAKM,EAAAA,OAAAA,GAAAA;gBAC7B,OAAO;AACFN,oBAAAA,GAAAA,GAAAA;AACH,oBAAA;wBACE,GAAGC,IAAI,CAACK,OAAQ,CAAA;wBAChBC,KAAOD,EAAAA,OAAAA;AACPf,wBAAAA,IAAAA,EAAM,CAAC,EAAEY,WAAAA,CAAY,CAAC,EAAEG,QAAQ;AAClC;AACD,iBAAA;AACH,aAAA,EAAG,EAAE,CACL,EAAA,OAAA,CAAA;YAGF,OAAO;AACFN,gBAAAA,GAAAA,GAAAA;AACH,gBAAA;AACEK,oBAAAA,OAAAA;AACAE,oBAAAA,KAAAA,EAAOX,OAAOQ,IAAI,CAACZ,YAAYM,WAAW,CAAC,CAACI,KAAM,CAAA;oBAClDX,IAAMY,EAAAA;AACR;AACD,aAAA;AACH,SAAA,EAAG,EAAE,CACL,EAAA,OAAA,CAAA;KAED,EAAA;AAACZ,QAAAA,IAAAA;AAAMC,QAAAA;AAAY,KAAA,CAAA;AAEtB,IAAA,qBACEgB,cAACC,CAAAA,gBAAAA,EAAAA;QAAIC,OAAS,EAAA,CAAA;AACXjB,QAAAA,QAAAA,EAAAA,aAAAA,CAAckB,GAAG,CAAC,CAACC,WAAAA,iBAClBJ,cAACK,CAAAA,WAAAA,EAAAA;gBAAmCD,WAAaA,EAAAA;AAA/BA,aAAAA,EAAAA,WAAAA,CAAYrB,IAAI,CAAA;;AAI1C;AAEAD,aAAAA,CAAcwB,SAAS,GAAG;IACxBvB,IAAMwB,EAAAA,SAAAA,CAAUC,MAAM,CAACC,UAAU;IACjCzB,WAAauB,EAAAA,SAAAA,CAAUG,MAAM,CAACD;AAChC,CAAA;;;;"}
@@ -0,0 +1,48 @@
import { jsx } from 'react/jsx-runtime';
import { useMemo } from 'react';
import { Box } from '@strapi/design-system';
import sortBy from 'lodash/sortBy';
import PropTypes from 'prop-types';
import SubCategory from './SubCategory.mjs';
const PermissionRow = ({ name, permissions })=>{
const subCategories = useMemo(()=>{
return sortBy(Object.values(permissions.controllers).reduce((acc, curr, index)=>{
const currentName = `${name}.controllers.${Object.keys(permissions.controllers)[index]}`;
const actions = sortBy(Object.keys(curr).reduce((acc, current)=>{
return [
...acc,
{
...curr[current],
label: current,
name: `${currentName}.${current}`
}
];
}, []), 'label');
return [
...acc,
{
actions,
label: Object.keys(permissions.controllers)[index],
name: currentName
}
];
}, []), 'label');
}, [
name,
permissions
]);
return /*#__PURE__*/ jsx(Box, {
padding: 6,
children: subCategories.map((subCategory)=>/*#__PURE__*/ jsx(SubCategory, {
subCategory: subCategory
}, subCategory.name))
});
};
PermissionRow.propTypes = {
name: PropTypes.string.isRequired,
permissions: PropTypes.object.isRequired
};
export { PermissionRow as default };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../../../../admin/src/components/Permissions/PermissionRow/index.jsx"],"sourcesContent":["import React, { useMemo } from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport sortBy from 'lodash/sortBy';\nimport PropTypes from 'prop-types';\n\nimport SubCategory from './SubCategory';\n\nconst PermissionRow = ({ name, permissions }) => {\n const subCategories = useMemo(() => {\n return sortBy(\n Object.values(permissions.controllers).reduce((acc, curr, index) => {\n const currentName = `${name}.controllers.${Object.keys(permissions.controllers)[index]}`;\n const actions = sortBy(\n Object.keys(curr).reduce((acc, current) => {\n return [\n ...acc,\n {\n ...curr[current],\n label: current,\n name: `${currentName}.${current}`,\n },\n ];\n }, []),\n 'label'\n );\n\n return [\n ...acc,\n {\n actions,\n label: Object.keys(permissions.controllers)[index],\n name: currentName,\n },\n ];\n }, []),\n 'label'\n );\n }, [name, permissions]);\n\n return (\n <Box padding={6}>\n {subCategories.map((subCategory) => (\n <SubCategory key={subCategory.name} subCategory={subCategory} />\n ))}\n </Box>\n );\n};\n\nPermissionRow.propTypes = {\n name: PropTypes.string.isRequired,\n permissions: PropTypes.object.isRequired,\n};\n\nexport default PermissionRow;\n"],"names":["PermissionRow","name","permissions","subCategories","useMemo","sortBy","Object","values","controllers","reduce","acc","curr","index","currentName","keys","actions","current","label","_jsx","Box","padding","map","subCategory","SubCategory","propTypes","PropTypes","string","isRequired","object"],"mappings":";;;;;;;AAQA,MAAMA,gBAAgB,CAAC,EAAEC,IAAI,EAAEC,WAAW,EAAE,GAAA;AAC1C,IAAA,MAAMC,gBAAgBC,OAAQ,CAAA,IAAA;QAC5B,OAAOC,MAAAA,CACLC,MAAOC,CAAAA,MAAM,CAACL,WAAAA,CAAYM,WAAW,CAAA,CAAEC,MAAM,CAAC,CAACC,GAAAA,EAAKC,IAAMC,EAAAA,KAAAA,GAAAA;AACxD,YAAA,MAAMC,WAAc,GAAA,CAAC,EAAEZ,IAAAA,CAAK,aAAa,EAAEK,MAAAA,CAAOQ,IAAI,CAACZ,YAAYM,WAAW,CAAC,CAACI,KAAAA,CAAM,CAAC,CAAC;YACxF,MAAMG,OAAAA,GAAUV,OACdC,MAAOQ,CAAAA,IAAI,CAACH,IAAMF,CAAAA,CAAAA,MAAM,CAAC,CAACC,GAAKM,EAAAA,OAAAA,GAAAA;gBAC7B,OAAO;AACFN,oBAAAA,GAAAA,GAAAA;AACH,oBAAA;wBACE,GAAGC,IAAI,CAACK,OAAQ,CAAA;wBAChBC,KAAOD,EAAAA,OAAAA;AACPf,wBAAAA,IAAAA,EAAM,CAAC,EAAEY,WAAAA,CAAY,CAAC,EAAEG,QAAQ;AAClC;AACD,iBAAA;AACH,aAAA,EAAG,EAAE,CACL,EAAA,OAAA,CAAA;YAGF,OAAO;AACFN,gBAAAA,GAAAA,GAAAA;AACH,gBAAA;AACEK,oBAAAA,OAAAA;AACAE,oBAAAA,KAAAA,EAAOX,OAAOQ,IAAI,CAACZ,YAAYM,WAAW,CAAC,CAACI,KAAM,CAAA;oBAClDX,IAAMY,EAAAA;AACR;AACD,aAAA;AACH,SAAA,EAAG,EAAE,CACL,EAAA,OAAA,CAAA;KAED,EAAA;AAACZ,QAAAA,IAAAA;AAAMC,QAAAA;AAAY,KAAA,CAAA;AAEtB,IAAA,qBACEgB,GAACC,CAAAA,GAAAA,EAAAA;QAAIC,OAAS,EAAA,CAAA;AACXjB,QAAAA,QAAAA,EAAAA,aAAAA,CAAckB,GAAG,CAAC,CAACC,WAAAA,iBAClBJ,GAACK,CAAAA,WAAAA,EAAAA;gBAAmCD,WAAaA,EAAAA;AAA/BA,aAAAA,EAAAA,WAAAA,CAAYrB,IAAI,CAAA;;AAI1C;AAEAD,aAAAA,CAAcwB,SAAS,GAAG;IACxBvB,IAAMwB,EAAAA,SAAAA,CAAUC,MAAM,CAACC,UAAU;IACjCzB,WAAauB,EAAAA,SAAAA,CAAUG,MAAM,CAACD;AAChC,CAAA;;;;"}
@@ -0,0 +1,52 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var designSystem = require('@strapi/design-system');
var reactIntl = require('react-intl');
var index = require('../../contexts/UsersPermissionsContext/index.js');
var formatPluginName = require('../../utils/formatPluginName.js');
var init = require('./init.js');
var index$1 = require('./PermissionRow/index.js');
var reducer = require('./reducer.js');
const Permissions = ()=>{
const { modifiedData } = index.useUsersPermissions();
const { formatMessage } = reactIntl.useIntl();
const [{ collapses }] = React.useReducer(reducer.reducer, reducer.initialState, (state)=>init(state, modifiedData));
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Accordion.Root, {
size: "M",
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
direction: "column",
alignItems: "stretch",
gap: 1,
children: collapses.map((collapse, index)=>/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Accordion.Item, {
value: collapse.name,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Accordion.Header, {
variant: index % 2 === 0 ? 'secondary' : undefined,
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Accordion.Trigger, {
caretPosition: "right",
description: formatMessage({
id: 'users-permissions.Plugin.permissions.plugins.description',
defaultMessage: 'Define all allowed actions for the {name} plugin.'
}, {
name: collapse.name
}),
children: formatPluginName(collapse.name)
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Accordion.Content, {
children: /*#__PURE__*/ jsxRuntime.jsx(index$1, {
permissions: modifiedData[collapse.name],
name: collapse.name
})
})
]
}, collapse.name))
})
});
};
module.exports = Permissions;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../../../admin/src/components/Permissions/index.jsx"],"sourcesContent":["import React, { useReducer } from 'react';\n\nimport { Accordion, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useUsersPermissions } from '../../contexts/UsersPermissionsContext';\nimport formatPluginName from '../../utils/formatPluginName';\n\nimport init from './init';\nimport PermissionRow from './PermissionRow';\nimport { initialState, reducer } from './reducer';\n\nconst Permissions = () => {\n const { modifiedData } = useUsersPermissions();\n const { formatMessage } = useIntl();\n const [{ collapses }] = useReducer(reducer, initialState, (state) => init(state, modifiedData));\n\n return (\n <Accordion.Root size=\"M\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n {collapses.map((collapse, index) => (\n <Accordion.Item key={collapse.name} value={collapse.name}>\n <Accordion.Header variant={index % 2 === 0 ? 'secondary' : undefined}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={formatMessage(\n {\n id: 'users-permissions.Plugin.permissions.plugins.description',\n defaultMessage: 'Define all allowed actions for the {name} plugin.',\n },\n { name: collapse.name }\n )}\n >\n {formatPluginName(collapse.name)}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <PermissionRow permissions={modifiedData[collapse.name]} name={collapse.name} />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Flex>\n </Accordion.Root>\n );\n};\n\nexport default Permissions;\n"],"names":["Permissions","modifiedData","useUsersPermissions","formatMessage","useIntl","collapses","useReducer","reducer","initialState","state","init","_jsx","Accordion","Root","size","Flex","direction","alignItems","gap","map","collapse","index","_jsxs","Item","value","name","Header","variant","undefined","Trigger","caretPosition","description","id","defaultMessage","formatPluginName","Content","PermissionRow","permissions"],"mappings":";;;;;;;;;;;;AAYA,MAAMA,WAAc,GAAA,IAAA;IAClB,MAAM,EAAEC,YAAY,EAAE,GAAGC,yBAAAA,EAAAA;IACzB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEC,SAAS,EAAE,CAAC,GAAGC,gBAAWC,CAAAA,eAAAA,EAASC,oBAAc,EAAA,CAACC,KAAUC,GAAAA,IAAAA,CAAKD,KAAOR,EAAAA,YAAAA,CAAAA,CAAAA;IAEjF,qBACEU,cAAA,CAACC,uBAAUC,IAAI,EAAA;QAACC,IAAK,EAAA,GAAA;AACnB,QAAA,QAAA,gBAAAH,cAACI,CAAAA,iBAAAA,EAAAA;YAAKC,SAAU,EAAA,QAAA;YAASC,UAAW,EAAA,SAAA;YAAUC,GAAK,EAAA,CAAA;AAChDb,YAAAA,QAAAA,EAAAA,SAAAA,CAAUc,GAAG,CAAC,CAACC,UAAUC,KACxB,iBAAAC,eAAA,CAACV,uBAAUW,IAAI,EAAA;AAAqBC,oBAAAA,KAAAA,EAAOJ,SAASK,IAAI;;AACtD,sCAAAd,cAAA,CAACC,uBAAUc,MAAM,EAAA;4BAACC,OAASN,EAAAA,KAAAA,GAAQ,CAAM,KAAA,CAAA,GAAI,WAAcO,GAAAA,SAAAA;oDACzDjB,cAAA,CAACC,uBAAUiB,OAAO,EAAA;gCAChBC,aAAc,EAAA,OAAA;AACdC,gCAAAA,WAAAA,EAAa5B,aACX,CAAA;oCACE6B,EAAI,EAAA,0DAAA;oCACJC,cAAgB,EAAA;iCAElB,EAAA;AAAER,oCAAAA,IAAAA,EAAML,SAASK;AAAK,iCAAA,CAAA;AAGvBS,gCAAAA,QAAAA,EAAAA,gBAAAA,CAAiBd,SAASK,IAAI;;;AAGnC,sCAAAd,cAAA,CAACC,uBAAUuB,OAAO,EAAA;AAChB,4BAAA,QAAA,gBAAAxB,cAACyB,CAAAA,OAAAA,EAAAA;AAAcC,gCAAAA,WAAAA,EAAapC,YAAY,CAACmB,QAASK,CAAAA,IAAI,CAAC;AAAEA,gCAAAA,IAAAA,EAAML,SAASK;;;;AAhBvDL,iBAAAA,EAAAA,QAAAA,CAASK,IAAI,CAAA;;;AAuB5C;;;;"}
@@ -0,0 +1,50 @@
import { jsx, jsxs } from 'react/jsx-runtime';
import { useReducer } from 'react';
import { Accordion, Flex } from '@strapi/design-system';
import { useIntl } from 'react-intl';
import { useUsersPermissions } from '../../contexts/UsersPermissionsContext/index.mjs';
import formatPluginName from '../../utils/formatPluginName.mjs';
import init from './init.mjs';
import PermissionRow from './PermissionRow/index.mjs';
import { reducer, initialState } from './reducer.mjs';
const Permissions = ()=>{
const { modifiedData } = useUsersPermissions();
const { formatMessage } = useIntl();
const [{ collapses }] = useReducer(reducer, initialState, (state)=>init(state, modifiedData));
return /*#__PURE__*/ jsx(Accordion.Root, {
size: "M",
children: /*#__PURE__*/ jsx(Flex, {
direction: "column",
alignItems: "stretch",
gap: 1,
children: collapses.map((collapse, index)=>/*#__PURE__*/ jsxs(Accordion.Item, {
value: collapse.name,
children: [
/*#__PURE__*/ jsx(Accordion.Header, {
variant: index % 2 === 0 ? 'secondary' : undefined,
children: /*#__PURE__*/ jsx(Accordion.Trigger, {
caretPosition: "right",
description: formatMessage({
id: 'users-permissions.Plugin.permissions.plugins.description',
defaultMessage: 'Define all allowed actions for the {name} plugin.'
}, {
name: collapse.name
}),
children: formatPluginName(collapse.name)
})
}),
/*#__PURE__*/ jsx(Accordion.Content, {
children: /*#__PURE__*/ jsx(PermissionRow, {
permissions: modifiedData[collapse.name],
name: collapse.name
})
})
]
}, collapse.name))
})
});
};
export { Permissions as default };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../../../admin/src/components/Permissions/index.jsx"],"sourcesContent":["import React, { useReducer } from 'react';\n\nimport { Accordion, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useUsersPermissions } from '../../contexts/UsersPermissionsContext';\nimport formatPluginName from '../../utils/formatPluginName';\n\nimport init from './init';\nimport PermissionRow from './PermissionRow';\nimport { initialState, reducer } from './reducer';\n\nconst Permissions = () => {\n const { modifiedData } = useUsersPermissions();\n const { formatMessage } = useIntl();\n const [{ collapses }] = useReducer(reducer, initialState, (state) => init(state, modifiedData));\n\n return (\n <Accordion.Root size=\"M\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n {collapses.map((collapse, index) => (\n <Accordion.Item key={collapse.name} value={collapse.name}>\n <Accordion.Header variant={index % 2 === 0 ? 'secondary' : undefined}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={formatMessage(\n {\n id: 'users-permissions.Plugin.permissions.plugins.description',\n defaultMessage: 'Define all allowed actions for the {name} plugin.',\n },\n { name: collapse.name }\n )}\n >\n {formatPluginName(collapse.name)}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <PermissionRow permissions={modifiedData[collapse.name]} name={collapse.name} />\n </Accordion.Content>\n </Accordion.Item>\n ))}\n </Flex>\n </Accordion.Root>\n );\n};\n\nexport default Permissions;\n"],"names":["Permissions","modifiedData","useUsersPermissions","formatMessage","useIntl","collapses","useReducer","reducer","initialState","state","init","_jsx","Accordion","Root","size","Flex","direction","alignItems","gap","map","collapse","index","_jsxs","Item","value","name","Header","variant","undefined","Trigger","caretPosition","description","id","defaultMessage","formatPluginName","Content","PermissionRow","permissions"],"mappings":";;;;;;;;;;AAYA,MAAMA,WAAc,GAAA,IAAA;IAClB,MAAM,EAAEC,YAAY,EAAE,GAAGC,mBAAAA,EAAAA;IACzB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAAC,EAAEC,SAAS,EAAE,CAAC,GAAGC,UAAWC,CAAAA,OAAAA,EAASC,YAAc,EAAA,CAACC,KAAUC,GAAAA,IAAAA,CAAKD,KAAOR,EAAAA,YAAAA,CAAAA,CAAAA;IAEjF,qBACEU,GAAA,CAACC,UAAUC,IAAI,EAAA;QAACC,IAAK,EAAA,GAAA;AACnB,QAAA,QAAA,gBAAAH,GAACI,CAAAA,IAAAA,EAAAA;YAAKC,SAAU,EAAA,QAAA;YAASC,UAAW,EAAA,SAAA;YAAUC,GAAK,EAAA,CAAA;AAChDb,YAAAA,QAAAA,EAAAA,SAAAA,CAAUc,GAAG,CAAC,CAACC,UAAUC,KACxB,iBAAAC,IAAA,CAACV,UAAUW,IAAI,EAAA;AAAqBC,oBAAAA,KAAAA,EAAOJ,SAASK,IAAI;;AACtD,sCAAAd,GAAA,CAACC,UAAUc,MAAM,EAAA;4BAACC,OAASN,EAAAA,KAAAA,GAAQ,CAAM,KAAA,CAAA,GAAI,WAAcO,GAAAA,SAAAA;oDACzDjB,GAAA,CAACC,UAAUiB,OAAO,EAAA;gCAChBC,aAAc,EAAA,OAAA;AACdC,gCAAAA,WAAAA,EAAa5B,aACX,CAAA;oCACE6B,EAAI,EAAA,0DAAA;oCACJC,cAAgB,EAAA;iCAElB,EAAA;AAAER,oCAAAA,IAAAA,EAAML,SAASK;AAAK,iCAAA,CAAA;AAGvBS,gCAAAA,QAAAA,EAAAA,gBAAAA,CAAiBd,SAASK,IAAI;;;AAGnC,sCAAAd,GAAA,CAACC,UAAUuB,OAAO,EAAA;AAChB,4BAAA,QAAA,gBAAAxB,GAACyB,CAAAA,aAAAA,EAAAA;AAAcC,gCAAAA,WAAAA,EAAapC,YAAY,CAACmB,QAASK,CAAAA,IAAI,CAAC;AAAEA,gCAAAA,IAAAA,EAAML,SAASK;;;;AAhBvDL,iBAAAA,EAAAA,QAAAA,CAASK,IAAI,CAAA;;;AAuB5C;;;;"}
@@ -0,0 +1,15 @@
'use strict';
const init = (initialState, permissions)=>{
const collapses = Object.keys(permissions).sort().map((name)=>({
name,
isOpen: false
}));
return {
...initialState,
collapses
};
};
module.exports = init;
//# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
{"version":3,"file":"init.js","sources":["../../../../admin/src/components/Permissions/init.js"],"sourcesContent":["const init = (initialState, permissions) => {\n const collapses = Object.keys(permissions)\n .sort()\n .map((name) => ({ name, isOpen: false }));\n\n return { ...initialState, collapses };\n};\n\nexport default init;\n"],"names":["init","initialState","permissions","collapses","Object","keys","sort","map","name","isOpen"],"mappings":";;AAAMA,MAAAA,IAAAA,GAAO,CAACC,YAAcC,EAAAA,WAAAA,GAAAA;IAC1B,MAAMC,SAAAA,GAAYC,MAAOC,CAAAA,IAAI,CAACH,WAAAA,CAAAA,CAC3BI,IAAI,EAAA,CACJC,GAAG,CAAC,CAACC,IAAAA,IAAU;AAAEA,YAAAA,IAAAA;YAAMC,MAAQ,EAAA;SAAM,CAAA,CAAA;IAExC,OAAO;AAAE,QAAA,GAAGR,YAAY;AAAEE,QAAAA;AAAU,KAAA;AACtC;;;;"}
@@ -0,0 +1,13 @@
const init = (initialState, permissions)=>{
const collapses = Object.keys(permissions).sort().map((name)=>({
name,
isOpen: false
}));
return {
...initialState,
collapses
};
};
export { init as default };
//# sourceMappingURL=init.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"init.mjs","sources":["../../../../admin/src/components/Permissions/init.js"],"sourcesContent":["const init = (initialState, permissions) => {\n const collapses = Object.keys(permissions)\n .sort()\n .map((name) => ({ name, isOpen: false }));\n\n return { ...initialState, collapses };\n};\n\nexport default init;\n"],"names":["init","initialState","permissions","collapses","Object","keys","sort","map","name","isOpen"],"mappings":"AAAMA,MAAAA,IAAAA,GAAO,CAACC,YAAcC,EAAAA,WAAAA,GAAAA;IAC1B,MAAMC,SAAAA,GAAYC,MAAOC,CAAAA,IAAI,CAACH,WAAAA,CAAAA,CAC3BI,IAAI,EAAA,CACJC,GAAG,CAAC,CAACC,IAAAA,IAAU;AAAEA,YAAAA,IAAAA;YAAMC,MAAQ,EAAA;SAAM,CAAA,CAAA;IAExC,OAAO;AAAE,QAAA,GAAGR,YAAY;AAAEE,QAAAA;AAAU,KAAA;AACtC;;;;"}
@@ -0,0 +1,34 @@
'use strict';
var immer = require('immer');
const initialState = {
collapses: []
};
const reducer = (state, action)=>// eslint-disable-next-line consistent-return
immer.produce(state, (draftState)=>{
switch(action.type){
case 'TOGGLE_COLLAPSE':
{
draftState.collapses = state.collapses.map((collapse, index)=>{
if (index === action.index) {
return {
...collapse,
isOpen: !collapse.isOpen
};
}
return {
...collapse,
isOpen: false
};
});
break;
}
default:
return draftState;
}
});
exports.initialState = initialState;
exports.reducer = reducer;
//# sourceMappingURL=reducer.js.map
@@ -0,0 +1 @@
{"version":3,"file":"reducer.js","sources":["../../../../admin/src/components/Permissions/reducer.js"],"sourcesContent":["import { produce } from 'immer';\n\nconst initialState = {\n collapses: [],\n};\n\nconst reducer = (state, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case 'TOGGLE_COLLAPSE': {\n draftState.collapses = state.collapses.map((collapse, index) => {\n if (index === action.index) {\n return { ...collapse, isOpen: !collapse.isOpen };\n }\n\n return { ...collapse, isOpen: false };\n });\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { initialState, reducer };\n"],"names":["initialState","collapses","reducer","state","action","produce","draftState","type","map","collapse","index","isOpen"],"mappings":";;;;AAEA,MAAMA,YAAe,GAAA;AACnBC,IAAAA,SAAAA,EAAW;AACb;AAEA,MAAMC,OAAU,GAAA,CAACC,KAAOC,EAAAA,MAAAA;AAEtBC,IAAAA,aAAAA,CAAQF,OAAO,CAACG,UAAAA,GAAAA;AACd,QAAA,OAAQF,OAAOG,IAAI;YACjB,KAAK,iBAAA;AAAmB,gBAAA;oBACtBD,UAAWL,CAAAA,SAAS,GAAGE,KAAMF,CAAAA,SAAS,CAACO,GAAG,CAAC,CAACC,QAAUC,EAAAA,KAAAA,GAAAA;wBACpD,IAAIA,KAAAA,KAAUN,MAAOM,CAAAA,KAAK,EAAE;4BAC1B,OAAO;AAAE,gCAAA,GAAGD,QAAQ;gCAAEE,MAAQ,EAAA,CAACF,SAASE;AAAO,6BAAA;AACjD;wBAEA,OAAO;AAAE,4BAAA,GAAGF,QAAQ;4BAAEE,MAAQ,EAAA;AAAM,yBAAA;AACtC,qBAAA,CAAA;AAEA,oBAAA;AACF;AACA,YAAA;gBACE,OAAOL,UAAAA;AACX;AACF,KAAA;;;;;"}
@@ -0,0 +1,31 @@
import { produce } from 'immer';
const initialState = {
collapses: []
};
const reducer = (state, action)=>// eslint-disable-next-line consistent-return
produce(state, (draftState)=>{
switch(action.type){
case 'TOGGLE_COLLAPSE':
{
draftState.collapses = state.collapses.map((collapse, index)=>{
if (index === action.index) {
return {
...collapse,
isOpen: !collapse.isOpen
};
}
return {
...collapse,
isOpen: false
};
});
break;
}
default:
return draftState;
}
});
export { initialState, reducer };
//# sourceMappingURL=reducer.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"reducer.mjs","sources":["../../../../admin/src/components/Permissions/reducer.js"],"sourcesContent":["import { produce } from 'immer';\n\nconst initialState = {\n collapses: [],\n};\n\nconst reducer = (state, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case 'TOGGLE_COLLAPSE': {\n draftState.collapses = state.collapses.map((collapse, index) => {\n if (index === action.index) {\n return { ...collapse, isOpen: !collapse.isOpen };\n }\n\n return { ...collapse, isOpen: false };\n });\n\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport { initialState, reducer };\n"],"names":["initialState","collapses","reducer","state","action","produce","draftState","type","map","collapse","index","isOpen"],"mappings":";;AAEA,MAAMA,YAAe,GAAA;AACnBC,IAAAA,SAAAA,EAAW;AACb;AAEA,MAAMC,OAAU,GAAA,CAACC,KAAOC,EAAAA,MAAAA;AAEtBC,IAAAA,OAAAA,CAAQF,OAAO,CAACG,UAAAA,GAAAA;AACd,QAAA,OAAQF,OAAOG,IAAI;YACjB,KAAK,iBAAA;AAAmB,gBAAA;oBACtBD,UAAWL,CAAAA,SAAS,GAAGE,KAAMF,CAAAA,SAAS,CAACO,GAAG,CAAC,CAACC,QAAUC,EAAAA,KAAAA,GAAAA;wBACpD,IAAIA,KAAAA,KAAUN,MAAOM,CAAAA,KAAK,EAAE;4BAC1B,OAAO;AAAE,gCAAA,GAAGD,QAAQ;gCAAEE,MAAQ,EAAA,CAACF,SAASE;AAAO,6BAAA;AACjD;wBAEA,OAAO;AAAE,4BAAA,GAAGF,QAAQ;4BAAEE,MAAQ,EAAA;AAAM,yBAAA;AACtC,qBAAA,CAAA;AAEA,oBAAA;AACF;AACA,YAAA;gBACE,OAAOL,UAAAA;AACX;AACF,KAAA;;;;"}
@@ -0,0 +1,67 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
require('react');
var designSystem = require('@strapi/design-system');
var get = require('lodash/get');
var isEmpty = require('lodash/isEmpty');
var without = require('lodash/without');
var reactIntl = require('react-intl');
var index = require('../../contexts/UsersPermissionsContext/index.js');
var index$1 = require('../BoundRoute/index.js');
const Policies = ()=>{
const { formatMessage } = reactIntl.useIntl();
const { selectedAction, routes } = index.useUsersPermissions();
const path = without(selectedAction.split('.'), 'controllers');
const controllerRoutes = get(routes, path[0]);
const pathResolved = path.slice(1).join('.');
const displayedRoutes = isEmpty(controllerRoutes) ? [] : controllerRoutes.filter((o)=>o.handler.endsWith(pathResolved));
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
col: 5,
background: "neutral150",
paddingTop: 6,
paddingBottom: 6,
paddingLeft: 7,
paddingRight: 7,
style: {
minHeight: '100%'
},
direction: "column",
alignItems: "stretch",
children: selectedAction ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
direction: "column",
alignItems: "stretch",
gap: 2,
children: displayedRoutes.map((route, key)=>// eslint-disable-next-line react/no-array-index-key
/*#__PURE__*/ jsxRuntime.jsx(index$1, {
route: route
}, key))
}) : /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
direction: "column",
alignItems: "stretch",
gap: 2,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
variant: "delta",
tag: "h3",
children: formatMessage({
id: 'users-permissions.Policies.header.title',
defaultMessage: 'Advanced settings'
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
tag: "p",
textColor: "neutral600",
children: formatMessage({
id: 'users-permissions.Policies.header.hint',
defaultMessage: "Select the application's actions or the plugin's actions and click on the cog icon to display the bound route"
})
})
]
})
});
};
module.exports = Policies;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../../../admin/src/components/Policies/index.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Grid, Typography } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport without from 'lodash/without';\nimport { useIntl } from 'react-intl';\n\nimport { useUsersPermissions } from '../../contexts/UsersPermissionsContext';\nimport BoundRoute from '../BoundRoute';\n\nconst Policies = () => {\n const { formatMessage } = useIntl();\n const { selectedAction, routes } = useUsersPermissions();\n\n const path = without(selectedAction.split('.'), 'controllers');\n const controllerRoutes = get(routes, path[0]);\n const pathResolved = path.slice(1).join('.');\n\n const displayedRoutes = isEmpty(controllerRoutes)\n ? []\n : controllerRoutes.filter((o) => o.handler.endsWith(pathResolved));\n\n return (\n <Grid.Item\n col={5}\n background=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n style={{ minHeight: '100%' }}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {selectedAction ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {displayedRoutes.map((route, key) => (\n // eslint-disable-next-line react/no-array-index-key\n <BoundRoute key={key} route={route} />\n ))}\n </Flex>\n ) : (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'users-permissions.Policies.header.title',\n defaultMessage: 'Advanced settings',\n })}\n </Typography>\n <Typography tag=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'users-permissions.Policies.header.hint',\n defaultMessage:\n \"Select the application's actions or the plugin's actions and click on the cog icon to display the bound route\",\n })}\n </Typography>\n </Flex>\n )}\n </Grid.Item>\n );\n};\n\nexport default Policies;\n"],"names":["Policies","formatMessage","useIntl","selectedAction","routes","useUsersPermissions","path","without","split","controllerRoutes","get","pathResolved","slice","join","displayedRoutes","isEmpty","filter","o","handler","endsWith","_jsx","Grid","Item","col","background","paddingTop","paddingBottom","paddingLeft","paddingRight","style","minHeight","direction","alignItems","Flex","gap","map","route","key","BoundRoute","_jsxs","Typography","variant","tag","id","defaultMessage","textColor"],"mappings":";;;;;;;;;;;;AAWA,MAAMA,QAAW,GAAA,IAAA;IACf,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,cAAc,EAAEC,MAAM,EAAE,GAAGC,yBAAAA,EAAAA;AAEnC,IAAA,MAAMC,IAAOC,GAAAA,OAAAA,CAAQJ,cAAeK,CAAAA,KAAK,CAAC,GAAM,CAAA,EAAA,aAAA,CAAA;AAChD,IAAA,MAAMC,gBAAmBC,GAAAA,GAAAA,CAAIN,MAAQE,EAAAA,IAAI,CAAC,CAAE,CAAA,CAAA;AAC5C,IAAA,MAAMK,eAAeL,IAAKM,CAAAA,KAAK,CAAC,CAAA,CAAA,CAAGC,IAAI,CAAC,GAAA,CAAA;AAExC,IAAA,MAAMC,eAAkBC,GAAAA,OAAAA,CAAQN,gBAC5B,CAAA,GAAA,EAAE,GACFA,gBAAiBO,CAAAA,MAAM,CAAC,CAACC,CAAMA,GAAAA,CAAAA,CAAEC,OAAO,CAACC,QAAQ,CAACR,YAAAA,CAAAA,CAAAA;IAEtD,qBACES,cAAA,CAACC,kBAAKC,IAAI,EAAA;QACRC,GAAK,EAAA,CAAA;QACLC,UAAW,EAAA,YAAA;QACXC,UAAY,EAAA,CAAA;QACZC,aAAe,EAAA,CAAA;QACfC,WAAa,EAAA,CAAA;QACbC,YAAc,EAAA,CAAA;QACdC,KAAO,EAAA;YAAEC,SAAW,EAAA;AAAO,SAAA;QAC3BC,SAAU,EAAA,QAAA;QACVC,UAAW,EAAA,SAAA;AAEV7B,QAAAA,QAAAA,EAAAA,cAAAA,iBACCiB,cAACa,CAAAA,iBAAAA,EAAAA;YAAKF,SAAU,EAAA,QAAA;YAASC,UAAW,EAAA,SAAA;YAAUE,GAAK,EAAA,CAAA;AAChDpB,YAAAA,QAAAA,EAAAA,eAAAA,CAAgBqB,GAAG,CAAC,CAACC,KAAAA,EAAOC;8BAE3BjB,cAACkB,CAAAA,OAAAA,EAAAA;oBAAqBF,KAAOA,EAAAA;AAAZC,iBAAAA,EAAAA,GAAAA,CAAAA;2BAIrBE,eAACN,CAAAA,iBAAAA,EAAAA;YAAKF,SAAU,EAAA,QAAA;YAASC,UAAW,EAAA,SAAA;YAAUE,GAAK,EAAA,CAAA;;8BACjDd,cAACoB,CAAAA,uBAAAA,EAAAA;oBAAWC,OAAQ,EAAA,OAAA;oBAAQC,GAAI,EAAA,IAAA;8BAC7BzC,aAAc,CAAA;wBACb0C,EAAI,EAAA,yCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA;;8BAEFxB,cAACoB,CAAAA,uBAAAA,EAAAA;oBAAWE,GAAI,EAAA,GAAA;oBAAIG,SAAU,EAAA,YAAA;8BAC3B5C,aAAc,CAAA;wBACb0C,EAAI,EAAA,wCAAA;wBACJC,cACE,EAAA;AACJ,qBAAA;;;;;AAMZ;;;;"}
@@ -0,0 +1,65 @@
import { jsx, jsxs } from 'react/jsx-runtime';
import 'react';
import { Grid, Flex, Typography } from '@strapi/design-system';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
import without from 'lodash/without';
import { useIntl } from 'react-intl';
import { useUsersPermissions } from '../../contexts/UsersPermissionsContext/index.mjs';
import BoundRoute from '../BoundRoute/index.mjs';
const Policies = ()=>{
const { formatMessage } = useIntl();
const { selectedAction, routes } = useUsersPermissions();
const path = without(selectedAction.split('.'), 'controllers');
const controllerRoutes = get(routes, path[0]);
const pathResolved = path.slice(1).join('.');
const displayedRoutes = isEmpty(controllerRoutes) ? [] : controllerRoutes.filter((o)=>o.handler.endsWith(pathResolved));
return /*#__PURE__*/ jsx(Grid.Item, {
col: 5,
background: "neutral150",
paddingTop: 6,
paddingBottom: 6,
paddingLeft: 7,
paddingRight: 7,
style: {
minHeight: '100%'
},
direction: "column",
alignItems: "stretch",
children: selectedAction ? /*#__PURE__*/ jsx(Flex, {
direction: "column",
alignItems: "stretch",
gap: 2,
children: displayedRoutes.map((route, key)=>// eslint-disable-next-line react/no-array-index-key
/*#__PURE__*/ jsx(BoundRoute, {
route: route
}, key))
}) : /*#__PURE__*/ jsxs(Flex, {
direction: "column",
alignItems: "stretch",
gap: 2,
children: [
/*#__PURE__*/ jsx(Typography, {
variant: "delta",
tag: "h3",
children: formatMessage({
id: 'users-permissions.Policies.header.title',
defaultMessage: 'Advanced settings'
})
}),
/*#__PURE__*/ jsx(Typography, {
tag: "p",
textColor: "neutral600",
children: formatMessage({
id: 'users-permissions.Policies.header.hint',
defaultMessage: "Select the application's actions or the plugin's actions and click on the cog icon to display the bound route"
})
})
]
})
});
};
export { Policies as default };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../../../admin/src/components/Policies/index.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Grid, Typography } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport without from 'lodash/without';\nimport { useIntl } from 'react-intl';\n\nimport { useUsersPermissions } from '../../contexts/UsersPermissionsContext';\nimport BoundRoute from '../BoundRoute';\n\nconst Policies = () => {\n const { formatMessage } = useIntl();\n const { selectedAction, routes } = useUsersPermissions();\n\n const path = without(selectedAction.split('.'), 'controllers');\n const controllerRoutes = get(routes, path[0]);\n const pathResolved = path.slice(1).join('.');\n\n const displayedRoutes = isEmpty(controllerRoutes)\n ? []\n : controllerRoutes.filter((o) => o.handler.endsWith(pathResolved));\n\n return (\n <Grid.Item\n col={5}\n background=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n style={{ minHeight: '100%' }}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {selectedAction ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {displayedRoutes.map((route, key) => (\n // eslint-disable-next-line react/no-array-index-key\n <BoundRoute key={key} route={route} />\n ))}\n </Flex>\n ) : (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'users-permissions.Policies.header.title',\n defaultMessage: 'Advanced settings',\n })}\n </Typography>\n <Typography tag=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'users-permissions.Policies.header.hint',\n defaultMessage:\n \"Select the application's actions or the plugin's actions and click on the cog icon to display the bound route\",\n })}\n </Typography>\n </Flex>\n )}\n </Grid.Item>\n );\n};\n\nexport default Policies;\n"],"names":["Policies","formatMessage","useIntl","selectedAction","routes","useUsersPermissions","path","without","split","controllerRoutes","get","pathResolved","slice","join","displayedRoutes","isEmpty","filter","o","handler","endsWith","_jsx","Grid","Item","col","background","paddingTop","paddingBottom","paddingLeft","paddingRight","style","minHeight","direction","alignItems","Flex","gap","map","route","key","BoundRoute","_jsxs","Typography","variant","tag","id","defaultMessage","textColor"],"mappings":";;;;;;;;;;AAWA,MAAMA,QAAW,GAAA,IAAA;IACf,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,cAAc,EAAEC,MAAM,EAAE,GAAGC,mBAAAA,EAAAA;AAEnC,IAAA,MAAMC,IAAOC,GAAAA,OAAAA,CAAQJ,cAAeK,CAAAA,KAAK,CAAC,GAAM,CAAA,EAAA,aAAA,CAAA;AAChD,IAAA,MAAMC,gBAAmBC,GAAAA,GAAAA,CAAIN,MAAQE,EAAAA,IAAI,CAAC,CAAE,CAAA,CAAA;AAC5C,IAAA,MAAMK,eAAeL,IAAKM,CAAAA,KAAK,CAAC,CAAA,CAAA,CAAGC,IAAI,CAAC,GAAA,CAAA;AAExC,IAAA,MAAMC,eAAkBC,GAAAA,OAAAA,CAAQN,gBAC5B,CAAA,GAAA,EAAE,GACFA,gBAAiBO,CAAAA,MAAM,CAAC,CAACC,CAAMA,GAAAA,CAAAA,CAAEC,OAAO,CAACC,QAAQ,CAACR,YAAAA,CAAAA,CAAAA;IAEtD,qBACES,GAAA,CAACC,KAAKC,IAAI,EAAA;QACRC,GAAK,EAAA,CAAA;QACLC,UAAW,EAAA,YAAA;QACXC,UAAY,EAAA,CAAA;QACZC,aAAe,EAAA,CAAA;QACfC,WAAa,EAAA,CAAA;QACbC,YAAc,EAAA,CAAA;QACdC,KAAO,EAAA;YAAEC,SAAW,EAAA;AAAO,SAAA;QAC3BC,SAAU,EAAA,QAAA;QACVC,UAAW,EAAA,SAAA;AAEV7B,QAAAA,QAAAA,EAAAA,cAAAA,iBACCiB,GAACa,CAAAA,IAAAA,EAAAA;YAAKF,SAAU,EAAA,QAAA;YAASC,UAAW,EAAA,SAAA;YAAUE,GAAK,EAAA,CAAA;AAChDpB,YAAAA,QAAAA,EAAAA,eAAAA,CAAgBqB,GAAG,CAAC,CAACC,KAAAA,EAAOC;8BAE3BjB,GAACkB,CAAAA,UAAAA,EAAAA;oBAAqBF,KAAOA,EAAAA;AAAZC,iBAAAA,EAAAA,GAAAA,CAAAA;2BAIrBE,IAACN,CAAAA,IAAAA,EAAAA;YAAKF,SAAU,EAAA,QAAA;YAASC,UAAW,EAAA,SAAA;YAAUE,GAAK,EAAA,CAAA;;8BACjDd,GAACoB,CAAAA,UAAAA,EAAAA;oBAAWC,OAAQ,EAAA,OAAA;oBAAQC,GAAI,EAAA,IAAA;8BAC7BzC,aAAc,CAAA;wBACb0C,EAAI,EAAA,yCAAA;wBACJC,cAAgB,EAAA;AAClB,qBAAA;;8BAEFxB,GAACoB,CAAAA,UAAAA,EAAAA;oBAAWE,GAAI,EAAA,GAAA;oBAAIG,SAAU,EAAA,YAAA;8BAC3B5C,aAAc,CAAA;wBACb0C,EAAI,EAAA,wCAAA;wBACJC,cACE,EAAA;AACJ,qBAAA;;;;;AAMZ;;;;"}
@@ -0,0 +1,115 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var designSystem = require('@strapi/design-system');
var PropTypes = require('prop-types');
var reactIntl = require('react-intl');
var index = require('../../contexts/UsersPermissionsContext/index.js');
var getTrad = require('../../utils/getTrad.js');
var index$1 = require('../Permissions/index.js');
var index$2 = require('../Policies/index.js');
var init = require('./init.js');
var reducer = require('./reducer.js');
const UsersPermissions = /*#__PURE__*/ React.forwardRef(({ permissions, routes }, ref)=>{
const { formatMessage } = reactIntl.useIntl();
const [state, dispatch] = React.useReducer(reducer.default, reducer.initialState, (state)=>init(state, permissions, routes));
React.useImperativeHandle(ref, ()=>({
getPermissions () {
return {
permissions: state.modifiedData
};
},
resetForm () {
dispatch({
type: 'ON_RESET'
});
},
setFormAfterSubmit () {
dispatch({
type: 'ON_SUBMIT_SUCCEEDED'
});
}
}));
const handleChange = ({ target: { name, value } })=>dispatch({
type: 'ON_CHANGE',
keys: name.split('.'),
value: value === 'empty__string_value' ? '' : value
});
const handleChangeSelectAll = ({ target: { name, value } })=>dispatch({
type: 'ON_CHANGE_SELECT_ALL',
keys: name.split('.'),
value
});
const handleSelectedAction = (actionToSelect)=>dispatch({
type: 'SELECT_ACTION',
actionToSelect
});
const providerValue = {
...state,
onChange: handleChange,
onChangeSelectAll: handleChangeSelectAll,
onSelectedAction: handleSelectedAction
};
return /*#__PURE__*/ jsxRuntime.jsx(index.UsersPermissionsProvider, {
value: providerValue,
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Root, {
gap: 0,
shadow: "filterShadow",
hasRadius: true,
background: "neutral0",
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
col: 7,
paddingTop: 6,
paddingBottom: 6,
paddingLeft: 7,
paddingRight: 7,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
direction: "column",
alignItems: "stretch",
gap: 6,
children: [
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
direction: "column",
alignItems: "stretch",
gap: 2,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
variant: "delta",
tag: "h2",
children: formatMessage({
id: getTrad('Plugins.header.title'),
defaultMessage: 'Permissions'
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
tag: "p",
textColor: "neutral600",
children: formatMessage({
id: getTrad('Plugins.header.description'),
defaultMessage: 'Only actions bound by a route are listed below.'
})
})
]
}),
/*#__PURE__*/ jsxRuntime.jsx(index$1, {})
]
})
}),
/*#__PURE__*/ jsxRuntime.jsx(index$2, {})
]
})
});
});
UsersPermissions.propTypes = {
permissions: PropTypes.object.isRequired,
routes: PropTypes.object.isRequired
};
var UsersPermissions$1 = /*#__PURE__*/ React.memo(UsersPermissions);
module.exports = UsersPermissions$1;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../../../admin/src/components/UsersPermissions/index.jsx"],"sourcesContent":["import React, { forwardRef, memo, useImperativeHandle, useReducer } from 'react';\n\nimport { Flex, Grid, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { UsersPermissionsProvider } from '../../contexts/UsersPermissionsContext';\nimport getTrad from '../../utils/getTrad';\nimport Permissions from '../Permissions';\nimport Policies from '../Policies';\n\nimport init from './init';\nimport reducer, { initialState } from './reducer';\n\nconst UsersPermissions = forwardRef(({ permissions, routes }, ref) => {\n const { formatMessage } = useIntl();\n const [state, dispatch] = useReducer(reducer, initialState, (state) =>\n init(state, permissions, routes)\n );\n\n useImperativeHandle(ref, () => ({\n getPermissions() {\n return {\n permissions: state.modifiedData,\n };\n },\n resetForm() {\n dispatch({ type: 'ON_RESET' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'ON_SUBMIT_SUCCEEDED' });\n },\n }));\n\n const handleChange = ({ target: { name, value } }) =>\n dispatch({\n type: 'ON_CHANGE',\n keys: name.split('.'),\n value: value === 'empty__string_value' ? '' : value,\n });\n\n const handleChangeSelectAll = ({ target: { name, value } }) =>\n dispatch({\n type: 'ON_CHANGE_SELECT_ALL',\n keys: name.split('.'),\n value,\n });\n\n const handleSelectedAction = (actionToSelect) =>\n dispatch({\n type: 'SELECT_ACTION',\n actionToSelect,\n });\n\n const providerValue = {\n ...state,\n onChange: handleChange,\n onChangeSelectAll: handleChangeSelectAll,\n onSelectedAction: handleSelectedAction,\n };\n\n return (\n <UsersPermissionsProvider value={providerValue}>\n <Grid.Root gap={0} shadow=\"filterShadow\" hasRadius background=\"neutral0\">\n <Grid.Item\n col={7}\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTrad('Plugins.header.title'),\n defaultMessage: 'Permissions',\n })}\n </Typography>\n <Typography tag=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('Plugins.header.description'),\n defaultMessage: 'Only actions bound by a route are listed below.',\n })}\n </Typography>\n </Flex>\n <Permissions />\n </Flex>\n </Grid.Item>\n <Policies />\n </Grid.Root>\n </UsersPermissionsProvider>\n );\n});\n\nUsersPermissions.propTypes = {\n permissions: PropTypes.object.isRequired,\n routes: PropTypes.object.isRequired,\n};\n\nexport default memo(UsersPermissions);\n"],"names":["UsersPermissions","forwardRef","permissions","routes","ref","formatMessage","useIntl","state","dispatch","useReducer","reducer","initialState","init","useImperativeHandle","getPermissions","modifiedData","resetForm","type","setFormAfterSubmit","handleChange","target","name","value","keys","split","handleChangeSelectAll","handleSelectedAction","actionToSelect","providerValue","onChange","onChangeSelectAll","onSelectedAction","_jsx","UsersPermissionsProvider","_jsxs","Grid","Root","gap","shadow","hasRadius","background","Item","col","paddingTop","paddingBottom","paddingLeft","paddingRight","direction","alignItems","Flex","Typography","variant","tag","id","getTrad","defaultMessage","textColor","Permissions","Policies","propTypes","PropTypes","object","isRequired","memo"],"mappings":";;;;;;;;;;;;;;AAcA,MAAMA,gBAAAA,iBAAmBC,iBAAW,CAAC,EAAEC,WAAW,EAAEC,MAAM,EAAE,EAAEC,GAAAA,GAAAA;IAC5D,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,CAACC,KAAOC,EAAAA,QAAAA,CAAS,GAAGC,gBAAAA,CAAWC,eAASC,EAAAA,oBAAAA,EAAc,CAACJ,KAAAA,GAC3DK,IAAKL,CAAAA,KAAAA,EAAOL,WAAaC,EAAAA,MAAAA,CAAAA,CAAAA;IAG3BU,yBAAoBT,CAAAA,GAAAA,EAAK,KAAO;AAC9BU,YAAAA,cAAAA,CAAAA,GAAAA;gBACE,OAAO;AACLZ,oBAAAA,WAAAA,EAAaK,MAAMQ;AACrB,iBAAA;AACF,aAAA;AACAC,YAAAA,SAAAA,CAAAA,GAAAA;gBACER,QAAS,CAAA;oBAAES,IAAM,EAAA;AAAW,iBAAA,CAAA;AAC9B,aAAA;AACAC,YAAAA,kBAAAA,CAAAA,GAAAA;gBACEV,QAAS,CAAA;oBAAES,IAAM,EAAA;AAAsB,iBAAA,CAAA;AACzC;SACF,CAAA,CAAA;IAEA,MAAME,YAAAA,GAAe,CAAC,EAAEC,MAAQ,EAAA,EAAEC,IAAI,EAAEC,KAAK,EAAE,EAAE,GAC/Cd,QAAS,CAAA;YACPS,IAAM,EAAA,WAAA;YACNM,IAAMF,EAAAA,IAAAA,CAAKG,KAAK,CAAC,GAAA,CAAA;YACjBF,KAAOA,EAAAA,KAAAA,KAAU,wBAAwB,EAAKA,GAAAA;AAChD,SAAA,CAAA;IAEF,MAAMG,qBAAAA,GAAwB,CAAC,EAAEL,MAAQ,EAAA,EAAEC,IAAI,EAAEC,KAAK,EAAE,EAAE,GACxDd,QAALine truncated
@@ -0,0 +1,113 @@
import { jsx, jsxs } from 'react/jsx-runtime';
import { forwardRef, useReducer, useImperativeHandle, memo } from 'react';
import { Grid, Flex, Typography } from '@strapi/design-system';
import PropTypes from 'prop-types';
import { useIntl } from 'react-intl';
import { UsersPermissionsProvider } from '../../contexts/UsersPermissionsContext/index.mjs';
import getTrad from '../../utils/getTrad.mjs';
import Permissions from '../Permissions/index.mjs';
import Policies from '../Policies/index.mjs';
import init from './init.mjs';
import reducer, { initialState } from './reducer.mjs';
const UsersPermissions = /*#__PURE__*/ forwardRef(({ permissions, routes }, ref)=>{
const { formatMessage } = useIntl();
const [state, dispatch] = useReducer(reducer, initialState, (state)=>init(state, permissions, routes));
useImperativeHandle(ref, ()=>({
getPermissions () {
return {
permissions: state.modifiedData
};
},
resetForm () {
dispatch({
type: 'ON_RESET'
});
},
setFormAfterSubmit () {
dispatch({
type: 'ON_SUBMIT_SUCCEEDED'
});
}
}));
const handleChange = ({ target: { name, value } })=>dispatch({
type: 'ON_CHANGE',
keys: name.split('.'),
value: value === 'empty__string_value' ? '' : value
});
const handleChangeSelectAll = ({ target: { name, value } })=>dispatch({
type: 'ON_CHANGE_SELECT_ALL',
keys: name.split('.'),
value
});
const handleSelectedAction = (actionToSelect)=>dispatch({
type: 'SELECT_ACTION',
actionToSelect
});
const providerValue = {
...state,
onChange: handleChange,
onChangeSelectAll: handleChangeSelectAll,
onSelectedAction: handleSelectedAction
};
return /*#__PURE__*/ jsx(UsersPermissionsProvider, {
value: providerValue,
children: /*#__PURE__*/ jsxs(Grid.Root, {
gap: 0,
shadow: "filterShadow",
hasRadius: true,
background: "neutral0",
children: [
/*#__PURE__*/ jsx(Grid.Item, {
col: 7,
paddingTop: 6,
paddingBottom: 6,
paddingLeft: 7,
paddingRight: 7,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxs(Flex, {
direction: "column",
alignItems: "stretch",
gap: 6,
children: [
/*#__PURE__*/ jsxs(Flex, {
direction: "column",
alignItems: "stretch",
gap: 2,
children: [
/*#__PURE__*/ jsx(Typography, {
variant: "delta",
tag: "h2",
children: formatMessage({
id: getTrad('Plugins.header.title'),
defaultMessage: 'Permissions'
})
}),
/*#__PURE__*/ jsx(Typography, {
tag: "p",
textColor: "neutral600",
children: formatMessage({
id: getTrad('Plugins.header.description'),
defaultMessage: 'Only actions bound by a route are listed below.'
})
})
]
}),
/*#__PURE__*/ jsx(Permissions, {})
]
})
}),
/*#__PURE__*/ jsx(Policies, {})
]
})
});
});
UsersPermissions.propTypes = {
permissions: PropTypes.object.isRequired,
routes: PropTypes.object.isRequired
};
var UsersPermissions$1 = /*#__PURE__*/ memo(UsersPermissions);
export { UsersPermissions$1 as default };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../../../admin/src/components/UsersPermissions/index.jsx"],"sourcesContent":["import React, { forwardRef, memo, useImperativeHandle, useReducer } from 'react';\n\nimport { Flex, Grid, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { UsersPermissionsProvider } from '../../contexts/UsersPermissionsContext';\nimport getTrad from '../../utils/getTrad';\nimport Permissions from '../Permissions';\nimport Policies from '../Policies';\n\nimport init from './init';\nimport reducer, { initialState } from './reducer';\n\nconst UsersPermissions = forwardRef(({ permissions, routes }, ref) => {\n const { formatMessage } = useIntl();\n const [state, dispatch] = useReducer(reducer, initialState, (state) =>\n init(state, permissions, routes)\n );\n\n useImperativeHandle(ref, () => ({\n getPermissions() {\n return {\n permissions: state.modifiedData,\n };\n },\n resetForm() {\n dispatch({ type: 'ON_RESET' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'ON_SUBMIT_SUCCEEDED' });\n },\n }));\n\n const handleChange = ({ target: { name, value } }) =>\n dispatch({\n type: 'ON_CHANGE',\n keys: name.split('.'),\n value: value === 'empty__string_value' ? '' : value,\n });\n\n const handleChangeSelectAll = ({ target: { name, value } }) =>\n dispatch({\n type: 'ON_CHANGE_SELECT_ALL',\n keys: name.split('.'),\n value,\n });\n\n const handleSelectedAction = (actionToSelect) =>\n dispatch({\n type: 'SELECT_ACTION',\n actionToSelect,\n });\n\n const providerValue = {\n ...state,\n onChange: handleChange,\n onChangeSelectAll: handleChangeSelectAll,\n onSelectedAction: handleSelectedAction,\n };\n\n return (\n <UsersPermissionsProvider value={providerValue}>\n <Grid.Root gap={0} shadow=\"filterShadow\" hasRadius background=\"neutral0\">\n <Grid.Item\n col={7}\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: getTrad('Plugins.header.title'),\n defaultMessage: 'Permissions',\n })}\n </Typography>\n <Typography tag=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('Plugins.header.description'),\n defaultMessage: 'Only actions bound by a route are listed below.',\n })}\n </Typography>\n </Flex>\n <Permissions />\n </Flex>\n </Grid.Item>\n <Policies />\n </Grid.Root>\n </UsersPermissionsProvider>\n );\n});\n\nUsersPermissions.propTypes = {\n permissions: PropTypes.object.isRequired,\n routes: PropTypes.object.isRequired,\n};\n\nexport default memo(UsersPermissions);\n"],"names":["UsersPermissions","forwardRef","permissions","routes","ref","formatMessage","useIntl","state","dispatch","useReducer","reducer","initialState","init","useImperativeHandle","getPermissions","modifiedData","resetForm","type","setFormAfterSubmit","handleChange","target","name","value","keys","split","handleChangeSelectAll","handleSelectedAction","actionToSelect","providerValue","onChange","onChangeSelectAll","onSelectedAction","_jsx","UsersPermissionsProvider","_jsxs","Grid","Root","gap","shadow","hasRadius","background","Item","col","paddingTop","paddingBottom","paddingLeft","paddingRight","direction","alignItems","Flex","Typography","variant","tag","id","getTrad","defaultMessage","textColor","Permissions","Policies","propTypes","PropTypes","object","isRequired","memo"],"mappings":";;;;;;;;;;;;AAcA,MAAMA,gBAAAA,iBAAmBC,WAAW,CAAC,EAAEC,WAAW,EAAEC,MAAM,EAAE,EAAEC,GAAAA,GAAAA;IAC5D,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,CAACC,KAAOC,EAAAA,QAAAA,CAAS,GAAGC,UAAAA,CAAWC,OAASC,EAAAA,YAAAA,EAAc,CAACJ,KAAAA,GAC3DK,IAAKL,CAAAA,KAAAA,EAAOL,WAAaC,EAAAA,MAAAA,CAAAA,CAAAA;IAG3BU,mBAAoBT,CAAAA,GAAAA,EAAK,KAAO;AAC9BU,YAAAA,cAAAA,CAAAA,GAAAA;gBACE,OAAO;AACLZ,oBAAAA,WAAAA,EAAaK,MAAMQ;AACrB,iBAAA;AACF,aAAA;AACAC,YAAAA,SAAAA,CAAAA,GAAAA;gBACER,QAAS,CAAA;oBAAES,IAAM,EAAA;AAAW,iBAAA,CAAA;AAC9B,aAAA;AACAC,YAAAA,kBAAAA,CAAAA,GAAAA;gBACEV,QAAS,CAAA;oBAAES,IAAM,EAAA;AAAsB,iBAAA,CAAA;AACzC;SACF,CAAA,CAAA;IAEA,MAAME,YAAAA,GAAe,CAAC,EAAEC,MAAQ,EAAA,EAAEC,IAAI,EAAEC,KAAK,EAAE,EAAE,GAC/Cd,QAAS,CAAA;YACPS,IAAM,EAAA,WAAA;YACNM,IAAMF,EAAAA,IAAAA,CAAKG,KAAK,CAAC,GAAA,CAAA;YACjBF,KAAOA,EAAAA,KAAAA,KAAU,wBAAwB,EAAKA,GAAAA;AAChD,SAAA,CAAA;IAEF,MAAMG,qBAAAA,GAAwB,CAAC,EAAEL,MAAQ,EAAA,EAAEC,IAAI,EAAEC,KAAK,EAAE,EAAE,GACxDd,QAAS,CAALine truncated
@@ -0,0 +1,13 @@
'use strict';
const init = (state, permissions, routes)=>{
return {
...state,
initialData: permissions,
modifiedData: permissions,
routes
};
};
module.exports = init;
//# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
{"version":3,"file":"init.js","sources":["../../../../admin/src/components/UsersPermissions/init.js"],"sourcesContent":["const init = (state, permissions, routes) => {\n return {\n ...state,\n initialData: permissions,\n modifiedData: permissions,\n routes,\n };\n};\n\nexport default init;\n"],"names":["init","state","permissions","routes","initialData","modifiedData"],"mappings":";;AAAMA,MAAAA,IAAAA,GAAO,CAACC,KAAAA,EAAOC,WAAaC,EAAAA,MAAAA,GAAAA;IAChC,OAAO;AACL,QAAA,GAAGF,KAAK;QACRG,WAAaF,EAAAA,WAAAA;QACbG,YAAcH,EAAAA,WAAAA;AACdC,QAAAA;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,11 @@
const init = (state, permissions, routes)=>{
return {
...state,
initialData: permissions,
modifiedData: permissions,
routes
};
};
export { init as default };
//# sourceMappingURL=init.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"init.mjs","sources":["../../../../admin/src/components/UsersPermissions/init.js"],"sourcesContent":["const init = (state, permissions, routes) => {\n return {\n ...state,\n initialData: permissions,\n modifiedData: permissions,\n routes,\n };\n};\n\nexport default init;\n"],"names":["init","state","permissions","routes","initialData","modifiedData"],"mappings":"AAAMA,MAAAA,IAAAA,GAAO,CAACC,KAAAA,EAAOC,WAAaC,EAAAA,MAAAA,GAAAA;IAChC,OAAO;AACL,QAAA,GAAGF,KAAK;QACRG,WAAaF,EAAAA,WAAAA;QACbG,YAAcH,EAAAA,WAAAA;AACdC,QAAAA;AACF,KAAA;AACF;;;;"}
@@ -0,0 +1,73 @@
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var immer = require('immer');
var get = require('lodash/get');
var set = require('lodash/set');
var take = require('lodash/take');
const initialState = {
initialData: {},
modifiedData: {},
routes: {},
selectedAction: '',
policies: []
};
const reducer = (state, action)=>immer.produce(state, (draftState)=>{
switch(action.type){
case 'ON_CHANGE':
{
const keysLength = action.keys.length;
const isChangingCheckbox = action.keys[keysLength - 1] === 'enabled';
if (action.value && isChangingCheckbox) {
const selectedAction = take(action.keys, keysLength - 1).join('.');
draftState.selectedAction = selectedAction;
}
set(draftState, [
'modifiedData',
...action.keys
], action.value);
break;
}
case 'ON_CHANGE_SELECT_ALL':
{
const pathToValue = [
'modifiedData',
...action.keys
];
const oldValues = get(state, pathToValue, {});
const updatedValues = Object.keys(oldValues).reduce((acc, current)=>{
acc[current] = {
...oldValues[current],
enabled: action.value
};
return acc;
}, {});
set(draftState, pathToValue, updatedValues);
break;
}
case 'ON_RESET':
{
draftState.modifiedData = state.initialData;
break;
}
case 'ON_SUBMIT_SUCCEEDED':
{
draftState.initialData = state.modifiedData;
break;
}
case 'SELECT_ACTION':
{
const { actionToSelect } = action;
draftState.selectedAction = actionToSelect === state.selectedAction ? '' : actionToSelect;
break;
}
default:
return draftState;
}
});
exports.default = reducer;
exports.initialState = initialState;
//# sourceMappingURL=reducer.js.map
@@ -0,0 +1 @@
{"version":3,"file":"reducer.js","sources":["../../../../admin/src/components/UsersPermissions/reducer.js"],"sourcesContent":["/* eslint-disable consistent-return */\nimport { produce } from 'immer';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport take from 'lodash/take';\n\nexport const initialState = {\n initialData: {},\n modifiedData: {},\n routes: {},\n selectedAction: '',\n policies: [],\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE': {\n const keysLength = action.keys.length;\n const isChangingCheckbox = action.keys[keysLength - 1] === 'enabled';\n\n if (action.value && isChangingCheckbox) {\n const selectedAction = take(action.keys, keysLength - 1).join('.');\n draftState.selectedAction = selectedAction;\n }\n\n set(draftState, ['modifiedData', ...action.keys], action.value);\n break;\n }\n case 'ON_CHANGE_SELECT_ALL': {\n const pathToValue = ['modifiedData', ...action.keys];\n const oldValues = get(state, pathToValue, {});\n const updatedValues = Object.keys(oldValues).reduce((acc, current) => {\n acc[current] = { ...oldValues[current], enabled: action.value };\n\n return acc;\n }, {});\n\n set(draftState, pathToValue, updatedValues);\n\n break;\n }\n case 'ON_RESET': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'ON_SUBMIT_SUCCEEDED': {\n draftState.initialData = state.modifiedData;\n break;\n }\n\n case 'SELECT_ACTION': {\n const { actionToSelect } = action;\n draftState.selectedAction = actionToSelect === state.selectedAction ? '' : actionToSelect;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n"],"names":["initialState","initialData","modifiedData","routes","selectedAction","policies","reducer","state","action","produce","draftState","type","keysLength","keys","length","isChangingCheckbox","value","take","join","set","pathToValue","oldValues","get","updatedValues","Object","reduce","acc","current","enabled","actionToSelect"],"mappings":";;;;;;;;;MAMaA,YAAe,GAAA;AAC1BC,IAAAA,WAAAA,EAAa,EAAC;AACdC,IAAAA,YAAAA,EAAc,EAAC;AACfC,IAAAA,MAAAA,EAAQ,EAAC;IACTC,cAAgB,EAAA,EAAA;AAChBC,IAAAA,QAAAA,EAAU;AACZ;AAEA,MAAMC,UAAU,CAACC,KAAAA,EAAOC,MACtBC,GAAAA,aAAAA,CAAQF,OAAO,CAACG,UAAAA,GAAAA;AACd,QAAA,OAAQF,OAAOG,IAAI;YACjB,KAAK,WAAA;AAAa,gBAAA;AAChB,oBAAA,MAAMC,UAAaJ,GAAAA,MAAAA,CAAOK,IAAI,CAACC,MAAM;AACrC,oBAAA,MAAMC,qBAAqBP,MAAOK,CAAAA,IAAI,CAACD,UAAAA,GAAa,EAAE,KAAK,SAAA;oBAE3D,IAAIJ,MAAAA,CAAOQ,KAAK,IAAID,kBAAoB,EAAA;wBACtC,MAAMX,cAAAA,GAAiBa,KAAKT,MAAOK,CAAAA,IAAI,EAAED,UAAa,GAAA,CAAA,CAAA,CAAGM,IAAI,CAAC,GAAA,CAAA;AAC9DR,wBAAAA,UAAAA,CAAWN,cAAc,GAAGA,cAAAA;AAC9B;AAEAe,oBAAAA,GAAAA,CAAIT,UAAY,EAAA;AAAC,wBAAA,cAAA;AAAmBF,wBAAAA,GAAAA,MAAAA,CAAOK;AAAK,qBAAA,EAAEL,OAAOQ,KAAK,CAAA;AAC9D,oBAAA;AACF;YACA,KAAK,sBAAA;AAAwB,gBAAA;AAC3B,oBAAA,MAAMI,WAAc,GAAA;AAAC,wBAAA,cAAA;AAAmBZ,wBAAAA,GAAAA,MAAAA,CAAOK;AAAK,qBAAA;AACpD,oBAAA,MAAMQ,SAAYC,GAAAA,GAAAA,CAAIf,KAAOa,EAAAA,WAAAA,EAAa,EAAC,CAAA;oBAC3C,MAAMG,aAAAA,GAAgBC,OAAOX,IAAI,CAACQ,WAAWI,MAAM,CAAC,CAACC,GAAKC,EAAAA,OAAAA,GAAAA;wBACxDD,GAAG,CAACC,QAAQ,GAAG;4BAAE,GAAGN,SAAS,CAACM,OAAQ,CAAA;AAAEC,4BAAAA,OAAAA,EAASpB,OAAOQ;AAAM,yBAAA;wBAE9D,OAAOU,GAAAA;AACT,qBAAA,EAAG,EAAC,CAAA;AAEJP,oBAAAA,GAAAA,CAAIT,YAAYU,WAAaG,EAAAA,aAAAA,CAAAA;AAE7B,oBAAA;AACF;YACA,KAAK,UAAA;AAAY,gBAAA;oBACfb,UAAWR,CAAAA,YAAY,GAAGK,KAAAA,CAAMN,WAAW;AAC3C,oBAAA;AACF;YACA,KAAK,qBAAA;AAAuB,gBAAA;oBAC1BS,UAAWT,CAAAA,WAAW,GAAGM,KAAAA,CAAML,YAAY;AAC3C,oBAAA;AACF;YAEA,KAAK,eAAA;AAAiB,gBAAA;oBACpB,MAAM,EAAE2B,cAAc,EAAE,GAAGrB,MAAAA;AAC3BE,oBAAAA,UAAAA,CAAWN,cAAc,GAAGyB,cAAAA,KAAmBtB,KAAMH,CAAAA,cAAc,GAAG,EAAKyB,GAAAA,cAAAA;AAC3E,oBAAA;AACF;AACA,YAAA;gBACE,OAAOnB,UAAAA;AACX;AACF,KAAA;;;;;"}
@@ -0,0 +1,68 @@
import { produce } from 'immer';
import get from 'lodash/get';
import set from 'lodash/set';
import take from 'lodash/take';
const initialState = {
initialData: {},
modifiedData: {},
routes: {},
selectedAction: '',
policies: []
};
const reducer = (state, action)=>produce(state, (draftState)=>{
switch(action.type){
case 'ON_CHANGE':
{
const keysLength = action.keys.length;
const isChangingCheckbox = action.keys[keysLength - 1] === 'enabled';
if (action.value && isChangingCheckbox) {
const selectedAction = take(action.keys, keysLength - 1).join('.');
draftState.selectedAction = selectedAction;
}
set(draftState, [
'modifiedData',
...action.keys
], action.value);
break;
}
case 'ON_CHANGE_SELECT_ALL':
{
const pathToValue = [
'modifiedData',
...action.keys
];
const oldValues = get(state, pathToValue, {});
const updatedValues = Object.keys(oldValues).reduce((acc, current)=>{
acc[current] = {
...oldValues[current],
enabled: action.value
};
return acc;
}, {});
set(draftState, pathToValue, updatedValues);
break;
}
case 'ON_RESET':
{
draftState.modifiedData = state.initialData;
break;
}
case 'ON_SUBMIT_SUCCEEDED':
{
draftState.initialData = state.modifiedData;
break;
}
case 'SELECT_ACTION':
{
const { actionToSelect } = action;
draftState.selectedAction = actionToSelect === state.selectedAction ? '' : actionToSelect;
break;
}
default:
return draftState;
}
});
export { reducer as default, initialState };
//# sourceMappingURL=reducer.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"reducer.mjs","sources":["../../../../admin/src/components/UsersPermissions/reducer.js"],"sourcesContent":["/* eslint-disable consistent-return */\nimport { produce } from 'immer';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport take from 'lodash/take';\n\nexport const initialState = {\n initialData: {},\n modifiedData: {},\n routes: {},\n selectedAction: '',\n policies: [],\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE': {\n const keysLength = action.keys.length;\n const isChangingCheckbox = action.keys[keysLength - 1] === 'enabled';\n\n if (action.value && isChangingCheckbox) {\n const selectedAction = take(action.keys, keysLength - 1).join('.');\n draftState.selectedAction = selectedAction;\n }\n\n set(draftState, ['modifiedData', ...action.keys], action.value);\n break;\n }\n case 'ON_CHANGE_SELECT_ALL': {\n const pathToValue = ['modifiedData', ...action.keys];\n const oldValues = get(state, pathToValue, {});\n const updatedValues = Object.keys(oldValues).reduce((acc, current) => {\n acc[current] = { ...oldValues[current], enabled: action.value };\n\n return acc;\n }, {});\n\n set(draftState, pathToValue, updatedValues);\n\n break;\n }\n case 'ON_RESET': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'ON_SUBMIT_SUCCEEDED': {\n draftState.initialData = state.modifiedData;\n break;\n }\n\n case 'SELECT_ACTION': {\n const { actionToSelect } = action;\n draftState.selectedAction = actionToSelect === state.selectedAction ? '' : actionToSelect;\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n"],"names":["initialState","initialData","modifiedData","routes","selectedAction","policies","reducer","state","action","produce","draftState","type","keysLength","keys","length","isChangingCheckbox","value","take","join","set","pathToValue","oldValues","get","updatedValues","Object","reduce","acc","current","enabled","actionToSelect"],"mappings":";;;;;MAMaA,YAAe,GAAA;AAC1BC,IAAAA,WAAAA,EAAa,EAAC;AACdC,IAAAA,YAAAA,EAAc,EAAC;AACfC,IAAAA,MAAAA,EAAQ,EAAC;IACTC,cAAgB,EAAA,EAAA;AAChBC,IAAAA,QAAAA,EAAU;AACZ;AAEA,MAAMC,UAAU,CAACC,KAAAA,EAAOC,MACtBC,GAAAA,OAAAA,CAAQF,OAAO,CAACG,UAAAA,GAAAA;AACd,QAAA,OAAQF,OAAOG,IAAI;YACjB,KAAK,WAAA;AAAa,gBAAA;AAChB,oBAAA,MAAMC,UAAaJ,GAAAA,MAAAA,CAAOK,IAAI,CAACC,MAAM;AACrC,oBAAA,MAAMC,qBAAqBP,MAAOK,CAAAA,IAAI,CAACD,UAAAA,GAAa,EAAE,KAAK,SAAA;oBAE3D,IAAIJ,MAAAA,CAAOQ,KAAK,IAAID,kBAAoB,EAAA;wBACtC,MAAMX,cAAAA,GAAiBa,KAAKT,MAAOK,CAAAA,IAAI,EAAED,UAAa,GAAA,CAAA,CAAA,CAAGM,IAAI,CAAC,GAAA,CAAA;AAC9DR,wBAAAA,UAAAA,CAAWN,cAAc,GAAGA,cAAAA;AAC9B;AAEAe,oBAAAA,GAAAA,CAAIT,UAAY,EAAA;AAAC,wBAAA,cAAA;AAAmBF,wBAAAA,GAAAA,MAAAA,CAAOK;AAAK,qBAAA,EAAEL,OAAOQ,KAAK,CAAA;AAC9D,oBAAA;AACF;YACA,KAAK,sBAAA;AAAwB,gBAAA;AAC3B,oBAAA,MAAMI,WAAc,GAAA;AAAC,wBAAA,cAAA;AAAmBZ,wBAAAA,GAAAA,MAAAA,CAAOK;AAAK,qBAAA;AACpD,oBAAA,MAAMQ,SAAYC,GAAAA,GAAAA,CAAIf,KAAOa,EAAAA,WAAAA,EAAa,EAAC,CAAA;oBAC3C,MAAMG,aAAAA,GAAgBC,OAAOX,IAAI,CAACQ,WAAWI,MAAM,CAAC,CAACC,GAAKC,EAAAA,OAAAA,GAAAA;wBACxDD,GAAG,CAACC,QAAQ,GAAG;4BAAE,GAAGN,SAAS,CAACM,OAAQ,CAAA;AAAEC,4BAAAA,OAAAA,EAASpB,OAAOQ;AAAM,yBAAA;wBAE9D,OAAOU,GAAAA;AACT,qBAAA,EAAG,EAAC,CAAA;AAEJP,oBAAAA,GAAAA,CAAIT,YAAYU,WAAaG,EAAAA,aAAAA,CAAAA;AAE7B,oBAAA;AACF;YACA,KAAK,UAAA;AAAY,gBAAA;oBACfb,UAAWR,CAAAA,YAAY,GAAGK,KAAAA,CAAMN,WAAW;AAC3C,oBAAA;AACF;YACA,KAAK,qBAAA;AAAuB,gBAAA;oBAC1BS,UAAWT,CAAAA,WAAW,GAAGM,KAAAA,CAAML,YAAY;AAC3C,oBAAA;AACF;YAEA,KAAK,eAAA;AAAiB,gBAAA;oBACpB,MAAM,EAAE2B,cAAc,EAAE,GAAGrB,MAAAA;AAC3BE,oBAAAA,UAAAA,CAAWN,cAAc,GAAGyB,cAAAA,KAAmBtB,KAAMH,CAAAA,cAAc,GAAG,EAAKyB,GAAAA,cAAAA;AAC3E,oBAAA;AACF;AACA,YAAA;gBACE,OAAOnB,UAAAA;AACX;AACF,KAAA;;;;"}
@@ -0,0 +1,81 @@
'use strict';
const PERMISSIONS = {
// Roles
accessRoles: [
{
action: 'plugin::users-permissions.roles.create',
subject: null
},
{
action: 'plugin::users-permissions.roles.read',
subject: null
}
],
createRole: [
{
action: 'plugin::users-permissions.roles.create',
subject: null
}
],
deleteRole: [
{
action: 'plugin::users-permissions.roles.delete',
subject: null
}
],
readRoles: [
{
action: 'plugin::users-permissions.roles.read',
subject: null
}
],
updateRole: [
{
action: 'plugin::users-permissions.roles.update',
subject: null
}
],
// AdvancedSettings
readAdvancedSettings: [
{
action: 'plugin::users-permissions.advanced-settings.read',
subject: null
}
],
updateAdvancedSettings: [
{
action: 'plugin::users-permissions.advanced-settings.update',
subject: null
}
],
// Emails
readEmailTemplates: [
{
action: 'plugin::users-permissions.email-templates.read',
subject: null
}
],
updateEmailTemplates: [
{
action: 'plugin::users-permissions.email-templates.update',
subject: null
}
],
// Providers
readProviders: [
{
action: 'plugin::users-permissions.providers.read',
subject: null
}
],
updateProviders: [
{
action: 'plugin::users-permissions.providers.update',
subject: null
}
]
};
exports.PERMISSIONS = PERMISSIONS;
//# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
{"version":3,"file":"constants.js","sources":["../../admin/src/constants.js"],"sourcesContent":["export const PERMISSIONS = {\n // Roles\n accessRoles: [\n { action: 'plugin::users-permissions.roles.create', subject: null },\n { action: 'plugin::users-permissions.roles.read', subject: null },\n ],\n createRole: [{ action: 'plugin::users-permissions.roles.create', subject: null }],\n deleteRole: [{ action: 'plugin::users-permissions.roles.delete', subject: null }],\n readRoles: [{ action: 'plugin::users-permissions.roles.read', subject: null }],\n updateRole: [{ action: 'plugin::users-permissions.roles.update', subject: null }],\n\n // AdvancedSettings\n readAdvancedSettings: [\n { action: 'plugin::users-permissions.advanced-settings.read', subject: null },\n ],\n updateAdvancedSettings: [\n { action: 'plugin::users-permissions.advanced-settings.update', subject: null },\n ],\n\n // Emails\n readEmailTemplates: [{ action: 'plugin::users-permissions.email-templates.read', subject: null }],\n updateEmailTemplates: [\n { action: 'plugin::users-permissions.email-templates.update', subject: null },\n ],\n\n // Providers\n readProviders: [{ action: 'plugin::users-permissions.providers.read', subject: null }],\n updateProviders: [{ action: 'plugin::users-permissions.providers.update', subject: null }],\n};\n"],"names":["PERMISSIONS","accessRoles","action","subject","createRole","deleteRole","readRoles","updateRole","readAdvancedSettings","updateAdvancedSettings","readEmailTemplates","updateEmailTemplates","readProviders","updateProviders"],"mappings":";;MAAaA,WAAc,GAAA;;IAEzBC,WAAa,EAAA;AACX,QAAA;YAAEC,MAAQ,EAAA,wCAAA;YAA0CC,OAAS,EAAA;AAAK,SAAA;AAClE,QAAA;YAAED,MAAQ,EAAA,sCAAA;YAAwCC,OAAS,EAAA;AAAK;AACjE,KAAA;IACDC,UAAY,EAAA;AAAC,QAAA;YAAEF,MAAQ,EAAA,wCAAA;YAA0CC,OAAS,EAAA;AAAK;AAAE,KAAA;IACjFE,UAAY,EAAA;AAAC,QAAA;YAAEH,MAAQ,EAAA,wCAAA;YAA0CC,OAAS,EAAA;AAAK;AAAE,KAAA;IACjFG,SAAW,EAAA;AAAC,QAAA;YAAEJ,MAAQ,EAAA,sCAAA;YAAwCC,OAAS,EAAA;AAAK;AAAE,KAAA;IAC9EI,UAAY,EAAA;AAAC,QAAA;YAAEL,MAAQ,EAAA,wCAAA;YAA0CC,OAAS,EAAA;AAAK;AAAE,KAAA;;IAGjFK,oBAAsB,EAAA;AACpB,QAAA;YAAEN,MAAQ,EAAA,kDAAA;YAAoDC,OAAS,EAAA;AAAK;AAC7E,KAAA;IACDM,sBAAwB,EAAA;AACtB,QAAA;YAAEP,MAAQ,EAAA,oDAAA;YAAsDC,OAAS,EAAA;AAAK;AAC/E,KAAA;;IAGDO,kBAAoB,EAAA;AAAC,QAAA;YAAER,MAAQ,EAAA,gDAAA;YAAkDC,OAAS,EAAA;AAAK;AAAE,KAAA;IACjGQ,oBAAsB,EAAA;AACpB,QAAA;YAAET,MAAQ,EAAA,kDAAA;YAAoDC,OAAS,EAAA;AAAK;AAC7E,KAAA;;IAGDS,aAAe,EAAA;AAAC,QAAA;YAAEV,MAAQ,EAAA,0CAAA;YAA4CC,OAAS,EAAA;AAAK;AAAE,KAAA;IACtFU,eAAiB,EAAA;AAAC,QAAA;YAAEX,MAAQ,EAAA,4CAAA;YAA8CC,OAAS,EAAA;AAAK;AAAE;AAC5F;;;;"}
@@ -0,0 +1,79 @@
const PERMISSIONS = {
// Roles
accessRoles: [
{
action: 'plugin::users-permissions.roles.create',
subject: null
},
{
action: 'plugin::users-permissions.roles.read',
subject: null
}
],
createRole: [
{
action: 'plugin::users-permissions.roles.create',
subject: null
}
],
deleteRole: [
{
action: 'plugin::users-permissions.roles.delete',
subject: null
}
],
readRoles: [
{
action: 'plugin::users-permissions.roles.read',
subject: null
}
],
updateRole: [
{
action: 'plugin::users-permissions.roles.update',
subject: null
}
],
// AdvancedSettings
readAdvancedSettings: [
{
action: 'plugin::users-permissions.advanced-settings.read',
subject: null
}
],
updateAdvancedSettings: [
{
action: 'plugin::users-permissions.advanced-settings.update',
subject: null
}
],
// Emails
readEmailTemplates: [
{
action: 'plugin::users-permissions.email-templates.read',
subject: null
}
],
updateEmailTemplates: [
{
action: 'plugin::users-permissions.email-templates.update',
subject: null
}
],
// Providers
readProviders: [
{
action: 'plugin::users-permissions.providers.read',
subject: null
}
],
updateProviders: [
{
action: 'plugin::users-permissions.providers.update',
subject: null
}
]
};
export { PERMISSIONS };
//# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"constants.mjs","sources":["../../admin/src/constants.js"],"sourcesContent":["export const PERMISSIONS = {\n // Roles\n accessRoles: [\n { action: 'plugin::users-permissions.roles.create', subject: null },\n { action: 'plugin::users-permissions.roles.read', subject: null },\n ],\n createRole: [{ action: 'plugin::users-permissions.roles.create', subject: null }],\n deleteRole: [{ action: 'plugin::users-permissions.roles.delete', subject: null }],\n readRoles: [{ action: 'plugin::users-permissions.roles.read', subject: null }],\n updateRole: [{ action: 'plugin::users-permissions.roles.update', subject: null }],\n\n // AdvancedSettings\n readAdvancedSettings: [\n { action: 'plugin::users-permissions.advanced-settings.read', subject: null },\n ],\n updateAdvancedSettings: [\n { action: 'plugin::users-permissions.advanced-settings.update', subject: null },\n ],\n\n // Emails\n readEmailTemplates: [{ action: 'plugin::users-permissions.email-templates.read', subject: null }],\n updateEmailTemplates: [\n { action: 'plugin::users-permissions.email-templates.update', subject: null },\n ],\n\n // Providers\n readProviders: [{ action: 'plugin::users-permissions.providers.read', subject: null }],\n updateProviders: [{ action: 'plugin::users-permissions.providers.update', subject: null }],\n};\n"],"names":["PERMISSIONS","accessRoles","action","subject","createRole","deleteRole","readRoles","updateRole","readAdvancedSettings","updateAdvancedSettings","readEmailTemplates","updateEmailTemplates","readProviders","updateProviders"],"mappings":"MAAaA,WAAc,GAAA;;IAEzBC,WAAa,EAAA;AACX,QAAA;YAAEC,MAAQ,EAAA,wCAAA;YAA0CC,OAAS,EAAA;AAAK,SAAA;AAClE,QAAA;YAAED,MAAQ,EAAA,sCAAA;YAAwCC,OAAS,EAAA;AAAK;AACjE,KAAA;IACDC,UAAY,EAAA;AAAC,QAAA;YAAEF,MAAQ,EAAA,wCAAA;YAA0CC,OAAS,EAAA;AAAK;AAAE,KAAA;IACjFE,UAAY,EAAA;AAAC,QAAA;YAAEH,MAAQ,EAAA,wCAAA;YAA0CC,OAAS,EAAA;AAAK;AAAE,KAAA;IACjFG,SAAW,EAAA;AAAC,QAAA;YAAEJ,MAAQ,EAAA,sCAAA;YAAwCC,OAAS,EAAA;AAAK;AAAE,KAAA;IAC9EI,UAAY,EAAA;AAAC,QAAA;YAAEL,MAAQ,EAAA,wCAAA;YAA0CC,OAAS,EAAA;AAAK;AAAE,KAAA;;IAGjFK,oBAAsB,EAAA;AACpB,QAAA;YAAEN,MAAQ,EAAA,kDAAA;YAAoDC,OAAS,EAAA;AAAK;AAC7E,KAAA;IACDM,sBAAwB,EAAA;AACtB,QAAA;YAAEP,MAAQ,EAAA,oDAAA;YAAsDC,OAAS,EAAA;AAAK;AAC/E,KAAA;;IAGDO,kBAAoB,EAAA;AAAC,QAAA;YAAER,MAAQ,EAAA,gDAAA;YAAkDC,OAAS,EAAA;AAAK;AAAE,KAAA;IACjGQ,oBAAsB,EAAA;AACpB,QAAA;YAAET,MAAQ,EAAA,kDAAA;YAAoDC,OAAS,EAAA;AAAK;AAC7E,KAAA;;IAGDS,aAAe,EAAA;AAAC,QAAA;YAAEV,MAAQ,EAAA,0CAAA;YAA4CC,OAAS,EAAA;AAAK;AAAE,KAAA;IACtFU,eAAiB,EAAA;AAAC,QAAA;YAAEX,MAAQ,EAAA,4CAAA;YAA8CC,OAAS,EAAA;AAAK;AAAE;AAC5F;;;;"}
@@ -0,0 +1,23 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var PropTypes = require('prop-types');
const UsersPermissions = /*#__PURE__*/ React.createContext({});
const UsersPermissionsProvider = ({ children, value })=>{
return /*#__PURE__*/ jsxRuntime.jsx(UsersPermissions.Provider, {
value: value,
children: children
});
};
const useUsersPermissions = ()=>React.useContext(UsersPermissions);
UsersPermissionsProvider.propTypes = {
children: PropTypes.node.isRequired,
value: PropTypes.object.isRequired
};
exports.UsersPermissions = UsersPermissions;
exports.UsersPermissionsProvider = UsersPermissionsProvider;
exports.useUsersPermissions = useUsersPermissions;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../../../admin/src/contexts/UsersPermissionsContext/index.jsx"],"sourcesContent":["import React, { createContext, useContext } from 'react';\n\nimport PropTypes from 'prop-types';\n\nconst UsersPermissions = createContext({});\n\nconst UsersPermissionsProvider = ({ children, value }) => {\n return <UsersPermissions.Provider value={value}>{children}</UsersPermissions.Provider>;\n};\n\nconst useUsersPermissions = () => useContext(UsersPermissions);\n\nUsersPermissionsProvider.propTypes = {\n children: PropTypes.node.isRequired,\n value: PropTypes.object.isRequired,\n};\n\nexport { UsersPermissions, UsersPermissionsProvider, useUsersPermissions };\n"],"names":["UsersPermissions","createContext","UsersPermissionsProvider","children","value","_jsx","Provider","useUsersPermissions","useContext","propTypes","PropTypes","node","isRequired","object"],"mappings":";;;;;;AAIMA,MAAAA,gBAAAA,iBAAmBC,oBAAc,EAAC;AAExC,MAAMC,2BAA2B,CAAC,EAAEC,QAAQ,EAAEC,KAAK,EAAE,GAAA;IACnD,qBAAOC,cAAA,CAACL,iBAAiBM,QAAQ,EAAA;QAACF,KAAOA,EAAAA,KAAAA;AAAQD,QAAAA,QAAAA,EAAAA;;AACnD;AAEMI,MAAAA,mBAAAA,GAAsB,IAAMC,gBAAWR,CAAAA,gBAAAA;AAE7CE,wBAAAA,CAAyBO,SAAS,GAAG;IACnCN,QAAUO,EAAAA,SAAAA,CAAUC,IAAI,CAACC,UAAU;IACnCR,KAAOM,EAAAA,SAAAA,CAAUG,MAAM,CAACD;AAC1B,CAAA;;;;;;"}
@@ -0,0 +1,19 @@
import { jsx } from 'react/jsx-runtime';
import { createContext, useContext } from 'react';
import PropTypes from 'prop-types';
const UsersPermissions = /*#__PURE__*/ createContext({});
const UsersPermissionsProvider = ({ children, value })=>{
return /*#__PURE__*/ jsx(UsersPermissions.Provider, {
value: value,
children: children
});
};
const useUsersPermissions = ()=>useContext(UsersPermissions);
UsersPermissionsProvider.propTypes = {
children: PropTypes.node.isRequired,
value: PropTypes.object.isRequired
};
export { UsersPermissions, UsersPermissionsProvider, useUsersPermissions };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../../../admin/src/contexts/UsersPermissionsContext/index.jsx"],"sourcesContent":["import React, { createContext, useContext } from 'react';\n\nimport PropTypes from 'prop-types';\n\nconst UsersPermissions = createContext({});\n\nconst UsersPermissionsProvider = ({ children, value }) => {\n return <UsersPermissions.Provider value={value}>{children}</UsersPermissions.Provider>;\n};\n\nconst useUsersPermissions = () => useContext(UsersPermissions);\n\nUsersPermissionsProvider.propTypes = {\n children: PropTypes.node.isRequired,\n value: PropTypes.object.isRequired,\n};\n\nexport { UsersPermissions, UsersPermissionsProvider, useUsersPermissions };\n"],"names":["UsersPermissions","createContext","UsersPermissionsProvider","children","value","_jsx","Provider","useUsersPermissions","useContext","propTypes","PropTypes","node","isRequired","object"],"mappings":";;;;AAIMA,MAAAA,gBAAAA,iBAAmBC,cAAc,EAAC;AAExC,MAAMC,2BAA2B,CAAC,EAAEC,QAAQ,EAAEC,KAAK,EAAE,GAAA;IACnD,qBAAOC,GAAA,CAACL,iBAAiBM,QAAQ,EAAA;QAACF,KAAOA,EAAAA,KAAAA;AAAQD,QAAAA,QAAAA,EAAAA;;AACnD;AAEMI,MAAAA,mBAAAA,GAAsB,IAAMC,UAAWR,CAAAA,gBAAAA;AAE7CE,wBAAAA,CAAyBO,SAAS,GAAG;IACnCN,QAAUO,EAAAA,SAAAA,CAAUC,IAAI,CAACC,UAAU;IACnCR,KAAOM,EAAAA,SAAAA,CAAUG,MAAM,CAACD;AAC1B,CAAA;;;;"}
@@ -0,0 +1,125 @@
'use strict';
var _package = require('./package.json.js');
var constants = require('./constants.js');
var getTrad = require('./utils/getTrad.js');
var prefixPluginTranslations = require('./utils/prefixPluginTranslations.js');
function _interopNamespaceDefaultOnly (e) { return Object.freeze({ __proto__: null, default: e }); }
function __variableDynamicImportRuntime4__(path) {
switch (path) {
case './translations/ar.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/ar.json.js')); });
case './translations/cs.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/cs.json.js')); });
case './translations/de.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/de.json.js')); });
case './translations/dk.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/dk.json.js')); });
case './translations/en.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/en.json.js')); });
case './translations/es.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/es.json.js')); });
case './translations/fr.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/fr.json.js')); });
case './translations/id.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/id.json.js')); });
case './translations/it.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/it.json.js')); });
case './translations/ja.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/ja.json.js')); });
case './translations/ko.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/ko.json.js')); });
case './translations/ms.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/ms.json.js')); });
case './translations/nl.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/nl.json.js')); });
case './translations/pl.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/pl.json.js')); });
case './translations/pt-BR.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/pt-BR.json.js')); });
case './translations/pt.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/pt.json.js')); });
case './translations/ru.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/ru.json.js')); });
case './translations/sk.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/sk.json.js')); });
case './translations/sv.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/sv.json.js')); });
case './translations/th.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/th.json.js')); });
case './translations/tr.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/tr.json.js')); });
case './translations/uk.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/uk.json.js')); });
case './translations/vi.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/vi.json.js')); });
case './translations/zh-Hans.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/zh-Hans.json.js')); });
case './translations/zh.json': return Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./translations/zh.json.js')); });
default: return new Promise(function(resolve, reject) {
(typeof queueMicrotask === 'function' ? queueMicrotask : setTimeout)(
reject.bind(null, new Error("Unknown variable dynamic import: " + path))
);
})
}
}
const name = _package.strapi.name;
var index = {
register (app) {
// Create the plugin's settings section
app.createSettingSection({
id: 'users-permissions',
intlLabel: {
id: getTrad('Settings.section-label'),
defaultMessage: 'Users & Permissions plugin'
}
}, [
{
intlLabel: {
id: 'global.roles',
defaultMessage: 'Roles'
},
id: 'roles',
to: `users-permissions/roles`,
Component: ()=>Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespaceDefaultOnly(require('./pages/Roles/index.js')); }),
permissions: constants.PERMISSIONS.accessRoles
},
{
intlLabel: {
id: getTrad('HeaderNav.link.providers'),
defaultMessage: 'Providers'
},
id: 'providers',
to: `users-permissions/providers`,
Component: ()=>Promise.resolve().then(function () { return require('./pages/Providers/index.js'); }),
permissions: constants.PERMISSIONS.readProviders
},
{
intlLabel: {
id: getTrad('HeaderNav.link.emailTemplates'),
defaultMessage: 'Email templates'
},
id: 'email-templates',
to: `users-permissions/email-templates`,
Component: ()=>Promise.resolve().then(function () { return require('./pages/EmailTemplates/index.js'); }).then((mod)=>({
default: mod.ProtectedEmailTemplatesPage
})),
permissions: constants.PERMISSIONS.readEmailTemplates
},
{
intlLabel: {
id: getTrad('HeaderNav.link.advancedSettings'),
defaultMessage: 'Advanced Settings'
},
id: 'advanced-settings',
to: `users-permissions/advanced-settings`,
Component: ()=>Promise.resolve().then(function () { return require('./pages/AdvancedSettings/index.js'); }).then((mod)=>({
default: mod.ProtectedAdvancedSettingsPage
})),
permissions: constants.PERMISSIONS.readAdvancedSettings
}
]);
app.registerPlugin({
id: 'users-permissions',
name
});
},
bootstrap () {},
async registerTrads ({ locales }) {
const importedTrads = await Promise.all(locales.map((locale)=>{
return __variableDynamicImportRuntime4__(`./translations/${locale}.json`).then(({ default: data })=>{
return {
data: prefixPluginTranslations.prefixPluginTranslations(data, 'users-permissions'),
locale
};
}).catch(()=>{
return {
data: {},
locale
};
});
}));
return Promise.resolve(importedTrads);
}
};
module.exports = index;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../admin/src/index.js"],"sourcesContent":["import { strapi as pkgStrapi } from '../../package.json';\n\nimport { PERMISSIONS } from './constants';\nimport getTrad from './utils/getTrad';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\nconst name = pkgStrapi.name;\n\nexport default {\n register(app) {\n // Create the plugin's settings section\n app.createSettingSection(\n {\n id: 'users-permissions',\n intlLabel: {\n id: getTrad('Settings.section-label'),\n defaultMessage: 'Users & Permissions plugin',\n },\n },\n [\n {\n intlLabel: {\n id: 'global.roles',\n defaultMessage: 'Roles',\n },\n id: 'roles',\n to: `users-permissions/roles`,\n Component: () => import('./pages/Roles'),\n permissions: PERMISSIONS.accessRoles,\n },\n {\n intlLabel: {\n id: getTrad('HeaderNav.link.providers'),\n defaultMessage: 'Providers',\n },\n id: 'providers',\n to: `users-permissions/providers`,\n Component: () => import('./pages/Providers'),\n permissions: PERMISSIONS.readProviders,\n },\n {\n intlLabel: {\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n },\n id: 'email-templates',\n to: `users-permissions/email-templates`,\n Component: () =>\n import('./pages/EmailTemplates').then((mod) => ({\n default: mod.ProtectedEmailTemplatesPage,\n })),\n permissions: PERMISSIONS.readEmailTemplates,\n },\n {\n intlLabel: {\n id: getTrad('HeaderNav.link.advancedSettings'),\n defaultMessage: 'Advanced Settings',\n },\n id: 'advanced-settings',\n to: `users-permissions/advanced-settings`,\n Component: () =>\n import('./pages/AdvancedSettings').then((mod) => ({\n default: mod.ProtectedAdvancedSettingsPage,\n })),\n permissions: PERMISSIONS.readAdvancedSettings,\n },\n ]\n );\n\n app.registerPlugin({\n id: 'users-permissions',\n name,\n });\n },\n bootstrap() {},\n async registerTrads({ locales }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, 'users-permissions'),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["name","pkgStrapi","register","app","createSettingSection","id","intlLabel","getTrad","defaultMessage","to","Component","permissions","PERMISSIONS","accessRoles","readProviders","then","mod","default","ProtectedEmailTemplatesPage","readEmailTemplates","ProtectedAdvancedSettingsPage","readAdvancedSettings","registerPlugin","bootstrap","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,IAAAA,GAAOC,gBAAUD,IAAI;AAE3B,YAAe;AACbE,IAAAA,QAAAA,CAAAA,CAASC,GAAG,EAAA;;AAEVA,QAAAA,GAAAA,CAAIC,oBAAoB,CACtB;YACEC,EAAI,EAAA,mBAAA;YACJC,SAAW,EAAA;AACTD,gBAAAA,EAAAA,EAAIE,OAAQ,CAAA,wBAAA,CAAA;gBACZC,cAAgB,EAAA;AAClB;SAEF,EAAA;AACE,YAAA;gBACEF,SAAW,EAAA;oBACTD,EAAI,EAAA,cAAA;oBACJG,cAAgB,EAAA;AAClB,iBAAA;gBACAH,EAAI,EAAA,OAAA;gBACJI,EAAI,EAAA,CAAC,uBAAuB,CAAC;gBAC7BC,SAAW,EAAA,IAAM,8FAAO,wBAAA,MAAA;AACxBC,gBAAAA,WAAAA,EAAaC,sBAAYC;AAC3B,aAAA;AACA,YAAA;gBACEP,SAAW,EAAA;AACTD,oBAAAA,EAAAA,EAAIE,OAAQ,CAAA,0BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;gBACAH,EAAI,EAAA,WAAA;gBACJI,EAAI,EAAA,CAAC,2BAA2B,CAAC;gBACjCC,SAAW,EAAA,IAAM,oDAAO,4BAAA,KAAA;AACxBC,gBAAAA,WAAAA,EAAaC,sBAAYE;AAC3B,aAAA;AACA,YAAA;gBACER,SAAW,EAAA;AACTD,oBAAAA,EAAAA,EAAIE,OAAQ,CAAA,+BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;gBACAH,EAAI,EAAA,iBAAA;gBACJI,EAAI,EAAA,CAAC,iCAAiC,CAAC;gBACvCC,SAAW,EAAA,IACT,oDAAO,iCAAA,KAAA,CAA0BK,IAAI,CAAC,CAACC,OAAS;AAC9CC,4BAAAA,OAAAA,EAASD,IAAIE;yBACf,CAAA,CAAA;AACFP,gBAAAA,WAAAA,EAAaC,sBAAYO;AAC3B,aAAA;AACA,YAAA;gBACEb,SAAW,EAAA;AACTD,oBAAAA,EAAAA,EAAIE,OAAQ,CAAA,iCAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;gBACAH,EAAI,EAAA,mBAAA;gBACJI,EAAI,EAAA,CAAC,mCAAmC,CAAC;gBACzCC,SAAW,EAAA,IACT,oDAAO,mCAAA,KAAA,CAA4BK,IAAI,CAAC,CAACC,OAAS;AAChDC,4BAAAA,OAAAA,EAASD,IAAII;yBACf,CAAA,CAAA;AACFT,gBAAAA,WAAAA,EAAaC,sBAAYS;AAC3B;AACD,SAAA,CAAA;AAGHlB,QAAAA,GAAAA,CAAImB,cAAc,CAAC;YACjBjB,EAAI,EAAA,mBAAA;AACJL,YAAAA;AACF,SAAA,CAAA;AACF,KAAA;IACAuB,SAAa,CAAA,GAAA,EAAA;IACb,MAAMC,aAAAA,CAAAA,CAAc,EAAEC,OAAOLine truncated
@@ -0,0 +1,121 @@
import { strapi } from './package.json.mjs';
import { PERMISSIONS } from './constants.mjs';
import getTrad from './utils/getTrad.mjs';
import { prefixPluginTranslations } from './utils/prefixPluginTranslations.mjs';
function __variableDynamicImportRuntime4__(path) {
switch (path) {
case './translations/ar.json': return import('./translations/ar.json.mjs');
case './translations/cs.json': return import('./translations/cs.json.mjs');
case './translations/de.json': return import('./translations/de.json.mjs');
case './translations/dk.json': return import('./translations/dk.json.mjs');
case './translations/en.json': return import('./translations/en.json.mjs');
case './translations/es.json': return import('./translations/es.json.mjs');
case './translations/fr.json': return import('./translations/fr.json.mjs');
case './translations/id.json': return import('./translations/id.json.mjs');
case './translations/it.json': return import('./translations/it.json.mjs');
case './translations/ja.json': return import('./translations/ja.json.mjs');
case './translations/ko.json': return import('./translations/ko.json.mjs');
case './translations/ms.json': return import('./translations/ms.json.mjs');
case './translations/nl.json': return import('./translations/nl.json.mjs');
case './translations/pl.json': return import('./translations/pl.json.mjs');
case './translations/pt-BR.json': return import('./translations/pt-BR.json.mjs');
case './translations/pt.json': return import('./translations/pt.json.mjs');
case './translations/ru.json': return import('./translations/ru.json.mjs');
case './translations/sk.json': return import('./translations/sk.json.mjs');
case './translations/sv.json': return import('./translations/sv.json.mjs');
case './translations/th.json': return import('./translations/th.json.mjs');
case './translations/tr.json': return import('./translations/tr.json.mjs');
case './translations/uk.json': return import('./translations/uk.json.mjs');
case './translations/vi.json': return import('./translations/vi.json.mjs');
case './translations/zh-Hans.json': return import('./translations/zh-Hans.json.mjs');
case './translations/zh.json': return import('./translations/zh.json.mjs');
default: return new Promise(function(resolve, reject) {
(typeof queueMicrotask === 'function' ? queueMicrotask : setTimeout)(
reject.bind(null, new Error("Unknown variable dynamic import: " + path))
);
})
}
}
const name = strapi.name;
var index = {
register (app) {
// Create the plugin's settings section
app.createSettingSection({
id: 'users-permissions',
intlLabel: {
id: getTrad('Settings.section-label'),
defaultMessage: 'Users & Permissions plugin'
}
}, [
{
intlLabel: {
id: 'global.roles',
defaultMessage: 'Roles'
},
id: 'roles',
to: `users-permissions/roles`,
Component: ()=>import('./pages/Roles/index.mjs'),
permissions: PERMISSIONS.accessRoles
},
{
intlLabel: {
id: getTrad('HeaderNav.link.providers'),
defaultMessage: 'Providers'
},
id: 'providers',
to: `users-permissions/providers`,
Component: ()=>import('./pages/Providers/index.mjs'),
permissions: PERMISSIONS.readProviders
},
{
intlLabel: {
id: getTrad('HeaderNav.link.emailTemplates'),
defaultMessage: 'Email templates'
},
id: 'email-templates',
to: `users-permissions/email-templates`,
Component: ()=>import('./pages/EmailTemplates/index.mjs').then((mod)=>({
default: mod.ProtectedEmailTemplatesPage
})),
permissions: PERMISSIONS.readEmailTemplates
},
{
intlLabel: {
id: getTrad('HeaderNav.link.advancedSettings'),
defaultMessage: 'Advanced Settings'
},
id: 'advanced-settings',
to: `users-permissions/advanced-settings`,
Component: ()=>import('./pages/AdvancedSettings/index.mjs').then((mod)=>({
default: mod.ProtectedAdvancedSettingsPage
})),
permissions: PERMISSIONS.readAdvancedSettings
}
]);
app.registerPlugin({
id: 'users-permissions',
name
});
},
bootstrap () {},
async registerTrads ({ locales }) {
const importedTrads = await Promise.all(locales.map((locale)=>{
return __variableDynamicImportRuntime4__(`./translations/${locale}.json`).then(({ default: data })=>{
return {
data: prefixPluginTranslations(data, 'users-permissions'),
locale
};
}).catch(()=>{
return {
data: {},
locale
};
});
}));
return Promise.resolve(importedTrads);
}
};
export { index as default };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../admin/src/index.js"],"sourcesContent":["import { strapi as pkgStrapi } from '../../package.json';\n\nimport { PERMISSIONS } from './constants';\nimport getTrad from './utils/getTrad';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\nconst name = pkgStrapi.name;\n\nexport default {\n register(app) {\n // Create the plugin's settings section\n app.createSettingSection(\n {\n id: 'users-permissions',\n intlLabel: {\n id: getTrad('Settings.section-label'),\n defaultMessage: 'Users & Permissions plugin',\n },\n },\n [\n {\n intlLabel: {\n id: 'global.roles',\n defaultMessage: 'Roles',\n },\n id: 'roles',\n to: `users-permissions/roles`,\n Component: () => import('./pages/Roles'),\n permissions: PERMISSIONS.accessRoles,\n },\n {\n intlLabel: {\n id: getTrad('HeaderNav.link.providers'),\n defaultMessage: 'Providers',\n },\n id: 'providers',\n to: `users-permissions/providers`,\n Component: () => import('./pages/Providers'),\n permissions: PERMISSIONS.readProviders,\n },\n {\n intlLabel: {\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n },\n id: 'email-templates',\n to: `users-permissions/email-templates`,\n Component: () =>\n import('./pages/EmailTemplates').then((mod) => ({\n default: mod.ProtectedEmailTemplatesPage,\n })),\n permissions: PERMISSIONS.readEmailTemplates,\n },\n {\n intlLabel: {\n id: getTrad('HeaderNav.link.advancedSettings'),\n defaultMessage: 'Advanced Settings',\n },\n id: 'advanced-settings',\n to: `users-permissions/advanced-settings`,\n Component: () =>\n import('./pages/AdvancedSettings').then((mod) => ({\n default: mod.ProtectedAdvancedSettingsPage,\n })),\n permissions: PERMISSIONS.readAdvancedSettings,\n },\n ]\n );\n\n app.registerPlugin({\n id: 'users-permissions',\n name,\n });\n },\n bootstrap() {},\n async registerTrads({ locales }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, 'users-permissions'),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n"],"names":["name","pkgStrapi","register","app","createSettingSection","id","intlLabel","getTrad","defaultMessage","to","Component","permissions","PERMISSIONS","accessRoles","readProviders","then","mod","default","ProtectedEmailTemplatesPage","readEmailTemplates","ProtectedAdvancedSettingsPage","readAdvancedSettings","registerPlugin","bootstrap","registerTrads","locales","importedTrads","Promise","all","map","locale","data","prefixPluginTranslations","catch","resolve"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,IAAAA,GAAOC,OAAUD,IAAI;AAE3B,YAAe;AACbE,IAAAA,QAAAA,CAAAA,CAASC,GAAG,EAAA;;AAEVA,QAAAA,GAAAA,CAAIC,oBAAoB,CACtB;YACEC,EAAI,EAAA,mBAAA;YACJC,SAAW,EAAA;AACTD,gBAAAA,EAAAA,EAAIE,OAAQ,CAAA,wBAAA,CAAA;gBACZC,cAAgB,EAAA;AAClB;SAEF,EAAA;AACE,YAAA;gBACEF,SAAW,EAAA;oBACTD,EAAI,EAAA,cAAA;oBACJG,cAAgB,EAAA;AAClB,iBAAA;gBACAH,EAAI,EAAA,OAAA;gBACJI,EAAI,EAAA,CAAC,uBAAuB,CAAC;gBAC7BC,SAAW,EAAA,IAAM,OAAO,yBAAA,CAAA;AACxBC,gBAAAA,WAAAA,EAAaC,YAAYC;AAC3B,aAAA;AACA,YAAA;gBACEP,SAAW,EAAA;AACTD,oBAAAA,EAAAA,EAAIE,OAAQ,CAAA,0BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;gBACAH,EAAI,EAAA,WAAA;gBACJI,EAAI,EAAA,CAAC,2BAA2B,CAAC;gBACjCC,SAAW,EAAA,IAAM,OAAO,6BAAA,CAAA;AACxBC,gBAAAA,WAAAA,EAAaC,YAAYE;AAC3B,aAAA;AACA,YAAA;gBACER,SAAW,EAAA;AACTD,oBAAAA,EAAAA,EAAIE,OAAQ,CAAA,+BAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;gBACAH,EAAI,EAAA,iBAAA;gBACJI,EAAI,EAAA,CAAC,iCAAiC,CAAC;gBACvCC,SAAW,EAAA,IACT,OAAO,kCAAA,CAAA,CAA0BK,IAAI,CAAC,CAACC,OAAS;AAC9CC,4BAAAA,OAAAA,EAASD,IAAIE;yBACf,CAAA,CAAA;AACFP,gBAAAA,WAAAA,EAAaC,YAAYO;AAC3B,aAAA;AACA,YAAA;gBACEb,SAAW,EAAA;AACTD,oBAAAA,EAAAA,EAAIE,OAAQ,CAAA,iCAAA,CAAA;oBACZC,cAAgB,EAAA;AAClB,iBAAA;gBACAH,EAAI,EAAA,mBAAA;gBACJI,EAAI,EAAA,CAAC,mCAAmC,CAAC;gBACzCC,SAAW,EAAA,IACT,OAAO,oCAAA,CAAA,CAA4BK,IAAI,CAAC,CAACC,OAAS;AAChDC,4BAAAA,OAAAA,EAASD,IAAII;yBACf,CAAA,CAAA;AACFT,gBAAAA,WAAAA,EAAaC,YAAYS;AAC3B;AACD,SAAA,CAAA;AAGHlB,QAAAA,GAAAA,CAAImB,cAAc,CAAC;YACjBjB,EAAI,EAAA,mBAAA;AACJL,YAAAA;AACF,SAAA,CAAA;AACF,KAAA;IACAuB,SAAa,CAAA,GAAA,EAAA;IACb,MAAMC,aAAAA,CAAAA,CAAc,EAAEC,OAAO,EAAE,EAAA;QLine truncated
@@ -0,0 +1,14 @@
'use strict';
var name = "@strapi/plugin-users-permissions";
var strapi = {
displayName: "Roles & Permissions",
name: "users-permissions",
description: "Protect your API with a full authentication process based on JWT. This plugin comes also with an ACL strategy that allows you to manage the permissions between the groups of users.",
required: true,
kind: "plugin"
};
exports.name = name;
exports.strapi = strapi;
//# sourceMappingURL=package.json.js.map
@@ -0,0 +1 @@
{"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;"}
@@ -0,0 +1,11 @@
var name = "@strapi/plugin-users-permissions";
var strapi = {
displayName: "Roles & Permissions",
name: "users-permissions",
description: "Protect your API with a full authentication process based on JWT. This plugin comes also with an ACL strategy that allows you to manage the permissions between the groups of users.",
required: true,
kind: "plugin"
};
export { name, strapi };
//# sourceMappingURL=package.json.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;"}
@@ -0,0 +1,194 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
require('react');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var admin = require('@strapi/strapi/admin');
var reactIntl = require('react-intl');
var reactQuery = require('react-query');
var constants = require('../../constants.js');
require('lodash/isEmpty');
var getTrad = require('../../utils/getTrad.js');
var layout = require('./utils/layout.js');
var schema = require('./utils/schema.js');
const ProtectedAdvancedSettingsPage = ()=>/*#__PURE__*/ jsxRuntime.jsx(admin.Page.Protect, {
permissions: constants.PERMISSIONS.readAdvancedSettings,
children: /*#__PURE__*/ jsxRuntime.jsx(AdvancedSettingsPage, {})
});
const AdvancedSettingsPage = ()=>{
const { formatMessage } = reactIntl.useIntl();
const { toggleNotification } = admin.useNotification();
const { notifyStatus } = designSystem.useNotifyAT();
const queryClient = reactQuery.useQueryClient();
const { get, put } = admin.useFetchClient();
const { formatAPIError } = admin.useAPIErrorHandler();
const { isLoading: isLoadingForPermissions, allowedActions: { canUpdate } } = admin.useRBAC({
update: constants.PERMISSIONS.updateAdvancedSettings
});
const { isLoading: isLoadingData, data } = reactQuery.useQuery([
'users-permissions',
'advanced'
], async ()=>{
const { data } = await get('/users-permissions/advanced');
return data;
}, {
onSuccess () {
notifyStatus(formatMessage({
id: getTrad('Form.advancedSettings.data.loaded'),
defaultMessage: 'Advanced settings data has been loaded'
}));
},
onError () {
toggleNotification({
type: 'danger',
message: formatMessage({
id: getTrad('notification.error'),
defaultMessage: 'An error occured'
})
});
}
});
const isLoading = isLoadingForPermissions || isLoadingData;
const submitMutation = reactQuery.useMutation((body)=>put('/users-permissions/advanced', body), {
async onSuccess () {
await queryClient.invalidateQueries([
'users-permissions',
'advanced'
]);
toggleNotification({
type: 'success',
message: formatMessage({
id: getTrad('notification.success.saved'),
defaultMessage: 'Saved'
})
});
},
onError (error) {
toggleNotification({
type: 'danger',
message: formatAPIError(error)
});
},
refetchActive: true
});
const { isLoading: isSubmittingForm } = submitMutation;
const handleSubmit = async (body)=>{
submitMutation.mutate({
...body,
email_confirmation_redirection: body.email_confirmation ? body.email_confirmation_redirection : ''
});
};
if (isLoading) {
return /*#__PURE__*/ jsxRuntime.jsx(admin.Page.Loading, {});
}
return /*#__PURE__*/ jsxRuntime.jsxs(admin.Page.Main, {
"aria-busy": isSubmittingForm,
children: [
/*#__PURE__*/ jsxRuntime.jsx(admin.Page.Title, {
children: formatMessage({
id: 'Settings.PageTitle',
defaultMessage: 'Settings - {name}'
}, {
name: formatMessage({
id: getTrad('HeaderNav.link.advancedSettings'),
defaultMessage: 'Advanced Settings'
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(admin.Form, {
onSubmit: handleSubmit,
initialValues: data.settings,
validationSchema: schema,
children: ({ values, isSubmitting, modified })=>{
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(admin.Layouts.Header, {
title: formatMessage({
id: getTrad('HeaderNav.link.advancedSettings'),
defaultMessage: 'Advanced Settings'
}),
primaryAction: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
loading: isSubmitting,
type: "submit",
disabled: !modified || !canUpdate,
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Check, {}),
size: "S",
children: formatMessage({
id: 'global.save',
defaultMessage: 'Save'
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(admin.Layouts.Content, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
background: "neutral0",
hasRadius: true,
shadow: "filterShadow",
paddingTop: 6,
paddingBottom: 6,
paddingLeft: 7,
paddingRight: 7,
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
direction: "column",
alignItems: "stretch",
gap: 4,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
variant: "delta",
tag: "h2",
children: formatMessage({
id: 'global.settings',
defaultMessage: 'Settings'
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
gap: 6,
children: [
{
label: {
id: getTrad('EditForm.inputSelect.label.role'),
defaultMessage: 'Default role for authenticated users'
},
hint: {
id: getTrad('EditForm.inputSelect.description.role'),
defaultMessage: 'It will attach the new authenticated user to the selected role.'
},
options: data.roles.map((role)=>({
label: role.name,
value: role.type
})),
name: 'default_role',
size: 6,
type: 'enumeration'
},
...layout
].map(({ size, ...field })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
col: size,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxRuntime.jsx(admin.InputRenderer, {
...field,
disabled: field.name === 'email_confirmation_redirection' && values.email_confirmation === false,
label: formatMessage(field.label),
hint: field.hint ? formatMessage(field.hint) : undefined,
placeholder: field.placeholder ? formatMessage(field.placeholder) : undefined
})
}, field.name))
})
]
})
})
})
]
});
}
})
]
});
};
exports.AdvancedSettingsPage = AdvancedSettingsPage;
exports.ProtectedAdvancedSettingsPage = ProtectedAdvancedSettingsPage;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../../../admin/src/pages/AdvancedSettings/index.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Typography, useNotifyAT } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport {\n useAPIErrorHandler,\n Page,\n Form,\n InputRenderer,\n useNotification,\n useFetchClient,\n useRBAC,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\n\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport layout from './utils/layout';\nimport schema from './utils/schema';\n\nconst ProtectedAdvancedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.readAdvancedSettings}>\n <AdvancedSettingsPage />\n </Page.Protect>\n);\n\nconst AdvancedSettingsPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const queryClient = useQueryClient();\n const { get, put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canUpdate },\n } = useRBAC({ update: PERMISSIONS.updateAdvancedSettings });\n\n const { isLoading: isLoadingData, data } = useQuery(\n ['users-permissions', 'advanced'],\n async () => {\n const { data } = await get('/users-permissions/advanced');\n\n return data;\n },\n {\n onSuccess() {\n notifyStatus(\n formatMessage({\n id: getTrad('Form.advancedSettings.data.loaded'),\n defaultMessage: 'Advanced settings data has been loaded',\n })\n );\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTrad('notification.error'),\n defaultMessage: 'An error occured',\n }),\n });\n },\n }\n );\n\n const isLoading = isLoadingForPermissions || isLoadingData;\n\n const submitMutation = useMutation((body) => put('/users-permissions/advanced', body), {\n async onSuccess() {\n await queryClient.invalidateQueries(['users-permissions', 'advanced']);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('notification.success.saved'),\n defaultMessage: 'Saved',\n }),\n });\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n refetchActive: true,\n });\n\n const { isLoading: isSubmittingForm } = submitMutation;\n\n const handleSubmit = async (body) => {\n submitMutation.mutate({\n ...body,\n email_confirmation_redirection: body.email_confirmation\n ? body.email_confirmation_redirection\n : '',\n });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main aria-busy={isSubmittingForm}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: getTrad('HeaderNav.link.advancedSettings'),\n defaultMessage: 'Advanced Settings',\n }),\n }\n )}\n </Page.Title>\n <Form onSubmit={handleSubmit} initialValues={data.settings} validationSchema={schema}>\n {({ values, isSubmitting, modified }) => {\n return (\n <>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('HeaderNav.link.advancedSettings'),\n defaultMessage: 'Advanced Settings',\n })}\n primaryAction={\n <Button\n loading={isSubmitting}\n type=\"submit\"\n disabled={!modified || !canUpdate}\n startIcon={<Check />}\n size=\"S\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Layouts.Content>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n Line truncated
@@ -0,0 +1,191 @@
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
import 'react';
import { useNotifyAT, Button, Box, Flex, Typography, Grid } from '@strapi/design-system';
import { Check } from '@strapi/icons';
import { Page, useNotification, useFetchClient, useAPIErrorHandler, useRBAC, Form, Layouts, InputRenderer } from '@strapi/strapi/admin';
import { useIntl } from 'react-intl';
import { useQueryClient, useQuery, useMutation } from 'react-query';
import { PERMISSIONS } from '../../constants.mjs';
import 'lodash/isEmpty';
import getTrad from '../../utils/getTrad.mjs';
import layout from './utils/layout.mjs';
import schema from './utils/schema.mjs';
const ProtectedAdvancedSettingsPage = ()=>/*#__PURE__*/ jsx(Page.Protect, {
permissions: PERMISSIONS.readAdvancedSettings,
children: /*#__PURE__*/ jsx(AdvancedSettingsPage, {})
});
const AdvancedSettingsPage = ()=>{
const { formatMessage } = useIntl();
const { toggleNotification } = useNotification();
const { notifyStatus } = useNotifyAT();
const queryClient = useQueryClient();
const { get, put } = useFetchClient();
const { formatAPIError } = useAPIErrorHandler();
const { isLoading: isLoadingForPermissions, allowedActions: { canUpdate } } = useRBAC({
update: PERMISSIONS.updateAdvancedSettings
});
const { isLoading: isLoadingData, data } = useQuery([
'users-permissions',
'advanced'
], async ()=>{
const { data } = await get('/users-permissions/advanced');
return data;
}, {
onSuccess () {
notifyStatus(formatMessage({
id: getTrad('Form.advancedSettings.data.loaded'),
defaultMessage: 'Advanced settings data has been loaded'
}));
},
onError () {
toggleNotification({
type: 'danger',
message: formatMessage({
id: getTrad('notification.error'),
defaultMessage: 'An error occured'
})
});
}
});
const isLoading = isLoadingForPermissions || isLoadingData;
const submitMutation = useMutation((body)=>put('/users-permissions/advanced', body), {
async onSuccess () {
await queryClient.invalidateQueries([
'users-permissions',
'advanced'
]);
toggleNotification({
type: 'success',
message: formatMessage({
id: getTrad('notification.success.saved'),
defaultMessage: 'Saved'
})
});
},
onError (error) {
toggleNotification({
type: 'danger',
message: formatAPIError(error)
});
},
refetchActive: true
});
const { isLoading: isSubmittingForm } = submitMutation;
const handleSubmit = async (body)=>{
submitMutation.mutate({
...body,
email_confirmation_redirection: body.email_confirmation ? body.email_confirmation_redirection : ''
});
};
if (isLoading) {
return /*#__PURE__*/ jsx(Page.Loading, {});
}
return /*#__PURE__*/ jsxs(Page.Main, {
"aria-busy": isSubmittingForm,
children: [
/*#__PURE__*/ jsx(Page.Title, {
children: formatMessage({
id: 'Settings.PageTitle',
defaultMessage: 'Settings - {name}'
}, {
name: formatMessage({
id: getTrad('HeaderNav.link.advancedSettings'),
defaultMessage: 'Advanced Settings'
})
})
}),
/*#__PURE__*/ jsx(Form, {
onSubmit: handleSubmit,
initialValues: data.settings,
validationSchema: schema,
children: ({ values, isSubmitting, modified })=>{
return /*#__PURE__*/ jsxs(Fragment, {
children: [
/*#__PURE__*/ jsx(Layouts.Header, {
title: formatMessage({
id: getTrad('HeaderNav.link.advancedSettings'),
defaultMessage: 'Advanced Settings'
}),
primaryAction: /*#__PURE__*/ jsx(Button, {
loading: isSubmitting,
type: "submit",
disabled: !modified || !canUpdate,
startIcon: /*#__PURE__*/ jsx(Check, {}),
size: "S",
children: formatMessage({
id: 'global.save',
defaultMessage: 'Save'
})
})
}),
/*#__PURE__*/ jsx(Layouts.Content, {
children: /*#__PURE__*/ jsx(Box, {
background: "neutral0",
hasRadius: true,
shadow: "filterShadow",
paddingTop: 6,
paddingBottom: 6,
paddingLeft: 7,
paddingRight: 7,
children: /*#__PURE__*/ jsxs(Flex, {
direction: "column",
alignItems: "stretch",
gap: 4,
children: [
/*#__PURE__*/ jsx(Typography, {
variant: "delta",
tag: "h2",
children: formatMessage({
id: 'global.settings',
defaultMessage: 'Settings'
})
}),
/*#__PURE__*/ jsx(Grid.Root, {
gap: 6,
children: [
{
label: {
id: getTrad('EditForm.inputSelect.label.role'),
defaultMessage: 'Default role for authenticated users'
},
hint: {
id: getTrad('EditForm.inputSelect.description.role'),
defaultMessage: 'It will attach the new authenticated user to the selected role.'
},
options: data.roles.map((role)=>({
label: role.name,
value: role.type
})),
name: 'default_role',
size: 6,
type: 'enumeration'
},
...layout
].map(({ size, ...field })=>/*#__PURE__*/ jsx(Grid.Item, {
col: size,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsx(InputRenderer, {
...field,
disabled: field.name === 'email_confirmation_redirection' && values.email_confirmation === false,
label: formatMessage(field.label),
hint: field.hint ? formatMessage(field.hint) : undefined,
placeholder: field.placeholder ? formatMessage(field.placeholder) : undefined
})
}, field.name))
})
]
})
})
})
]
});
}
})
]
});
};
export { AdvancedSettingsPage, ProtectedAdvancedSettingsPage };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../../../admin/src/pages/AdvancedSettings/index.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Typography, useNotifyAT } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport {\n useAPIErrorHandler,\n Page,\n Form,\n InputRenderer,\n useNotification,\n useFetchClient,\n useRBAC,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\n\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport layout from './utils/layout';\nimport schema from './utils/schema';\n\nconst ProtectedAdvancedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.readAdvancedSettings}>\n <AdvancedSettingsPage />\n </Page.Protect>\n);\n\nconst AdvancedSettingsPage = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { notifyStatus } = useNotifyAT();\n const queryClient = useQueryClient();\n const { get, put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canUpdate },\n } = useRBAC({ update: PERMISSIONS.updateAdvancedSettings });\n\n const { isLoading: isLoadingData, data } = useQuery(\n ['users-permissions', 'advanced'],\n async () => {\n const { data } = await get('/users-permissions/advanced');\n\n return data;\n },\n {\n onSuccess() {\n notifyStatus(\n formatMessage({\n id: getTrad('Form.advancedSettings.data.loaded'),\n defaultMessage: 'Advanced settings data has been loaded',\n })\n );\n },\n onError() {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: getTrad('notification.error'),\n defaultMessage: 'An error occured',\n }),\n });\n },\n }\n );\n\n const isLoading = isLoadingForPermissions || isLoadingData;\n\n const submitMutation = useMutation((body) => put('/users-permissions/advanced', body), {\n async onSuccess() {\n await queryClient.invalidateQueries(['users-permissions', 'advanced']);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: getTrad('notification.success.saved'),\n defaultMessage: 'Saved',\n }),\n });\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n refetchActive: true,\n });\n\n const { isLoading: isSubmittingForm } = submitMutation;\n\n const handleSubmit = async (body) => {\n submitMutation.mutate({\n ...body,\n email_confirmation_redirection: body.email_confirmation\n ? body.email_confirmation_redirection\n : '',\n });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main aria-busy={isSubmittingForm}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: getTrad('HeaderNav.link.advancedSettings'),\n defaultMessage: 'Advanced Settings',\n }),\n }\n )}\n </Page.Title>\n <Form onSubmit={handleSubmit} initialValues={data.settings} validationSchema={schema}>\n {({ values, isSubmitting, modified }) => {\n return (\n <>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('HeaderNav.link.advancedSettings'),\n defaultMessage: 'Advanced Settings',\n })}\n primaryAction={\n <Button\n loading={isSubmitting}\n type=\"submit\"\n disabled={!modified || !canUpdate}\n startIcon={<Check />}\n size=\"S\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <Layouts.Content>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n Line truncated
@@ -0,0 +1,83 @@
'use strict';
require('lodash/isEmpty');
var getTrad = require('../../../utils/getTrad.js');
const layout = [
{
label: {
id: getTrad('EditForm.inputToggle.label.email'),
defaultMessage: 'One account per email address'
},
hint: {
id: getTrad('EditForm.inputToggle.description.email'),
defaultMessage: 'Disallow the user to create multiple accounts using the same email address with different authentication providers.'
},
name: 'unique_email',
type: 'boolean',
size: 12
},
{
label: {
id: getTrad('EditForm.inputToggle.label.sign-up'),
defaultMessage: 'Enable sign-ups'
},
hint: {
id: getTrad('EditForm.inputToggle.description.sign-up'),
defaultMessage: 'When disabled (OFF), the registration process is forbidden. No one can subscribe anymore no matter the used provider.'
},
name: 'allow_register',
type: 'boolean',
size: 12
},
{
label: {
id: getTrad('EditForm.inputToggle.label.email-reset-password'),
defaultMessage: 'Reset password page'
},
hint: {
id: getTrad('EditForm.inputToggle.description.email-reset-password'),
defaultMessage: "URL of your application's reset password page."
},
placeholder: {
id: getTrad('EditForm.inputToggle.placeholder.email-reset-password'),
defaultMessage: 'ex: https://youtfrontend.com/reset-password'
},
name: 'email_reset_password',
type: 'string',
size: 12
},
{
label: {
id: getTrad('EditForm.inputToggle.label.email-confirmation'),
defaultMessage: 'Enable email confirmation'
},
hint: {
id: getTrad('EditForm.inputToggle.description.email-confirmation'),
defaultMessage: 'When enabled (ON), new registered users receive a confirmation email.'
},
name: 'email_confirmation',
type: 'boolean',
size: 12
},
{
label: {
id: getTrad('EditForm.inputToggle.label.email-confirmation-redirection'),
defaultMessage: 'Redirection url'
},
hint: {
id: getTrad('EditForm.inputToggle.description.email-confirmation-redirection'),
defaultMessage: 'After you confirmed your email, choose where you will be redirected.'
},
placeholder: {
id: getTrad('EditForm.inputToggle.placeholder.email-confirmation-redirection'),
defaultMessage: 'ex: https://youtfrontend.com/email-confirmation'
},
name: 'email_confirmation_redirection',
type: 'string',
size: 12
}
];
module.exports = layout;
//# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
{"version":3,"file":"layout.js","sources":["../../../../../admin/src/pages/AdvancedSettings/utils/layout.js"],"sourcesContent":["import { getTrad } from '../../../utils';\n\nconst layout = [\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email'),\n defaultMessage: 'One account per email address',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email'),\n defaultMessage:\n 'Disallow the user to create multiple accounts using the same email address with different authentication providers.',\n },\n name: 'unique_email',\n type: 'boolean',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.sign-up'),\n defaultMessage: 'Enable sign-ups',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.sign-up'),\n defaultMessage:\n 'When disabled (OFF), the registration process is forbidden. No one can subscribe anymore no matter the used provider.',\n },\n name: 'allow_register',\n type: 'boolean',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email-reset-password'),\n defaultMessage: 'Reset password page',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email-reset-password'),\n defaultMessage: \"URL of your application's reset password page.\",\n },\n placeholder: {\n id: getTrad('EditForm.inputToggle.placeholder.email-reset-password'),\n defaultMessage: 'ex: https://youtfrontend.com/reset-password',\n },\n name: 'email_reset_password',\n type: 'string',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email-confirmation'),\n defaultMessage: 'Enable email confirmation',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email-confirmation'),\n defaultMessage: 'When enabled (ON), new registered users receive a confirmation email.',\n },\n name: 'email_confirmation',\n type: 'boolean',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email-confirmation-redirection'),\n defaultMessage: 'Redirection url',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email-confirmation-redirection'),\n defaultMessage: 'After you confirmed your email, choose where you will be redirected.',\n },\n placeholder: {\n id: getTrad('EditForm.inputToggle.placeholder.email-confirmation-redirection'),\n defaultMessage: 'ex: https://youtfrontend.com/email-confirmation',\n },\n name: 'email_confirmation_redirection',\n type: 'string',\n size: 12,\n },\n];\n\nexport default layout;\n"],"names":["layout","label","id","getTrad","defaultMessage","hint","name","type","size","placeholder"],"mappings":";;;;;AAEA,MAAMA,MAAS,GAAA;AACb,IAAA;QACEC,KAAO,EAAA;AACLC,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,kCAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAC,IAAM,EAAA;AACJH,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,wCAAA,CAAA;YACZC,cACE,EAAA;AACJ,SAAA;QACAE,IAAM,EAAA,cAAA;QACNC,IAAM,EAAA,SAAA;QACNC,IAAM,EAAA;AACR,KAAA;AACA,IAAA;QACEP,KAAO,EAAA;AACLC,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,oCAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAC,IAAM,EAAA;AACJH,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,0CAAA,CAAA;YACZC,cACE,EAAA;AACJ,SAAA;QACAE,IAAM,EAAA,gBAAA;QACNC,IAAM,EAAA,SAAA;QACNC,IAAM,EAAA;AACR,KAAA;AACA,IAAA;QACEP,KAAO,EAAA;AACLC,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,iDAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAC,IAAM,EAAA;AACJH,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,uDAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAK,WAAa,EAAA;AACXP,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,uDAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAE,IAAM,EAAA,sBAAA;QACNC,IAAM,EAAA,QAAA;QACNC,IAAM,EAAA;AACR,KAAA;AACA,IAAA;QACEP,KAAO,EAAA;AACLC,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,+CAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAC,IAAM,EAAA;AACJH,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,qDAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAE,IAAM,EAAA,oBAAA;QACNC,IAAM,EAAA,SAAA;QACNC,IAAM,EAAA;AACR,KAAA;AACA,IAAA;QACEP,KAAO,EAAA;AACLC,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,2DAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAC,IAAM,EAAA;AACJH,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,iEAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAK,WAAa,EAAA;AACXP,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,iEAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAE,IAAM,EAAA,gCAAA;QACNC,IAAM,EAAA,QAAA;QACNC,IAAM,EAAA;AACR;AACD;;;;"}
@@ -0,0 +1,81 @@
import 'lodash/isEmpty';
import getTrad from '../../../utils/getTrad.mjs';
const layout = [
{
label: {
id: getTrad('EditForm.inputToggle.label.email'),
defaultMessage: 'One account per email address'
},
hint: {
id: getTrad('EditForm.inputToggle.description.email'),
defaultMessage: 'Disallow the user to create multiple accounts using the same email address with different authentication providers.'
},
name: 'unique_email',
type: 'boolean',
size: 12
},
{
label: {
id: getTrad('EditForm.inputToggle.label.sign-up'),
defaultMessage: 'Enable sign-ups'
},
hint: {
id: getTrad('EditForm.inputToggle.description.sign-up'),
defaultMessage: 'When disabled (OFF), the registration process is forbidden. No one can subscribe anymore no matter the used provider.'
},
name: 'allow_register',
type: 'boolean',
size: 12
},
{
label: {
id: getTrad('EditForm.inputToggle.label.email-reset-password'),
defaultMessage: 'Reset password page'
},
hint: {
id: getTrad('EditForm.inputToggle.description.email-reset-password'),
defaultMessage: "URL of your application's reset password page."
},
placeholder: {
id: getTrad('EditForm.inputToggle.placeholder.email-reset-password'),
defaultMessage: 'ex: https://youtfrontend.com/reset-password'
},
name: 'email_reset_password',
type: 'string',
size: 12
},
{
label: {
id: getTrad('EditForm.inputToggle.label.email-confirmation'),
defaultMessage: 'Enable email confirmation'
},
hint: {
id: getTrad('EditForm.inputToggle.description.email-confirmation'),
defaultMessage: 'When enabled (ON), new registered users receive a confirmation email.'
},
name: 'email_confirmation',
type: 'boolean',
size: 12
},
{
label: {
id: getTrad('EditForm.inputToggle.label.email-confirmation-redirection'),
defaultMessage: 'Redirection url'
},
hint: {
id: getTrad('EditForm.inputToggle.description.email-confirmation-redirection'),
defaultMessage: 'After you confirmed your email, choose where you will be redirected.'
},
placeholder: {
id: getTrad('EditForm.inputToggle.placeholder.email-confirmation-redirection'),
defaultMessage: 'ex: https://youtfrontend.com/email-confirmation'
},
name: 'email_confirmation_redirection',
type: 'string',
size: 12
}
];
export { layout as default };
//# sourceMappingURL=layout.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"layout.mjs","sources":["../../../../../admin/src/pages/AdvancedSettings/utils/layout.js"],"sourcesContent":["import { getTrad } from '../../../utils';\n\nconst layout = [\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email'),\n defaultMessage: 'One account per email address',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email'),\n defaultMessage:\n 'Disallow the user to create multiple accounts using the same email address with different authentication providers.',\n },\n name: 'unique_email',\n type: 'boolean',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.sign-up'),\n defaultMessage: 'Enable sign-ups',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.sign-up'),\n defaultMessage:\n 'When disabled (OFF), the registration process is forbidden. No one can subscribe anymore no matter the used provider.',\n },\n name: 'allow_register',\n type: 'boolean',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email-reset-password'),\n defaultMessage: 'Reset password page',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email-reset-password'),\n defaultMessage: \"URL of your application's reset password page.\",\n },\n placeholder: {\n id: getTrad('EditForm.inputToggle.placeholder.email-reset-password'),\n defaultMessage: 'ex: https://youtfrontend.com/reset-password',\n },\n name: 'email_reset_password',\n type: 'string',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email-confirmation'),\n defaultMessage: 'Enable email confirmation',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email-confirmation'),\n defaultMessage: 'When enabled (ON), new registered users receive a confirmation email.',\n },\n name: 'email_confirmation',\n type: 'boolean',\n size: 12,\n },\n {\n label: {\n id: getTrad('EditForm.inputToggle.label.email-confirmation-redirection'),\n defaultMessage: 'Redirection url',\n },\n hint: {\n id: getTrad('EditForm.inputToggle.description.email-confirmation-redirection'),\n defaultMessage: 'After you confirmed your email, choose where you will be redirected.',\n },\n placeholder: {\n id: getTrad('EditForm.inputToggle.placeholder.email-confirmation-redirection'),\n defaultMessage: 'ex: https://youtfrontend.com/email-confirmation',\n },\n name: 'email_confirmation_redirection',\n type: 'string',\n size: 12,\n },\n];\n\nexport default layout;\n"],"names":["layout","label","id","getTrad","defaultMessage","hint","name","type","size","placeholder"],"mappings":";;;AAEA,MAAMA,MAAS,GAAA;AACb,IAAA;QACEC,KAAO,EAAA;AACLC,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,kCAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAC,IAAM,EAAA;AACJH,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,wCAAA,CAAA;YACZC,cACE,EAAA;AACJ,SAAA;QACAE,IAAM,EAAA,cAAA;QACNC,IAAM,EAAA,SAAA;QACNC,IAAM,EAAA;AACR,KAAA;AACA,IAAA;QACEP,KAAO,EAAA;AACLC,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,oCAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAC,IAAM,EAAA;AACJH,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,0CAAA,CAAA;YACZC,cACE,EAAA;AACJ,SAAA;QACAE,IAAM,EAAA,gBAAA;QACNC,IAAM,EAAA,SAAA;QACNC,IAAM,EAAA;AACR,KAAA;AACA,IAAA;QACEP,KAAO,EAAA;AACLC,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,iDAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAC,IAAM,EAAA;AACJH,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,uDAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAK,WAAa,EAAA;AACXP,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,uDAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAE,IAAM,EAAA,sBAAA;QACNC,IAAM,EAAA,QAAA;QACNC,IAAM,EAAA;AACR,KAAA;AACA,IAAA;QACEP,KAAO,EAAA;AACLC,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,+CAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAC,IAAM,EAAA;AACJH,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,qDAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAE,IAAM,EAAA,oBAAA;QACNC,IAAM,EAAA,SAAA;QACNC,IAAM,EAAA;AACR,KAAA;AACA,IAAA;QACEP,KAAO,EAAA;AACLC,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,2DAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAC,IAAM,EAAA;AACJH,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,iEAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAK,WAAa,EAAA;AACXP,YAAAA,EAAAA,EAAIC,OAAQ,CAAA,iEAAA,CAAA;YACZC,cAAgB,EAAA;AAClB,SAAA;QACAE,IAAM,EAAA,gCAAA;QACNC,IAAM,EAAA,QAAA;QACNC,IAAM,EAAA;AACR;AACD;;;;"}
@@ -0,0 +1,40 @@
'use strict';
var admin = require('@strapi/strapi/admin');
var yup = require('yup');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
// eslint-disable-next-line prefer-regex-literals
const URL_REGEX = new RegExp('(^$)|((.+:\\/\\/.*)(d*)\\/?(.*))');
const schema = yup__namespace.object().shape({
email_confirmation_redirection: yup__namespace.mixed().when('email_confirmation', {
is: true,
then: yup__namespace.string().matches(URL_REGEX).required(),
otherwise: yup__namespace.string().nullable()
}),
email_reset_password: yup__namespace.string(admin.translatedErrors.string).matches(URL_REGEX, {
id: admin.translatedErrors.regex.id,
defaultMessage: 'This is not a valid URL'
}).nullable()
});
module.exports = schema;
//# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
{"version":3,"file":"schema.js","sources":["../../../../../admin/src/pages/AdvancedSettings/utils/schema.js"],"sourcesContent":["import { translatedErrors } from '@strapi/strapi/admin';\nimport * as yup from 'yup';\n\n// eslint-disable-next-line prefer-regex-literals\nconst URL_REGEX = new RegExp('(^$)|((.+:\\\\/\\\\/.*)(d*)\\\\/?(.*))');\n\nconst schema = yup.object().shape({\n email_confirmation_redirection: yup.mixed().when('email_confirmation', {\n is: true,\n then: yup.string().matches(URL_REGEX).required(),\n otherwise: yup.string().nullable(),\n }),\n email_reset_password: yup\n .string(translatedErrors.string)\n .matches(URL_REGEX, {\n id: translatedErrors.regex.id,\n defaultMessage: 'This is not a valid URL',\n })\n .nullable(),\n});\n\nexport default schema;\n"],"names":["URL_REGEX","RegExp","schema","yup","object","shape","email_confirmation_redirection","mixed","when","is","then","string","matches","required","otherwise","nullable","email_reset_password","translatedErrors","id","regex","defaultMessage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA,MAAMA,SAAAA,GAAY,IAAIC,MAAO,CAAA,kCAAA,CAAA;AAE7B,MAAMC,MAASC,GAAAA,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAChCC,IAAAA,8BAAAA,EAAgCH,cAAII,CAAAA,KAAK,EAAGC,CAAAA,IAAI,CAAC,oBAAsB,EAAA;QACrEC,EAAI,EAAA,IAAA;AACJC,QAAAA,IAAAA,EAAMP,eAAIQ,MAAM,EAAA,CAAGC,OAAO,CAACZ,WAAWa,QAAQ,EAAA;QAC9CC,SAAWX,EAAAA,cAAAA,CAAIQ,MAAM,EAAA,CAAGI,QAAQ;AAClC,KAAA,CAAA;IACAC,oBAAsBb,EAAAA,cAAAA,CACnBQ,MAAM,CAACM,sBAAAA,CAAiBN,MAAM,CAC9BC,CAAAA,OAAO,CAACZ,SAAW,EAAA;QAClBkB,EAAID,EAAAA,sBAAAA,CAAiBE,KAAK,CAACD,EAAE;QAC7BE,cAAgB,EAAA;AAClB,KAAA,CAAA,CACCL,QAAQ;AACb,CAAA;;;;"}
@@ -0,0 +1,19 @@
import { translatedErrors } from '@strapi/strapi/admin';
import * as yup from 'yup';
// eslint-disable-next-line prefer-regex-literals
const URL_REGEX = new RegExp('(^$)|((.+:\\/\\/.*)(d*)\\/?(.*))');
const schema = yup.object().shape({
email_confirmation_redirection: yup.mixed().when('email_confirmation', {
is: true,
then: yup.string().matches(URL_REGEX).required(),
otherwise: yup.string().nullable()
}),
email_reset_password: yup.string(translatedErrors.string).matches(URL_REGEX, {
id: translatedErrors.regex.id,
defaultMessage: 'This is not a valid URL'
}).nullable()
});
export { schema as default };
//# sourceMappingURL=schema.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"schema.mjs","sources":["../../../../../admin/src/pages/AdvancedSettings/utils/schema.js"],"sourcesContent":["import { translatedErrors } from '@strapi/strapi/admin';\nimport * as yup from 'yup';\n\n// eslint-disable-next-line prefer-regex-literals\nconst URL_REGEX = new RegExp('(^$)|((.+:\\\\/\\\\/.*)(d*)\\\\/?(.*))');\n\nconst schema = yup.object().shape({\n email_confirmation_redirection: yup.mixed().when('email_confirmation', {\n is: true,\n then: yup.string().matches(URL_REGEX).required(),\n otherwise: yup.string().nullable(),\n }),\n email_reset_password: yup\n .string(translatedErrors.string)\n .matches(URL_REGEX, {\n id: translatedErrors.regex.id,\n defaultMessage: 'This is not a valid URL',\n })\n .nullable(),\n});\n\nexport default schema;\n"],"names":["URL_REGEX","RegExp","schema","yup","object","shape","email_confirmation_redirection","mixed","when","is","then","string","matches","required","otherwise","nullable","email_reset_password","translatedErrors","id","regex","defaultMessage"],"mappings":";;;AAGA;AACA,MAAMA,SAAAA,GAAY,IAAIC,MAAO,CAAA,kCAAA,CAAA;AAE7B,MAAMC,MAASC,GAAAA,GAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAChCC,IAAAA,8BAAAA,EAAgCH,GAAII,CAAAA,KAAK,EAAGC,CAAAA,IAAI,CAAC,oBAAsB,EAAA;QACrEC,EAAI,EAAA,IAAA;AACJC,QAAAA,IAAAA,EAAMP,IAAIQ,MAAM,EAAA,CAAGC,OAAO,CAACZ,WAAWa,QAAQ,EAAA;QAC9CC,SAAWX,EAAAA,GAAAA,CAAIQ,MAAM,EAAA,CAAGI,QAAQ;AAClC,KAAA,CAAA;IACAC,oBAAsBb,EAAAA,GAAAA,CACnBQ,MAAM,CAACM,gBAAAA,CAAiBN,MAAM,CAC9BC,CAAAA,OAAO,CAACZ,SAAW,EAAA;QAClBkB,EAAID,EAAAA,gBAAAA,CAAiBE,KAAK,CAACD,EAAE;QAC7BE,cAAgB,EAAA;AAClB,KAAA,CAAA,CACCL,QAAQ;AACb,CAAA;;;;"}
@@ -0,0 +1,171 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
require('react');
var designSystem = require('@strapi/design-system');
var admin = require('@strapi/strapi/admin');
var PropTypes = require('prop-types');
var reactIntl = require('react-intl');
require('lodash/isEmpty');
var getTrad = require('../../../utils/getTrad.js');
var schema = require('../utils/schema.js');
const EmailForm = ({ template = {}, onToggle, open, onSubmit })=>{
const { formatMessage } = reactIntl.useIntl();
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Root, {
open: open,
onOpenChange: onToggle,
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Content, {
children: [
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Header, {
children: [
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Breadcrumbs, {
label: `${formatMessage({
id: getTrad('PopUpForm.header.edit.email-templates'),
defaultMessage: 'Edit email template'
})}, ${template.display ? formatMessage({
id: getTrad(template.display),
defaultMessage: template.display
}) : ''}`,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Crumb, {
children: formatMessage({
id: getTrad('PopUpForm.header.edit.email-templates'),
defaultMessage: 'Edit email template'
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Crumb, {
isCurrent: true,
children: template.display ? formatMessage({
id: getTrad(template.display),
defaultMessage: template.display
}) : ''
})
]
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Title, {
children: `${formatMessage({
id: getTrad('PopUpForm.header.edit.email-templates'),
defaultMessage: 'Edit email template'
})}, ${template.display ? formatMessage({
id: getTrad(template.display),
defaultMessage: template.display
}) : ''}`
})
})
]
}),
/*#__PURE__*/ jsxRuntime.jsx(admin.Form, {
onSubmit: onSubmit,
initialValues: template,
validationSchema: schema,
children: ({ isSubmitting })=>{
return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
gap: 5,
children: [
{
label: formatMessage({
id: getTrad('PopUpForm.Email.options.from.name.label'),
defaultMessage: 'Shipper name'
}),
name: 'options.from.name',
size: 6,
type: 'string'
},
{
label: formatMessage({
id: getTrad('PopUpForm.Email.options.from.email.label'),
defaultMessage: 'Shipper email'
}),
name: 'options.from.email',
size: 6,
type: 'string'
},
{
label: formatMessage({
id: getTrad('PopUpForm.Email.options.response_email.label'),
defaultMessage: 'Response email'
}),
name: 'options.response_email',
size: 6,
type: 'string'
},
{
label: formatMessage({
id: getTrad('PopUpForm.Email.options.object.label'),
defaultMessage: 'Subject'
}),
name: 'options.object',
size: 6,
type: 'string'
},
{
label: formatMessage({
id: getTrad('PopUpForm.Email.options.message.label'),
defaultMessage: 'Message'
}),
name: 'options.message',
size: 12,
type: 'text'
}
].map(({ size, ...field })=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
col: size,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsxRuntime.jsx(admin.InputRenderer, {
...field
})
}, field.name))
})
}),
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Footer, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Close, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
variant: "tertiary",
children: "Cancel"
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
loading: isSubmitting,
type: "submit",
children: "Finish"
})
]
})
]
});
}
})
]
})
});
};
EmailForm.defaultProps = {
template: {}
};
EmailForm.propTypes = {
template: PropTypes.shape({
display: PropTypes.string,
icon: PropTypes.string,
options: PropTypes.shape({
from: PropTypes.shape({
name: PropTypes.string,
email: PropTypes.string
}),
message: PropTypes.string,
object: PropTypes.string,
response_email: PropTypes.string
})
}),
open: PropTypes.bool.isRequired,
onSubmit: PropTypes.func.isRequired,
onToggle: PropTypes.func.isRequired
};
module.exports = EmailForm;
//# sourceMappingURL=EmailForm.js.map
@@ -0,0 +1 @@
{"version":3,"file":"EmailForm.js","sources":["../../../../../admin/src/pages/EmailTemplates/components/EmailForm.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Grid, Modal, Breadcrumbs, Crumb, VisuallyHidden } from '@strapi/design-system';\nimport { Form, InputRenderer } from '@strapi/strapi/admin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\nimport schema from '../utils/schema';\n\nconst EmailForm = ({ template = {}, onToggle, open, onSubmit }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Modal.Root open={open} onOpenChange={onToggle}>\n <Modal.Content>\n <Modal.Header>\n <Breadcrumbs\n label={`${formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}, ${\n template.display\n ? formatMessage({\n id: getTrad(template.display),\n defaultMessage: template.display,\n })\n : ''\n }`}\n >\n <Crumb>\n {formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}\n </Crumb>\n <Crumb isCurrent>\n {template.display\n ? formatMessage({ id: getTrad(template.display), defaultMessage: template.display })\n : ''}\n </Crumb>\n </Breadcrumbs>\n <VisuallyHidden>\n <Modal.Title>\n {`${formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}, ${template.display ? formatMessage({ id: getTrad(template.display), defaultMessage: template.display }) : ''}`}\n </Modal.Title>\n </VisuallyHidden>\n </Modal.Header>\n <Form onSubmit={onSubmit} initialValues={template} validationSchema={schema}>\n {({ isSubmitting }) => {\n return (\n <>\n <Modal.Body>\n <Grid.Root gap={5}>\n {[\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.from.name.label'),\n defaultMessage: 'Shipper name',\n }),\n name: 'options.from.name',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.from.email.label'),\n defaultMessage: 'Shipper email',\n }),\n name: 'options.from.email',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.response_email.label'),\n defaultMessage: 'Response email',\n }),\n name: 'options.response_email',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.object.label'),\n defaultMessage: 'Subject',\n }),\n name: 'options.object',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.message.label'),\n defaultMessage: 'Message',\n }),\n name: 'options.message',\n size: 12,\n type: 'text',\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\">Cancel</Button>\n </Modal.Close>\n <Button loading={isSubmitting} type=\"submit\">\n Line truncated
@@ -0,0 +1,169 @@
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
import 'react';
import { Modal, Breadcrumbs, Crumb, VisuallyHidden, Grid, Button } from '@strapi/design-system';
import { Form, InputRenderer } from '@strapi/strapi/admin';
import PropTypes from 'prop-types';
import { useIntl } from 'react-intl';
import 'lodash/isEmpty';
import getTrad from '../../../utils/getTrad.mjs';
import schema from '../utils/schema.mjs';
const EmailForm = ({ template = {}, onToggle, open, onSubmit })=>{
const { formatMessage } = useIntl();
return /*#__PURE__*/ jsx(Modal.Root, {
open: open,
onOpenChange: onToggle,
children: /*#__PURE__*/ jsxs(Modal.Content, {
children: [
/*#__PURE__*/ jsxs(Modal.Header, {
children: [
/*#__PURE__*/ jsxs(Breadcrumbs, {
label: `${formatMessage({
id: getTrad('PopUpForm.header.edit.email-templates'),
defaultMessage: 'Edit email template'
})}, ${template.display ? formatMessage({
id: getTrad(template.display),
defaultMessage: template.display
}) : ''}`,
children: [
/*#__PURE__*/ jsx(Crumb, {
children: formatMessage({
id: getTrad('PopUpForm.header.edit.email-templates'),
defaultMessage: 'Edit email template'
})
}),
/*#__PURE__*/ jsx(Crumb, {
isCurrent: true,
children: template.display ? formatMessage({
id: getTrad(template.display),
defaultMessage: template.display
}) : ''
})
]
}),
/*#__PURE__*/ jsx(VisuallyHidden, {
children: /*#__PURE__*/ jsx(Modal.Title, {
children: `${formatMessage({
id: getTrad('PopUpForm.header.edit.email-templates'),
defaultMessage: 'Edit email template'
})}, ${template.display ? formatMessage({
id: getTrad(template.display),
defaultMessage: template.display
}) : ''}`
})
})
]
}),
/*#__PURE__*/ jsx(Form, {
onSubmit: onSubmit,
initialValues: template,
validationSchema: schema,
children: ({ isSubmitting })=>{
return /*#__PURE__*/ jsxs(Fragment, {
children: [
/*#__PURE__*/ jsx(Modal.Body, {
children: /*#__PURE__*/ jsx(Grid.Root, {
gap: 5,
children: [
{
label: formatMessage({
id: getTrad('PopUpForm.Email.options.from.name.label'),
defaultMessage: 'Shipper name'
}),
name: 'options.from.name',
size: 6,
type: 'string'
},
{
label: formatMessage({
id: getTrad('PopUpForm.Email.options.from.email.label'),
defaultMessage: 'Shipper email'
}),
name: 'options.from.email',
size: 6,
type: 'string'
},
{
label: formatMessage({
id: getTrad('PopUpForm.Email.options.response_email.label'),
defaultMessage: 'Response email'
}),
name: 'options.response_email',
size: 6,
type: 'string'
},
{
label: formatMessage({
id: getTrad('PopUpForm.Email.options.object.label'),
defaultMessage: 'Subject'
}),
name: 'options.object',
size: 6,
type: 'string'
},
{
label: formatMessage({
id: getTrad('PopUpForm.Email.options.message.label'),
defaultMessage: 'Message'
}),
name: 'options.message',
size: 12,
type: 'text'
}
].map(({ size, ...field })=>/*#__PURE__*/ jsx(Grid.Item, {
col: size,
direction: "column",
alignItems: "stretch",
children: /*#__PURE__*/ jsx(InputRenderer, {
...field
})
}, field.name))
})
}),
/*#__PURE__*/ jsxs(Modal.Footer, {
children: [
/*#__PURE__*/ jsx(Modal.Close, {
children: /*#__PURE__*/ jsx(Button, {
variant: "tertiary",
children: "Cancel"
})
}),
/*#__PURE__*/ jsx(Button, {
loading: isSubmitting,
type: "submit",
children: "Finish"
})
]
})
]
});
}
})
]
})
});
};
EmailForm.defaultProps = {
template: {}
};
EmailForm.propTypes = {
template: PropTypes.shape({
display: PropTypes.string,
icon: PropTypes.string,
options: PropTypes.shape({
from: PropTypes.shape({
name: PropTypes.string,
email: PropTypes.string
}),
message: PropTypes.string,
object: PropTypes.string,
response_email: PropTypes.string
})
}),
open: PropTypes.bool.isRequired,
onSubmit: PropTypes.func.isRequired,
onToggle: PropTypes.func.isRequired
};
export { EmailForm as default };
//# sourceMappingURL=EmailForm.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"EmailForm.mjs","sources":["../../../../../admin/src/pages/EmailTemplates/components/EmailForm.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Grid, Modal, Breadcrumbs, Crumb, VisuallyHidden } from '@strapi/design-system';\nimport { Form, InputRenderer } from '@strapi/strapi/admin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\nimport schema from '../utils/schema';\n\nconst EmailForm = ({ template = {}, onToggle, open, onSubmit }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Modal.Root open={open} onOpenChange={onToggle}>\n <Modal.Content>\n <Modal.Header>\n <Breadcrumbs\n label={`${formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}, ${\n template.display\n ? formatMessage({\n id: getTrad(template.display),\n defaultMessage: template.display,\n })\n : ''\n }`}\n >\n <Crumb>\n {formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}\n </Crumb>\n <Crumb isCurrent>\n {template.display\n ? formatMessage({ id: getTrad(template.display), defaultMessage: template.display })\n : ''}\n </Crumb>\n </Breadcrumbs>\n <VisuallyHidden>\n <Modal.Title>\n {`${formatMessage({\n id: getTrad('PopUpForm.header.edit.email-templates'),\n defaultMessage: 'Edit email template',\n })}, ${template.display ? formatMessage({ id: getTrad(template.display), defaultMessage: template.display }) : ''}`}\n </Modal.Title>\n </VisuallyHidden>\n </Modal.Header>\n <Form onSubmit={onSubmit} initialValues={template} validationSchema={schema}>\n {({ isSubmitting }) => {\n return (\n <>\n <Modal.Body>\n <Grid.Root gap={5}>\n {[\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.from.name.label'),\n defaultMessage: 'Shipper name',\n }),\n name: 'options.from.name',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.from.email.label'),\n defaultMessage: 'Shipper email',\n }),\n name: 'options.from.email',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.response_email.label'),\n defaultMessage: 'Response email',\n }),\n name: 'options.response_email',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.object.label'),\n defaultMessage: 'Subject',\n }),\n name: 'options.object',\n size: 6,\n type: 'string',\n },\n {\n label: formatMessage({\n id: getTrad('PopUpForm.Email.options.message.label'),\n defaultMessage: 'Message',\n }),\n name: 'options.message',\n size: 12,\n type: 'text',\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <InputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\">Cancel</Button>\n </Modal.Close>\n <Button loading={isSubmitting} type=\"submit\">\n Line truncated
@@ -0,0 +1,145 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
require('react');
var designSystem = require('@strapi/design-system');
var icons = require('@strapi/icons');
var PropTypes = require('prop-types');
var reactIntl = require('react-intl');
require('lodash/isEmpty');
var getTrad = require('../../../utils/getTrad.js');
const EmailTable = ({ canUpdate, onEditClick })=>{
const { formatMessage } = reactIntl.useIntl();
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Table, {
colCount: 3,
rowCount: 3,
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Thead, {
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tr, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Th, {
width: "1%",
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
children: formatMessage({
id: getTrad('Email.template.table.icon.label'),
defaultMessage: 'icon'
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Th, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
variant: "sigma",
textColor: "neutral600",
children: formatMessage({
id: getTrad('Email.template.table.name.label'),
defaultMessage: 'name'
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Th, {
width: "1%",
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
children: formatMessage({
id: getTrad('Email.template.table.action.label'),
defaultMessage: 'action'
})
})
})
]
})
}),
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tbody, {
children: [
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tr, {
cursor: "pointer",
onClick: ()=>onEditClick('reset_password'),
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
width: "3.2rem",
height: "3.2rem",
padding: "0.8rem",
children: /*#__PURE__*/ jsxRuntime.jsx(icons.ArrowClockwise, {
"aria-label": formatMessage({
id: 'global.reset-password',
defaultMessage: 'Reset password'
})
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
children: formatMessage({
id: 'global.reset-password',
defaultMessage: 'Reset password'
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
onClick: (e)=>e.stopPropagation(),
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
onClick: ()=>onEditClick('reset_password'),
label: formatMessage({
id: getTrad('Email.template.form.edit.label'),
defaultMessage: 'Edit a template'
}),
variant: "ghost",
disabled: !canUpdate,
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {})
})
})
]
}),
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tr, {
cursor: "pointer",
onClick: ()=>onEditClick('email_confirmation'),
children: [
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
width: "3.2rem",
height: "3.2rem",
padding: "0.8rem",
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Check, {
"aria-label": formatMessage({
id: getTrad('Email.template.email_confirmation'),
defaultMessage: 'Email address confirmation'
})
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
children: formatMessage({
id: getTrad('Email.template.email_confirmation'),
defaultMessage: 'Email address confirmation'
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
onClick: (e)=>e.stopPropagation(),
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
onClick: ()=>onEditClick('email_confirmation'),
label: formatMessage({
id: getTrad('Email.template.form.edit.label'),
defaultMessage: 'Edit a template'
}),
variant: "ghost",
disabled: !canUpdate,
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {})
})
})
]
})
]
})
]
});
};
EmailTable.propTypes = {
canUpdate: PropTypes.bool.isRequired,
onEditClick: PropTypes.func.isRequired
};
module.exports = EmailTable;
//# sourceMappingURL=EmailTable.js.map
@@ -0,0 +1 @@
{"version":3,"file":"EmailTable.js","sources":["../../../../../admin/src/pages/EmailTemplates/components/EmailTable.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n IconButton,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n Box,\n} from '@strapi/design-system';\nimport { Check, Pencil, ArrowClockwise as Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nconst EmailTable = ({ canUpdate, onEditClick }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Table colCount={3} rowCount={3}>\n <Thead>\n <Tr>\n <Th width=\"1%\">\n <VisuallyHidden>\n {formatMessage({\n id: getTrad('Email.template.table.icon.label'),\n defaultMessage: 'icon',\n })}\n </VisuallyHidden>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('Email.template.table.name.label'),\n defaultMessage: 'name',\n })}\n </Typography>\n </Th>\n <Th width=\"1%\">\n <VisuallyHidden>\n {formatMessage({\n id: getTrad('Email.template.table.action.label'),\n defaultMessage: 'action',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n <Tr cursor=\"pointer\" onClick={() => onEditClick('reset_password')}>\n <Td>\n <Box width=\"3.2rem\" height=\"3.2rem\" padding=\"0.8rem\">\n <Refresh\n aria-label={formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n />\n </Box>\n </Td>\n <Td>\n <Typography>\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <IconButton\n onClick={() => onEditClick('reset_password')}\n label={formatMessage({\n id: getTrad('Email.template.form.edit.label'),\n defaultMessage: 'Edit a template',\n })}\n variant=\"ghost\"\n disabled={!canUpdate}\n >\n <Pencil />\n </IconButton>\n </Td>\n </Tr>\n <Tr cursor=\"pointer\" onClick={() => onEditClick('email_confirmation')}>\n <Td>\n <Box width=\"3.2rem\" height=\"3.2rem\" padding=\"0.8rem\">\n <Check\n aria-label={formatMessage({\n id: getTrad('Email.template.email_confirmation'),\n defaultMessage: 'Email address confirmation',\n })}\n />\n </Box>\n </Td>\n <Td>\n <Typography>\n {formatMessage({\n id: getTrad('Email.template.email_confirmation'),\n defaultMessage: 'Email address confirmation',\n })}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <IconButton\n onClick={() => onEditClick('email_confirmation')}\n label={formatMessage({\n id: getTrad('Email.template.form.edit.label'),\n defaultMessage: 'Edit a template',\n })}\n variant=\"ghost\"\n disabled={!canUpdate}\n >\n <Pencil />\n </IconButton>\n </Td>\n </Tr>\n </Tbody>\n </Table>\n );\n};\n\nEmailTable.propTypes = {\n canUpdate: PropTypes.bool.isRequired,\n onEditClick: PropTypes.func.isRequired,\n};\n\nexport default EmailTable;\n"],"names":["EmailTable","canUpdate","onEditClick","formatMessage","useIntl","_jsxs","Table","colCount","rowCount","_jsx","Thead","Tr","Th","width","VisuallyHidden","id","getTrad","defaultMessage","Typography","variant","textColor","Tbody","cursor","onClick","Td","Box","height","padding","Refresh","aria-label","e","stopPropagation","IconButton","label","disabled","Pencil","Check","propTypes","PropTypes","bool","isRequired","func"],"mappings":";;;;;;;;;;;AAoBA,MAAMA,aAAa,CAAC,EAAEC,SAAS,EAAEC,WAAW,EAAE,GAAA;IAC5C,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACEC,eAACC,CAAAA,kBAAAA,EAAAA;QAAMC,QAAU,EAAA,CAAA;QAAGC,QAAU,EAAA,CAAA;;0BAC5BC,cAACC,CAAAA,kBAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAL,eAACM,CAAAA,eAAAA,EAAAA;;sCACCF,cAACG,CAAAA,eAAAA,EAAAA;4BAAGC,KAAM,EAAA,IAAA;AACR,4BAAA,QAAA,gBAAAJ,cAACK,CAAAA,2BAAAA,EAAAA;0CACEX,aAAc,CAAA;AACbY,oCAAAA,EAAAA,EAAIC,OAAQ,CAAA,iCAAA,CAAA;oCACZC,cAAgB,EAAA;AAClB,iCALine truncated
@@ -0,0 +1,143 @@
import { jsxs, jsx } from 'react/jsx-runtime';
import 'react';
import { Table, Thead, Tr, Th, VisuallyHidden, Typography, Tbody, Td, Box, IconButton } from '@strapi/design-system';
import { ArrowClockwise, Pencil, Check } from '@strapi/icons';
import PropTypes from 'prop-types';
import { useIntl } from 'react-intl';
import 'lodash/isEmpty';
import getTrad from '../../../utils/getTrad.mjs';
const EmailTable = ({ canUpdate, onEditClick })=>{
const { formatMessage } = useIntl();
return /*#__PURE__*/ jsxs(Table, {
colCount: 3,
rowCount: 3,
children: [
/*#__PURE__*/ jsx(Thead, {
children: /*#__PURE__*/ jsxs(Tr, {
children: [
/*#__PURE__*/ jsx(Th, {
width: "1%",
children: /*#__PURE__*/ jsx(VisuallyHidden, {
children: formatMessage({
id: getTrad('Email.template.table.icon.label'),
defaultMessage: 'icon'
})
})
}),
/*#__PURE__*/ jsx(Th, {
children: /*#__PURE__*/ jsx(Typography, {
variant: "sigma",
textColor: "neutral600",
children: formatMessage({
id: getTrad('Email.template.table.name.label'),
defaultMessage: 'name'
})
})
}),
/*#__PURE__*/ jsx(Th, {
width: "1%",
children: /*#__PURE__*/ jsx(VisuallyHidden, {
children: formatMessage({
id: getTrad('Email.template.table.action.label'),
defaultMessage: 'action'
})
})
})
]
})
}),
/*#__PURE__*/ jsxs(Tbody, {
children: [
/*#__PURE__*/ jsxs(Tr, {
cursor: "pointer",
onClick: ()=>onEditClick('reset_password'),
children: [
/*#__PURE__*/ jsx(Td, {
children: /*#__PURE__*/ jsx(Box, {
width: "3.2rem",
height: "3.2rem",
padding: "0.8rem",
children: /*#__PURE__*/ jsx(ArrowClockwise, {
"aria-label": formatMessage({
id: 'global.reset-password',
defaultMessage: 'Reset password'
})
})
})
}),
/*#__PURE__*/ jsx(Td, {
children: /*#__PURE__*/ jsx(Typography, {
children: formatMessage({
id: 'global.reset-password',
defaultMessage: 'Reset password'
})
})
}),
/*#__PURE__*/ jsx(Td, {
onClick: (e)=>e.stopPropagation(),
children: /*#__PURE__*/ jsx(IconButton, {
onClick: ()=>onEditClick('reset_password'),
label: formatMessage({
id: getTrad('Email.template.form.edit.label'),
defaultMessage: 'Edit a template'
}),
variant: "ghost",
disabled: !canUpdate,
children: /*#__PURE__*/ jsx(Pencil, {})
})
})
]
}),
/*#__PURE__*/ jsxs(Tr, {
cursor: "pointer",
onClick: ()=>onEditClick('email_confirmation'),
children: [
/*#__PURE__*/ jsx(Td, {
children: /*#__PURE__*/ jsx(Box, {
width: "3.2rem",
height: "3.2rem",
padding: "0.8rem",
children: /*#__PURE__*/ jsx(Check, {
"aria-label": formatMessage({
id: getTrad('Email.template.email_confirmation'),
defaultMessage: 'Email address confirmation'
})
})
})
}),
/*#__PURE__*/ jsx(Td, {
children: /*#__PURE__*/ jsx(Typography, {
children: formatMessage({
id: getTrad('Email.template.email_confirmation'),
defaultMessage: 'Email address confirmation'
})
})
}),
/*#__PURE__*/ jsx(Td, {
onClick: (e)=>e.stopPropagation(),
children: /*#__PURE__*/ jsx(IconButton, {
onClick: ()=>onEditClick('email_confirmation'),
label: formatMessage({
id: getTrad('Email.template.form.edit.label'),
defaultMessage: 'Edit a template'
}),
variant: "ghost",
disabled: !canUpdate,
children: /*#__PURE__*/ jsx(Pencil, {})
})
})
]
})
]
})
]
});
};
EmailTable.propTypes = {
canUpdate: PropTypes.bool.isRequired,
onEditClick: PropTypes.func.isRequired
};
export { EmailTable as default };
//# sourceMappingURL=EmailTable.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"EmailTable.mjs","sources":["../../../../../admin/src/pages/EmailTemplates/components/EmailTable.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n IconButton,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tr,\n Typography,\n VisuallyHidden,\n Box,\n} from '@strapi/design-system';\nimport { Check, Pencil, ArrowClockwise as Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nconst EmailTable = ({ canUpdate, onEditClick }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Table colCount={3} rowCount={3}>\n <Thead>\n <Tr>\n <Th width=\"1%\">\n <VisuallyHidden>\n {formatMessage({\n id: getTrad('Email.template.table.icon.label'),\n defaultMessage: 'icon',\n })}\n </VisuallyHidden>\n </Th>\n <Th>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('Email.template.table.name.label'),\n defaultMessage: 'name',\n })}\n </Typography>\n </Th>\n <Th width=\"1%\">\n <VisuallyHidden>\n {formatMessage({\n id: getTrad('Email.template.table.action.label'),\n defaultMessage: 'action',\n })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n <Tr cursor=\"pointer\" onClick={() => onEditClick('reset_password')}>\n <Td>\n <Box width=\"3.2rem\" height=\"3.2rem\" padding=\"0.8rem\">\n <Refresh\n aria-label={formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n />\n </Box>\n </Td>\n <Td>\n <Typography>\n {formatMessage({\n id: 'global.reset-password',\n defaultMessage: 'Reset password',\n })}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <IconButton\n onClick={() => onEditClick('reset_password')}\n label={formatMessage({\n id: getTrad('Email.template.form.edit.label'),\n defaultMessage: 'Edit a template',\n })}\n variant=\"ghost\"\n disabled={!canUpdate}\n >\n <Pencil />\n </IconButton>\n </Td>\n </Tr>\n <Tr cursor=\"pointer\" onClick={() => onEditClick('email_confirmation')}>\n <Td>\n <Box width=\"3.2rem\" height=\"3.2rem\" padding=\"0.8rem\">\n <Check\n aria-label={formatMessage({\n id: getTrad('Email.template.email_confirmation'),\n defaultMessage: 'Email address confirmation',\n })}\n />\n </Box>\n </Td>\n <Td>\n <Typography>\n {formatMessage({\n id: getTrad('Email.template.email_confirmation'),\n defaultMessage: 'Email address confirmation',\n })}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <IconButton\n onClick={() => onEditClick('email_confirmation')}\n label={formatMessage({\n id: getTrad('Email.template.form.edit.label'),\n defaultMessage: 'Edit a template',\n })}\n variant=\"ghost\"\n disabled={!canUpdate}\n >\n <Pencil />\n </IconButton>\n </Td>\n </Tr>\n </Tbody>\n </Table>\n );\n};\n\nEmailTable.propTypes = {\n canUpdate: PropTypes.bool.isRequired,\n onEditClick: PropTypes.func.isRequired,\n};\n\nexport default EmailTable;\n"],"names":["EmailTable","canUpdate","onEditClick","formatMessage","useIntl","_jsxs","Table","colCount","rowCount","_jsx","Thead","Tr","Th","width","VisuallyHidden","id","getTrad","defaultMessage","Typography","variant","textColor","Tbody","cursor","onClick","Td","Box","height","padding","Refresh","aria-label","e","stopPropagation","IconButton","label","disabled","Pencil","Check","propTypes","PropTypes","bool","isRequired","func"],"mappings":";;;;;;;;;AAoBA,MAAMA,aAAa,CAAC,EAAEC,SAAS,EAAEC,WAAW,EAAE,GAAA;IAC5C,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,qBACEC,IAACC,CAAAA,KAAAA,EAAAA;QAAMC,QAAU,EAAA,CAAA;QAAGC,QAAU,EAAA,CAAA;;0BAC5BC,GAACC,CAAAA,KAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAL,IAACM,CAAAA,EAAAA,EAAAA;;sCACCF,GAACG,CAAAA,EAAAA,EAAAA;4BAAGC,KAAM,EAAA,IAAA;AACR,4BAAA,QAAA,gBAAAJ,GAACK,CAAAA,cAAAA,EAAAA;0CACEX,aAAc,CAAA;AACbY,oCAAAA,EAAAA,EAAIC,OAAQ,CAAA,iCAAA,CAAA;oCACZC,cAAgB,EAAA;AAClB,iCAAA;;;Line truncated
@@ -0,0 +1,157 @@
'use strict';
var jsxRuntime = require('react/jsx-runtime');
var React = require('react');
var strapiAdmin = require('@strapi/admin/strapi-admin');
var designSystem = require('@strapi/design-system');
var admin = require('@strapi/strapi/admin');
var reactIntl = require('react-intl');
var reactQuery = require('react-query');
var constants = require('../../constants.js');
require('lodash/isEmpty');
var getTrad = require('../../utils/getTrad.js');
var EmailForm = require('./components/EmailForm.js');
var EmailTable = require('./components/EmailTable.js');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
const ProtectedEmailTemplatesPage = ()=>/*#__PURE__*/ jsxRuntime.jsx(admin.Page.Protect, {
permissions: constants.PERMISSIONS.readEmailTemplates,
children: /*#__PURE__*/ jsxRuntime.jsx(EmailTemplatesPage, {})
});
const EmailTemplatesPage = ()=>{
const { formatMessage } = reactIntl.useIntl();
const { trackUsage } = strapiAdmin.useTracking();
const { notifyStatus } = designSystem.useNotifyAT();
const { toggleNotification } = admin.useNotification();
const queryClient = reactQuery.useQueryClient();
const { get, put } = admin.useFetchClient();
const { formatAPIError } = admin.useAPIErrorHandler();
const [isModalOpen, setIsModalOpen] = React__namespace.useState(false);
const [templateToEdit, setTemplateToEdit] = React__namespace.useState(null);
const { isLoading: isLoadingForPermissions, allowedActions: { canUpdate } } = admin.useRBAC({
update: constants.PERMISSIONS.updateEmailTemplates
});
const { isLoading: isLoadingData, data } = reactQuery.useQuery([
'users-permissions',
'email-templates'
], async ()=>{
const { data } = await get('/users-permissions/email-templates');
return data;
}, {
onSuccess () {
notifyStatus(formatMessage({
id: getTrad('Email.template.data.loaded'),
defaultMessage: 'Email templates has been loaded'
}));
},
onError (error) {
toggleNotification({
type: 'danger',
message: formatAPIError(error)
});
}
});
const isLoading = isLoadingForPermissions || isLoadingData;
const handleToggle = ()=>{
setIsModalOpen((prev)=>!prev);
};
const handleEditClick = (template)=>{
setTemplateToEdit(template);
handleToggle();
};
const submitMutation = reactQuery.useMutation((body)=>put('/users-permissions/email-templates', {
'email-templates': body
}), {
async onSuccess () {
await queryClient.invalidateQueries([
'users-permissions',
'email-templates'
]);
toggleNotification({
type: 'success',
message: formatMessage({
id: 'notification.success.saved',
defaultMessage: 'Saved'
})
});
trackUsage('didEditEmailTemplates');
handleToggle();
},
onError (error) {
toggleNotification({
type: 'danger',
message: formatAPIError(error)
});
},
refetchActive: true
});
const handleSubmit = (body)=>{
trackUsage('willEditEmailTemplates');
const editedTemplates = {
...data,
[templateToEdit]: body
};
submitMutation.mutate(editedTemplates);
};
if (isLoading) {
return /*#__PURE__*/ jsxRuntime.jsx(admin.Page.Loading, {});
}
return /*#__PURE__*/ jsxRuntime.jsxs(admin.Page.Main, {
"aria-busy": submitMutation.isLoading,
children: [
/*#__PURE__*/ jsxRuntime.jsx(admin.Page.Title, {
children: formatMessage({
id: 'Settings.PageTitle',
defaultMessage: 'Settings - {name}'
}, {
name: formatMessage({
id: getTrad('HeaderNav.link.emailTemplates'),
defaultMessage: 'Email templates'
})
})
}),
/*#__PURE__*/ jsxRuntime.jsx(admin.Layouts.Header, {
title: formatMessage({
id: getTrad('HeaderNav.link.emailTemplates'),
defaultMessage: 'Email templates'
})
}),
/*#__PURE__*/ jsxRuntime.jsxs(admin.Layouts.Content, {
children: [
/*#__PURE__*/ jsxRuntime.jsx(EmailTable, {
onEditClick: handleEditClick,
canUpdate: canUpdate
}),
/*#__PURE__*/ jsxRuntime.jsx(EmailForm, {
template: data[templateToEdit],
onToggle: handleToggle,
open: isModalOpen,
onSubmit: handleSubmit
})
]
})
]
});
};
exports.EmailTemplatesPage = EmailTemplatesPage;
exports.ProtectedEmailTemplatesPage = ProtectedEmailTemplatesPage;
//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sources":["../../../../admin/src/pages/EmailTemplates/index.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport {\n Page,\n useAPIErrorHandler,\n useNotification,\n useFetchClient,\n useRBAC,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\n\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport EmailForm from './components/EmailForm';\nimport EmailTable from './components/EmailTable';\n\nconst ProtectedEmailTemplatesPage = () => (\n <Page.Protect permissions={PERMISSIONS.readEmailTemplates}>\n <EmailTemplatesPage />\n </Page.Protect>\n);\nconst EmailTemplatesPage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { notifyStatus } = useNotifyAT();\n const { toggleNotification } = useNotification();\n const queryClient = useQueryClient();\n const { get, put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const [templateToEdit, setTemplateToEdit] = React.useState(null);\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canUpdate },\n } = useRBAC({ update: PERMISSIONS.updateEmailTemplates });\n\n const { isLoading: isLoadingData, data } = useQuery(\n ['users-permissions', 'email-templates'],\n async () => {\n const { data } = await get('/users-permissions/email-templates');\n\n return data;\n },\n {\n onSuccess() {\n notifyStatus(\n formatMessage({\n id: getTrad('Email.template.data.loaded'),\n defaultMessage: 'Email templates has been loaded',\n })\n );\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n }\n );\n\n const isLoading = isLoadingForPermissions || isLoadingData;\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const handleEditClick = (template) => {\n setTemplateToEdit(template);\n handleToggle();\n };\n\n const submitMutation = useMutation(\n (body) => put('/users-permissions/email-templates', { 'email-templates': body }),\n {\n async onSuccess() {\n await queryClient.invalidateQueries(['users-permissions', 'email-templates']);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n\n trackUsage('didEditEmailTemplates');\n\n handleToggle();\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n refetchActive: true,\n }\n );\n\n const handleSubmit = (body) => {\n trackUsage('willEditEmailTemplates');\n\n const editedTemplates = { ...data, [templateToEdit]: body };\n submitMutation.mutate(editedTemplates);\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main aria-busy={submitMutation.isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n })}\n />\n <Layouts.Content>\n <EmailTable onEditClick={handleEditClick} canUpdate={canUpdate} />\n <EmailForm\n template={data[templateToEdit]}\n onToggle={handleToggle}\n open={isModalOpen}\n onSubmit={handleSubmit}\n />\n </Layouts.Content>\n </Page.Main>\n );\n};\n\nexport { ProtectedEmailTemplatesPage, EmailTemplatesPage };\n"],"names":["ProtectedEmailTemplatesPage","_jsx","Page","Protect","permissions","PERMISSIONS","readEmailTemplates","EmailTemplatesPage","formatMessage","useIntl","trackUsage","useTracking","notifyStatus","useNotifyAT","toggleNotification","useNotification","queryClient","useQueryClient","get","put","useFetchClient","formatAPIError","useAPIErrorHandler","isModalOpen","setIsModalOpen","React","useState","templateToEdit","setTemplateToEdit","isLoading","isLoadingForPermissions","allowedActions","canUpdate","useRBAC","update","updateEmailTemplates","isLoadingData","data","useQuery","onSuccess","id","getTrad","defaultMessage","onError","error","type","message","handleToggle","prev","handlLine truncated
@@ -0,0 +1,135 @@
import { jsx, jsxs } from 'react/jsx-runtime';
import * as React from 'react';
import { useTracking } from '@strapi/admin/strapi-admin';
import { useNotifyAT } from '@strapi/design-system';
import { Page, useNotification, useFetchClient, useAPIErrorHandler, useRBAC, Layouts } from '@strapi/strapi/admin';
import { useIntl } from 'react-intl';
import { useQueryClient, useQuery, useMutation } from 'react-query';
import { PERMISSIONS } from '../../constants.mjs';
import 'lodash/isEmpty';
import getTrad from '../../utils/getTrad.mjs';
import EmailForm from './components/EmailForm.mjs';
import EmailTable from './components/EmailTable.mjs';
const ProtectedEmailTemplatesPage = ()=>/*#__PURE__*/ jsx(Page.Protect, {
permissions: PERMISSIONS.readEmailTemplates,
children: /*#__PURE__*/ jsx(EmailTemplatesPage, {})
});
const EmailTemplatesPage = ()=>{
const { formatMessage } = useIntl();
const { trackUsage } = useTracking();
const { notifyStatus } = useNotifyAT();
const { toggleNotification } = useNotification();
const queryClient = useQueryClient();
const { get, put } = useFetchClient();
const { formatAPIError } = useAPIErrorHandler();
const [isModalOpen, setIsModalOpen] = React.useState(false);
const [templateToEdit, setTemplateToEdit] = React.useState(null);
const { isLoading: isLoadingForPermissions, allowedActions: { canUpdate } } = useRBAC({
update: PERMISSIONS.updateEmailTemplates
});
const { isLoading: isLoadingData, data } = useQuery([
'users-permissions',
'email-templates'
], async ()=>{
const { data } = await get('/users-permissions/email-templates');
return data;
}, {
onSuccess () {
notifyStatus(formatMessage({
id: getTrad('Email.template.data.loaded'),
defaultMessage: 'Email templates has been loaded'
}));
},
onError (error) {
toggleNotification({
type: 'danger',
message: formatAPIError(error)
});
}
});
const isLoading = isLoadingForPermissions || isLoadingData;
const handleToggle = ()=>{
setIsModalOpen((prev)=>!prev);
};
const handleEditClick = (template)=>{
setTemplateToEdit(template);
handleToggle();
};
const submitMutation = useMutation((body)=>put('/users-permissions/email-templates', {
'email-templates': body
}), {
async onSuccess () {
await queryClient.invalidateQueries([
'users-permissions',
'email-templates'
]);
toggleNotification({
type: 'success',
message: formatMessage({
id: 'notification.success.saved',
defaultMessage: 'Saved'
})
});
trackUsage('didEditEmailTemplates');
handleToggle();
},
onError (error) {
toggleNotification({
type: 'danger',
message: formatAPIError(error)
});
},
refetchActive: true
});
const handleSubmit = (body)=>{
trackUsage('willEditEmailTemplates');
const editedTemplates = {
...data,
[templateToEdit]: body
};
submitMutation.mutate(editedTemplates);
};
if (isLoading) {
return /*#__PURE__*/ jsx(Page.Loading, {});
}
return /*#__PURE__*/ jsxs(Page.Main, {
"aria-busy": submitMutation.isLoading,
children: [
/*#__PURE__*/ jsx(Page.Title, {
children: formatMessage({
id: 'Settings.PageTitle',
defaultMessage: 'Settings - {name}'
}, {
name: formatMessage({
id: getTrad('HeaderNav.link.emailTemplates'),
defaultMessage: 'Email templates'
})
})
}),
/*#__PURE__*/ jsx(Layouts.Header, {
title: formatMessage({
id: getTrad('HeaderNav.link.emailTemplates'),
defaultMessage: 'Email templates'
})
}),
/*#__PURE__*/ jsxs(Layouts.Content, {
children: [
/*#__PURE__*/ jsx(EmailTable, {
onEditClick: handleEditClick,
canUpdate: canUpdate
}),
/*#__PURE__*/ jsx(EmailForm, {
template: data[templateToEdit],
onToggle: handleToggle,
open: isModalOpen,
onSubmit: handleSubmit
})
]
})
]
});
};
export { EmailTemplatesPage, ProtectedEmailTemplatesPage };
//# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"index.mjs","sources":["../../../../admin/src/pages/EmailTemplates/index.jsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTracking } from '@strapi/admin/strapi-admin';\nimport { useNotifyAT } from '@strapi/design-system';\nimport {\n Page,\n useAPIErrorHandler,\n useNotification,\n useFetchClient,\n useRBAC,\n Layouts,\n} from '@strapi/strapi/admin';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\n\nimport { PERMISSIONS } from '../../constants';\nimport { getTrad } from '../../utils';\n\nimport EmailForm from './components/EmailForm';\nimport EmailTable from './components/EmailTable';\n\nconst ProtectedEmailTemplatesPage = () => (\n <Page.Protect permissions={PERMISSIONS.readEmailTemplates}>\n <EmailTemplatesPage />\n </Page.Protect>\n);\nconst EmailTemplatesPage = () => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { notifyStatus } = useNotifyAT();\n const { toggleNotification } = useNotification();\n const queryClient = useQueryClient();\n const { get, put } = useFetchClient();\n const { formatAPIError } = useAPIErrorHandler();\n\n const [isModalOpen, setIsModalOpen] = React.useState(false);\n const [templateToEdit, setTemplateToEdit] = React.useState(null);\n\n const {\n isLoading: isLoadingForPermissions,\n allowedActions: { canUpdate },\n } = useRBAC({ update: PERMISSIONS.updateEmailTemplates });\n\n const { isLoading: isLoadingData, data } = useQuery(\n ['users-permissions', 'email-templates'],\n async () => {\n const { data } = await get('/users-permissions/email-templates');\n\n return data;\n },\n {\n onSuccess() {\n notifyStatus(\n formatMessage({\n id: getTrad('Email.template.data.loaded'),\n defaultMessage: 'Email templates has been loaded',\n })\n );\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n }\n );\n\n const isLoading = isLoadingForPermissions || isLoadingData;\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const handleEditClick = (template) => {\n setTemplateToEdit(template);\n handleToggle();\n };\n\n const submitMutation = useMutation(\n (body) => put('/users-permissions/email-templates', { 'email-templates': body }),\n {\n async onSuccess() {\n await queryClient.invalidateQueries(['users-permissions', 'email-templates']);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),\n });\n\n trackUsage('didEditEmailTemplates');\n\n handleToggle();\n },\n onError(error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n },\n refetchActive: true,\n }\n );\n\n const handleSubmit = (body) => {\n trackUsage('willEditEmailTemplates');\n\n const editedTemplates = { ...data, [templateToEdit]: body };\n submitMutation.mutate(editedTemplates);\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main aria-busy={submitMutation.isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: getTrad('HeaderNav.link.emailTemplates'),\n defaultMessage: 'Email templates',\n })}\n />\n <Layouts.Content>\n <EmailTable onEditClick={handleEditClick} canUpdate={canUpdate} />\n <EmailForm\n template={data[templateToEdit]}\n onToggle={handleToggle}\n open={isModalOpen}\n onSubmit={handleSubmit}\n />\n </Layouts.Content>\n </Page.Main>\n );\n};\n\nexport { ProtectedEmailTemplatesPage, EmailTemplatesPage };\n"],"names":["ProtectedEmailTemplatesPage","_jsx","Page","Protect","permissions","PERMISSIONS","readEmailTemplates","EmailTemplatesPage","formatMessage","useIntl","trackUsage","useTracking","notifyStatus","useNotifyAT","toggleNotification","useNotification","queryClient","useQueryClient","get","put","useFetchClient","formatAPIError","useAPIErrorHandler","isModalOpen","setIsModalOpen","React","useState","templateToEdit","setTemplateToEdit","isLoading","isLoadingForPermissions","allowedActions","canUpdate","useRBAC","update","updateEmailTemplates","isLoadingData","data","useQuery","onSuccess","id","getTrad","defaultMessage","onError","error","type","message","handleToggle","prev","handLine truncated
@@ -0,0 +1,50 @@
'use strict';
var admin = require('@strapi/strapi/admin');
var yup = require('yup');
function _interopNamespaceDefault(e) {
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var yup__namespace = /*#__PURE__*/_interopNamespaceDefault(yup);
const schema = yup__namespace.object().shape({
options: yup__namespace.object().shape({
from: yup__namespace.object().shape({
name: yup__namespace.string().required({
id: admin.translatedErrors.required.id,
defaultMessage: 'This field is required'
}),
email: yup__namespace.string().email(admin.translatedErrors.email).required({
id: admin.translatedErrors.required.id,
defaultMessage: 'This field is required'
})
}).required(),
response_email: yup__namespace.string().email(admin.translatedErrors.email),
object: yup__namespace.string().required({
id: admin.translatedErrors.required.id,
defaultMessage: 'This field is required'
}),
message: yup__namespace.string().required({
id: admin.translatedErrors.required.id,
defaultMessage: 'This field is required'
})
}).required(admin.translatedErrors.required.id)
});
module.exports = schema;
//# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
{"version":3,"file":"schema.js","sources":["../../../../../admin/src/pages/EmailTemplates/utils/schema.js"],"sourcesContent":["import { translatedErrors } from '@strapi/strapi/admin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n options: yup\n .object()\n .shape({\n from: yup\n .object()\n .shape({\n name: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n email: yup.string().email(translatedErrors.email).required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n })\n .required(),\n response_email: yup.string().email(translatedErrors.email),\n object: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n message: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n })\n .required(translatedErrors.required.id),\n});\n\nexport default schema;\n"],"names":["schema","yup","object","shape","options","from","name","string","required","id","translatedErrors","defaultMessage","email","response_email","message"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAGA,MAAMA,MAASC,GAAAA,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAChCC,IAAAA,OAAAA,EAASH,cACNC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;AACLE,QAAAA,IAAAA,EAAMJ,cACHC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;AACLG,YAAAA,IAAAA,EAAML,cAAIM,CAAAA,MAAM,EAAGC,CAAAA,QAAQ,CAAC;gBAC1BC,EAAIC,EAAAA,sBAAAA,CAAiBF,QAAQ,CAACC,EAAE;gBAChCE,cAAgB,EAAA;AAClB,aAAA,CAAA;YACAC,KAAOX,EAAAA,cAAAA,CAAIM,MAAM,EAAGK,CAAAA,KAAK,CAACF,sBAAiBE,CAAAA,KAAK,CAAEJ,CAAAA,QAAQ,CAAC;gBACzDC,EAAIC,EAAAA,sBAAAA,CAAiBF,QAAQ,CAACC,EAAE;gBAChCE,cAAgB,EAAA;AAClB,aAAA;AACF,SAAA,CAAA,CACCH,QAAQ,EAAA;AACXK,QAAAA,cAAAA,EAAgBZ,eAAIM,MAAM,EAAA,CAAGK,KAAK,CAACF,uBAAiBE,KAAK,CAAA;AACzDV,QAAAA,MAAAA,EAAQD,cAAIM,CAAAA,MAAM,EAAGC,CAAAA,QAAQ,CAAC;YAC5BC,EAAIC,EAAAA,sBAAAA,CAAiBF,QAAQ,CAACC,EAAE;YAChCE,cAAgB,EAAA;AAClB,SAAA,CAAA;AACAG,QAAAA,OAAAA,EAASb,cAAIM,CAAAA,MAAM,EAAGC,CAAAA,QAAQ,CAAC;YAC7BC,EAAIC,EAAAA,sBAAAA,CAAiBF,QAAQ,CAACC,EAAE;YAChCE,cAAgB,EAAA;AAClB,SAAA;AACF,KAAA,CAAA,CACCH,QAAQ,CAACE,sBAAiBF,CAAAA,QAAQ,CAACC,EAAE;AAC1C,CAAA;;;;"}
@@ -0,0 +1,29 @@
import { translatedErrors } from '@strapi/strapi/admin';
import * as yup from 'yup';
const schema = yup.object().shape({
options: yup.object().shape({
from: yup.object().shape({
name: yup.string().required({
id: translatedErrors.required.id,
defaultMessage: 'This field is required'
}),
email: yup.string().email(translatedErrors.email).required({
id: translatedErrors.required.id,
defaultMessage: 'This field is required'
})
}).required(),
response_email: yup.string().email(translatedErrors.email),
object: yup.string().required({
id: translatedErrors.required.id,
defaultMessage: 'This field is required'
}),
message: yup.string().required({
id: translatedErrors.required.id,
defaultMessage: 'This field is required'
})
}).required(translatedErrors.required.id)
});
export { schema as default };
//# sourceMappingURL=schema.mjs.map
@@ -0,0 +1 @@
{"version":3,"file":"schema.mjs","sources":["../../../../../admin/src/pages/EmailTemplates/utils/schema.js"],"sourcesContent":["import { translatedErrors } from '@strapi/strapi/admin';\nimport * as yup from 'yup';\n\nconst schema = yup.object().shape({\n options: yup\n .object()\n .shape({\n from: yup\n .object()\n .shape({\n name: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n email: yup.string().email(translatedErrors.email).required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n })\n .required(),\n response_email: yup.string().email(translatedErrors.email),\n object: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n message: yup.string().required({\n id: translatedErrors.required.id,\n defaultMessage: 'This field is required',\n }),\n })\n .required(translatedErrors.required.id),\n});\n\nexport default schema;\n"],"names":["schema","yup","object","shape","options","from","name","string","required","id","translatedErrors","defaultMessage","email","response_email","message"],"mappings":";;;AAGA,MAAMA,MAASC,GAAAA,GAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAChCC,IAAAA,OAAAA,EAASH,GACNC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;AACLE,QAAAA,IAAAA,EAAMJ,GACHC,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;AACLG,YAAAA,IAAAA,EAAML,GAAIM,CAAAA,MAAM,EAAGC,CAAAA,QAAQ,CAAC;gBAC1BC,EAAIC,EAAAA,gBAAAA,CAAiBF,QAAQ,CAACC,EAAE;gBAChCE,cAAgB,EAAA;AAClB,aAAA,CAAA;YACAC,KAAOX,EAAAA,GAAAA,CAAIM,MAAM,EAAGK,CAAAA,KAAK,CAACF,gBAAiBE,CAAAA,KAAK,CAAEJ,CAAAA,QAAQ,CAAC;gBACzDC,EAAIC,EAAAA,gBAAAA,CAAiBF,QAAQ,CAACC,EAAE;gBAChCE,cAAgB,EAAA;AAClB,aAAA;AACF,SAAA,CAAA,CACCH,QAAQ,EAAA;AACXK,QAAAA,cAAAA,EAAgBZ,IAAIM,MAAM,EAAA,CAAGK,KAAK,CAACF,iBAAiBE,KAAK,CAAA;AACzDV,QAAAA,MAAAA,EAAQD,GAAIM,CAAAA,MAAM,EAAGC,CAAAA,QAAQ,CAAC;YAC5BC,EAAIC,EAAAA,gBAAAA,CAAiBF,QAAQ,CAACC,EAAE;YAChCE,cAAgB,EAAA;AAClB,SAAA,CAAA;AACAG,QAAAA,OAAAA,EAASb,GAAIM,CAAAA,MAAM,EAAGC,CAAAA,QAAQ,CAAC;YAC7BC,EAAIC,EAAAA,gBAAAA,CAAiBF,QAAQ,CAACC,EAAE;YAChCE,cAAgB,EAAA;AAClB,SAAA;AACF,KAAA,CAAA,CACCH,QAAQ,CAACE,gBAAiBF,CAAAA,QAAQ,CAACC,EAAE;AAC1C,CAAA;;;;"}
Loaded 100 of 65041 files, more files were not shown because too many files have changed in this diff. Show more