123 lines
3.7 KiB
JavaScript
Raw Normal View History

import React, { useRef } from 'react';
2021-02-08 13:47:43 +01:00
import PropTypes from 'prop-types';
import { Modal, ModalFooter, TabPanel, useGlobalContext } from 'strapi-helper-plugin';
2021-02-02 16:08:16 +01:00
import { useIntl } from 'react-intl';
import { Button } from '@buffetjs/core';
2021-02-09 16:55:57 +01:00
import { Formik } from 'formik';
import localeFormSchema from '../../schemas';
2021-02-08 13:47:43 +01:00
import useEditLocale from '../../hooks/useEditLocale';
2021-02-02 16:08:16 +01:00
import { getTrad } from '../../utils';
import BaseForm from './BaseForm';
import AdvancedForm from './AdvancedForm';
import SettingsModal from '../SettingsModal';
2021-02-02 16:08:16 +01:00
2021-02-09 16:55:57 +01:00
const ModalEdit = ({ localeToEdit, onClose, locales }) => {
2021-02-08 13:47:43 +01:00
const { isEditing, editLocale } = useEditLocale();
const shouldUpdateMenu = useRef(false);
const { updateMenu } = useGlobalContext();
2021-02-02 16:08:16 +01:00
const { formatMessage } = useIntl();
2021-02-08 13:47:43 +01:00
const isOpened = Boolean(localeToEdit);
const handleSubmit = ({ displayName, isDefault }) => {
2021-02-09 16:55:57 +01:00
const id = localeToEdit.id;
const name = displayName || localeToEdit.code;
return editLocale(id, { name, isDefault })
.then(() => {
shouldUpdateMenu.current = true;
})
.then(onClose);
};
const handleClose = () => {
if (shouldUpdateMenu.current) {
updateMenu();
}
shouldUpdateMenu.current = false;
2021-02-09 16:55:57 +01:00
};
let options = [];
let defaultOption;
if (localeToEdit) {
options = locales.map(locale => ({ label: locale.code, value: locale.id }));
defaultOption = options.find(option => option.value === localeToEdit.id);
}
2021-02-02 16:08:16 +01:00
return (
<Modal isOpen={isOpened} onToggle={onClose} onClosed={handleClose}>
2021-02-09 16:55:57 +01:00
<Formik
initialValues={{
displayName: localeToEdit ? localeToEdit.name : '',
isDefault: localeToEdit ? localeToEdit.isDefault : false,
}}
2021-02-09 16:55:57 +01:00
onSubmit={handleSubmit}
validationSchema={localeFormSchema}
2021-02-09 16:55:57 +01:00
>
{({ handleSubmit, errors }) => (
2021-02-09 16:55:57 +01:00
<form onSubmit={handleSubmit}>
<SettingsModal
title={formatMessage({
id: getTrad('Settings.locales.modal.title'),
})}
breadCrumb={[formatMessage({ id: getTrad('Settings.list.actions.edit') })]}
tabsAriaLabel={formatMessage({
id: getTrad('Settings.locales.modal.edit.tab.label'),
})}
tabsId="i18n-settings-tabs-edit"
>
<TabPanel>
<BaseForm options={options} defaultOption={defaultOption} />
</TabPanel>
<TabPanel>
2021-02-25 15:48:46 +01:00
<AdvancedForm isDefaultLocale={Boolean(localeToEdit && localeToEdit.isDefault)} />
</TabPanel>
</SettingsModal>
2021-02-09 16:55:57 +01:00
<ModalFooter>
<section>
<Button type="button" color="cancel" onClick={onClose}>
{formatMessage({ id: 'app.components.Button.cancel' })}
</Button>
<Button
color="success"
type="submit"
isLoading={isEditing}
disabled={Object.keys(errors).length > 0}
>
{formatMessage({ id: getTrad('Settings.locales.modal.edit.confirmation') })}
</Button>
</section>
</ModalFooter>
</form>
)}
</Formik>
2021-02-02 16:08:16 +01:00
</Modal>
);
};
2021-02-08 13:47:43 +01:00
ModalEdit.defaultProps = {
localeToEdit: undefined,
2021-02-09 16:55:57 +01:00
locales: [],
2021-02-08 13:47:43 +01:00
};
2021-02-02 16:08:16 +01:00
ModalEdit.propTypes = {
2021-02-09 16:55:57 +01:00
localeToEdit: PropTypes.shape({
id: PropTypes.number.isRequired,
name: PropTypes.string.isRequired,
code: PropTypes.string.isRequired,
isDefault: PropTypes.bool.isRequired,
2021-02-09 16:55:57 +01:00
}),
2021-02-08 13:47:43 +01:00
onClose: PropTypes.func.isRequired,
2021-02-09 16:55:57 +01:00
locales: PropTypes.arrayOf(
PropTypes.shape({
id: PropTypes.number,
name: PropTypes.string,
code: PropTypes.string,
2021-02-09 16:55:57 +01:00
})
),
2021-02-02 16:08:16 +01:00
};
export default ModalEdit;