@strapi/admin 5.16.0 → 5.17.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/components/MainNav/NavUser.js +4 -15
- package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.mjs +4 -15
- package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
- package/dist/admin/admin/src/components/SearchInput.js +5 -0
- package/dist/admin/admin/src/components/SearchInput.js.map +1 -1
- package/dist/admin/admin/src/components/SearchInput.mjs +5 -0
- package/dist/admin/admin/src/components/SearchInput.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +3 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +3 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.js +3 -0
- package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.mjs +3 -0
- package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.js +75 -0
- package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -0
- package/dist/admin/admin/src/utils/rulesEngine.mjs +72 -0
- package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -0
- package/dist/admin/index.js +3 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/index.d.ts +1 -0
- package/dist/admin/src/utils/rulesEngine.d.ts +23 -0
- package/package.json +9 -7
|
@@ -34,21 +34,9 @@ const BadgeWrapper = styled.styled(designSystem.Flex)`
|
|
|
34
34
|
width: 100%;
|
|
35
35
|
`;
|
|
36
36
|
const StyledTypography = styled.styled(designSystem.Typography)`
|
|
37
|
+
word-break: break-word;
|
|
37
38
|
margin-bottom: ${({ theme })=>theme.spaces[3]};
|
|
38
39
|
`;
|
|
39
|
-
const MenuItem = styled.styled(designSystem.Menu.Item)`
|
|
40
|
-
& > span {
|
|
41
|
-
width: 100%;
|
|
42
|
-
display: flex;
|
|
43
|
-
align-items: center;
|
|
44
|
-
gap: ${({ theme })=>theme.spaces[3]};
|
|
45
|
-
}
|
|
46
|
-
`;
|
|
47
|
-
const MenuItemDanger = styled.styled(MenuItem)`
|
|
48
|
-
&:hover {
|
|
49
|
-
background: ${({ theme })=>theme.colors.danger100};
|
|
50
|
-
}
|
|
51
|
-
`;
|
|
52
40
|
const NavUser = ({ children, initials, ...props })=>{
|
|
53
41
|
const { formatMessage } = reactIntl.useIntl();
|
|
54
42
|
const navigate = reactRouterDom.useNavigate();
|
|
@@ -113,14 +101,15 @@ const NavUser = ({ children, initials, ...props })=>{
|
|
|
113
101
|
]
|
|
114
102
|
}),
|
|
115
103
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Separator, {}),
|
|
116
|
-
/*#__PURE__*/ jsxRuntime.jsx(
|
|
104
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
|
|
117
105
|
onSelect: handleProfile,
|
|
118
106
|
children: formatMessage({
|
|
119
107
|
id: 'global.profile',
|
|
120
108
|
defaultMessage: 'Profile settings'
|
|
121
109
|
})
|
|
122
110
|
}),
|
|
123
|
-
/*#__PURE__*/ jsxRuntime.jsx(
|
|
111
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
|
|
112
|
+
variant: "danger",
|
|
124
113
|
onSelect: handleLogout,
|
|
125
114
|
color: "danger600",
|
|
126
115
|
children: formatMessage({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavUser.js","sources":["../../../../../../admin/src/components/MainNav/NavUser.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Menu, VisuallyHidden, Avatar, Typography, Badge } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAuth } from '../../features/Auth';\n\nconst MenuTrigger = styled(Menu.Trigger)`\n height: ${({ theme }) => theme.spaces[7]};\n width: ${({ theme }) => theme.spaces[7]};\n border: none;\n border-radius: 50%;\n padding: 0;\n overflow: hidden;\n`;\n\nconst MenuContent = styled(Menu.Content)`\n max-height: fit-content;\n width: 200px;\n`;\n\nconst UserInfo = styled(Flex)`\n && {\n padding: ${({ theme }) => theme.spaces[3]};\n }\n align-items: flex-start;\n`;\n\nconst BadgeWrapper = styled(Flex)`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ theme }) => theme.spaces[1]};\n\n width: 100%;\n`;\nconst StyledTypography = styled(Typography)`\n
|
|
1
|
+
{"version":3,"file":"NavUser.js","sources":["../../../../../../admin/src/components/MainNav/NavUser.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Menu, VisuallyHidden, Avatar, Typography, Badge } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAuth } from '../../features/Auth';\n\nconst MenuTrigger = styled(Menu.Trigger)`\n height: ${({ theme }) => theme.spaces[7]};\n width: ${({ theme }) => theme.spaces[7]};\n border: none;\n border-radius: 50%;\n padding: 0;\n overflow: hidden;\n`;\n\nconst MenuContent = styled(Menu.Content)`\n max-height: fit-content;\n width: 200px;\n`;\n\nconst UserInfo = styled(Flex)`\n && {\n padding: ${({ theme }) => theme.spaces[3]};\n }\n align-items: flex-start;\n`;\n\nconst BadgeWrapper = styled(Flex)`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ theme }) => theme.spaces[1]};\n\n width: 100%;\n`;\nconst StyledTypography = styled(Typography)`\n word-break: break-word;\n margin-bottom: ${({ theme }) => theme.spaces[3]};\n`;\n\nexport interface NavUserProps {\n initials: string;\n children: React.ReactNode;\n}\n\nexport const NavUser = ({ children, initials, ...props }: NavUserProps) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const user = useAuth('User', (state) => state.user);\n const logout = useAuth('Logout', (state) => state.logout);\n\n const handleProfile = () => {\n navigate('/me');\n };\n\n const handleLogout = () => {\n logout();\n navigate('/auth/login');\n };\n\n return (\n <Flex\n justifyContent=\"center\"\n padding={3}\n borderStyle=\"solid\"\n borderWidth=\"1px 0 0 0\"\n borderColor=\"neutral150\"\n {...props}\n >\n <Menu.Root>\n <MenuTrigger endIcon={null} fullWidth justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n <VisuallyHidden tag=\"span\">{children}</VisuallyHidden>\n </MenuTrigger>\n\n <MenuContent popoverPlacement=\"top-start\" zIndex={3}>\n <UserInfo direction=\"column\" gap={0} alignItems=\"flex-start\">\n <Typography variant=\"omega\" fontWeight=\"bold\" textTransform=\"none\">\n {children}\n </Typography>\n <StyledTypography variant=\"pi\" textColor=\"neutral600\">\n {user?.email}\n </StyledTypography>\n <BadgeWrapper>\n {user?.roles?.map((role) => <Badge key={role.id}>{role.name}</Badge>)}\n </BadgeWrapper>\n </UserInfo>\n\n <Menu.Separator />\n\n <Menu.Item onSelect={handleProfile}>\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile settings',\n })}\n </Menu.Item>\n\n <Menu.Item variant=\"danger\" onSelect={handleLogout} color=\"danger600\">\n {formatMessage({\n id: 'app.components.LeftMenu.logout',\n defaultMessage: 'Log out',\n })}\n </Menu.Item>\n </MenuContent>\n </Menu.Root>\n </Flex>\n );\n};\n"],"names":["MenuTrigger","styled","Menu","Trigger","theme","spaces","MenuContent","Content","UserInfo","Flex","BadgeWrapper","StyledTypography","Typography","NavUser","children","initials","props","formatMessage","useIntl","navigate","useNavigate","user","useAuth","state","logout","handleProfile","handleLogout","_jsx","justifyContent","padding","borderStyle","borderWidth","borderColor","_jsxs","Root","endIcon","fullWidth","Avatar","Item","delayMs","fallback","VisuallyHidden","tag","popoverPlacement","zIndex","direction","gap","alignItems","variant","fontWeight","textTransform","textColor","email","roles","map","role","Badge","name","id","Separator","onSelect","defaultMessage","color"],"mappings":"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"}
|
|
@@ -32,21 +32,9 @@ const BadgeWrapper = styled(Flex)`
|
|
|
32
32
|
width: 100%;
|
|
33
33
|
`;
|
|
34
34
|
const StyledTypography = styled(Typography)`
|
|
35
|
+
word-break: break-word;
|
|
35
36
|
margin-bottom: ${({ theme })=>theme.spaces[3]};
|
|
36
37
|
`;
|
|
37
|
-
const MenuItem = styled(Menu.Item)`
|
|
38
|
-
& > span {
|
|
39
|
-
width: 100%;
|
|
40
|
-
display: flex;
|
|
41
|
-
align-items: center;
|
|
42
|
-
gap: ${({ theme })=>theme.spaces[3]};
|
|
43
|
-
}
|
|
44
|
-
`;
|
|
45
|
-
const MenuItemDanger = styled(MenuItem)`
|
|
46
|
-
&:hover {
|
|
47
|
-
background: ${({ theme })=>theme.colors.danger100};
|
|
48
|
-
}
|
|
49
|
-
`;
|
|
50
38
|
const NavUser = ({ children, initials, ...props })=>{
|
|
51
39
|
const { formatMessage } = useIntl();
|
|
52
40
|
const navigate = useNavigate();
|
|
@@ -111,14 +99,15 @@ const NavUser = ({ children, initials, ...props })=>{
|
|
|
111
99
|
]
|
|
112
100
|
}),
|
|
113
101
|
/*#__PURE__*/ jsx(Menu.Separator, {}),
|
|
114
|
-
/*#__PURE__*/ jsx(
|
|
102
|
+
/*#__PURE__*/ jsx(Menu.Item, {
|
|
115
103
|
onSelect: handleProfile,
|
|
116
104
|
children: formatMessage({
|
|
117
105
|
id: 'global.profile',
|
|
118
106
|
defaultMessage: 'Profile settings'
|
|
119
107
|
})
|
|
120
108
|
}),
|
|
121
|
-
/*#__PURE__*/ jsx(
|
|
109
|
+
/*#__PURE__*/ jsx(Menu.Item, {
|
|
110
|
+
variant: "danger",
|
|
122
111
|
onSelect: handleLogout,
|
|
123
112
|
color: "danger600",
|
|
124
113
|
children: formatMessage({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavUser.mjs","sources":["../../../../../../admin/src/components/MainNav/NavUser.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Menu, VisuallyHidden, Avatar, Typography, Badge } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAuth } from '../../features/Auth';\n\nconst MenuTrigger = styled(Menu.Trigger)`\n height: ${({ theme }) => theme.spaces[7]};\n width: ${({ theme }) => theme.spaces[7]};\n border: none;\n border-radius: 50%;\n padding: 0;\n overflow: hidden;\n`;\n\nconst MenuContent = styled(Menu.Content)`\n max-height: fit-content;\n width: 200px;\n`;\n\nconst UserInfo = styled(Flex)`\n && {\n padding: ${({ theme }) => theme.spaces[3]};\n }\n align-items: flex-start;\n`;\n\nconst BadgeWrapper = styled(Flex)`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ theme }) => theme.spaces[1]};\n\n width: 100%;\n`;\nconst StyledTypography = styled(Typography)`\n
|
|
1
|
+
{"version":3,"file":"NavUser.mjs","sources":["../../../../../../admin/src/components/MainNav/NavUser.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Menu, VisuallyHidden, Avatar, Typography, Badge } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useAuth } from '../../features/Auth';\n\nconst MenuTrigger = styled(Menu.Trigger)`\n height: ${({ theme }) => theme.spaces[7]};\n width: ${({ theme }) => theme.spaces[7]};\n border: none;\n border-radius: 50%;\n padding: 0;\n overflow: hidden;\n`;\n\nconst MenuContent = styled(Menu.Content)`\n max-height: fit-content;\n width: 200px;\n`;\n\nconst UserInfo = styled(Flex)`\n && {\n padding: ${({ theme }) => theme.spaces[3]};\n }\n align-items: flex-start;\n`;\n\nconst BadgeWrapper = styled(Flex)`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ theme }) => theme.spaces[1]};\n\n width: 100%;\n`;\nconst StyledTypography = styled(Typography)`\n word-break: break-word;\n margin-bottom: ${({ theme }) => theme.spaces[3]};\n`;\n\nexport interface NavUserProps {\n initials: string;\n children: React.ReactNode;\n}\n\nexport const NavUser = ({ children, initials, ...props }: NavUserProps) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const user = useAuth('User', (state) => state.user);\n const logout = useAuth('Logout', (state) => state.logout);\n\n const handleProfile = () => {\n navigate('/me');\n };\n\n const handleLogout = () => {\n logout();\n navigate('/auth/login');\n };\n\n return (\n <Flex\n justifyContent=\"center\"\n padding={3}\n borderStyle=\"solid\"\n borderWidth=\"1px 0 0 0\"\n borderColor=\"neutral150\"\n {...props}\n >\n <Menu.Root>\n <MenuTrigger endIcon={null} fullWidth justifyContent=\"center\">\n <Avatar.Item delayMs={0} fallback={initials} />\n <VisuallyHidden tag=\"span\">{children}</VisuallyHidden>\n </MenuTrigger>\n\n <MenuContent popoverPlacement=\"top-start\" zIndex={3}>\n <UserInfo direction=\"column\" gap={0} alignItems=\"flex-start\">\n <Typography variant=\"omega\" fontWeight=\"bold\" textTransform=\"none\">\n {children}\n </Typography>\n <StyledTypography variant=\"pi\" textColor=\"neutral600\">\n {user?.email}\n </StyledTypography>\n <BadgeWrapper>\n {user?.roles?.map((role) => <Badge key={role.id}>{role.name}</Badge>)}\n </BadgeWrapper>\n </UserInfo>\n\n <Menu.Separator />\n\n <Menu.Item onSelect={handleProfile}>\n {formatMessage({\n id: 'global.profile',\n defaultMessage: 'Profile settings',\n })}\n </Menu.Item>\n\n <Menu.Item variant=\"danger\" onSelect={handleLogout} color=\"danger600\">\n {formatMessage({\n id: 'app.components.LeftMenu.logout',\n defaultMessage: 'Log out',\n })}\n </Menu.Item>\n </MenuContent>\n </Menu.Root>\n </Flex>\n );\n};\n"],"names":["MenuTrigger","styled","Menu","Trigger","theme","spaces","MenuContent","Content","UserInfo","Flex","BadgeWrapper","StyledTypography","Typography","NavUser","children","initials","props","formatMessage","useIntl","navigate","useNavigate","user","useAuth","state","logout","handleProfile","handleLogout","_jsx","justifyContent","padding","borderStyle","borderWidth","borderColor","_jsxs","Root","endIcon","fullWidth","Avatar","Item","delayMs","fallback","VisuallyHidden","tag","popoverPlacement","zIndex","direction","gap","alignItems","variant","fontWeight","textTransform","textColor","email","roles","map","role","Badge","name","id","Separator","onSelect","defaultMessage","color"],"mappings":"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"}
|
|
@@ -81,6 +81,11 @@ const SearchInput = ({ disabled, label, placeholder, trackedEvent, trackedEventD
|
|
|
81
81
|
}),
|
|
82
82
|
onClear: handleClear,
|
|
83
83
|
placeholder: placeholder,
|
|
84
|
+
onBlur: (e)=>{
|
|
85
|
+
if (!e.currentTarget.contains(e.relatedTarget) && e.currentTarget.value === '') {
|
|
86
|
+
setIsOpen(false);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
84
89
|
children: label
|
|
85
90
|
})
|
|
86
91
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchInput.js","sources":["../../../../../admin/src/components/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Searchbar, SearchForm } from '@strapi/design-system';\nimport { Search as SearchIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { TrackingEvent, useTracking } from '../features/Tracking';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\ninterface SearchInputProps {\n disabled?: boolean;\n label: string;\n placeholder?: string;\n trackedEvent?: TrackingEvent['name'] | null;\n trackedEventDetails?: TrackingEvent['properties'];\n}\n\nconst SearchInput = ({\n disabled,\n label,\n placeholder,\n trackedEvent,\n trackedEventDetails,\n}: SearchInputProps) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const iconButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const [{ query }, setQuery] = useQueryParams<{ _q: string; page?: number }>();\n\n const [value, setValue] = React.useState(query?._q || '');\n const [isOpen, setIsOpen] = React.useState(!!value);\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const handleToggle = () => setIsOpen((prev) => !prev);\n\n React.useLayoutEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const handleClear = () => {\n setValue('');\n setQuery({ _q: '' }, 'remove');\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n // Ensure value is a string\n if (value) {\n if (trackedEvent) {\n trackUsage(trackedEvent, trackedEventDetails);\n }\n setQuery({ _q: encodeURIComponent(value), page: 1 });\n } else {\n handleToggle();\n setQuery({ _q: '' }, 'remove');\n }\n };\n\n if (isOpen) {\n return (\n <SearchForm onSubmit={handleSubmit}>\n <Searchbar\n ref={inputRef}\n name=\"search\"\n onChange={(e) => setValue(e.target.value)}\n value={value}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onClear={handleClear}\n placeholder={placeholder}\n >\n {label}\n </Searchbar>\n </SearchForm>\n );\n }\n\n return (\n <IconButton\n ref={iconButtonRef}\n disabled={disabled}\n label={formatMessage({ id: 'global.search', defaultMessage: 'Search' })}\n onClick={handleToggle}\n >\n <SearchIcon />\n </IconButton>\n );\n};\n\nexport { SearchInput };\nexport type { SearchInputProps };\n"],"names":["SearchInput","disabled","label","placeholder","trackedEvent","trackedEventDetails","inputRef","React","useRef","iconButtonRef","query","setQuery","useQueryParams","value","setValue","useState","_q","isOpen","setIsOpen","formatMessage","useIntl","trackUsage","useTracking","handleToggle","prev","useLayoutEffect","current","focus","handleClear","handleSubmit","e","preventDefault","encodeURIComponent","page","_jsx","SearchForm","onSubmit","Searchbar","ref","name","onChange","target","clearLabel","id","defaultMessage","onClear","IconButton","onClick","SearchIcon"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,MAAMA,WAAc,GAAA,CAAC,EACnBC,QAAQ,EACRC,KAAK,EACLC,WAAW,EACXC,YAAY,EACZC,mBAAmB,EACF,GAAA;IACjB,MAAMC,QAAAA,GAAWC,gBAAMC,CAAAA,MAAM,CAAmB,IAAA,CAAA;IAChD,MAAMC,aAAAA,GAAgBF,gBAAMC,CAAAA,MAAM,CAAoB,IAAA,CAAA;AAEtD,IAAA,MAAM,CAAC,EAAEE,KAAK,EAAE,EAAEC,SAAS,GAAGC,6BAAAA,EAAAA;IAE9B,MAAM,CAACC,OAAOC,QAAS,CAAA,GAAGP,iBAAMQ,QAAQ,CAACL,OAAOM,EAAM,IAAA,EAAA,CAAA;IACtD,MAAM,CAACC,QAAQC,SAAU,CAAA,GAAGX,iBAAMQ,QAAQ,CAAC,CAAC,CAACF,KAAAA,CAAAA;IAE7C,MAAM,EAAEM,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;AAEvB,IAAA,MAAMC,YAAe,GAAA,IAAML,SAAU,CAAA,CAACM,OAAS,CAACA,IAAAA,CAAAA;AAEhDjB,IAAAA,gBAAAA,CAAMkB,eAAe,CAAC,IAAA;QACpB,IAAIR,MAAAA,IAAUX,QAASoB,CAAAA,OAAO,EAAE;YAC9BpB,QAASoB,CAAAA,OAAO,CAACC,KAAK,EAAA;AACxB;KACC,EAAA;AAACV,QAAAA;AAAO,KAAA,CAAA;AAEX,IAAA,MAAMW,WAAc,GAAA,IAAA;QAClBd,QAAS,CAAA,EAAA,CAAA;QACTH,QAAS,CAAA;YAAEK,EAAI,EAAA;SAAM,EAAA,QAAA,CAAA;AACvB,KAAA;AAEA,IAAA,MAAMa,eAAe,CAACC,CAAAA,GAAAA;AACpBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;;AAGhB,QAAA,IAAIlB,KAAO,EAAA;AACT,YAAA,IAAIT,YAAc,EAAA;AAChBiB,gBAAAA,UAAAA,CAAWjB,YAAcC,EAAAA,mBAAAA,CAAAA;AAC3B;YACAM,QAAS,CAAA;AAAEK,gBAAAA,EAAAA,EAAIgB,kBAAmBnB,CAAAA,KAAAA,CAAAA;gBAAQoB,IAAM,EAAA;AAAE,aAAA,CAAA;SAC7C,MAAA;AACLV,YAAAA,YAAAA,EAAAA;YACAZ,QAAS,CAAA;gBAAEK,EAAI,EAAA;aAAM,EAAA,QAAA,CAAA;AACvB;AACF,KAAA;AAEA,IAAA,IAAIC,MAAQ,EAAA;AACV,QAAA,qBACEiB,cAACC,CAAAA,uBAAAA,EAAAA;YAAWC,QAAUP,EAAAA,YAAAA;AACpB,YAAA,QAAA,gBAAAK,cAACG,CAAAA,sBAAAA,EAAAA;gBACCC,GAAKhC,EAAAA,QAAAA;gBACLiC,IAAK,EAAA,QAAA;AACLC,gBAAAA,QAAAA,EAAU,CAACV,CAAMhB,GAAAA,QAAAA,CAASgB,CAAEW,CAAAA,MAAM,CAAC5B,KAAK,CAAA;gBACxCA,KAAOA,EAAAA,KAAAA;AACP6B,gBAAAA,UAAAA,EAAYvB,aAAc,CAAA;oBAAEwB,EAAI,EAAA,YAAA;oBAAcC,cAAgB,EAAA;AAAQ,iBAAA,CAAA;gBACtEC,OAASjB,EAAAA,WAAAA;gBACTzB,WAAaA,EAAAA,WAAAA;
|
|
1
|
+
{"version":3,"file":"SearchInput.js","sources":["../../../../../admin/src/components/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Searchbar, SearchForm } from '@strapi/design-system';\nimport { Search as SearchIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { TrackingEvent, useTracking } from '../features/Tracking';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\ninterface SearchInputProps {\n disabled?: boolean;\n label: string;\n placeholder?: string;\n trackedEvent?: TrackingEvent['name'] | null;\n trackedEventDetails?: TrackingEvent['properties'];\n}\n\nconst SearchInput = ({\n disabled,\n label,\n placeholder,\n trackedEvent,\n trackedEventDetails,\n}: SearchInputProps) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const iconButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const [{ query }, setQuery] = useQueryParams<{ _q: string; page?: number }>();\n\n const [value, setValue] = React.useState(query?._q || '');\n const [isOpen, setIsOpen] = React.useState(!!value);\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const handleToggle = () => setIsOpen((prev) => !prev);\n\n React.useLayoutEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const handleClear = () => {\n setValue('');\n setQuery({ _q: '' }, 'remove');\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n // Ensure value is a string\n if (value) {\n if (trackedEvent) {\n trackUsage(trackedEvent, trackedEventDetails);\n }\n setQuery({ _q: encodeURIComponent(value), page: 1 });\n } else {\n handleToggle();\n setQuery({ _q: '' }, 'remove');\n }\n };\n\n if (isOpen) {\n return (\n <SearchForm onSubmit={handleSubmit}>\n <Searchbar\n ref={inputRef}\n name=\"search\"\n onChange={(e) => setValue(e.target.value)}\n value={value}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onClear={handleClear}\n placeholder={placeholder}\n onBlur={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget) && e.currentTarget.value === '') {\n setIsOpen(false);\n }\n }}\n >\n {label}\n </Searchbar>\n </SearchForm>\n );\n }\n\n return (\n <IconButton\n ref={iconButtonRef}\n disabled={disabled}\n label={formatMessage({ id: 'global.search', defaultMessage: 'Search' })}\n onClick={handleToggle}\n >\n <SearchIcon />\n </IconButton>\n );\n};\n\nexport { SearchInput };\nexport type { SearchInputProps };\n"],"names":["SearchInput","disabled","label","placeholder","trackedEvent","trackedEventDetails","inputRef","React","useRef","iconButtonRef","query","setQuery","useQueryParams","value","setValue","useState","_q","isOpen","setIsOpen","formatMessage","useIntl","trackUsage","useTracking","handleToggle","prev","useLayoutEffect","current","focus","handleClear","handleSubmit","e","preventDefault","encodeURIComponent","page","_jsx","SearchForm","onSubmit","Searchbar","ref","name","onChange","target","clearLabel","id","defaultMessage","onClear","onBlur","currentTarget","contains","relatedTarget","IconButton","onClick","SearchIcon"],"mappings":"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"}
|
|
@@ -60,6 +60,11 @@ const SearchInput = ({ disabled, label, placeholder, trackedEvent, trackedEventD
|
|
|
60
60
|
}),
|
|
61
61
|
onClear: handleClear,
|
|
62
62
|
placeholder: placeholder,
|
|
63
|
+
onBlur: (e)=>{
|
|
64
|
+
if (!e.currentTarget.contains(e.relatedTarget) && e.currentTarget.value === '') {
|
|
65
|
+
setIsOpen(false);
|
|
66
|
+
}
|
|
67
|
+
},
|
|
63
68
|
children: label
|
|
64
69
|
})
|
|
65
70
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchInput.mjs","sources":["../../../../../admin/src/components/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Searchbar, SearchForm } from '@strapi/design-system';\nimport { Search as SearchIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { TrackingEvent, useTracking } from '../features/Tracking';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\ninterface SearchInputProps {\n disabled?: boolean;\n label: string;\n placeholder?: string;\n trackedEvent?: TrackingEvent['name'] | null;\n trackedEventDetails?: TrackingEvent['properties'];\n}\n\nconst SearchInput = ({\n disabled,\n label,\n placeholder,\n trackedEvent,\n trackedEventDetails,\n}: SearchInputProps) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const iconButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const [{ query }, setQuery] = useQueryParams<{ _q: string; page?: number }>();\n\n const [value, setValue] = React.useState(query?._q || '');\n const [isOpen, setIsOpen] = React.useState(!!value);\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const handleToggle = () => setIsOpen((prev) => !prev);\n\n React.useLayoutEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const handleClear = () => {\n setValue('');\n setQuery({ _q: '' }, 'remove');\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n // Ensure value is a string\n if (value) {\n if (trackedEvent) {\n trackUsage(trackedEvent, trackedEventDetails);\n }\n setQuery({ _q: encodeURIComponent(value), page: 1 });\n } else {\n handleToggle();\n setQuery({ _q: '' }, 'remove');\n }\n };\n\n if (isOpen) {\n return (\n <SearchForm onSubmit={handleSubmit}>\n <Searchbar\n ref={inputRef}\n name=\"search\"\n onChange={(e) => setValue(e.target.value)}\n value={value}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onClear={handleClear}\n placeholder={placeholder}\n >\n {label}\n </Searchbar>\n </SearchForm>\n );\n }\n\n return (\n <IconButton\n ref={iconButtonRef}\n disabled={disabled}\n label={formatMessage({ id: 'global.search', defaultMessage: 'Search' })}\n onClick={handleToggle}\n >\n <SearchIcon />\n </IconButton>\n );\n};\n\nexport { SearchInput };\nexport type { SearchInputProps };\n"],"names":["SearchInput","disabled","label","placeholder","trackedEvent","trackedEventDetails","inputRef","React","useRef","iconButtonRef","query","setQuery","useQueryParams","value","setValue","useState","_q","isOpen","setIsOpen","formatMessage","useIntl","trackUsage","useTracking","handleToggle","prev","useLayoutEffect","current","focus","handleClear","handleSubmit","e","preventDefault","encodeURIComponent","page","_jsx","SearchForm","onSubmit","Searchbar","ref","name","onChange","target","clearLabel","id","defaultMessage","onClear","IconButton","onClick","SearchIcon"],"mappings":";;;;;;;;AAiBA,MAAMA,WAAc,GAAA,CAAC,EACnBC,QAAQ,EACRC,KAAK,EACLC,WAAW,EACXC,YAAY,EACZC,mBAAmB,EACF,GAAA;IACjB,MAAMC,QAAAA,GAAWC,KAAMC,CAAAA,MAAM,CAAmB,IAAA,CAAA;IAChD,MAAMC,aAAAA,GAAgBF,KAAMC,CAAAA,MAAM,CAAoB,IAAA,CAAA;AAEtD,IAAA,MAAM,CAAC,EAAEE,KAAK,EAAE,EAAEC,SAAS,GAAGC,cAAAA,EAAAA;IAE9B,MAAM,CAACC,OAAOC,QAAS,CAAA,GAAGP,MAAMQ,QAAQ,CAACL,OAAOM,EAAM,IAAA,EAAA,CAAA;IACtD,MAAM,CAACC,QAAQC,SAAU,CAAA,GAAGX,MAAMQ,QAAQ,CAAC,CAAC,CAACF,KAAAA,CAAAA;IAE7C,MAAM,EAAEM,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AAEvB,IAAA,MAAMC,YAAe,GAAA,IAAML,SAAU,CAAA,CAACM,OAAS,CAACA,IAAAA,CAAAA;AAEhDjB,IAAAA,KAAAA,CAAMkB,eAAe,CAAC,IAAA;QACpB,IAAIR,MAAAA,IAAUX,QAASoB,CAAAA,OAAO,EAAE;YAC9BpB,QAASoB,CAAAA,OAAO,CAACC,KAAK,EAAA;AACxB;KACC,EAAA;AAACV,QAAAA;AAAO,KAAA,CAAA;AAEX,IAAA,MAAMW,WAAc,GAAA,IAAA;QAClBd,QAAS,CAAA,EAAA,CAAA;QACTH,QAAS,CAAA;YAAEK,EAAI,EAAA;SAAM,EAAA,QAAA,CAAA;AACvB,KAAA;AAEA,IAAA,MAAMa,eAAe,CAACC,CAAAA,GAAAA;AACpBA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;;AAGhB,QAAA,IAAIlB,KAAO,EAAA;AACT,YAAA,IAAIT,YAAc,EAAA;AAChBiB,gBAAAA,UAAAA,CAAWjB,YAAcC,EAAAA,mBAAAA,CAAAA;AAC3B;YACAM,QAAS,CAAA;AAAEK,gBAAAA,EAAAA,EAAIgB,kBAAmBnB,CAAAA,KAAAA,CAAAA;gBAAQoB,IAAM,EAAA;AAAE,aAAA,CAAA;SAC7C,MAAA;AACLV,YAAAA,YAAAA,EAAAA;YACAZ,QAAS,CAAA;gBAAEK,EAAI,EAAA;aAAM,EAAA,QAAA,CAAA;AACvB;AACF,KAAA;AAEA,IAAA,IAAIC,MAAQ,EAAA;AACV,QAAA,qBACEiB,GAACC,CAAAA,UAAAA,EAAAA;YAAWC,QAAUP,EAAAA,YAAAA;AACpB,YAAA,QAAA,gBAAAK,GAACG,CAAAA,SAAAA,EAAAA;gBACCC,GAAKhC,EAAAA,QAAAA;gBACLiC,IAAK,EAAA,QAAA;AACLC,gBAAAA,QAAAA,EAAU,CAACV,CAAMhB,GAAAA,QAAAA,CAASgB,CAAEW,CAAAA,MAAM,CAAC5B,KAAK,CAAA;gBACxCA,KAAOA,EAAAA,KAAAA;AACP6B,gBAAAA,UAAAA,EAAYvB,aAAc,CAAA;oBAAEwB,EAAI,EAAA,YAAA;oBAAcC,cAAgB,EAAA;AAAQ,iBAAA,CAAA;gBACtEC,OAASjB,EAAAA,WAAAA;gBACTzB,WAAaA,EAAAA,WAAAA;
|
|
1
|
+
{"version":3,"file":"SearchInput.mjs","sources":["../../../../../admin/src/components/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Searchbar, SearchForm } from '@strapi/design-system';\nimport { Search as SearchIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { TrackingEvent, useTracking } from '../features/Tracking';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\ninterface SearchInputProps {\n disabled?: boolean;\n label: string;\n placeholder?: string;\n trackedEvent?: TrackingEvent['name'] | null;\n trackedEventDetails?: TrackingEvent['properties'];\n}\n\nconst SearchInput = ({\n disabled,\n label,\n placeholder,\n trackedEvent,\n trackedEventDetails,\n}: SearchInputProps) => {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const iconButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const [{ query }, setQuery] = useQueryParams<{ _q: string; page?: number }>();\n\n const [value, setValue] = React.useState(query?._q || '');\n const [isOpen, setIsOpen] = React.useState(!!value);\n\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const handleToggle = () => setIsOpen((prev) => !prev);\n\n React.useLayoutEffect(() => {\n if (isOpen && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isOpen]);\n\n const handleClear = () => {\n setValue('');\n setQuery({ _q: '' }, 'remove');\n };\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n\n // Ensure value is a string\n if (value) {\n if (trackedEvent) {\n trackUsage(trackedEvent, trackedEventDetails);\n }\n setQuery({ _q: encodeURIComponent(value), page: 1 });\n } else {\n handleToggle();\n setQuery({ _q: '' }, 'remove');\n }\n };\n\n if (isOpen) {\n return (\n <SearchForm onSubmit={handleSubmit}>\n <Searchbar\n ref={inputRef}\n name=\"search\"\n onChange={(e) => setValue(e.target.value)}\n value={value}\n clearLabel={formatMessage({ id: 'clearLabel', defaultMessage: 'Clear' })}\n onClear={handleClear}\n placeholder={placeholder}\n onBlur={(e) => {\n if (!e.currentTarget.contains(e.relatedTarget) && e.currentTarget.value === '') {\n setIsOpen(false);\n }\n }}\n >\n {label}\n </Searchbar>\n </SearchForm>\n );\n }\n\n return (\n <IconButton\n ref={iconButtonRef}\n disabled={disabled}\n label={formatMessage({ id: 'global.search', defaultMessage: 'Search' })}\n onClick={handleToggle}\n >\n <SearchIcon />\n </IconButton>\n );\n};\n\nexport { SearchInput };\nexport type { SearchInputProps };\n"],"names":["SearchInput","disabled","label","placeholder","trackedEvent","trackedEventDetails","inputRef","React","useRef","iconButtonRef","query","setQuery","useQueryParams","value","setValue","useState","_q","isOpen","setIsOpen","formatMessage","useIntl","trackUsage","useTracking","handleToggle","prev","useLayoutEffect","current","focus","handleClear","handleSubmit","e","preventDefault","encodeURIComponent","page","_jsx","SearchForm","onSubmit","Searchbar","ref","name","onChange","target","clearLabel","id","defaultMessage","onClear","onBlur","currentTarget","contains","relatedTarget","IconButton","onClick","SearchIcon"],"mappings":"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"}
|
|
@@ -752,6 +752,9 @@ var en = {
|
|
|
752
752
|
"global.enabled": "Enabled",
|
|
753
753
|
"global.error": "Something went wrong",
|
|
754
754
|
"global.finish": "Finish",
|
|
755
|
+
"global.last-change.redo": "Redo last change",
|
|
756
|
+
"global.last-change.undo": "Undo last change",
|
|
757
|
+
"global.last-changes.discard": "Discard last changes",
|
|
755
758
|
"global.marketplace": "Marketplace",
|
|
756
759
|
"global.more": "More",
|
|
757
760
|
"global.name": "Name",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -748,6 +748,9 @@ var en = {
|
|
|
748
748
|
"global.enabled": "Enabled",
|
|
749
749
|
"global.error": "Something went wrong",
|
|
750
750
|
"global.finish": "Finish",
|
|
751
|
+
"global.last-change.redo": "Redo last change",
|
|
752
|
+
"global.last-change.undo": "Undo last change",
|
|
753
|
+
"global.last-changes.discard": "Discard last changes",
|
|
751
754
|
"global.marketplace": "Marketplace",
|
|
752
755
|
"global.more": "More",
|
|
753
756
|
"global.name": "Name",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -517,6 +517,9 @@ var fr = {
|
|
|
517
517
|
"global.documentation": "Documentation",
|
|
518
518
|
"global.enabled": "Activé",
|
|
519
519
|
"global.finish": "Terminer",
|
|
520
|
+
"global.last-change.redo": "Rétablir dernier changement",
|
|
521
|
+
"global.last-change.undo": "Annuler dernier changement",
|
|
522
|
+
"global.last-changes.discard": "Annuler derniers changements",
|
|
520
523
|
"global.marketplace": "Marketplace",
|
|
521
524
|
"global.name": "Nom",
|
|
522
525
|
"global.none": "Aucun",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fr.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fr.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -513,6 +513,9 @@ var fr = {
|
|
|
513
513
|
"global.documentation": "Documentation",
|
|
514
514
|
"global.enabled": "Activé",
|
|
515
515
|
"global.finish": "Terminer",
|
|
516
|
+
"global.last-change.redo": "Rétablir dernier changement",
|
|
517
|
+
"global.last-change.undo": "Annuler dernier changement",
|
|
518
|
+
"global.last-changes.discard": "Annuler derniers changements",
|
|
516
519
|
"global.marketplace": "Marketplace",
|
|
517
520
|
"global.name": "Nom",
|
|
518
521
|
"global.none": "Aucun",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fr.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fr.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsonLogic = require('json-logic-js');
|
|
4
|
+
var zod = require('zod');
|
|
5
|
+
|
|
6
|
+
const ConditionSchema = zod.z.object({
|
|
7
|
+
dependsOn: zod.z.string().min(1),
|
|
8
|
+
operator: zod.z.enum([
|
|
9
|
+
'is',
|
|
10
|
+
'isNot'
|
|
11
|
+
]),
|
|
12
|
+
value: zod.z.union([
|
|
13
|
+
zod.z.string(),
|
|
14
|
+
zod.z.number(),
|
|
15
|
+
zod.z.boolean()
|
|
16
|
+
])
|
|
17
|
+
});
|
|
18
|
+
function createRulesEngine() {
|
|
19
|
+
/**
|
|
20
|
+
* Transforms a high-level `Condition` object into a JSON Logic-compatible condition.
|
|
21
|
+
*
|
|
22
|
+
* Converts operators like 'is' and 'isNot' into their JSON Logic equivalents ('==' and '!=').
|
|
23
|
+
* Throws an error if the operator is not supported.
|
|
24
|
+
*
|
|
25
|
+
* @param condition - The condition object to convert.
|
|
26
|
+
* @returns A JSON Logic AST representing the condition.
|
|
27
|
+
* @throws {Error} If the operator is not recognized.
|
|
28
|
+
*/ const generate = (condition)=>{
|
|
29
|
+
const { dependsOn, operator, value } = condition;
|
|
30
|
+
const operatorsMap = {
|
|
31
|
+
is: '==',
|
|
32
|
+
isNot: '!='
|
|
33
|
+
};
|
|
34
|
+
if (!operatorsMap[operator]) {
|
|
35
|
+
throw new Error(`Invalid operator: ${operator}`);
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
[operatorsMap[operator]]: [
|
|
39
|
+
{
|
|
40
|
+
var: dependsOn
|
|
41
|
+
},
|
|
42
|
+
value
|
|
43
|
+
]
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Validates a condition object against the `ConditionSchema`.
|
|
48
|
+
*
|
|
49
|
+
* Ensures that the condition adheres to the expected structure and types.
|
|
50
|
+
*
|
|
51
|
+
* @param condition - The condition object to validate.
|
|
52
|
+
* @throws {ZodError} If the condition is invalid.
|
|
53
|
+
*/ const validate = (condition)=>{
|
|
54
|
+
ConditionSchema.parse(condition);
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Evaluates a JSON Logic condition against provided data.
|
|
58
|
+
* @throws {Error} If the condition is invalid.
|
|
59
|
+
*/ const evaluate = (condition, data)=>{
|
|
60
|
+
try {
|
|
61
|
+
return jsonLogic.apply(condition, data);
|
|
62
|
+
} catch (err) {
|
|
63
|
+
throw new Error(`Invalid condition: ${err.message}`);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
return {
|
|
67
|
+
generate,
|
|
68
|
+
validate,
|
|
69
|
+
evaluate
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
exports.ConditionSchema = ConditionSchema;
|
|
74
|
+
exports.createRulesEngine = createRulesEngine;
|
|
75
|
+
//# sourceMappingURL=rulesEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rulesEngine.js","sources":["../../../../../admin/src/utils/rulesEngine.ts"],"sourcesContent":["import jsonLogic from 'json-logic-js';\nimport { z } from 'zod';\n\nexport const ConditionSchema = z.object({\n dependsOn: z.string().min(1),\n operator: z.enum(['is', 'isNot']),\n value: z.union([z.string(), z.number(), z.boolean()]),\n});\n\nexport type Condition = z.infer<typeof ConditionSchema>;\nexport type JsonLogicCondition = jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>;\nexport type RulesEngine = {\n generate: (condition: Condition) => JsonLogicCondition;\n validate: (condition: Condition) => void;\n evaluate: (condition: JsonLogicCondition, data: unknown) => boolean;\n};\n\nexport function createRulesEngine(): RulesEngine {\n /**\n * Transforms a high-level `Condition` object into a JSON Logic-compatible condition.\n *\n * Converts operators like 'is' and 'isNot' into their JSON Logic equivalents ('==' and '!=').\n * Throws an error if the operator is not supported.\n *\n * @param condition - The condition object to convert.\n * @returns A JSON Logic AST representing the condition.\n * @throws {Error} If the operator is not recognized.\n */\n const generate = (condition: Condition): JsonLogicCondition => {\n const { dependsOn, operator, value } = condition;\n const operatorsMap = {\n is: '==',\n isNot: '!=',\n };\n if (!operatorsMap[operator]) {\n throw new Error(`Invalid operator: ${operator}`);\n }\n return { [operatorsMap[operator]]: [{ var: dependsOn }, value] };\n };\n\n /**\n * Validates a condition object against the `ConditionSchema`.\n *\n * Ensures that the condition adheres to the expected structure and types.\n *\n * @param condition - The condition object to validate.\n * @throws {ZodError} If the condition is invalid.\n */\n const validate = (condition: Condition) => {\n ConditionSchema.parse(condition);\n };\n\n /**\n * Evaluates a JSON Logic condition against provided data.\n * @throws {Error} If the condition is invalid.\n */\n const evaluate = (\n condition: jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>,\n data: unknown\n ): boolean => {\n try {\n return jsonLogic.apply(condition, data);\n } catch (err: any) {\n throw new Error(`Invalid condition: ${err.message}`);\n }\n };\n\n return {\n generate,\n validate,\n evaluate,\n };\n}\n"],"names":["ConditionSchema","z","object","dependsOn","string","min","operator","enum","value","union","number","boolean","createRulesEngine","generate","condition","operatorsMap","is","isNot","Error","var","validate","parse","evaluate","data","jsonLogic","apply","err","message"],"mappings":";;;;;AAGaA,MAAAA,eAAAA,GAAkBC,KAAEC,CAAAA,MAAM,CAAC;AACtCC,IAAAA,SAAAA,EAAWF,KAAEG,CAAAA,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAA,CAAA;IAC1BC,QAAUL,EAAAA,KAAAA,CAAEM,IAAI,CAAC;AAAC,QAAA,IAAA;AAAM,QAAA;AAAQ,KAAA,CAAA;IAChCC,KAAOP,EAAAA,KAAAA,CAAEQ,KAAK,CAAC;AAACR,QAAAA,KAAAA,CAAEG,MAAM,EAAA;AAAIH,QAAAA,KAAAA,CAAES,MAAM,EAAA;AAAIT,QAAAA,KAAAA,CAAEU,OAAO;AAAG,KAAA;AACtD,CAAG;AAUI,SAASC,iBAAAA,GAAAA;AACd;;;;;;;;;MAUA,MAAMC,WAAW,CAACC,SAAAA,GAAAA;AAChB,QAAA,MAAM,EAAEX,SAAS,EAAEG,QAAQ,EAAEE,KAAK,EAAE,GAAGM,SAAAA;AACvC,QAAA,MAAMC,YAAe,GAAA;YACnBC,EAAI,EAAA,IAAA;YACJC,KAAO,EAAA;AACT,SAAA;AACA,QAAA,IAAI,CAACF,YAAY,CAACT,QAAAA,CAAS,EAAE;AAC3B,YAAA,MAAM,IAAIY,KAAM,CAAA,CAAC,kBAAkB,EAAEZ,SAAS,CAAC,CAAA;AACjD;QACA,OAAO;AAAE,YAAA,CAACS,YAAY,CAACT,QAAS,CAAA,GAAG;AAAC,gBAAA;oBAAEa,GAAKhB,EAAAA;AAAU,iBAAA;AAAGK,gBAAAA;AAAM;AAAC,SAAA;AACjE,KAAA;AAEA;;;;;;;MAQA,MAAMY,WAAW,CAACN,SAAAA,GAAAA;AAChBd,QAAAA,eAAAA,CAAgBqB,KAAK,CAACP,SAAAA,CAAAA;AACxB,KAAA;AAEA;;;MAIA,MAAMQ,QAAW,GAAA,CACfR,SACAS,EAAAA,IAAAA,GAAAA;QAEA,IAAI;YACF,OAAOC,SAAAA,CAAUC,KAAK,CAACX,SAAWS,EAAAA,IAAAA,CAAAA;AACpC,SAAA,CAAE,OAAOG,GAAU,EAAA;YACjB,MAAM,IAAIR,MAAM,CAAC,mBAAmB,EAAEQ,GAAIC,CAAAA,OAAO,CAAC,CAAC,CAAA;AACrD;AACF,KAAA;IAEA,OAAO;AACLd,QAAAA,QAAAA;AACAO,QAAAA,QAAAA;AACAE,QAAAA;AACF,KAAA;AACF;;;;;"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import jsonLogic from 'json-logic-js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
|
|
4
|
+
const ConditionSchema = z.object({
|
|
5
|
+
dependsOn: z.string().min(1),
|
|
6
|
+
operator: z.enum([
|
|
7
|
+
'is',
|
|
8
|
+
'isNot'
|
|
9
|
+
]),
|
|
10
|
+
value: z.union([
|
|
11
|
+
z.string(),
|
|
12
|
+
z.number(),
|
|
13
|
+
z.boolean()
|
|
14
|
+
])
|
|
15
|
+
});
|
|
16
|
+
function createRulesEngine() {
|
|
17
|
+
/**
|
|
18
|
+
* Transforms a high-level `Condition` object into a JSON Logic-compatible condition.
|
|
19
|
+
*
|
|
20
|
+
* Converts operators like 'is' and 'isNot' into their JSON Logic equivalents ('==' and '!=').
|
|
21
|
+
* Throws an error if the operator is not supported.
|
|
22
|
+
*
|
|
23
|
+
* @param condition - The condition object to convert.
|
|
24
|
+
* @returns A JSON Logic AST representing the condition.
|
|
25
|
+
* @throws {Error} If the operator is not recognized.
|
|
26
|
+
*/ const generate = (condition)=>{
|
|
27
|
+
const { dependsOn, operator, value } = condition;
|
|
28
|
+
const operatorsMap = {
|
|
29
|
+
is: '==',
|
|
30
|
+
isNot: '!='
|
|
31
|
+
};
|
|
32
|
+
if (!operatorsMap[operator]) {
|
|
33
|
+
throw new Error(`Invalid operator: ${operator}`);
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
[operatorsMap[operator]]: [
|
|
37
|
+
{
|
|
38
|
+
var: dependsOn
|
|
39
|
+
},
|
|
40
|
+
value
|
|
41
|
+
]
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Validates a condition object against the `ConditionSchema`.
|
|
46
|
+
*
|
|
47
|
+
* Ensures that the condition adheres to the expected structure and types.
|
|
48
|
+
*
|
|
49
|
+
* @param condition - The condition object to validate.
|
|
50
|
+
* @throws {ZodError} If the condition is invalid.
|
|
51
|
+
*/ const validate = (condition)=>{
|
|
52
|
+
ConditionSchema.parse(condition);
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Evaluates a JSON Logic condition against provided data.
|
|
56
|
+
* @throws {Error} If the condition is invalid.
|
|
57
|
+
*/ const evaluate = (condition, data)=>{
|
|
58
|
+
try {
|
|
59
|
+
return jsonLogic.apply(condition, data);
|
|
60
|
+
} catch (err) {
|
|
61
|
+
throw new Error(`Invalid condition: ${err.message}`);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
generate,
|
|
66
|
+
validate,
|
|
67
|
+
evaluate
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export { ConditionSchema, createRulesEngine };
|
|
72
|
+
//# sourceMappingURL=rulesEngine.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rulesEngine.mjs","sources":["../../../../../admin/src/utils/rulesEngine.ts"],"sourcesContent":["import jsonLogic from 'json-logic-js';\nimport { z } from 'zod';\n\nexport const ConditionSchema = z.object({\n dependsOn: z.string().min(1),\n operator: z.enum(['is', 'isNot']),\n value: z.union([z.string(), z.number(), z.boolean()]),\n});\n\nexport type Condition = z.infer<typeof ConditionSchema>;\nexport type JsonLogicCondition = jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>;\nexport type RulesEngine = {\n generate: (condition: Condition) => JsonLogicCondition;\n validate: (condition: Condition) => void;\n evaluate: (condition: JsonLogicCondition, data: unknown) => boolean;\n};\n\nexport function createRulesEngine(): RulesEngine {\n /**\n * Transforms a high-level `Condition` object into a JSON Logic-compatible condition.\n *\n * Converts operators like 'is' and 'isNot' into their JSON Logic equivalents ('==' and '!=').\n * Throws an error if the operator is not supported.\n *\n * @param condition - The condition object to convert.\n * @returns A JSON Logic AST representing the condition.\n * @throws {Error} If the operator is not recognized.\n */\n const generate = (condition: Condition): JsonLogicCondition => {\n const { dependsOn, operator, value } = condition;\n const operatorsMap = {\n is: '==',\n isNot: '!=',\n };\n if (!operatorsMap[operator]) {\n throw new Error(`Invalid operator: ${operator}`);\n }\n return { [operatorsMap[operator]]: [{ var: dependsOn }, value] };\n };\n\n /**\n * Validates a condition object against the `ConditionSchema`.\n *\n * Ensures that the condition adheres to the expected structure and types.\n *\n * @param condition - The condition object to validate.\n * @throws {ZodError} If the condition is invalid.\n */\n const validate = (condition: Condition) => {\n ConditionSchema.parse(condition);\n };\n\n /**\n * Evaluates a JSON Logic condition against provided data.\n * @throws {Error} If the condition is invalid.\n */\n const evaluate = (\n condition: jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>,\n data: unknown\n ): boolean => {\n try {\n return jsonLogic.apply(condition, data);\n } catch (err: any) {\n throw new Error(`Invalid condition: ${err.message}`);\n }\n };\n\n return {\n generate,\n validate,\n evaluate,\n };\n}\n"],"names":["ConditionSchema","z","object","dependsOn","string","min","operator","enum","value","union","number","boolean","createRulesEngine","generate","condition","operatorsMap","is","isNot","Error","var","validate","parse","evaluate","data","jsonLogic","apply","err","message"],"mappings":";;;AAGaA,MAAAA,eAAAA,GAAkBC,CAAEC,CAAAA,MAAM,CAAC;AACtCC,IAAAA,SAAAA,EAAWF,CAAEG,CAAAA,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAA,CAAA;IAC1BC,QAAUL,EAAAA,CAAAA,CAAEM,IAAI,CAAC;AAAC,QAAA,IAAA;AAAM,QAAA;AAAQ,KAAA,CAAA;IAChCC,KAAOP,EAAAA,CAAAA,CAAEQ,KAAK,CAAC;AAACR,QAAAA,CAAAA,CAAEG,MAAM,EAAA;AAAIH,QAAAA,CAAAA,CAAES,MAAM,EAAA;AAAIT,QAAAA,CAAAA,CAAEU,OAAO;AAAG,KAAA;AACtD,CAAG;AAUI,SAASC,iBAAAA,GAAAA;AACd;;;;;;;;;MAUA,MAAMC,WAAW,CAACC,SAAAA,GAAAA;AAChB,QAAA,MAAM,EAAEX,SAAS,EAAEG,QAAQ,EAAEE,KAAK,EAAE,GAAGM,SAAAA;AACvC,QAAA,MAAMC,YAAe,GAAA;YACnBC,EAAI,EAAA,IAAA;YACJC,KAAO,EAAA;AACT,SAAA;AACA,QAAA,IAAI,CAACF,YAAY,CAACT,QAAAA,CAAS,EAAE;AAC3B,YAAA,MAAM,IAAIY,KAAM,CAAA,CAAC,kBAAkB,EAAEZ,SAAS,CAAC,CAAA;AACjD;QACA,OAAO;AAAE,YAAA,CAACS,YAAY,CAACT,QAAS,CAAA,GAAG;AAAC,gBAAA;oBAAEa,GAAKhB,EAAAA;AAAU,iBAAA;AAAGK,gBAAAA;AAAM;AAAC,SAAA;AACjE,KAAA;AAEA;;;;;;;MAQA,MAAMY,WAAW,CAACN,SAAAA,GAAAA;AAChBd,QAAAA,eAAAA,CAAgBqB,KAAK,CAACP,SAAAA,CAAAA;AACxB,KAAA;AAEA;;;MAIA,MAAMQ,QAAW,GAAA,CACfR,SACAS,EAAAA,IAAAA,GAAAA;QAEA,IAAI;YACF,OAAOC,SAAAA,CAAUC,KAAK,CAACX,SAAWS,EAAAA,IAAAA,CAAAA;AACpC,SAAA,CAAE,OAAOG,GAAU,EAAA;YACjB,MAAM,IAAIR,MAAM,CAAC,mBAAmB,EAAEQ,GAAIC,CAAAA,OAAO,CAAC,CAAC,CAAA;AACrD;AACF,KAAA;IAEA,OAAO;AACLd,QAAAA,QAAAA;AACAO,QAAAA,QAAAA;AACAE,QAAAA;AACF,KAAA;AACF;;;;"}
|
package/dist/admin/index.js
CHANGED
|
@@ -34,6 +34,7 @@ var users = require('./admin/src/services/users.js');
|
|
|
34
34
|
var translatedErrors = require('./admin/src/utils/translatedErrors.js');
|
|
35
35
|
var getFetchClient = require('./admin/src/utils/getFetchClient.js');
|
|
36
36
|
var baseQuery = require('./admin/src/utils/baseQuery.js');
|
|
37
|
+
var rulesEngine = require('./admin/src/utils/rulesEngine.js');
|
|
37
38
|
var api = require('./admin/src/services/api.js');
|
|
38
39
|
var Layout = require('./admin/src/components/Layouts/Layout.js');
|
|
39
40
|
|
|
@@ -83,6 +84,8 @@ exports.getFetchClient = getFetchClient.getFetchClient;
|
|
|
83
84
|
exports.isFetchError = getFetchClient.isFetchError;
|
|
84
85
|
exports.fetchBaseQuery = baseQuery.fetchBaseQuery;
|
|
85
86
|
exports.isBaseQueryError = baseQuery.isBaseQueryError;
|
|
87
|
+
exports.ConditionSchema = rulesEngine.ConditionSchema;
|
|
88
|
+
exports.createRulesEngine = rulesEngine.createRulesEngine;
|
|
86
89
|
exports.adminApi = api.adminApi;
|
|
87
90
|
exports.Layouts = Layout.Layouts;
|
|
88
91
|
//# sourceMappingURL=index.js.map
|
package/dist/admin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/admin/index.mjs
CHANGED
|
@@ -32,6 +32,7 @@ export { useAdminUsers } from './admin/src/services/users.mjs';
|
|
|
32
32
|
export { translatedErrors } from './admin/src/utils/translatedErrors.mjs';
|
|
33
33
|
export { FetchError, getFetchClient, isFetchError } from './admin/src/utils/getFetchClient.mjs';
|
|
34
34
|
export { fetchBaseQuery, isBaseQueryError } from './admin/src/utils/baseQuery.mjs';
|
|
35
|
+
export { ConditionSchema, createRulesEngine } from './admin/src/utils/rulesEngine.mjs';
|
|
35
36
|
export { adminApi } from './admin/src/services/api.mjs';
|
|
36
37
|
export { Layouts } from './admin/src/components/Layouts/Layout.mjs';
|
|
37
38
|
//# sourceMappingURL=index.mjs.map
|
package/dist/admin/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -60,6 +60,7 @@ export type { Widget as WidgetType } from './core/apis/Widgets';
|
|
|
60
60
|
export { translatedErrors } from './utils/translatedErrors';
|
|
61
61
|
export * from './utils/getFetchClient';
|
|
62
62
|
export * from './utils/baseQuery';
|
|
63
|
+
export * from './utils/rulesEngine';
|
|
63
64
|
export * from './services/api';
|
|
64
65
|
export type { CMAdminConfiguration } from './types/adminConfiguration';
|
|
65
66
|
/**
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import jsonLogic from 'json-logic-js';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export declare const ConditionSchema: z.ZodObject<{
|
|
4
|
+
dependsOn: z.ZodString;
|
|
5
|
+
operator: z.ZodEnum<["is", "isNot"]>;
|
|
6
|
+
value: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
value: string | number | boolean;
|
|
9
|
+
operator: "is" | "isNot";
|
|
10
|
+
dependsOn: string;
|
|
11
|
+
}, {
|
|
12
|
+
value: string | number | boolean;
|
|
13
|
+
operator: "is" | "isNot";
|
|
14
|
+
dependsOn: string;
|
|
15
|
+
}>;
|
|
16
|
+
export type Condition = z.infer<typeof ConditionSchema>;
|
|
17
|
+
export type JsonLogicCondition = jsonLogic.RulesLogic<jsonLogic.AdditionalOperation>;
|
|
18
|
+
export type RulesEngine = {
|
|
19
|
+
generate: (condition: Condition) => JsonLogicCondition;
|
|
20
|
+
validate: (condition: Condition) => void;
|
|
21
|
+
evaluate: (condition: JsonLogicCondition, data: unknown) => boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare function createRulesEngine(): RulesEngine;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/admin",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.17.0-beta.0",
|
|
4
4
|
"description": "Strapi Admin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -86,10 +86,10 @@
|
|
|
86
86
|
"@reduxjs/toolkit": "1.9.7",
|
|
87
87
|
"@strapi/design-system": "2.0.0-rc.26",
|
|
88
88
|
"@strapi/icons": "2.0.0-rc.26",
|
|
89
|
-
"@strapi/permissions": "5.
|
|
90
|
-
"@strapi/types": "5.
|
|
91
|
-
"@strapi/typescript-utils": "5.
|
|
92
|
-
"@strapi/utils": "5.
|
|
89
|
+
"@strapi/permissions": "5.17.0-beta.0",
|
|
90
|
+
"@strapi/types": "5.17.0-beta.0",
|
|
91
|
+
"@strapi/typescript-utils": "5.17.0-beta.0",
|
|
92
|
+
"@strapi/utils": "5.17.0-beta.0",
|
|
93
93
|
"@testing-library/dom": "10.1.0",
|
|
94
94
|
"@testing-library/react": "15.0.7",
|
|
95
95
|
"@testing-library/user-event": "14.5.2",
|
|
@@ -110,6 +110,7 @@
|
|
|
110
110
|
"inquirer": "8.2.5",
|
|
111
111
|
"invariant": "^2.2.4",
|
|
112
112
|
"is-localhost-ip": "2.0.0",
|
|
113
|
+
"json-logic-js": "2.0.5",
|
|
113
114
|
"jsonwebtoken": "9.0.0",
|
|
114
115
|
"koa": "2.16.1",
|
|
115
116
|
"koa-compose": "4.1.0",
|
|
@@ -143,11 +144,12 @@
|
|
|
143
144
|
"zod": "3.24.2"
|
|
144
145
|
},
|
|
145
146
|
"devDependencies": {
|
|
146
|
-
"@strapi/admin-test-utils": "5.
|
|
147
|
-
"@strapi/data-transfer": "5.
|
|
147
|
+
"@strapi/admin-test-utils": "5.17.0-beta.0",
|
|
148
|
+
"@strapi/data-transfer": "5.17.0-beta.0",
|
|
148
149
|
"@types/codemirror5": "npm:@types/codemirror@^5.60.15",
|
|
149
150
|
"@types/fs-extra": "11.0.4",
|
|
150
151
|
"@types/invariant": "2.2.36",
|
|
152
|
+
"@types/json-logic-js": "2.0.8",
|
|
151
153
|
"@types/jsonwebtoken": "9.0.3",
|
|
152
154
|
"@types/koa-passport": "6.0.1",
|
|
153
155
|
"@types/lodash": "^4.14.191",
|