diff --git a/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm/index.js b/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm/index.js new file mode 100644 index 0000000000..ca069c6e6c --- /dev/null +++ b/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm/index.js @@ -0,0 +1,108 @@ +import React, { useState } from 'react'; +import PropTypes from 'prop-types'; +import { useIntl } from 'react-intl'; +import { + Stack, + Grid, + GridItem, + ModalLayout, + ModalHeader, + ModalFooter, + ModalBody, + Button, + Breadcrumbs, + Crumb, + Text, + Box, + H2, +} from '@strapi/parts'; +import { Formik } from 'formik'; +import { Form } from '@strapi/helper-plugin'; +import schema from './utils/schema'; +import stepper from './utils/stepper'; + +const ModalForm = ({ onToggle }) => { + const [currentStep, setStep] = useState('create'); + const { formatMessage } = useIntl(); + const headerTitle = formatMessage({ + id: 'Settings.permissions.users.create', + defaultMessage: 'Create new user', + }); + + const goNext = () => { + if (next) { + setStep(next); + } else { + onToggle(); + } + }; + + const { buttonSubmitLabel, isDisabled, next } = stepper[currentStep]; + + return ( + + + + {headerTitle} + + + {}} + validationSchema={schema} + validateOnChange={false} + > + {({ errors, handleChange, values }) => { + return ( +
+ + + +

+ {formatMessage({ + id: 'app.components.Users.ModalCreateBody.block-title.details', + defaultMessage: 'Details', + })} +

+
+ +

+ {formatMessage({ + id: 'app.components.Users.ModalCreateBody.block-title.login', + defaultMessage: 'Login settings', + })} +

+
+
+ +
+ + {formatMessage({ + id: 'app.components.Button.cancel', + defaultMessage: 'Cancel', + })} + + } + endActions={ + <> + + + } + /> + + ); + }} +
+
+ ); +}; + +ModalForm.propTypes = { + onToggle: PropTypes.func.isRequired, +}; + +export default ModalForm; diff --git a/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm/utils/schema.js b/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm/utils/schema.js new file mode 100644 index 0000000000..98019e27b8 --- /dev/null +++ b/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm/utils/schema.js @@ -0,0 +1,17 @@ +import * as yup from 'yup'; +import { translatedErrors } from '@strapi/helper-plugin'; + +const schema = yup.object().shape({ + firstname: yup.string().required(translatedErrors.required), + lastname: yup.string().required(translatedErrors.required), + email: yup + .string() + .email(translatedErrors.email) + .required(translatedErrors.required), + roles: yup + .array() + .min(1, translatedErrors.min) + .required(translatedErrors.required), +}); + +export default schema; diff --git a/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm/utils/stepper.js b/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm/utils/stepper.js new file mode 100644 index 0000000000..d265afc36c --- /dev/null +++ b/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm/utils/stepper.js @@ -0,0 +1,21 @@ +// import { ModalCreateBody } fro../../../../../components/Usersers'; + +const stepper = { + create: { + buttonSubmitLabel: { + id: 'app.containers.Users.ModalForm.footer.button-success', + defaultMessage: 'Create user', + }, + // Component: ModalCreateBody, + isDisabled: false, + next: 'magic-link', + }, + 'magic-link': { + buttonSubmitLabel: { id: 'form.button.finish', defaultMessage: 'Finish' }, + // Component: ModalCreateBody, + isDisabled: true, + next: null, + }, +}; + +export default stepper; diff --git a/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm.js b/packages/core/admin/admin/src/pages/Users/ListPage/ModalForme.js similarity index 98% rename from packages/core/admin/admin/src/pages/Users/ListPage/ModalForm.js rename to packages/core/admin/admin/src/pages/Users/ListPage/ModalForme.js index 0a4fa38fa3..00ad52d7b0 100644 --- a/packages/core/admin/admin/src/pages/Users/ListPage/ModalForm.js +++ b/packages/core/admin/admin/src/pages/Users/ListPage/ModalForme.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { Button } from '@buffetjs/core'; import { useIntl } from 'react-intl'; import { Modal, ModalFooter, ModalHeader } from '@strapi/helper-plugin'; -import stepper from './stepper'; +import stepper from './ModalForm/utils/stepper'; const ModalForm = ({ isOpen, onClosed, onToggle }) => { const [currentStep, setStep] = useState('create'); diff --git a/packages/core/admin/admin/src/pages/Users/ListPage/index.js b/packages/core/admin/admin/src/pages/Users/ListPage/index.js index 29e6801671..b67737b30e 100644 --- a/packages/core/admin/admin/src/pages/Users/ListPage/index.js +++ b/packages/core/admin/admin/src/pages/Users/ListPage/index.js @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useState } from 'react'; import { CustomContentLayout, useRBAC, @@ -15,6 +15,7 @@ import get from 'lodash/get'; import adminPermissions from '../../../permissions'; import DynamicTable from './DynamicTable'; import Filters from './Filters'; +import ModalForm from './ModalForm'; import Search from './Search'; import PaginationFooter from './PaginationFooter'; import { deleteData, fetchData } from './utils/api'; @@ -22,6 +23,7 @@ import displayedFilters from './utils/displayedFilters'; import tableHeaders from './utils/tableHeaders'; const ListPage = () => { + const [isModalOpened, setIsModalOpen] = useState(true); const { allowedActions: { canCreate, canDelete, canRead, canUpdate }, } = useRBAC(adminPermissions.settings.users); @@ -29,6 +31,7 @@ const ListPage = () => { const toggleNotification = useNotification(); const { formatMessage } = useIntl(); const { search } = useLocation(); + useFocusWhenNavigate(); const { status, data, isFetching } = useQuery(['users', search], () => fetchData(search), { enabled: canRead, @@ -43,7 +46,9 @@ const ListPage = () => { }, }); - useFocusWhenNavigate(); + const handleToggle = () => { + setIsModalOpen(prev => !prev); + }; const total = get(data, 'pagination.total', 0); @@ -68,11 +73,7 @@ const ListPage = () => { (status !== 'success' && status !== 'error') || (status === 'success' && isFetching); const createAction = canCreate ? ( -