@webiny/app-security-access-management 6.4.4-beta.3 → 6.4.4-beta.4
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-security-access-management",
|
|
3
|
-
"version": "6.4.4-beta.
|
|
3
|
+
"version": "6.4.4-beta.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -18,12 +18,12 @@
|
|
|
18
18
|
"license": "MIT",
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@apollo/react-hooks": "3.1.5",
|
|
21
|
-
"@webiny/admin-ui": "6.4.4-beta.
|
|
22
|
-
"@webiny/app": "6.4.4-beta.
|
|
23
|
-
"@webiny/app-admin": "6.4.4-beta.
|
|
24
|
-
"@webiny/form": "6.4.4-beta.
|
|
25
|
-
"@webiny/icons": "6.4.4-beta.
|
|
26
|
-
"@webiny/validation": "6.4.4-beta.
|
|
21
|
+
"@webiny/admin-ui": "6.4.4-beta.4",
|
|
22
|
+
"@webiny/app": "6.4.4-beta.4",
|
|
23
|
+
"@webiny/app-admin": "6.4.4-beta.4",
|
|
24
|
+
"@webiny/form": "6.4.4-beta.4",
|
|
25
|
+
"@webiny/icons": "6.4.4-beta.4",
|
|
26
|
+
"@webiny/validation": "6.4.4-beta.4",
|
|
27
27
|
"graphql-tag": "2.12.6",
|
|
28
28
|
"lodash": "4.18.1",
|
|
29
29
|
"react": "18.3.1",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@types/react-helmet": "6.1.11",
|
|
34
|
-
"@webiny/build-tools": "6.4.4-beta.
|
|
34
|
+
"@webiny/build-tools": "6.4.4-beta.4",
|
|
35
35
|
"rimraf": "6.1.3",
|
|
36
36
|
"typescript": "6.0.3"
|
|
37
37
|
},
|
|
@@ -4,7 +4,7 @@ import pick from "lodash/pick.js";
|
|
|
4
4
|
import get from "lodash/get.js";
|
|
5
5
|
import { i18n } from "@webiny/app/i18n/index.js";
|
|
6
6
|
import { Bind, Form, useForm, useGenerateSlug } from "@webiny/form";
|
|
7
|
-
import { validation } from "@webiny/validation";
|
|
7
|
+
import { validation as validation_validation } from "@webiny/validation";
|
|
8
8
|
import { EmptyView, RolesMultiAutocomplete, SimpleForm, SimpleFormContent, SimpleFormFooter, SimpleFormHeader, useRouter, useSnackbar } from "@webiny/app-admin";
|
|
9
9
|
import { CREATE_TEAM, LIST_TEAMS, READ_TEAM, UPDATE_TEAM } from "./graphql.js";
|
|
10
10
|
import isEmpty from "lodash/isEmpty.js";
|
|
@@ -105,8 +105,12 @@ const TeamsForm = ({ newEntry, id })=>{
|
|
|
105
105
|
}
|
|
106
106
|
})
|
|
107
107
|
});
|
|
108
|
+
const team = {
|
|
109
|
+
...data,
|
|
110
|
+
roles: (data.roles ?? []).map((r)=>r.id)
|
|
111
|
+
};
|
|
108
112
|
return /*#__PURE__*/ react.createElement(Form, {
|
|
109
|
-
data:
|
|
113
|
+
data: team,
|
|
110
114
|
onSubmit: onSubmit
|
|
111
115
|
}, ({ data, form })=>/*#__PURE__*/ react.createElement(SimpleForm, null, loading && /*#__PURE__*/ react.createElement(OverlayLoader, null), /*#__PURE__*/ react.createElement(SimpleFormHeader, {
|
|
112
116
|
title: data.name ? data.name : "Untitled"
|
|
@@ -147,7 +151,7 @@ const FormContent = (props)=>{
|
|
|
147
151
|
span: 6
|
|
148
152
|
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
149
153
|
name: "name",
|
|
150
|
-
validators:
|
|
154
|
+
validators: validation_validation.create("required,minLength:1")
|
|
151
155
|
}, /*#__PURE__*/ react.createElement(Input, {
|
|
152
156
|
required: true,
|
|
153
157
|
onBlur: generateSlug,
|
|
@@ -158,7 +162,7 @@ const FormContent = (props)=>{
|
|
|
158
162
|
span: 6
|
|
159
163
|
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
160
164
|
name: "slug",
|
|
161
|
-
validators:
|
|
165
|
+
validators: validation_validation.create("required,minLength:1")
|
|
162
166
|
}, /*#__PURE__*/ react.createElement(Input, {
|
|
163
167
|
required: true,
|
|
164
168
|
disabled: !canModifyTeam || !newEntry,
|
|
@@ -168,7 +172,7 @@ const FormContent = (props)=>{
|
|
|
168
172
|
span: 12
|
|
169
173
|
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
170
174
|
name: "description",
|
|
171
|
-
validators:
|
|
175
|
+
validators: validation_validation.create("maxLength:500"),
|
|
172
176
|
defaultValue: ""
|
|
173
177
|
}, /*#__PURE__*/ react.createElement(Textarea, {
|
|
174
178
|
disabled: !canModifyTeam,
|
|
@@ -179,12 +183,15 @@ const FormContent = (props)=>{
|
|
|
179
183
|
span: 12
|
|
180
184
|
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
181
185
|
name: "roles",
|
|
182
|
-
validators:
|
|
183
|
-
},
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
186
|
+
validators: validation_validation.create("required")
|
|
187
|
+
}, ({ value, onChange, validation })=>/*#__PURE__*/ react.createElement(RolesMultiAutocomplete, {
|
|
188
|
+
values: value,
|
|
189
|
+
onChange: onChange,
|
|
190
|
+
validation: validation,
|
|
191
|
+
disabled: !canModifyTeam,
|
|
192
|
+
label: t`Roles`,
|
|
193
|
+
"data-testid": "admin.am.team.new.roles"
|
|
194
|
+
}))));
|
|
188
195
|
};
|
|
189
196
|
export { TeamsForm };
|
|
190
197
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui/views/Teams/TeamsForm.js","sources":["../../../../src/ui/views/Teams/TeamsForm.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport pick from \"lodash/pick.js\";\nimport get from \"lodash/get.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Bind, Form, useForm, useGenerateSlug } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormFooter,\n SimpleFormContent,\n SimpleFormHeader,\n EmptyView,\n useSnackbar,\n useRouter\n} from \"@webiny/app-admin\";\nimport { CREATE_TEAM, LIST_TEAMS, READ_TEAM, UPDATE_TEAM } from \"./graphql.js\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport type { Team } from \"~/types.js\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport { Alert, Button, Grid, Input, OverlayLoader, Textarea } from \"@webiny/admin-ui\";\nimport { RolesMultiAutocomplete } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\n\nconst t = i18n.ns(\"app-security/admin/teams/form\");\n\nexport interface TeamsFormProps {\n newEntry: boolean;\n id: string | undefined;\n}\n\nexport const TeamsForm = ({ newEntry, id }: TeamsFormProps) => {\n const { goToRoute } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const getQuery = useQuery(READ_TEAM, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.team;\n if (error) {\n goToRoute(Routes.Teams.List);\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(CREATE_TEAM, {\n refetchQueries: [{ query: LIST_TEAMS }]\n });\n\n const [update, updateMutation] = useMutation(UPDATE_TEAM, {\n refetchQueries: [{ query: LIST_TEAMS }]\n });\n\n const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);\n\n const onSubmit = useCallback(\n async (formData: Team) => {\n const isUpdate = formData.createdOn;\n const [operation, args] = isUpdate\n ? [\n update,\n {\n variables: {\n id: formData.id,\n data: pick(formData, [\"name\", \"description\", \"roles\"])\n }\n }\n ]\n : [\n create,\n {\n variables: {\n data: pick(formData, [\"name\", \"slug\", \"description\", \"roles\"])\n }\n }\n ];\n\n const response = await operation(args);\n\n const { data: team, error } = response.data.security.team;\n if (error) {\n return showSnackbar(error.message);\n }\n\n if (!isUpdate) {\n goToRoute(Routes.Teams.List, { id: team.id });\n }\n showSnackbar(t`Team saved successfully!`);\n },\n [id]\n );\n\n const data = loading ? {} : get(getQuery, \"data.security.team.data\", {});\n\n const systemTeam = data.system;\n const pluginTeam = data.plugin ?? false;\n const canModifyTeam = !systemTeam && !pluginTeam;\n\n const showEmptyView = !newEntry && !loading && isEmpty(data);\n // Render \"No content\" selected view.\n if (showEmptyView) {\n return (\n <EmptyView\n icon={<SettingsIcon />}\n title={t`Click on the left side list to display team details or create a...`}\n action={\n <Button\n text={t`New Team`}\n icon={<AddIcon />}\n data-testid=\"new-record-button\"\n onClick={() => {\n goToRoute(Routes.Teams.List, { new: true });\n }}\n />\n }\n />\n );\n }\n\n return (\n <Form data={data} onSubmit={onSubmit}>\n {({ data, form }) => {\n return (\n <SimpleForm>\n {loading && <OverlayLoader />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\n <FormContent\n pluginTeam={pluginTeam}\n systemTeam={systemTeam}\n canModifyTeam={canModifyTeam}\n newEntry={newEntry}\n />\n </SimpleFormContent>\n <SimpleFormFooter>\n <Button\n variant={\"secondary\"}\n text={t`Cancel`}\n onClick={() => {\n goToRoute(Routes.Teams.List);\n }}\n />\n {canModifyTeam && (\n <Button\n text={t`Save`}\n data-testid=\"admin.am.team.new.save\"\n onClick={ev => {\n form.submit(ev);\n }}\n />\n )}\n </SimpleFormFooter>\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n\ninterface FormContentProps {\n systemTeam: boolean;\n pluginTeam: boolean;\n canModifyTeam: boolean;\n newEntry: boolean;\n}\n\nconst FormContent = (props: FormContentProps) => {\n const { newEntry, pluginTeam, systemTeam, canModifyTeam } = props;\n\n const form = useForm();\n const { generateSlug } = useGenerateSlug(form, \"name\", \"slug\");\n\n return (\n <Grid>\n <>\n {systemTeam && (\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"Permissions are locked\"}>\n This is a protected system team and you can't modify its\n permissions.\n </Alert>\n </Grid.Column>\n )}\n {pluginTeam && (\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"Important\"}>\n This team is registered via an extension, and cannot be modified.\n </Alert>\n </Grid.Column>\n )}\n </>\n <Grid.Column span={6}>\n <Bind name=\"name\" validators={validation.create(\"required,minLength:1\")}>\n <Input\n required\n onBlur={generateSlug}\n disabled={!canModifyTeam}\n label={t`Name`}\n data-testid=\"admin.am.team.new.name\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={6}>\n <Bind name=\"slug\" validators={validation.create(\"required,minLength:1\")}>\n <Input\n required\n disabled={!canModifyTeam || !newEntry}\n label={t`Slug`}\n data-testid=\"admin.am.team.new.slug\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name=\"description\"\n validators={validation.create(\"maxLength:500\")}\n defaultValue={\"\"}\n >\n <Textarea\n disabled={!canModifyTeam}\n label={t`Description`}\n rows={3}\n data-testid=\"admin.am.team.new.description\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name=\"roles\" validators={validation.create(\"required\")}>\n <RolesMultiAutocomplete\n disabled={!canModifyTeam}\n label={t`Roles`}\n data-testid=\"admin.am.team.new.roles\"\n />\n </Bind>\n </Grid.Column>\n </Grid>\n );\n};\n"],"names":["t","i18n","TeamsForm","newEntry","id","goToRoute","useRouter","showSnackbar","useSnackbar","getQuery","useQuery","READ_TEAM","data","error","Routes","create","createMutation","useMutation","CREATE_TEAM","LIST_TEAMS","update","updateMutation","UPDATE_TEAM","loading","item","onSubmit","useCallback","formData","isUpdate","operation","args","pick","response","team","get","systemTeam","pluginTeam","canModifyTeam","showEmptyView","isEmpty","EmptyView","SettingsIcon","Button","AddIcon","Form","form","SimpleForm","OverlayLoader","SimpleFormHeader","SimpleFormContent","FormContent","SimpleFormFooter","ev","props","useForm","generateSlug","useGenerateSlug","Grid","Alert","Bind","validation","Input","Textarea","RolesMultiAutocomplete"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ui/views/Teams/TeamsForm.js","sources":["../../../../src/ui/views/Teams/TeamsForm.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { useMutation, useQuery } from \"@apollo/react-hooks\";\nimport pick from \"lodash/pick.js\";\nimport get from \"lodash/get.js\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Bind, Form, useForm, useGenerateSlug } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport {\n SimpleForm,\n SimpleFormFooter,\n SimpleFormContent,\n SimpleFormHeader,\n EmptyView,\n useSnackbar,\n useRouter\n} from \"@webiny/app-admin\";\nimport { CREATE_TEAM, LIST_TEAMS, READ_TEAM, UPDATE_TEAM } from \"./graphql.js\";\nimport isEmpty from \"lodash/isEmpty.js\";\nimport { ReactComponent as AddIcon } from \"@webiny/app-admin/assets/icons/add-18px.svg\";\nimport type { Team } from \"~/types.js\";\nimport { ReactComponent as SettingsIcon } from \"@webiny/icons/settings.svg\";\nimport { Alert, Button, Grid, Input, OverlayLoader, Textarea } from \"@webiny/admin-ui\";\nimport { RolesMultiAutocomplete } from \"@webiny/app-admin\";\nimport { Routes } from \"~/routes.js\";\n\nconst t = i18n.ns(\"app-security/admin/teams/form\");\n\nexport interface TeamsFormProps {\n newEntry: boolean;\n id: string | undefined;\n}\n\nexport const TeamsForm = ({ newEntry, id }: TeamsFormProps) => {\n const { goToRoute } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const getQuery = useQuery(READ_TEAM, {\n variables: { id },\n skip: !id,\n onCompleted: data => {\n if (!data) {\n return;\n }\n\n const { error } = data.security.team;\n if (error) {\n goToRoute(Routes.Teams.List);\n showSnackbar(error.message);\n }\n }\n });\n\n const [create, createMutation] = useMutation(CREATE_TEAM, {\n refetchQueries: [{ query: LIST_TEAMS }]\n });\n\n const [update, updateMutation] = useMutation(UPDATE_TEAM, {\n refetchQueries: [{ query: LIST_TEAMS }]\n });\n\n const loading = [getQuery, createMutation, updateMutation].find(item => item.loading);\n\n const onSubmit = useCallback(\n async (formData: Team) => {\n const isUpdate = formData.createdOn;\n const [operation, args] = isUpdate\n ? [\n update,\n {\n variables: {\n id: formData.id,\n data: pick(formData, [\"name\", \"description\", \"roles\"])\n }\n }\n ]\n : [\n create,\n {\n variables: {\n data: pick(formData, [\"name\", \"slug\", \"description\", \"roles\"])\n }\n }\n ];\n\n const response = await operation(args);\n\n const { data: team, error } = response.data.security.team;\n if (error) {\n return showSnackbar(error.message);\n }\n\n if (!isUpdate) {\n goToRoute(Routes.Teams.List, { id: team.id });\n }\n showSnackbar(t`Team saved successfully!`);\n },\n [id]\n );\n\n const data = loading ? {} : get(getQuery, \"data.security.team.data\", {});\n\n const systemTeam = data.system;\n const pluginTeam = data.plugin ?? false;\n const canModifyTeam = !systemTeam && !pluginTeam;\n\n const showEmptyView = !newEntry && !loading && isEmpty(data);\n // Render \"No content\" selected view.\n if (showEmptyView) {\n return (\n <EmptyView\n icon={<SettingsIcon />}\n title={t`Click on the left side list to display team details or create a...`}\n action={\n <Button\n text={t`New Team`}\n icon={<AddIcon />}\n data-testid=\"new-record-button\"\n onClick={() => {\n goToRoute(Routes.Teams.List, { new: true });\n }}\n />\n }\n />\n );\n }\n\n const team = { ...data, roles: (data.roles ?? []).map((r: any) => r.id) };\n\n return (\n <Form data={team} onSubmit={onSubmit}>\n {({ data, form }) => {\n return (\n <SimpleForm>\n {loading && <OverlayLoader />}\n <SimpleFormHeader title={data.name ? data.name : \"Untitled\"} />\n <SimpleFormContent>\n <FormContent\n pluginTeam={pluginTeam}\n systemTeam={systemTeam}\n canModifyTeam={canModifyTeam}\n newEntry={newEntry}\n />\n </SimpleFormContent>\n <SimpleFormFooter>\n <Button\n variant={\"secondary\"}\n text={t`Cancel`}\n onClick={() => {\n goToRoute(Routes.Teams.List);\n }}\n />\n {canModifyTeam && (\n <Button\n text={t`Save`}\n data-testid=\"admin.am.team.new.save\"\n onClick={ev => {\n form.submit(ev);\n }}\n />\n )}\n </SimpleFormFooter>\n </SimpleForm>\n );\n }}\n </Form>\n );\n};\n\ninterface FormContentProps {\n systemTeam: boolean;\n pluginTeam: boolean;\n canModifyTeam: boolean;\n newEntry: boolean;\n}\n\nconst FormContent = (props: FormContentProps) => {\n const { newEntry, pluginTeam, systemTeam, canModifyTeam } = props;\n\n const form = useForm();\n const { generateSlug } = useGenerateSlug(form, \"name\", \"slug\");\n\n return (\n <Grid>\n <>\n {systemTeam && (\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"Permissions are locked\"}>\n This is a protected system team and you can't modify its\n permissions.\n </Alert>\n </Grid.Column>\n )}\n {pluginTeam && (\n <Grid.Column span={12}>\n <Alert type={\"info\"} title={\"Important\"}>\n This team is registered via an extension, and cannot be modified.\n </Alert>\n </Grid.Column>\n )}\n </>\n <Grid.Column span={6}>\n <Bind name=\"name\" validators={validation.create(\"required,minLength:1\")}>\n <Input\n required\n onBlur={generateSlug}\n disabled={!canModifyTeam}\n label={t`Name`}\n data-testid=\"admin.am.team.new.name\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={6}>\n <Bind name=\"slug\" validators={validation.create(\"required,minLength:1\")}>\n <Input\n required\n disabled={!canModifyTeam || !newEntry}\n label={t`Slug`}\n data-testid=\"admin.am.team.new.slug\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name=\"description\"\n validators={validation.create(\"maxLength:500\")}\n defaultValue={\"\"}\n >\n <Textarea\n disabled={!canModifyTeam}\n label={t`Description`}\n rows={3}\n data-testid=\"admin.am.team.new.description\"\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name=\"roles\" validators={validation.create(\"required\")}>\n {({ value, onChange, validation }) => (\n <RolesMultiAutocomplete\n values={value}\n onChange={onChange}\n validation={validation}\n disabled={!canModifyTeam}\n label={t`Roles`}\n data-testid=\"admin.am.team.new.roles\"\n />\n )}\n </Bind>\n </Grid.Column>\n </Grid>\n );\n};\n"],"names":["t","i18n","TeamsForm","newEntry","id","goToRoute","useRouter","showSnackbar","useSnackbar","getQuery","useQuery","READ_TEAM","data","error","Routes","create","createMutation","useMutation","CREATE_TEAM","LIST_TEAMS","update","updateMutation","UPDATE_TEAM","loading","item","onSubmit","useCallback","formData","isUpdate","operation","args","pick","response","team","get","systemTeam","pluginTeam","canModifyTeam","showEmptyView","isEmpty","EmptyView","SettingsIcon","Button","AddIcon","r","Form","form","SimpleForm","OverlayLoader","SimpleFormHeader","SimpleFormContent","FormContent","SimpleFormFooter","ev","props","useForm","generateSlug","useGenerateSlug","Grid","Alert","Bind","validation","Input","Textarea","value","onChange","RolesMultiAutocomplete"],"mappings":"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"}
|