fixed folderStructure needed in EditAssetDialog

This commit is contained in:
ronronscelestes 2022-05-31 16:28:28 +02:00
parent 5f6d3779fa
commit 6532903b42
4 changed files with 58 additions and 16 deletions

View File

@ -0,0 +1,16 @@
import React from 'react';
import { useIntl } from 'react-intl';
import { Typography } from '@strapi/design-system/Typography';
import { ModalHeader } from '@strapi/design-system/ModalLayout';
export const DialogHeader = () => {
const { formatMessage } = useIntl();
return (
<ModalHeader>
<Typography fontWeight="bold" textColor="neutral800" as="h2" id="title">
{formatMessage({ id: 'global.details', defaultMessage: 'Details' })}
</Typography>
</ModalHeader>
);
};

View File

@ -8,14 +8,11 @@ import PropTypes from 'prop-types';
import React, { useRef, useState } from 'react'; import React, { useRef, useState } from 'react';
import { useIntl } from 'react-intl'; import { useIntl } from 'react-intl';
import isEqual from 'lodash/isEqual'; import isEqual from 'lodash/isEqual';
import { import styled from 'styled-components';
ModalLayout, import { ModalLayout, ModalBody, ModalFooter } from '@strapi/design-system/ModalLayout';
ModalHeader,
ModalBody,
ModalFooter,
} from '@strapi/design-system/ModalLayout';
import { Typography } from '@strapi/design-system/Typography';
import { Stack } from '@strapi/design-system/Stack'; import { Stack } from '@strapi/design-system/Stack';
import { Flex } from '@strapi/design-system/Flex';
import { Loader } from '@strapi/design-system/Loader';
import { Grid, GridItem } from '@strapi/design-system/Grid'; import { Grid, GridItem } from '@strapi/design-system/Grid';
import { Button } from '@strapi/design-system/Button'; import { Button } from '@strapi/design-system/Button';
import { FieldLabel } from '@strapi/design-system/Field'; import { FieldLabel } from '@strapi/design-system/Field';
@ -25,15 +22,21 @@ import { VisuallyHidden } from '@strapi/design-system/VisuallyHidden';
import { Formik } from 'formik'; import { Formik } from 'formik';
import * as yup from 'yup'; import * as yup from 'yup';
import { DialogHeader } from './DialogHeader';
import { PreviewBox } from './PreviewBox'; import { PreviewBox } from './PreviewBox';
import { ContextInfo } from '../ContextInfo'; import { ContextInfo } from '../ContextInfo';
import { FolderStructureDefinition, AssetDefinition } from '../../constants'; import { AssetDefinition } from '../../constants';
import { getTrad, findRecursiveFolderByValue } from '../../utils'; import { getTrad, findRecursiveFolderByValue } from '../../utils';
import formatBytes from '../../utils/formatBytes'; import formatBytes from '../../utils/formatBytes';
import { useEditAsset } from '../../hooks/useEditAsset'; import { useEditAsset } from '../../hooks/useEditAsset';
import { useFolderStructure } from '../../hooks/useFolderStructure';
import { ReplaceMediaButton } from './ReplaceMediaButton'; import { ReplaceMediaButton } from './ReplaceMediaButton';
import SelectTree from '../SelectTree'; import SelectTree from '../SelectTree';
const LoadingBody = styled(Flex)`
min-height: calc(60vh + 80px);
`;
const fileInfoSchema = yup.object({ const fileInfoSchema = yup.object({
name: yup.string().required(), name: yup.string().required(),
alternativeText: yup.string(), alternativeText: yup.string(),
@ -47,7 +50,6 @@ export const EditAssetDialog = ({
canCopyLink, canCopyLink,
canDownload, canDownload,
trackedLocation, trackedLocation,
folderStructure,
}) => { }) => {
const { formatMessage, formatDate } = useIntl(); const { formatMessage, formatDate } = useIntl();
const submitButtonRef = useRef(null); const submitButtonRef = useRef(null);
@ -55,6 +57,10 @@ export const EditAssetDialog = ({
const [replacementFile, setReplacementFile] = useState(); const [replacementFile, setReplacementFile] = useState();
const { editAsset, isLoading } = useEditAsset(); const { editAsset, isLoading } = useEditAsset();
const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({
enabled: true,
});
const handleSubmit = async values => { const handleSubmit = async values => {
if (asset.isLocal) { if (asset.isLocal) {
const nextAsset = { ...asset, ...values }; const nextAsset = { ...asset, ...values };
@ -96,7 +102,7 @@ export const EditAssetDialog = ({
}; };
const activeFolderId = asset?.folder?.id; const activeFolderId = asset?.folder?.id;
const initialFormData = { const initialFormData = !folderStructureIsLoading && {
name: asset.name, name: asset.name,
alternativeText: asset.alternativeText ?? undefined, alternativeText: asset.alternativeText ?? undefined,
caption: asset.caption ?? undefined, caption: asset.caption ?? undefined,
@ -116,6 +122,29 @@ export const EditAssetDialog = ({
} }
}; };
if (folderStructureIsLoading) {
return (
<ModalLayout onClose={() => handleClose()} labelledBy="title">
<DialogHeader />
<LoadingBody minHeight="60vh" justifyContent="center" paddingTop={4} paddingBottom={4}>
<Loader>
{formatMessage({
id: getTrad('list.asset.load'),
defaultMessage: 'How do you want to upload your assets?',
})}
</Loader>
</LoadingBody>
<ModalFooter
startActions={
<Button onClick={() => handleClose()} variant="tertiary">
{formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}
</Button>
}
/>
</ModalLayout>
);
}
return ( return (
<Formik <Formik
validationSchema={fileInfoSchema} validationSchema={fileInfoSchema}
@ -125,11 +154,7 @@ export const EditAssetDialog = ({
> >
{({ values, errors, handleChange, setFieldValue }) => ( {({ values, errors, handleChange, setFieldValue }) => (
<ModalLayout onClose={() => handleClose(values)} labelledBy="title"> <ModalLayout onClose={() => handleClose(values)} labelledBy="title">
<ModalHeader> <DialogHeader />
<Typography fontWeight="bold" textColor="neutral800" as="h2" id="title">
{formatMessage({ id: 'global.details', defaultMessage: 'Details' })}
</Typography>
</ModalHeader>
<ModalBody> <ModalBody>
<Grid gap={4}> <Grid gap={4}>
<GridItem xs={12} col={6}> <GridItem xs={12} col={6}>
@ -308,6 +333,5 @@ EditAssetDialog.propTypes = {
canCopyLink: PropTypes.bool.isRequired, canCopyLink: PropTypes.bool.isRequired,
canDownload: PropTypes.bool.isRequired, canDownload: PropTypes.bool.isRequired,
onClose: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired,
folderStructure: FolderStructureDefinition.isRequired,
trackedLocation: PropTypes.string, trackedLocation: PropTypes.string,
}; };

View File

@ -9,6 +9,7 @@ import { EditAssetDialog } from '../index';
import en from '../../../translations/en.json'; import en from '../../../translations/en.json';
import { downloadFile } from '../../../utils/downloadFile'; import { downloadFile } from '../../../utils/downloadFile';
jest.mock('../../../hooks/useFolderStructure');
jest.mock('../../../utils/downloadFile'); jest.mock('../../../utils/downloadFile');
const messageForPlugin = Object.keys(en).reduce((acc, curr) => { const messageForPlugin = Object.keys(en).reduce((acc, curr) => {

View File

@ -15,6 +15,7 @@ import en from '../../../translations/en.json';
import { downloadFile } from '../../../utils/downloadFile'; import { downloadFile } from '../../../utils/downloadFile';
jest.mock('../../../utils/downloadFile'); jest.mock('../../../utils/downloadFile');
jest.mock('../../../hooks/useFolderStructure');
const messageForPlugin = Object.keys(en).reduce((acc, curr) => { const messageForPlugin = Object.keys(en).reduce((acc, curr) => {
acc[curr] = `upload.${en[curr]}`; acc[curr] = `upload.${en[curr]}`;