@strapi/content-manager 5.51.0 → 5.51.2
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/components/ConfigurationForm/Form.js +14 -16
- package/dist/admin/components/ConfigurationForm/Form.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/Form.mjs +14 -16
- package/dist/admin/components/ConfigurationForm/Form.mjs.map +1 -1
- package/dist/admin/history/components/VersionHeader.js +1 -1
- package/dist/admin/history/components/VersionHeader.js.map +1 -1
- package/dist/admin/history/components/VersionHeader.mjs +1 -1
- package/dist/admin/history/components/VersionHeader.mjs.map +1 -1
- package/dist/admin/history/components/VersionsList.js +1 -1
- package/dist/admin/history/components/VersionsList.js.map +1 -1
- package/dist/admin/history/components/VersionsList.mjs +1 -1
- package/dist/admin/history/components/VersionsList.mjs.map +1 -1
- package/dist/admin/hooks/useDocument.js.map +1 -1
- package/dist/admin/hooks/useDocument.mjs.map +1 -1
- package/dist/admin/layout.js +77 -7
- package/dist/admin/layout.js.map +1 -1
- package/dist/admin/layout.mjs +58 -8
- package/dist/admin/layout.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +109 -81
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +108 -76
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/Link.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/Blocks/List.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +102 -7
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +84 -8
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +14 -5
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +14 -5
- package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +17 -16
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +17 -13
- package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.mjs +2 -1
- package/dist/admin/pages/EditView/components/FormInputs/Wysiwyg/utils/sanitizer.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +7 -0
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +7 -0
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/components/DocumentActions.d.ts +3 -1
- package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +2 -0
- package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +4 -0
- package/dist/admin/src/utils/previewImage.d.ts +3 -0
- package/dist/admin/translations/en.json.js +1 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +1 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/utils/objects.js +3 -1
- package/dist/admin/utils/objects.js.map +1 -1
- package/dist/admin/utils/objects.mjs +3 -1
- package/dist/admin/utils/objects.mjs.map +1 -1
- package/dist/admin/utils/previewImage.js +14 -0
- package/dist/admin/utils/previewImage.js.map +1 -0
- package/dist/admin/utils/previewImage.mjs +12 -0
- package/dist/admin/utils/previewImage.mjs.map +1 -0
- package/dist/admin/utils/validation.js +2 -2
- package/dist/admin/utils/validation.js.map +1 -1
- package/dist/admin/utils/validation.mjs +2 -2
- package/dist/admin/utils/validation.mjs.map +1 -1
- package/dist/server/controllers/utils/clone.js +1 -5
- package/dist/server/controllers/utils/clone.js.map +1 -1
- package/dist/server/controllers/utils/clone.mjs +2 -2
- package/dist/server/controllers/utils/clone.mjs.map +1 -1
- package/dist/server/controllers/validation/index.js +1 -1
- package/dist/server/controllers/validation/index.js.map +1 -1
- package/dist/server/controllers/validation/index.mjs +1 -1
- package/dist/server/controllers/validation/index.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +24 -7
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +24 -7
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/services/document-manager.js +1 -1
- package/dist/server/services/document-manager.js.map +1 -1
- package/dist/server/services/document-manager.mjs +1 -1
- package/dist/server/services/document-manager.mjs.map +1 -1
- package/dist/server/services/document-metadata.js +24 -2
- package/dist/server/services/document-metadata.js.map +1 -1
- package/dist/server/services/document-metadata.mjs +24 -2
- package/dist/server/services/document-metadata.mjs.map +1 -1
- package/dist/server/services/utils/draft.js +19 -3
- package/dist/server/services/utils/draft.js.map +1 -1
- package/dist/server/services/utils/draft.mjs +1 -1
- package/dist/server/services/utils/draft.mjs.map +1 -1
- package/dist/server/services/utils/populate.js +22 -6
- package/dist/server/services/utils/populate.js.map +1 -1
- package/dist/server/services/utils/populate.mjs +1 -1
- package/dist/server/services/utils/populate.mjs.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/document-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/shared/contracts/collection-types.d.ts.map +1 -1
- package/dist/shared/contracts/components.d.ts +1 -1
- package/dist/shared/contracts/components.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +2 -2
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PublishAction.mjs","sources":["../../../../../../admin/src/pages/ListView/components/BulkActions/PublishAction.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n FormErrors,\n getYupValidationErrors,\n Table,\n useQueryParams,\n useTable,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n IconButton,\n Loader,\n Modal,\n Tooltip,\n Typography,\n TypographyComponent,\n RawTable,\n Tr,\n Td,\n Tbody,\n} from '@strapi/design-system';\nimport { ArrowsCounterClockwise, CheckCircle, CrossCircle, Pencil } from '@strapi/icons';\nimport { useIntl, type IntlShape } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport { ValidationError } from 'yup';\n\nimport { useDocumentRBAC } from '../../../../features/DocumentRBAC';\nimport { useContentTypeSchema } from '../../../../hooks/useContentTypeSchema';\nimport { useDocumentActions } from '../../../../hooks/useDocumentActions';\nimport { useDocLayout } from '../../../../hooks/useDocumentLayout';\nimport { contentManagerApi } from '../../../../services/api';\nimport {\n useGetDocumentsForValidationQuery,\n usePublishManyDocumentsMutation,\n} from '../../../../services/documents';\nimport { buildValidParams } from '../../../../utils/api';\nimport { getTranslation } from '../../../../utils/translations';\nimport { createYupSchema } from '../../../../utils/validation';\nimport { DocumentStatus } from '../../../EditView/components/DocumentStatus';\nimport { transformDocument } from '../../../EditView/utils/data';\n\nimport { ConfirmDialogPublishAll, ConfirmDialogPublishAllProps } from './ConfirmBulkActionDialog';\n\nimport type { BulkActionComponent } from '../../../../content-manager';\nimport type { Document } from '../../../../hooks/useDocument';\n\ntype ContentManagerQueryPlugins = {\n i18n?: {\n locale?: string;\n };\n} & Record<string, Record<string, unknown> | undefined>;\n\nconst TypographyMaxWidth = styled<TypographyComponent>(Typography)`\n max-width: 300px;\n`;\n\nconst TableComponent = styled(RawTable)`\n width: 100%;\n table-layout: fixed;\n td:first-child {\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n td:first-of-type {\n padding: ${({ theme }) => theme.spaces[4]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * EntryValidationText\n * -----------------------------------------------------------------------------------------------*/\n\nexport const formatErrorMessages = (\n errors: FormErrors,\n parentKey: string,\n formatMessage: IntlShape['formatMessage']\n): string[] => {\n if (!errors) return [];\n\n const messages: string[] = [];\n\n Object.entries(errors).forEach(([key, value]) => {\n const currentKey = parentKey ? `${parentKey}.${key}` : key;\n\n if (!value) return;\n const isErrorMessageDescriptor =\n typeof value === 'object' && 'id' in value && 'defaultMessage' in value;\n if (isErrorMessageDescriptor || typeof value === 'string') {\n const id = isErrorMessageDescriptor ? value.id : value;\n const defaultMessage = isErrorMessageDescriptor\n ? (value.defaultMessage as string)\n : (value as string);\n messages.push(\n formatMessage(\n {\n id: `${id}.withField`,\n defaultMessage,\n },\n { field: currentKey }\n )\n );\n } else {\n messages.push(\n ...formatErrorMessages(value as unknown as FormErrors, currentKey, formatMessage)\n );\n }\n });\n\n return messages;\n};\n\ninterface EntryValidationTextProps {\n validationErrors?: FormErrors;\n status: string;\n}\n\nconst EntryValidationText = ({ validationErrors, status }: EntryValidationTextProps) => {\n const { formatMessage } = useIntl();\n\n if (validationErrors) {\n const validationErrorsMessages = formatErrorMessages(validationErrors, '', formatMessage).join(\n ' '\n );\n\n return (\n <Flex gap={2}>\n <CrossCircle fill=\"danger600\" />\n <Tooltip label={validationErrorsMessages}>\n <TypographyMaxWidth textColor=\"danger600\" variant=\"omega\" fontWeight=\"bold\" ellipsis>\n {validationErrorsMessages}\n </TypographyMaxWidth>\n </Tooltip>\n </Flex>\n );\n }\n\n if (status === 'published') {\n return (\n <Flex gap={2}>\n <CheckCircle fill=\"success600\" />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.already-published',\n defaultMessage: 'Already Published',\n })}\n </Typography>\n </Flex>\n );\n }\n\n if (status === 'modified') {\n return (\n <Flex gap={2}>\n <ArrowsCounterClockwise fill=\"alternative600\" />\n <Typography textColor=\"alternative600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n </Typography>\n </Flex>\n );\n }\n\n return (\n <Flex gap={2}>\n <CheckCircle fill=\"success600\" />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesTableContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SelectedEntriesTableContentProps {\n isPublishing?: boolean;\n rowsToDisplay?: TableRow[];\n entriesToPublish?: TableRow['documentId'][];\n validationErrors: Record<string, EntryValidationTextProps['validationErrors']>;\n}\n\nconst TABLE_HEADERS = [\n { name: 'documentId', label: 'documentId' },\n { name: 'name', label: 'name' },\n { name: 'status', label: 'status' },\n { name: 'publicationStatus', label: 'Publication status' },\n];\n\nconst SelectedEntriesTableContent = ({\n isPublishing,\n rowsToDisplay = [],\n entriesToPublish = [],\n validationErrors = {},\n}: SelectedEntriesTableContentProps) => {\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n\n const {\n list: {\n settings: { mainField },\n },\n } = useDocLayout();\n\n const shouldDisplayMainField =\n mainField != null && mainField !== 'id' && mainField !== 'documentId';\n\n return (\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {TABLE_HEADERS.filter((head) => head.name !== 'name' || shouldDisplayMainField).map(\n (head) => (\n <Table.HeaderCell key={head.name} {...head} />\n )\n )}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {rowsToDisplay.map((row) => (\n <Table.Row key={row.id}>\n <Table.CheckboxCell id={row.id} />\n <Table.Cell>\n <Typography>{row.documentId}</Typography>\n </Table.Cell>\n {shouldDisplayMainField && (\n <Table.Cell>\n <Typography>{row[mainField as keyof TableRow]}</Typography>\n </Table.Cell>\n )}\n <Table.Cell>\n <DocumentStatus status={row.status} maxWidth={'min-content'} />\n </Table.Cell>\n <Table.Cell>\n {isPublishing && entriesToPublish.includes(row.documentId) ? (\n <Flex gap={2}>\n <Typography>\n {formatMessage({\n id: 'content-manager.success.record.publishing',\n defaultMessage: 'Publishing...',\n })}\n </Typography>\n <Loader small />\n </Flex>\n ) : (\n <EntryValidationText\n validationErrors={validationErrors[row.documentId]}\n status={row.status}\n />\n )}\n </Table.Cell>\n <Table.Cell>\n <Flex>\n <IconButton\n tag={Link}\n to={{\n pathname: `${pathname}/${row.documentId}`,\n search: row.locale && `?plugins[i18n][locale]=${row.locale}`,\n }}\n state={{ from: pathname }}\n label={formatMessage({\n id: 'content-manager.bulk-publish.edit',\n defaultMessage: 'Edit',\n })}\n target=\"_blank\"\n marginLeft=\"auto\"\n variant=\"ghost\"\n >\n <Pencil width={'1.6rem'} height={'1.6rem'} />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublicationStatusSummary\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PublicationStatusSummaryProps {\n count: number;\n icon: React.ReactNode;\n message: string;\n textColor: string;\n}\n\nconst PublicationStatusSummary = ({\n count,\n icon,\n message,\n textColor,\n}: PublicationStatusSummaryProps) => {\n return (\n <Flex justifyContent=\"space-between\" flex={1} gap={3}>\n <Flex gap={2}>\n {icon}\n <Typography textColor={textColor} fontWeight=\"bold\">\n {message}\n </Typography>\n </Flex>\n <Typography fontWeight=\"bold\">{count}</Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublicationStatusGrid\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PublicationStatusGridProps {\n entriesReadyToPublishCount: number;\n entriesModifiedCount: number;\n entriesPublishedCount: number;\n entriesWithErrorsCount: number;\n}\n\nconst PublicationStatusGrid = ({\n entriesReadyToPublishCount,\n entriesPublishedCount,\n entriesModifiedCount,\n entriesWithErrorsCount,\n}: PublicationStatusGridProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box hasRadius borderColor=\"neutral150\">\n <TableComponent colCount={2} rowCount={2}>\n <Tbody>\n <Tr>\n <Td>\n <PublicationStatusSummary\n textColor=\"success600\"\n count={entriesReadyToPublishCount}\n icon={<CheckCircle fill=\"success600\" />}\n message={formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n />\n </Td>\n <Td>\n <PublicationStatusSummary\n textColor=\"success600\"\n count={entriesPublishedCount}\n icon={<CheckCircle fill=\"success600\" />}\n message={formatMessage({\n id: 'app.utils.already-published',\n defaultMessage: 'Already published',\n })}\n />\n </Td>\n </Tr>\n <Tr>\n <Td>\n <PublicationStatusSummary\n textColor=\"alternative600\"\n count={entriesModifiedCount}\n icon={<ArrowsCounterClockwise fill=\"alternative600\" />}\n message={formatMessage({\n id: 'content-manager.bulk-publish.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n />\n </Td>\n <Td>\n <PublicationStatusSummary\n textColor=\"danger600\"\n count={entriesWithErrorsCount}\n icon={<CrossCircle fill=\"danger600\" />}\n message={formatMessage({\n id: 'content-manager.bulk-publish.waiting-for-action',\n defaultMessage: 'Waiting for action',\n })}\n />\n </Td>\n </Tr>\n </Tbody>\n </TableComponent>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModalContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableRow extends Document {}\n\ninterface SelectedEntriesModalContentProps {\n listViewSelectedEntries: TableRow[];\n toggleModal: ConfirmDialogPublishAllProps['onToggleDialog'];\n setListViewSelectedDocuments: (documents: TableRow[]) => void;\n model: string;\n}\n\nconst SelectedEntriesModalContent = ({\n listViewSelectedEntries,\n toggleModal,\n setListViewSelectedDocuments,\n model,\n}: SelectedEntriesModalContentProps) => {\n const { formatMessage } = useIntl();\n const { schema, components } = useContentTypeSchema(model);\n const documentIds = listViewSelectedEntries.map(({ documentId }) => documentId);\n\n // We want to keep the selected entries order same as the list view\n const [{ query }] = useQueryParams<{ sort?: string; plugins?: ContentManagerQueryPlugins }>();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n // Fetch via findOne (same as edit view) so we get the exact same data structure.\n // The list API returns a different structure that causes false validation errors.\n const {\n data: documents = [],\n isLoading,\n isFetching,\n refetch,\n } = useGetDocumentsForValidationQuery(\n {\n model,\n documentIds,\n locale: query.plugins?.i18n?.locale,\n sort: query.sort,\n },\n { skip: documentIds.length === 0 }\n );\n\n // Transform and validate like the edit view - transformDocument prepares data\n // for validation (relations, temp keys, etc.)\n const { rows, validationErrors } = React.useMemo(() => {\n if (documents.length > 0 && schema) {\n const validate = createYupSchema(schema.attributes, components, { status: 'published' });\n const transform = transformDocument(schema, components);\n const validationErrors: Record<TableRow['documentId'], FormErrors> = {};\n // Re-order documents to match the list view selection order, and restore the\n // correct status (draft fetch returns 'draft' even for 'modified' documents)\n const documentsMap = new Map(documents.map((doc: Document) => [doc.documentId, doc]));\n const listViewStatusMap = new Map(\n listViewSelectedEntries.map(({ documentId, status }) => [documentId, status])\n );\n const orderedDocuments = documentIds\n .map((id) => {\n const doc = documentsMap.get(id);\n if (!doc) return undefined;\n return { ...doc, status: listViewStatusMap.get(id) ?? doc.status } as Document;\n })\n .filter((doc): doc is Document => doc !== undefined);\n const rows = orderedDocuments.map((entry: Document) => {\n const transformed = transform(entry);\n try {\n validate.validateSync(transformed, { abortEarly: false });\n return entry;\n } catch (e) {\n if (e instanceof ValidationError) {\n validationErrors[entry.documentId] = getYupValidationErrors(e);\n }\n return entry;\n }\n });\n return { rows, validationErrors };\n }\n return { rows: [], validationErrors: {} };\n }, [components, documents, documentIds, listViewSelectedEntries, schema]);\n\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n\n const { publishMany: bulkPublishAction, isLoading: isPublishing } = useDocumentActions();\n const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();\n\n const selectedRows = useTable('publishAction', (state) => state.selectedRows) as Document[];\n\n // Filter selected entries from the updated modal table rows\n const selectedEntries = rows.filter((entry) =>\n selectedRows.some((selectedEntry) => selectedEntry.documentId === entry.documentId)\n );\n\n const entriesToPublish = selectedEntries\n .filter((entry) => !validationErrors[entry.documentId])\n .map((entry) => entry.documentId);\n\n const selectedEntriesWithErrorsCount = selectedEntries.filter(\n ({ documentId }) => validationErrors[documentId]\n ).length;\n const selectedEntriesPublishedCount = selectedEntries.filter(\n ({ status }) => status === 'published'\n ).length;\n const selectedEntriesModifiedCount = selectedEntries.filter(\n ({ status, documentId }) => status === 'modified' && !validationErrors[documentId]\n ).length;\n const selectedEntriesWithNoErrorsCount =\n selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublishedCount;\n\n const toggleDialog = () => setIsDialogOpen((prev) => !prev);\n\n const handleConfirmBulkPublish = async () => {\n toggleDialog();\n\n const res = await bulkPublishAction({ model: model, documentIds: entriesToPublish, params });\n if (!('error' in res)) {\n const unpublishedEntries = rows.filter((row) => {\n return !entriesToPublish.includes(row.documentId);\n });\n // Keep selection of the entries in list view that were not published\n setListViewSelectedDocuments(unpublishedEntries);\n }\n };\n\n return (\n <>\n <Modal.Body>\n <PublicationStatusGrid\n entriesReadyToPublishCount={\n selectedEntriesWithNoErrorsCount - selectedEntriesModifiedCount\n }\n entriesPublishedCount={selectedEntriesPublishedCount}\n entriesModifiedCount={selectedEntriesModifiedCount}\n entriesWithErrorsCount={selectedEntriesWithErrorsCount}\n />\n <Box marginTop={7}>\n <SelectedEntriesTableContent\n isPublishing={isSubmittingForm}\n rowsToDisplay={rows}\n entriesToPublish={entriesToPublish}\n validationErrors={validationErrors}\n />\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={toggleModal} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Flex gap={2}>\n <Button onClick={refetch} variant=\"tertiary\" loading={isFetching}>\n {formatMessage({ id: 'app.utils.refresh', defaultMessage: 'Refresh' })}\n </Button>\n <Button\n onClick={toggleDialog}\n disabled={\n selectedEntries.length === 0 ||\n selectedEntries.length === selectedEntriesWithErrorsCount ||\n selectedEntriesPublishedCount === selectedEntries.length ||\n isLoading\n }\n loading={isPublishing || isSubmittingForm}\n >\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n </Flex>\n </Modal.Footer>\n <ConfirmDialogPublishAll\n isOpen={isDialogOpen}\n onToggleDialog={toggleDialog}\n isConfirmButtonLoading={isPublishing || isSubmittingForm}\n onConfirm={handleConfirmBulkPublish}\n />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublishAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst PublishAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n // Publish button visibility\n const hasPublishPermission = useDocumentRBAC('unpublishAction', (state) => state.canPublish);\n const showPublishButton =\n hasPublishPermission && documents.some(({ status }) => status !== 'published');\n\n const setListViewSelectedDocuments = useTable('publishAction', (state) => state.selectRow);\n\n const refetchList = () => {\n contentManagerApi.util.invalidateTags([{ type: 'Document', id: `${model}_LIST` }]);\n };\n\n if (!showPublishButton) return null;\n\n return {\n actionType: 'publish',\n variant: 'tertiary',\n label: formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' }),\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: getTranslation('containers.ListPage.selectedEntriesModal.title'),\n defaultMessage: 'Publish entries',\n }),\n content: ({ onClose }) => {\n return (\n <Table.Root rows={documents} defaultSelectedRows={documents} headers={TABLE_HEADERS}>\n <SelectedEntriesModalContent\n listViewSelectedEntries={documents}\n toggleModal={() => {\n onClose();\n refetchList();\n }}\n setListViewSelectedDocuments={setListViewSelectedDocuments}\n model={model}\n />\n </Table.Root>\n );\n },\n onClose: () => {\n refetchList();\n },\n },\n };\n};\n\nexport { PublishAction, SelectedEntriesModalContent };\n"],"names":["TypographyMaxWidth","styled","Typography","TableComponent","RawTable","theme","colors","neutral150","spaces","formatErrorMessages","errors","parentKey","formatMessage","messages","Object","entries","forEach","key","value","currentKey","isErrorMessageDescriptor","id","defaultMessage","push","field","EntryValidationText","validationErrors","status","useIntl","validationErrorsMessages","join","_jsxs","Flex","gap","_jsx","CrossCircle","fill","Tooltip","label","textColor","variant","fontWeight","ellipsis","CheckCircle","ArrowsCounterClockwise","TABLE_HEADERS","name","SelectedEntriesTableContent","isPublishing","rowsToDisplay","entriesToPublish","pathname","useLocation","list","settings","mainField","useDocLayout","shouldDisplayMainField","Table","Content","Head","HeaderCheckboxCell","filter","head","map","HeaderCell","Loading","Body","row","Row","CheckboxCell","Cell","documentId","DocumentStatus","maxWidth","includes","Loader","small","IconButton","tag","Link","to","search","locale","state","from","target","marginLeft","Pencil","width","height","PublicationStatusSummary","count","icon","message","justifyContent","flex","PublicationStatusGrid","entriesReadyToPublishCount","entriesPublishedCount","entriesModifiedCount","entriesWithErrorsCount","Box","hasRadius","borderColor","colCount","rowCount","Tbody","Tr","Td","SelectedEntriesModalContent","listViewSelectedEntries","toggleModal","setListViewSelectedDocuments","model","schema","components","useContentTypeSchema","documentIds","query","useQueryParams","params","React","useMemo","buildValidParams","data","documents","isLoading","isFetching","refetch","useGetDocumentsForValidationQuery","plugins","i18n","sort","skip","length","rows","validate","createYupSchema","attributes","transform","transformDocument","documentsMap","Map","doc","listViewStatusMap","orderedDocuments","get","undefined","entry","transformed","validateSync","abortEarly","e","ValidationError","getYupValidationErrors","isDialogOpen","setIsDialogOpen","useState","publishMany","bulkPublishAction","useDocumentActions","isSubmittingForm","usePublishManyDocumentsMutation","selectedRows","useTable","selectedEntries","some","selectedEntry","selectedEntriesWithErrorsCount","selectedEntriesPublishedCount","selectedEntriesModifiedCount","selectedEntriesWithNoErrorsCount","toggleDialog","prev","handleConfirmBulkPublish","res","unpublishedEntries","_Fragment","Modal","marginTop","Footer","Button","onClick","loading","disabled","ConfirmDialogPublishAll","isOpen","onToggleDialog","isConfirmButtonLoading","onConfirm","PublishAction","hasPublishPermission","useDocumentRBAC","canPublish","showPublishButton","selectRow","refetchList","contentManagerApi","util","invalidateTags","type","actionType","dialog","title","getTranslation","content","onClose","Root","defaultSelectedRows","headers"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PublishAction.mjs","sources":["../../../../../../admin/src/pages/ListView/components/BulkActions/PublishAction.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n FormErrors,\n getYupValidationErrors,\n Table,\n useQueryParams,\n useTable,\n} from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n IconButton,\n Loader,\n Modal,\n Tooltip,\n Typography,\n TypographyComponent,\n RawTable,\n Tr,\n Td,\n Tbody,\n} from '@strapi/design-system';\nimport { ArrowsCounterClockwise, CheckCircle, CrossCircle, Pencil } from '@strapi/icons';\nimport { useIntl, type IntlShape } from 'react-intl';\nimport { Link, useLocation } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport { ValidationError } from 'yup';\n\nimport { useDocumentRBAC } from '../../../../features/DocumentRBAC';\nimport { useContentTypeSchema } from '../../../../hooks/useContentTypeSchema';\nimport { useDocumentActions } from '../../../../hooks/useDocumentActions';\nimport { useDocLayout } from '../../../../hooks/useDocumentLayout';\nimport { contentManagerApi } from '../../../../services/api';\nimport {\n useGetDocumentsForValidationQuery,\n usePublishManyDocumentsMutation,\n} from '../../../../services/documents';\nimport { buildValidParams } from '../../../../utils/api';\nimport { getTranslation } from '../../../../utils/translations';\nimport { createYupSchema } from '../../../../utils/validation';\nimport { DocumentStatus } from '../../../EditView/components/DocumentStatus';\nimport { transformDocument } from '../../../EditView/utils/data';\n\nimport { ConfirmDialogPublishAll, ConfirmDialogPublishAllProps } from './ConfirmBulkActionDialog';\n\nimport type { BulkActionComponent } from '../../../../content-manager';\nimport type { Document } from '../../../../hooks/useDocument';\n\ntype ContentManagerQueryPlugins = {\n i18n?: {\n locale?: string;\n };\n} & Record<string, Record<string, unknown> | undefined>;\n\nconst TypographyMaxWidth = styled<TypographyComponent>(Typography)`\n max-width: 300px;\n`;\n\nconst TableComponent = styled(RawTable)`\n width: 100%;\n table-layout: fixed;\n td:first-child {\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n td:first-of-type {\n padding: ${({ theme }) => theme.spaces[4]};\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * EntryValidationText\n * -----------------------------------------------------------------------------------------------*/\n\nexport const formatErrorMessages = (\n errors: FormErrors,\n parentKey: string,\n formatMessage: IntlShape['formatMessage']\n): string[] => {\n if (!errors) return [];\n\n const messages: string[] = [];\n\n Object.entries(errors).forEach(([key, value]) => {\n const currentKey = parentKey ? `${parentKey}.${key}` : key;\n\n if (!value) return;\n const isErrorMessageDescriptor =\n typeof value === 'object' && 'id' in value && 'defaultMessage' in value;\n if (isErrorMessageDescriptor || typeof value === 'string') {\n const id = isErrorMessageDescriptor ? value.id : value;\n const defaultMessage = isErrorMessageDescriptor\n ? (value.defaultMessage as string)\n : (value as string);\n /**\n * The descriptor carries its own values (e.g. `{ min: 8 }`). They have to be forwarded,\n * otherwise a locale without the `.withField` variant falls back to a `defaultMessage`\n * that still contains `{min}` and react-intl renders the raw placeholder.\n * See strapi/strapi#19030.\n */\n const values = isErrorMessageDescriptor ? value.values : undefined;\n messages.push(\n formatMessage(\n {\n id: `${id}.withField`,\n defaultMessage,\n },\n { ...values, field: currentKey }\n )\n );\n } else {\n messages.push(\n ...formatErrorMessages(value as unknown as FormErrors, currentKey, formatMessage)\n );\n }\n });\n\n return messages;\n};\n\ninterface EntryValidationTextProps {\n validationErrors?: FormErrors;\n status: string;\n}\n\nconst EntryValidationText = ({ validationErrors, status }: EntryValidationTextProps) => {\n const { formatMessage } = useIntl();\n\n if (validationErrors) {\n const validationErrorsMessages = formatErrorMessages(validationErrors, '', formatMessage).join(\n ' '\n );\n\n return (\n <Flex gap={2}>\n <CrossCircle fill=\"danger600\" />\n <Tooltip label={validationErrorsMessages}>\n <TypographyMaxWidth textColor=\"danger600\" variant=\"omega\" fontWeight=\"bold\" ellipsis>\n {validationErrorsMessages}\n </TypographyMaxWidth>\n </Tooltip>\n </Flex>\n );\n }\n\n if (status === 'published') {\n return (\n <Flex gap={2}>\n <CheckCircle fill=\"success600\" />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.already-published',\n defaultMessage: 'Already Published',\n })}\n </Typography>\n </Flex>\n );\n }\n\n if (status === 'modified') {\n return (\n <Flex gap={2}>\n <ArrowsCounterClockwise fill=\"alternative600\" />\n <Typography textColor=\"alternative600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n </Typography>\n </Flex>\n );\n }\n\n return (\n <Flex gap={2}>\n <CheckCircle fill=\"success600\" />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesTableContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SelectedEntriesTableContentProps {\n isPublishing?: boolean;\n rowsToDisplay?: TableRow[];\n entriesToPublish?: TableRow['documentId'][];\n validationErrors: Record<string, EntryValidationTextProps['validationErrors']>;\n}\n\nconst TABLE_HEADERS = [\n { name: 'documentId', label: 'documentId' },\n { name: 'name', label: 'name' },\n { name: 'status', label: 'status' },\n { name: 'publicationStatus', label: 'Publication status' },\n];\n\nconst SelectedEntriesTableContent = ({\n isPublishing,\n rowsToDisplay = [],\n entriesToPublish = [],\n validationErrors = {},\n}: SelectedEntriesTableContentProps) => {\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n\n const {\n list: {\n settings: { mainField },\n },\n } = useDocLayout();\n\n const shouldDisplayMainField =\n mainField != null && mainField !== 'id' && mainField !== 'documentId';\n\n return (\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n {TABLE_HEADERS.filter((head) => head.name !== 'name' || shouldDisplayMainField).map(\n (head) => (\n <Table.HeaderCell key={head.name} {...head} />\n )\n )}\n </Table.Head>\n <Table.Loading />\n <Table.Body>\n {rowsToDisplay.map((row) => (\n <Table.Row key={row.id}>\n <Table.CheckboxCell id={row.id} />\n <Table.Cell>\n <Typography>{row.documentId}</Typography>\n </Table.Cell>\n {shouldDisplayMainField && (\n <Table.Cell>\n <Typography>{row[mainField as keyof TableRow]}</Typography>\n </Table.Cell>\n )}\n <Table.Cell>\n <DocumentStatus status={row.status} maxWidth={'min-content'} />\n </Table.Cell>\n <Table.Cell>\n {isPublishing && entriesToPublish.includes(row.documentId) ? (\n <Flex gap={2}>\n <Typography>\n {formatMessage({\n id: 'content-manager.success.record.publishing',\n defaultMessage: 'Publishing...',\n })}\n </Typography>\n <Loader small />\n </Flex>\n ) : (\n <EntryValidationText\n validationErrors={validationErrors[row.documentId]}\n status={row.status}\n />\n )}\n </Table.Cell>\n <Table.Cell>\n <Flex>\n <IconButton\n tag={Link}\n to={{\n pathname: `${pathname}/${row.documentId}`,\n search: row.locale && `?plugins[i18n][locale]=${row.locale}`,\n }}\n state={{ from: pathname }}\n label={formatMessage({\n id: 'content-manager.bulk-publish.edit',\n defaultMessage: 'Edit',\n })}\n target=\"_blank\"\n marginLeft=\"auto\"\n variant=\"ghost\"\n >\n <Pencil width={'1.6rem'} height={'1.6rem'} />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublicationStatusSummary\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PublicationStatusSummaryProps {\n count: number;\n icon: React.ReactNode;\n message: string;\n textColor: string;\n}\n\nconst PublicationStatusSummary = ({\n count,\n icon,\n message,\n textColor,\n}: PublicationStatusSummaryProps) => {\n return (\n <Flex justifyContent=\"space-between\" flex={1} gap={3}>\n <Flex gap={2}>\n {icon}\n <Typography textColor={textColor} fontWeight=\"bold\">\n {message}\n </Typography>\n </Flex>\n <Typography fontWeight=\"bold\">{count}</Typography>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublicationStatusGrid\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PublicationStatusGridProps {\n entriesReadyToPublishCount: number;\n entriesModifiedCount: number;\n entriesPublishedCount: number;\n entriesWithErrorsCount: number;\n}\n\nconst PublicationStatusGrid = ({\n entriesReadyToPublishCount,\n entriesPublishedCount,\n entriesModifiedCount,\n entriesWithErrorsCount,\n}: PublicationStatusGridProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box hasRadius borderColor=\"neutral150\">\n <TableComponent colCount={2} rowCount={2}>\n <Tbody>\n <Tr>\n <Td>\n <PublicationStatusSummary\n textColor=\"success600\"\n count={entriesReadyToPublishCount}\n icon={<CheckCircle fill=\"success600\" />}\n message={formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n />\n </Td>\n <Td>\n <PublicationStatusSummary\n textColor=\"success600\"\n count={entriesPublishedCount}\n icon={<CheckCircle fill=\"success600\" />}\n message={formatMessage({\n id: 'app.utils.already-published',\n defaultMessage: 'Already published',\n })}\n />\n </Td>\n </Tr>\n <Tr>\n <Td>\n <PublicationStatusSummary\n textColor=\"alternative600\"\n count={entriesModifiedCount}\n icon={<ArrowsCounterClockwise fill=\"alternative600\" />}\n message={formatMessage({\n id: 'content-manager.bulk-publish.modified',\n defaultMessage: 'Ready to publish changes',\n })}\n />\n </Td>\n <Td>\n <PublicationStatusSummary\n textColor=\"danger600\"\n count={entriesWithErrorsCount}\n icon={<CrossCircle fill=\"danger600\" />}\n message={formatMessage({\n id: 'content-manager.bulk-publish.waiting-for-action',\n defaultMessage: 'Waiting for action',\n })}\n />\n </Td>\n </Tr>\n </Tbody>\n </TableComponent>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModalContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface TableRow extends Document {}\n\ninterface SelectedEntriesModalContentProps {\n listViewSelectedEntries: TableRow[];\n toggleModal: ConfirmDialogPublishAllProps['onToggleDialog'];\n setListViewSelectedDocuments: (documents: TableRow[]) => void;\n model: string;\n}\n\nconst SelectedEntriesModalContent = ({\n listViewSelectedEntries,\n toggleModal,\n setListViewSelectedDocuments,\n model,\n}: SelectedEntriesModalContentProps) => {\n const { formatMessage } = useIntl();\n const { schema, components } = useContentTypeSchema(model);\n const documentIds = listViewSelectedEntries.map(({ documentId }) => documentId);\n\n // We want to keep the selected entries order same as the list view\n const [{ query }] = useQueryParams<{ sort?: string; plugins?: ContentManagerQueryPlugins }>();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n // Fetch via findOne (same as edit view) so we get the exact same data structure.\n // The list API returns a different structure that causes false validation errors.\n const {\n data: documents = [],\n isLoading,\n isFetching,\n refetch,\n } = useGetDocumentsForValidationQuery(\n {\n model,\n documentIds,\n locale: query.plugins?.i18n?.locale,\n sort: query.sort,\n },\n { skip: documentIds.length === 0 }\n );\n\n // Transform and validate like the edit view - transformDocument prepares data\n // for validation (relations, temp keys, etc.)\n const { rows, validationErrors } = React.useMemo(() => {\n if (documents.length > 0 && schema) {\n const validate = createYupSchema(schema.attributes, components, { status: 'published' });\n const transform = transformDocument(schema, components);\n const validationErrors: Record<TableRow['documentId'], FormErrors> = {};\n // Re-order documents to match the list view selection order, and restore the\n // correct status (draft fetch returns 'draft' even for 'modified' documents)\n const documentsMap = new Map(documents.map((doc: Document) => [doc.documentId, doc]));\n const listViewStatusMap = new Map(\n listViewSelectedEntries.map(({ documentId, status }) => [documentId, status])\n );\n const orderedDocuments = documentIds\n .map((id) => {\n const doc = documentsMap.get(id);\n if (!doc) return undefined;\n return { ...doc, status: listViewStatusMap.get(id) ?? doc.status } as Document;\n })\n .filter((doc): doc is Document => doc !== undefined);\n const rows = orderedDocuments.map((entry: Document) => {\n const transformed = transform(entry);\n try {\n validate.validateSync(transformed, { abortEarly: false });\n return entry;\n } catch (e) {\n if (e instanceof ValidationError) {\n validationErrors[entry.documentId] = getYupValidationErrors(e);\n }\n return entry;\n }\n });\n return { rows, validationErrors };\n }\n return { rows: [], validationErrors: {} };\n }, [components, documents, documentIds, listViewSelectedEntries, schema]);\n\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n\n const { publishMany: bulkPublishAction, isLoading: isPublishing } = useDocumentActions();\n const [, { isLoading: isSubmittingForm }] = usePublishManyDocumentsMutation();\n\n const selectedRows = useTable('publishAction', (state) => state.selectedRows) as Document[];\n\n // Filter selected entries from the updated modal table rows\n const selectedEntries = rows.filter((entry) =>\n selectedRows.some((selectedEntry) => selectedEntry.documentId === entry.documentId)\n );\n\n const entriesToPublish = selectedEntries\n .filter((entry) => !validationErrors[entry.documentId])\n .map((entry) => entry.documentId);\n\n const selectedEntriesWithErrorsCount = selectedEntries.filter(\n ({ documentId }) => validationErrors[documentId]\n ).length;\n const selectedEntriesPublishedCount = selectedEntries.filter(\n ({ status }) => status === 'published'\n ).length;\n const selectedEntriesModifiedCount = selectedEntries.filter(\n ({ status, documentId }) => status === 'modified' && !validationErrors[documentId]\n ).length;\n const selectedEntriesWithNoErrorsCount =\n selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublishedCount;\n\n const toggleDialog = () => setIsDialogOpen((prev) => !prev);\n\n const handleConfirmBulkPublish = async () => {\n toggleDialog();\n\n const res = await bulkPublishAction({ model: model, documentIds: entriesToPublish, params });\n if (!('error' in res)) {\n const unpublishedEntries = rows.filter((row) => {\n return !entriesToPublish.includes(row.documentId);\n });\n // Keep selection of the entries in list view that were not published\n setListViewSelectedDocuments(unpublishedEntries);\n }\n };\n\n return (\n <>\n <Modal.Body>\n <PublicationStatusGrid\n entriesReadyToPublishCount={\n selectedEntriesWithNoErrorsCount - selectedEntriesModifiedCount\n }\n entriesPublishedCount={selectedEntriesPublishedCount}\n entriesModifiedCount={selectedEntriesModifiedCount}\n entriesWithErrorsCount={selectedEntriesWithErrorsCount}\n />\n <Box marginTop={7}>\n <SelectedEntriesTableContent\n isPublishing={isSubmittingForm}\n rowsToDisplay={rows}\n entriesToPublish={entriesToPublish}\n validationErrors={validationErrors}\n />\n </Box>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={toggleModal} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Flex gap={2}>\n <Button onClick={refetch} variant=\"tertiary\" loading={isFetching}>\n {formatMessage({ id: 'app.utils.refresh', defaultMessage: 'Refresh' })}\n </Button>\n <Button\n onClick={toggleDialog}\n disabled={\n selectedEntries.length === 0 ||\n selectedEntries.length === selectedEntriesWithErrorsCount ||\n selectedEntriesPublishedCount === selectedEntries.length ||\n isLoading\n }\n loading={isPublishing || isSubmittingForm}\n >\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n </Flex>\n </Modal.Footer>\n <ConfirmDialogPublishAll\n isOpen={isDialogOpen}\n onToggleDialog={toggleDialog}\n isConfirmButtonLoading={isPublishing || isSubmittingForm}\n onConfirm={handleConfirmBulkPublish}\n />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PublishAction\n * -----------------------------------------------------------------------------------------------*/\n\nconst PublishAction: BulkActionComponent = ({ documents, model }) => {\n const { formatMessage } = useIntl();\n // Publish button visibility\n const hasPublishPermission = useDocumentRBAC('unpublishAction', (state) => state.canPublish);\n const showPublishButton =\n hasPublishPermission && documents.some(({ status }) => status !== 'published');\n\n const setListViewSelectedDocuments = useTable('publishAction', (state) => state.selectRow);\n\n const refetchList = () => {\n contentManagerApi.util.invalidateTags([{ type: 'Document', id: `${model}_LIST` }]);\n };\n\n if (!showPublishButton) return null;\n\n return {\n actionType: 'publish',\n variant: 'tertiary',\n label: formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' }),\n dialog: {\n type: 'modal',\n title: formatMessage({\n id: getTranslation('containers.ListPage.selectedEntriesModal.title'),\n defaultMessage: 'Publish entries',\n }),\n content: ({ onClose }) => {\n return (\n <Table.Root rows={documents} defaultSelectedRows={documents} headers={TABLE_HEADERS}>\n <SelectedEntriesModalContent\n listViewSelectedEntries={documents}\n toggleModal={() => {\n onClose();\n refetchList();\n }}\n setListViewSelectedDocuments={setListViewSelectedDocuments}\n model={model}\n />\n </Table.Root>\n );\n },\n onClose: () => {\n refetchList();\n },\n },\n };\n};\n\nexport { PublishAction, SelectedEntriesModalContent };\n"],"names":["TypographyMaxWidth","styled","Typography","TableComponent","RawTable","theme","colors","neutral150","spaces","formatErrorMessages","errors","parentKey","formatMessage","messages","Object","entries","forEach","key","value","currentKey","isErrorMessageDescriptor","id","defaultMessage","values","undefined","push","field","EntryValidationText","validationErrors","status","useIntl","validationErrorsMessages","join","_jsxs","Flex","gap","_jsx","CrossCircle","fill","Tooltip","label","textColor","variant","fontWeight","ellipsis","CheckCircle","ArrowsCounterClockwise","TABLE_HEADERS","name","SelectedEntriesTableContent","isPublishing","rowsToDisplay","entriesToPublish","pathname","useLocation","list","settings","mainField","useDocLayout","shouldDisplayMainField","Table","Content","Head","HeaderCheckboxCell","filter","head","map","HeaderCell","Loading","Body","row","Row","CheckboxCell","Cell","documentId","DocumentStatus","maxWidth","includes","Loader","small","IconButton","tag","Link","to","search","locale","state","from","target","marginLeft","Pencil","width","height","PublicationStatusSummary","count","icon","message","justifyContent","flex","PublicationStatusGrid","entriesReadyToPublishCount","entriesPublishedCount","entriesModifiedCount","entriesWithErrorsCount","Box","hasRadius","borderColor","colCount","rowCount","Tbody","Tr","Td","SelectedEntriesModalContent","listViewSelectedEntries","toggleModal","setListViewSelectedDocuments","model","schema","components","useContentTypeSchema","documentIds","query","useQueryParams","params","React","useMemo","buildValidParams","data","documents","isLoading","isFetching","refetch","useGetDocumentsForValidationQuery","plugins","i18n","sort","skip","length","rows","validate","createYupSchema","attributes","transform","transformDocument","documentsMap","Map","doc","listViewStatusMap","orderedDocuments","get","entry","transformed","validateSync","abortEarly","e","ValidationError","getYupValidationErrors","isDialogOpen","setIsDialogOpen","useState","publishMany","bulkPublishAction","useDocumentActions","isSubmittingForm","usePublishManyDocumentsMutation","selectedRows","useTable","selectedEntries","some","selectedEntry","selectedEntriesWithErrorsCount","selectedEntriesPublishedCount","selectedEntriesModifiedCount","selectedEntriesWithNoErrorsCount","toggleDialog","prev","handleConfirmBulkPublish","res","unpublishedEntries","_Fragment","Modal","marginTop","Footer","Button","onClick","loading","disabled","ConfirmDialogPublishAll","isOpen","onToggleDialog","isConfirmButtonLoading","onConfirm","PublishAction","hasPublishPermission","useDocumentRBAC","canPublish","showPublishButton","selectRow","refetchList","contentManagerApi","util","invalidateTags","type","actionType","dialog","title","getTranslation","content","onClose","Root","defaultSelectedRows","headers"],"mappings":"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"}
|
|
@@ -86,6 +86,8 @@ interface DocumentActionsMenuProps {
|
|
|
86
86
|
variant?: 'ghost' | 'tertiary';
|
|
87
87
|
}
|
|
88
88
|
declare const DocumentActionsMenu: ({ actions, children, label, variant, }: DocumentActionsMenuProps) => import("react/jsx-runtime").JSX.Element;
|
|
89
|
+
declare const PublishAction: DocumentActionComponent;
|
|
90
|
+
declare const UpdateAction: DocumentActionComponent;
|
|
89
91
|
declare const DEFAULT_ACTIONS: DocumentActionComponent[];
|
|
90
|
-
export { DocumentActions, DocumentActionsMenu, DocumentActionButton, DEFAULT_ACTIONS, openPublishConfirmDialog, };
|
|
92
|
+
export { DocumentActions, DocumentActionsMenu, DocumentActionButton, PublishAction, UpdateAction, DEFAULT_ACTIONS, openPublishConfirmDialog, };
|
|
91
93
|
export type { DocumentActionDescription, DocumentActionPosition, DialogOptions, NotificationOptions, ModalOptions, };
|
package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { Accordion } from '@strapi/design-system';
|
|
3
|
+
import type { Struct } from '@strapi/types';
|
|
3
4
|
interface ComponentCategoryProps {
|
|
4
5
|
category: string;
|
|
5
6
|
components?: Array<{
|
|
6
7
|
uid: string;
|
|
7
8
|
displayName: string;
|
|
8
9
|
icon?: string;
|
|
10
|
+
preview?: Struct.PreviewImageValue;
|
|
9
11
|
}>;
|
|
10
12
|
onAddComponent: (componentUid: string) => React.MouseEventHandler<HTMLButtonElement> & React.MouseEventHandler<HTMLDivElement>;
|
|
11
13
|
variant?: Accordion.Variant;
|
|
@@ -2,6 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { type UseDocument } from '../../../../../hooks/useDocument';
|
|
3
3
|
import { type DocumentMeta } from '../../../../../hooks/useDocumentContext';
|
|
4
4
|
import type { RelationOpenMode } from '../../../../../../../shared/contracts/content-types';
|
|
5
|
+
import type { AnyData } from '../../../utils/data';
|
|
5
6
|
export declare function getCollectionType(url: string): string | undefined;
|
|
6
7
|
declare const getFullPageUrl: (currentDocumentMeta: DocumentMeta) => string;
|
|
7
8
|
interface State {
|
|
@@ -11,6 +12,7 @@ interface State {
|
|
|
11
12
|
hasUnsavedChanges: boolean;
|
|
12
13
|
fieldToConnect?: string;
|
|
13
14
|
fieldToConnectUID?: string;
|
|
15
|
+
getParentFormValues?: () => AnyData;
|
|
14
16
|
}
|
|
15
17
|
type Action = {
|
|
16
18
|
type: 'GO_TO_RELATION';
|
|
@@ -19,6 +21,7 @@ type Action = {
|
|
|
19
21
|
shouldBypassConfirmation: boolean;
|
|
20
22
|
fieldToConnect?: string;
|
|
21
23
|
fieldToConnectUID?: string;
|
|
24
|
+
getParentFormValues?: () => AnyData;
|
|
22
25
|
};
|
|
23
26
|
} | {
|
|
24
27
|
type: 'GO_BACK';
|
|
@@ -34,6 +37,7 @@ type Action = {
|
|
|
34
37
|
shouldBypassConfirmation: boolean;
|
|
35
38
|
fieldToConnect?: string;
|
|
36
39
|
fieldToConnectUID?: string;
|
|
40
|
+
getParentFormValues?: () => AnyData;
|
|
37
41
|
};
|
|
38
42
|
} | {
|
|
39
43
|
type: 'CANCEL_CONFIRM_DIALOG';
|
|
@@ -249,6 +249,7 @@ var en = {
|
|
|
249
249
|
"pages.NoContentType.button": "Create your first Content-Type",
|
|
250
250
|
"pages.NoContentType.text": "You don't have any content yet, we recommend you to create your first Content-Type.",
|
|
251
251
|
"permissions.not-allowed.create": "You are not allowed to create a document",
|
|
252
|
+
"permissions.not-allowed.locale": "You don't have the permissions to access this content for the requested locale",
|
|
252
253
|
"permissions.not-allowed.update": "You are not allowed to see this document",
|
|
253
254
|
"plugin.description.long": "Quick way to see, edit and delete the data in your database.",
|
|
254
255
|
"plugin.description.short": "Quick way to see, edit and delete the data in your database.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -245,6 +245,7 @@ var en = {
|
|
|
245
245
|
"pages.NoContentType.button": "Create your first Content-Type",
|
|
246
246
|
"pages.NoContentType.text": "You don't have any content yet, we recommend you to create your first Content-Type.",
|
|
247
247
|
"permissions.not-allowed.create": "You are not allowed to create a document",
|
|
248
|
+
"permissions.not-allowed.locale": "You don't have the permissions to access this content for the requested locale",
|
|
248
249
|
"permissions.not-allowed.update": "You are not allowed to see this document",
|
|
249
250
|
"plugin.description.long": "Quick way to see, edit and delete the data in your database.",
|
|
250
251
|
"plugin.description.short": "Quick way to see, edit and delete the data in your database.",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -95,8 +95,10 @@ function getIn(obj, key, def, pathStartIndex = 0) {
|
|
|
95
95
|
if (currentValue === value) {
|
|
96
96
|
return obj;
|
|
97
97
|
}
|
|
98
|
-
{
|
|
98
|
+
if (value === undefined) {
|
|
99
99
|
deletePathValue(resVal, pathArray[i]);
|
|
100
|
+
} else {
|
|
101
|
+
setPathValue(resVal, pathArray[i], value);
|
|
100
102
|
}
|
|
101
103
|
// If the path array has a single element, the loop did not run.
|
|
102
104
|
// Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.js","sources":["../../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\ntype PathObject = Record<string, unknown>;\ntype PathContainer = PathObject | unknown[];\n\nconst isPathContainer = (obj: unknown): obj is PathContainer => isObject(obj) || Array.isArray(obj);\nconst isPathTraversable = (obj: unknown): boolean => {\n if (obj === null || obj === undefined) {\n return false;\n }\n\n if (typeof obj === 'boolean') {\n return obj === true;\n }\n\n if (typeof obj === 'number') {\n return obj !== 0 && Number.isNaN(obj) === false;\n }\n\n if (typeof obj === 'bigint') {\n return obj !== 0n;\n }\n\n if (typeof obj === 'string') {\n return obj !== '';\n }\n\n return true;\n};\nconst getPathValue = (container: unknown, key: string): unknown =>\n (Object(container) as PathObject)[key];\nconst setPathValue = (container: PathContainer, key: string, value: unknown) => {\n (container as PathObject)[key] = value;\n};\nconst deletePathValue = (container: PathContainer, key: string) => {\n delete (container as PathObject)[key];\n};\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn<TValue>(\n obj: unknown,\n key: string | string[],\n def: TValue,\n pathStartIndex?: number\n): TValue;\nexport function getIn<TValue = unknown>(\n obj: unknown,\n key: string | string[],\n def?: TValue,\n pathStartIndex?: number\n): TValue | undefined;\nexport function getIn<TValue = unknown>(\n obj: unknown,\n key: string | string[],\n def?: TValue,\n pathStartIndex: number = 0\n): TValue | undefined {\n const path = toPath(key);\n let currentValue = obj;\n\n while (isPathTraversable(currentValue) && pathStartIndex < path.length) {\n currentValue = getPathValue(currentValue, path[pathStartIndex++]);\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && isPathTraversable(currentValue) === false) {\n return def;\n }\n\n return (currentValue === undefined ? def : currentValue) as TValue | undefined;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: unknown): obj is PathObject =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: unknown): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn<TValue>(obj: TValue, path: string, value: unknown): TValue {\n const res = clone(obj); // this keeps inheritance when obj is a class\n let resVal = res as PathContainer;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj = getIn(obj, pathArray.slice(0, i + 1));\n\n if (isObject(currentObj) || Array.isArray(currentObj)) {\n const clonedValue = clone(currentObj) as PathContainer;\n setPathValue(resVal, currentPath, clonedValue);\n resVal = clonedValue;\n } else {\n const nextPath: string = pathArray[i + 1];\n const nextValue: PathContainer = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n setPathValue(resVal, currentPath, nextValue);\n resVal = nextValue;\n }\n }\n\n // Return original object if new value is the same as current\n const currentValue =\n isPathContainer(obj) && i === 0\n ? getPathValue(obj, pathArray[i])\n : getPathValue(resVal, pathArray[i]);\n if (currentValue === value) {\n return obj;\n }\n\n if (value === undefined) {\n deletePathValue(resVal, pathArray[i]);\n } else {\n setPathValue(resVal, pathArray[i], value);\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n deletePathValue(res as PathContainer, pathArray[i]);\n }\n\n return res;\n}\n"],"names":["isPathContainer","obj","isObject","Array","isArray","isPathTraversable","undefined","Number","isNaN","getPathValue","container","key","Object","setPathValue","value","deletePathValue","getIn","def","pathStartIndex","path","toPath","currentValue","length","isInteger","String","Math","floor","setIn","res","clone","resVal","i","pathArray","currentPath","currentObj","slice","clonedValue","nextPath","nextValue"],"mappings":";;;;;;;;;;AAMA,MAAMA,kBAAkB,CAACC,GAAAA,GAAuCC,SAASD,GAAAA,CAAAA,IAAQE,KAAAA,CAAMC,OAAO,CAACH,GAAAA,CAAAA;AAC/F,MAAMI,oBAAoB,CAACJ,GAAAA,GAAAA;IACzB,IAAIA,GAAAA,KAAQ,IAAA,IAAQA,GAAAA,KAAQK,SAAAA,EAAW;QACrC,OAAO,KAAA;AACT,IAAA;IAEA,IAAI,OAAOL,QAAQ,SAAA,EAAW;AAC5B,QAAA,OAAOA,GAAAA,KAAQ,IAAA;AACjB,IAAA;IAEA,IAAI,OAAOA,QAAQ,QAAA,EAAU;AAC3B,QAAA,OAAOA,GAAAA,KAAQ,CAAA,IAAKM,MAAAA,CAAOC,KAAK,CAACP,GAAAA,CAAAA,KAAS,KAAA;AAC5C,IAAA;IAEA,IAAI,OAAOA,QAAQ,QAAA,EAAU;AAC3B,QAAA,OAAOA,QAAQ,EAAE;AACnB,IAAA;IAEA,IAAI,OAAOA,QAAQ,QAAA,EAAU;AAC3B,QAAA,OAAOA,GAAAA,KAAQ,EAAA;AACjB,IAAA;IAEA,OAAO,IAAA;AACT,CAAA;AACA,MAAMQ,YAAAA,GAAe,CAACC,SAAAA,EAAoBC,GAAAA,GACxC,MAACC,CAAOF,SAAAA,CAAyB,CAACC,GAAAA,CAAI;AACxC,MAAME,YAAAA,GAAe,CAACH,SAAAA,EAA0BC,GAAAA,EAAaG,KAAAA,GAAAA;IAC1DJ,SAAwB,CAACC,IAAI,GAAGG,KAAAA;AACnC,CAAA;AACA,MAAMC,eAAAA,GAAkB,CAACL,SAAAA,EAA0BC,GAAAA,GAAAA;IACjD,OAAQD,SAAwB,CAACC,GAAAA,CAAI;AACvC,CAAA;AAiBO,SAASK,MACdf,GAAY,EACZU,GAAsB,EACtBM,GAAY,EACZC,cAAAA,GAAyB,CAAC,EAAA;AAE1B,IAAA,MAAMC,OAAOC,uBAAAA,CAAOT,GAAAA,CAAAA;AACpB,IAAA,IAAIU,YAAAA,GAAepB,GAAAA;AAEnB,IAAA,MAAOI,iBAAAA,CAAkBgB,YAAAA,CAAAA,IAAiBH,cAAAA,GAAiBC,IAAAA,CAAKG,MAAM,CAAE;AACtED,QAAAA,YAAAA,GAAeZ,YAAAA,CAAaY,YAAAA,EAAcF,IAAI,CAACD,cAAAA,EAAAA,CAAiB,CAAA;AAClE,IAAA;;AAGA,IAAA,IAAIA,mBAAmBC,IAAAA,CAAKG,MAAM,IAAIjB,iBAAAA,CAAkBgB,kBAAkB,KAAA,EAAO;QAC/E,OAAOJ,GAAAA;AACT,IAAA;IAEA,OAAQI,YAAAA,KAAiBf,YAAYW,GAAAA,GAAMI,YAAAA;AAC7C;AAEA,gDACO,MAAMnB,QAAAA,GAAW,CAACD,GAAAA,GACvBA,GAAAA,KAAQ,IAAA,IAAQ,OAAOA,QAAQ,QAAA,IAAY,CAACE,KAAAA,CAAMC,OAAO,CAACH,GAAAA;AAE5D,iDACO,MAAMsB,SAAAA,GAAY,CAACtB,GAAAA,GAA0BuB,MAAAA,CAAOC,IAAAA,CAAKC,KAAK,CAACnB,MAAAA,CAAON,GAAAA,CAAAA,CAAAA,CAAAA,KAAWA;AAExF;;;;;;;;;;;;;;;;;;;;;;;AAuBC,IACM,SAAS0B,KAAAA,CAAc1B,GAAW,EAAEkB,IAAY,EAAEL,KAAc,EAAA;IACrE,MAAMc,GAAAA,GAAMC,sBAAAA,CAAM5B,GAAAA,CAAAA,CAAAA;AAClB,IAAA,IAAI6B,MAAAA,GAASF,GAAAA;AACb,IAAA,IAAIG,CAAAA,GAAI,CAAA;AACR,IAAA,MAAMC,YAAYZ,uBAAAA,CAAOD,IAAAA,CAAAA;AAEzB,IAAA,MAAOY,CAAAA,GAAIC,SAAAA,CAAUV,MAAM,GAAG,GAAGS,CAAAA,EAAAA,CAAK;QACpC,MAAME,WAAAA,GAAsBD,SAAS,CAACD,CAAAA,CAAE;AACxC,QAAA,MAAMG,aAAalB,KAAAA,CAAMf,GAAAA,EAAK+B,UAAUG,KAAK,CAAC,GAAGJ,CAAAA,GAAI,CAAA,CAAA,CAAA;AAErD,QAAA,IAAI7B,QAAAA,CAASgC,UAAAA,CAAAA,IAAe/B,KAAAA,CAAMC,OAAO,CAAC8B,UAAAA,CAAAA,EAAa;AACrD,YAAA,MAAME,cAAcP,sBAAAA,CAAMK,UAAAA,CAAAA;AAC1BrB,YAAAA,YAAAA,CAAaiB,QAAQG,WAAAA,EAAaG,WAAAA,CAAAA;YAClCN,MAAAA,GAASM,WAAAA;QACX,CAAA,MAAO;AACL,YAAA,MAAMC,QAAAA,GAAmBL,SAAS,CAACD,CAAAA,GAAI,CAAA,CAAE;YACzC,MAAMO,SAAAA,GAA2Bf,UAAUc,QAAAA,CAAAA,IAAa9B,MAAAA,CAAO8B,aAAa,CAAA,GAAI,EAAE,GAAG,EAAC;AACtFxB,YAAAA,YAAAA,CAAaiB,QAAQG,WAAAA,EAAaK,SAAAA,CAAAA;YAClCR,MAAAA,GAASQ,SAAAA;AACX,QAAA;AACF,IAAA;;AAGA,IAAA,MAAMjB,YAAAA,GACJrB,eAAAA,CAAgBC,GAAAA,CAAAA,IAAQ8B,CAAAA,KAAM,IAC1BtB,YAAAA,CAAaR,GAAAA,EAAK+B,SAAS,CAACD,EAAE,CAAA,GAC9BtB,YAAAA,CAAaqB,MAAAA,EAAQE,SAAS,CAACD,CAAAA,CAAE,CAAA;AACvC,IAAA,IAAIV,iBAAiBP,KAAAA,EAAO;QAC1B,OAAOb,GAAAA;AACT,IAAA;AAEA,
|
|
1
|
+
{"version":3,"file":"objects.js","sources":["../../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\ntype PathObject = Record<string, unknown>;\ntype PathContainer = PathObject | unknown[];\n\nconst isPathContainer = (obj: unknown): obj is PathContainer => isObject(obj) || Array.isArray(obj);\nconst isPathTraversable = (obj: unknown): boolean => {\n if (obj === null || obj === undefined) {\n return false;\n }\n\n if (typeof obj === 'boolean') {\n return obj === true;\n }\n\n if (typeof obj === 'number') {\n return obj !== 0 && Number.isNaN(obj) === false;\n }\n\n if (typeof obj === 'bigint') {\n return obj !== 0n;\n }\n\n if (typeof obj === 'string') {\n return obj !== '';\n }\n\n return true;\n};\nconst getPathValue = (container: unknown, key: string): unknown =>\n (Object(container) as PathObject)[key];\nconst setPathValue = (container: PathContainer, key: string, value: unknown) => {\n (container as PathObject)[key] = value;\n};\nconst deletePathValue = (container: PathContainer, key: string) => {\n delete (container as PathObject)[key];\n};\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn<TValue>(\n obj: unknown,\n key: string | string[],\n def: TValue,\n pathStartIndex?: number\n): TValue;\nexport function getIn<TValue = unknown>(\n obj: unknown,\n key: string | string[],\n def?: TValue,\n pathStartIndex?: number\n): TValue | undefined;\nexport function getIn<TValue = unknown>(\n obj: unknown,\n key: string | string[],\n def?: TValue,\n pathStartIndex: number = 0\n): TValue | undefined {\n const path = toPath(key);\n let currentValue = obj;\n\n while (isPathTraversable(currentValue) && pathStartIndex < path.length) {\n currentValue = getPathValue(currentValue, path[pathStartIndex++]);\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && isPathTraversable(currentValue) === false) {\n return def;\n }\n\n return (currentValue === undefined ? def : currentValue) as TValue | undefined;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: unknown): obj is PathObject =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: unknown): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn<TValue>(obj: TValue, path: string, value: unknown): TValue {\n const res = clone(obj); // this keeps inheritance when obj is a class\n let resVal = res as PathContainer;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj = getIn(obj, pathArray.slice(0, i + 1));\n\n if (isObject(currentObj) || Array.isArray(currentObj)) {\n const clonedValue = clone(currentObj) as PathContainer;\n setPathValue(resVal, currentPath, clonedValue);\n resVal = clonedValue;\n } else {\n const nextPath: string = pathArray[i + 1];\n const nextValue: PathContainer = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n setPathValue(resVal, currentPath, nextValue);\n resVal = nextValue;\n }\n }\n\n // Return original object if new value is the same as current\n const currentValue =\n isPathContainer(obj) && i === 0\n ? getPathValue(obj, pathArray[i])\n : getPathValue(resVal, pathArray[i]);\n if (currentValue === value) {\n return obj;\n }\n\n if (value === undefined) {\n deletePathValue(resVal, pathArray[i]);\n } else {\n setPathValue(resVal, pathArray[i], value);\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n deletePathValue(res as PathContainer, pathArray[i]);\n }\n\n return res;\n}\n"],"names":["isPathContainer","obj","isObject","Array","isArray","isPathTraversable","undefined","Number","isNaN","getPathValue","container","key","Object","setPathValue","value","deletePathValue","getIn","def","pathStartIndex","path","toPath","currentValue","length","isInteger","String","Math","floor","setIn","res","clone","resVal","i","pathArray","currentPath","currentObj","slice","clonedValue","nextPath","nextValue"],"mappings":"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"}
|
|
@@ -88,8 +88,10 @@ function getIn(obj, key, def, pathStartIndex = 0) {
|
|
|
88
88
|
if (currentValue === value) {
|
|
89
89
|
return obj;
|
|
90
90
|
}
|
|
91
|
-
{
|
|
91
|
+
if (value === undefined) {
|
|
92
92
|
deletePathValue(resVal, pathArray[i]);
|
|
93
|
+
} else {
|
|
94
|
+
setPathValue(resVal, pathArray[i], value);
|
|
93
95
|
}
|
|
94
96
|
// If the path array has a single element, the loop did not run.
|
|
95
97
|
// Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"objects.mjs","sources":["../../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\ntype PathObject = Record<string, unknown>;\ntype PathContainer = PathObject | unknown[];\n\nconst isPathContainer = (obj: unknown): obj is PathContainer => isObject(obj) || Array.isArray(obj);\nconst isPathTraversable = (obj: unknown): boolean => {\n if (obj === null || obj === undefined) {\n return false;\n }\n\n if (typeof obj === 'boolean') {\n return obj === true;\n }\n\n if (typeof obj === 'number') {\n return obj !== 0 && Number.isNaN(obj) === false;\n }\n\n if (typeof obj === 'bigint') {\n return obj !== 0n;\n }\n\n if (typeof obj === 'string') {\n return obj !== '';\n }\n\n return true;\n};\nconst getPathValue = (container: unknown, key: string): unknown =>\n (Object(container) as PathObject)[key];\nconst setPathValue = (container: PathContainer, key: string, value: unknown) => {\n (container as PathObject)[key] = value;\n};\nconst deletePathValue = (container: PathContainer, key: string) => {\n delete (container as PathObject)[key];\n};\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn<TValue>(\n obj: unknown,\n key: string | string[],\n def: TValue,\n pathStartIndex?: number\n): TValue;\nexport function getIn<TValue = unknown>(\n obj: unknown,\n key: string | string[],\n def?: TValue,\n pathStartIndex?: number\n): TValue | undefined;\nexport function getIn<TValue = unknown>(\n obj: unknown,\n key: string | string[],\n def?: TValue,\n pathStartIndex: number = 0\n): TValue | undefined {\n const path = toPath(key);\n let currentValue = obj;\n\n while (isPathTraversable(currentValue) && pathStartIndex < path.length) {\n currentValue = getPathValue(currentValue, path[pathStartIndex++]);\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && isPathTraversable(currentValue) === false) {\n return def;\n }\n\n return (currentValue === undefined ? def : currentValue) as TValue | undefined;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: unknown): obj is PathObject =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: unknown): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn<TValue>(obj: TValue, path: string, value: unknown): TValue {\n const res = clone(obj); // this keeps inheritance when obj is a class\n let resVal = res as PathContainer;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj = getIn(obj, pathArray.slice(0, i + 1));\n\n if (isObject(currentObj) || Array.isArray(currentObj)) {\n const clonedValue = clone(currentObj) as PathContainer;\n setPathValue(resVal, currentPath, clonedValue);\n resVal = clonedValue;\n } else {\n const nextPath: string = pathArray[i + 1];\n const nextValue: PathContainer = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n setPathValue(resVal, currentPath, nextValue);\n resVal = nextValue;\n }\n }\n\n // Return original object if new value is the same as current\n const currentValue =\n isPathContainer(obj) && i === 0\n ? getPathValue(obj, pathArray[i])\n : getPathValue(resVal, pathArray[i]);\n if (currentValue === value) {\n return obj;\n }\n\n if (value === undefined) {\n deletePathValue(resVal, pathArray[i]);\n } else {\n setPathValue(resVal, pathArray[i], value);\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n deletePathValue(res as PathContainer, pathArray[i]);\n }\n\n return res;\n}\n"],"names":["isPathContainer","obj","isObject","Array","isArray","isPathTraversable","undefined","Number","isNaN","getPathValue","container","key","Object","setPathValue","value","deletePathValue","getIn","def","pathStartIndex","path","toPath","currentValue","length","isInteger","String","Math","floor","setIn","res","clone","resVal","i","pathArray","currentPath","currentObj","slice","clonedValue","nextPath","nextValue"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"objects.mjs","sources":["../../../admin/src/utils/objects.ts"],"sourcesContent":["import clone from 'lodash/clone';\nimport toPath from 'lodash/toPath';\n\ntype PathObject = Record<string, unknown>;\ntype PathContainer = PathObject | unknown[];\n\nconst isPathContainer = (obj: unknown): obj is PathContainer => isObject(obj) || Array.isArray(obj);\nconst isPathTraversable = (obj: unknown): boolean => {\n if (obj === null || obj === undefined) {\n return false;\n }\n\n if (typeof obj === 'boolean') {\n return obj === true;\n }\n\n if (typeof obj === 'number') {\n return obj !== 0 && Number.isNaN(obj) === false;\n }\n\n if (typeof obj === 'bigint') {\n return obj !== 0n;\n }\n\n if (typeof obj === 'string') {\n return obj !== '';\n }\n\n return true;\n};\nconst getPathValue = (container: unknown, key: string): unknown =>\n (Object(container) as PathObject)[key];\nconst setPathValue = (container: PathContainer, key: string, value: unknown) => {\n (container as PathObject)[key] = value;\n};\nconst deletePathValue = (container: PathContainer, key: string) => {\n delete (container as PathObject)[key];\n};\n\n/**\n * Deeply get a value from an object via its path.\n */\nexport function getIn<TValue>(\n obj: unknown,\n key: string | string[],\n def: TValue,\n pathStartIndex?: number\n): TValue;\nexport function getIn<TValue = unknown>(\n obj: unknown,\n key: string | string[],\n def?: TValue,\n pathStartIndex?: number\n): TValue | undefined;\nexport function getIn<TValue = unknown>(\n obj: unknown,\n key: string | string[],\n def?: TValue,\n pathStartIndex: number = 0\n): TValue | undefined {\n const path = toPath(key);\n let currentValue = obj;\n\n while (isPathTraversable(currentValue) && pathStartIndex < path.length) {\n currentValue = getPathValue(currentValue, path[pathStartIndex++]);\n }\n\n // check if path is not in the end\n if (pathStartIndex !== path.length && isPathTraversable(currentValue) === false) {\n return def;\n }\n\n return (currentValue === undefined ? def : currentValue) as TValue | undefined;\n}\n\n/** @internal is the given object an Object? */\nexport const isObject = (obj: unknown): obj is PathObject =>\n obj !== null && typeof obj === 'object' && !Array.isArray(obj);\n\n/** @internal is the given object an integer? */\nexport const isInteger = (obj: unknown): boolean => String(Math.floor(Number(obj))) === obj;\n\n/**\n * Deeply set a value from in object via its path. If the value at `path`\n * has changed, return a shallow copy of obj with `value` set at `path`.\n * If `value` has not changed, return the original `obj`.\n *\n * Existing objects / arrays along `path` are also shallow copied. Sibling\n * objects along path retain the same internal js reference. Since new\n * objects / arrays are only created along `path`, we can test if anything\n * changed in a nested structure by comparing the object's reference in\n * the old and new object, similar to how russian doll cache invalidation\n * works.\n *\n * In earlier versions of this function, which used cloneDeep, there were\n * issues whereby settings a nested value would mutate the parent\n * instead of creating a new object. `clone` avoids that bug making a\n * shallow copy of the objects along the update path\n * so no object is mutated in place.\n *\n * Before changing this function, please read through the following\n * discussions.\n *\n * @see https://github.com/developit/linkstate\n * @see https://github.com/jaredpalmer/formik/pull/123\n */\nexport function setIn<TValue>(obj: TValue, path: string, value: unknown): TValue {\n const res = clone(obj); // this keeps inheritance when obj is a class\n let resVal = res as PathContainer;\n let i = 0;\n const pathArray = toPath(path);\n\n for (; i < pathArray.length - 1; i++) {\n const currentPath: string = pathArray[i];\n const currentObj = getIn(obj, pathArray.slice(0, i + 1));\n\n if (isObject(currentObj) || Array.isArray(currentObj)) {\n const clonedValue = clone(currentObj) as PathContainer;\n setPathValue(resVal, currentPath, clonedValue);\n resVal = clonedValue;\n } else {\n const nextPath: string = pathArray[i + 1];\n const nextValue: PathContainer = isInteger(nextPath) && Number(nextPath) >= 0 ? [] : {};\n setPathValue(resVal, currentPath, nextValue);\n resVal = nextValue;\n }\n }\n\n // Return original object if new value is the same as current\n const currentValue =\n isPathContainer(obj) && i === 0\n ? getPathValue(obj, pathArray[i])\n : getPathValue(resVal, pathArray[i]);\n if (currentValue === value) {\n return obj;\n }\n\n if (value === undefined) {\n deletePathValue(resVal, pathArray[i]);\n } else {\n setPathValue(resVal, pathArray[i], value);\n }\n\n // If the path array has a single element, the loop did not run.\n // Deleting on `resVal` had no effect in this scenario, so we delete on the result instead.\n if (i === 0 && value === undefined) {\n deletePathValue(res as PathContainer, pathArray[i]);\n }\n\n return res;\n}\n"],"names":["isPathContainer","obj","isObject","Array","isArray","isPathTraversable","undefined","Number","isNaN","getPathValue","container","key","Object","setPathValue","value","deletePathValue","getIn","def","pathStartIndex","path","toPath","currentValue","length","isInteger","String","Math","floor","setIn","res","clone","resVal","i","pathArray","currentPath","currentObj","slice","clonedValue","nextPath","nextValue"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const resolvePreviewImageUrl = (preview)=>{
|
|
4
|
+
if (!preview) {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
if (typeof preview === 'string') {
|
|
8
|
+
return preview;
|
|
9
|
+
}
|
|
10
|
+
return preview.url;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
exports.resolvePreviewImageUrl = resolvePreviewImageUrl;
|
|
14
|
+
//# sourceMappingURL=previewImage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previewImage.js","sources":["../../../admin/src/utils/previewImage.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\n\nconst resolvePreviewImageUrl = (preview?: Struct.PreviewImageValue): string | undefined => {\n if (!preview) {\n return undefined;\n }\n\n if (typeof preview === 'string') {\n return preview;\n }\n\n return preview.url;\n};\n\nexport { resolvePreviewImageUrl };\n"],"names":["resolvePreviewImageUrl","preview","undefined","url"],"mappings":";;AAEA,MAAMA,yBAAyB,CAACC,OAAAA,GAAAA;AAC9B,IAAA,IAAI,CAACA,OAAAA,EAAS;QACZ,OAAOC,SAAAA;AACT,IAAA;IAEA,IAAI,OAAOD,YAAY,QAAA,EAAU;QAC/B,OAAOA,OAAAA;AACT,IAAA;AAEA,IAAA,OAAOA,QAAQE,GAAG;AACpB;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const resolvePreviewImageUrl = (preview)=>{
|
|
2
|
+
if (!preview) {
|
|
3
|
+
return undefined;
|
|
4
|
+
}
|
|
5
|
+
if (typeof preview === 'string') {
|
|
6
|
+
return preview;
|
|
7
|
+
}
|
|
8
|
+
return preview.url;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export { resolvePreviewImageUrl };
|
|
12
|
+
//# sourceMappingURL=previewImage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"previewImage.mjs","sources":["../../../admin/src/utils/previewImage.ts"],"sourcesContent":["import type { Struct } from '@strapi/types';\n\nconst resolvePreviewImageUrl = (preview?: Struct.PreviewImageValue): string | undefined => {\n if (!preview) {\n return undefined;\n }\n\n if (typeof preview === 'string') {\n return preview;\n }\n\n return preview.url;\n};\n\nexport { resolvePreviewImageUrl };\n"],"names":["resolvePreviewImageUrl","preview","undefined","url"],"mappings":"AAEA,MAAMA,yBAAyB,CAACC,OAAAA,GAAAA;AAC9B,IAAA,IAAI,CAACA,OAAAA,EAAS;QACZ,OAAOC,SAAAA;AACT,IAAA;IAEA,IAAI,OAAOD,YAAY,QAAA,EAAU;QAC/B,OAAOA,OAAAA;AACT,IAAA;AAEA,IAAA,OAAOA,QAAQE,GAAG;AACpB;;;;"}
|
|
@@ -181,14 +181,14 @@ const createAttributeSchema = (attribute)=>{
|
|
|
181
181
|
try {
|
|
182
182
|
JSON.stringify(value);
|
|
183
183
|
return true;
|
|
184
|
-
} catch
|
|
184
|
+
} catch {
|
|
185
185
|
return false;
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
188
|
try {
|
|
189
189
|
JSON.parse(value);
|
|
190
190
|
return true;
|
|
191
|
-
} catch
|
|
191
|
+
} catch {
|
|
192
192
|
return false;
|
|
193
193
|
}
|
|
194
194
|
});
|