@strapi/content-manager 5.31.0 → 5.31.1
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/EditFieldForm.js +2 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +2 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
- package/dist/admin/pages/EditView/utils/data.js +128 -45
- package/dist/admin/pages/EditView/utils/data.js.map +1 -1
- package/dist/admin/pages/EditView/utils/data.mjs +128 -45
- package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js +6 -16
- package/dist/admin/pages/ListView/components/BulkActions/Actions.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs +6 -16
- package/dist/admin/pages/ListView/components/BulkActions/Actions.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js +18 -31
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs +19 -32
- package/dist/admin/pages/ListView/components/BulkActions/ConfirmBulkActionDialog.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.js.map +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs +1 -1
- package/dist/admin/pages/ListView/components/BulkActions/PublishAction.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/CellContent.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Media.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.js +8 -4
- package/dist/admin/pages/ListView/components/TableCells/Relations.js.map +1 -1
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs +8 -4
- package/dist/admin/pages/ListView/components/TableCells/Relations.mjs.map +1 -1
- package/dist/admin/src/pages/EditView/utils/data.d.ts +4 -4
- package/dist/admin/src/pages/ListView/components/TableCells/Relations.d.ts +0 -3
- package/dist/server/controllers/validation/model-configuration.js +2 -2
- package/dist/server/controllers/validation/model-configuration.js.map +1 -1
- package/dist/server/controllers/validation/model-configuration.mjs +2 -2
- package/dist/server/controllers/validation/model-configuration.mjs.map +1 -1
- package/dist/server/homepage/services/homepage.js +2 -1
- package/dist/server/homepage/services/homepage.js.map +1 -1
- package/dist/server/homepage/services/homepage.mjs +2 -1
- package/dist/server/homepage/services/homepage.mjs.map +1 -1
- package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -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 } 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 useGetAllDocumentsQuery,\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';\n\nimport { ConfirmDialogPublishAll, ConfirmDialogPublishAllProps } from './ConfirmBulkActionDialog';\n\nimport type { BulkActionComponent } from '../../../../content-manager';\nimport type { Document } from '../../../../hooks/useDocument';\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\nconst formatErrorMessages = (errors: FormErrors, parentKey: string, formatMessage: any) => {\n const messages: string[] = [];\n\n Object.entries(errors).forEach(([key, value]) => {\n const currentKey = parentKey ? `${parentKey}.${key}` : key;\n\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n if ('id' in value && 'defaultMessage' in value) {\n messages.push(\n formatMessage(\n {\n id: `${value.id}.withField`,\n defaultMessage: value.defaultMessage,\n },\n { field: currentKey }\n )\n );\n } else {\n messages.push(\n ...formatErrorMessages(\n // @ts-expect-error TODO: check why value is not compatible with FormErrors\n value,\n currentKey,\n formatMessage\n )\n );\n }\n } else {\n messages.push(\n formatMessage(\n {\n id: `${value}.withField`,\n defaultMessage: value,\n },\n { field: currentKey }\n )\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 description={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: 'id', label: 'id' },\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 = mainField != null && mainField !== 'id';\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.id}</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?: Record<string, any> }>();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n // Fetch the documents based on the selected entries and update the modal table\n const { data, isLoading, isFetching, refetch } = useGetAllDocumentsQuery(\n {\n model,\n params: {\n page: '1',\n pageSize: documentIds.length.toString(),\n sort: query.sort,\n filters: {\n documentId: {\n $in: documentIds,\n },\n },\n locale: query.plugins?.i18n?.locale,\n },\n },\n {\n selectFromResult: ({ data, ...restRes }) => ({ data: data?.results ?? [], ...restRes }),\n }\n );\n\n // Validate the entries based on the schema to show errors if any\n const { rows, validationErrors } = React.useMemo(() => {\n if (data.length > 0 && schema) {\n const validate = createYupSchema(\n schema.attributes,\n components,\n // Since this is the \"Publish\" action, the validation\n // schema must enforce the rules for published entities\n { status: 'published' }\n );\n const validationErrors: Record<TableRow['documentId'], FormErrors> = {};\n const rows = data.map((entry: Document) => {\n try {\n validate.validateSync(entry, { abortEarly: false });\n\n return entry;\n } catch (e) {\n if (e instanceof ValidationError) {\n validationErrors[entry.documentId] = getYupValidationErrors(e);\n }\n\n return entry;\n }\n });\n\n return { rows, validationErrors };\n }\n\n return {\n rows: [],\n validationErrors: {},\n };\n }, [components, data, 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);\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","Array","isArray","push","id","defaultMessage","field","EntryValidationText","validationErrors","status","useIntl","validationErrorsMessages","join","_jsxs","Flex","gap","_jsx","CrossCircle","fill","Tooltip","description","textColor","variant","fontWeight","ellipsis","CheckCircle","ArrowsCounterClockwise","TABLE_HEADERS","name","label","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","DocumentStatus","maxWidth","includes","documentId","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","isLoading","isFetching","refetch","useGetAllDocumentsQuery","page","pageSize","length","toString","sort","filters","$in","plugins","i18n","selectFromResult","restRes","results","rows","validate","createYupSchema","attributes","entry","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","documents","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 } 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 useGetAllDocumentsQuery,\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';\n\nimport { ConfirmDialogPublishAll, ConfirmDialogPublishAllProps } from './ConfirmBulkActionDialog';\n\nimport type { BulkActionComponent } from '../../../../content-manager';\nimport type { Document } from '../../../../hooks/useDocument';\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\nconst formatErrorMessages = (errors: FormErrors, parentKey: string, formatMessage: any) => {\n const messages: string[] = [];\n\n Object.entries(errors).forEach(([key, value]) => {\n const currentKey = parentKey ? `${parentKey}.${key}` : key;\n\n if (typeof value === 'object' && value !== null && !Array.isArray(value)) {\n if ('id' in value && 'defaultMessage' in value) {\n messages.push(\n formatMessage(\n {\n id: `${value.id}.withField`,\n defaultMessage: value.defaultMessage,\n },\n { field: currentKey }\n )\n );\n } else {\n messages.push(\n ...formatErrorMessages(\n // @ts-expect-error TODO: check why value is not compatible with FormErrors\n value,\n currentKey,\n formatMessage\n )\n );\n }\n } else {\n messages.push(\n formatMessage(\n {\n id: `${value}.withField`,\n defaultMessage: value,\n },\n { field: currentKey }\n )\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: 'id', label: 'id' },\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 = mainField != null && mainField !== 'id';\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.id}</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?: Record<string, any> }>();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n // Fetch the documents based on the selected entries and update the modal table\n const { data, isLoading, isFetching, refetch } = useGetAllDocumentsQuery(\n {\n model,\n params: {\n page: '1',\n pageSize: documentIds.length.toString(),\n sort: query.sort,\n filters: {\n documentId: {\n $in: documentIds,\n },\n },\n locale: query.plugins?.i18n?.locale,\n },\n },\n {\n selectFromResult: ({ data, ...restRes }) => ({ data: data?.results ?? [], ...restRes }),\n }\n );\n\n // Validate the entries based on the schema to show errors if any\n const { rows, validationErrors } = React.useMemo(() => {\n if (data.length > 0 && schema) {\n const validate = createYupSchema(\n schema.attributes,\n components,\n // Since this is the \"Publish\" action, the validation\n // schema must enforce the rules for published entities\n { status: 'published' }\n );\n const validationErrors: Record<TableRow['documentId'], FormErrors> = {};\n const rows = data.map((entry: Document) => {\n try {\n validate.validateSync(entry, { abortEarly: false });\n\n return entry;\n } catch (e) {\n if (e instanceof ValidationError) {\n validationErrors[entry.documentId] = getYupValidationErrors(e);\n }\n\n return entry;\n }\n });\n\n return { rows, validationErrors };\n }\n\n return {\n rows: [],\n validationErrors: {},\n };\n }, [components, data, 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);\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","Array","isArray","push","id","defaultMessage","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","DocumentStatus","maxWidth","includes","documentId","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","isLoading","isFetching","refetch","useGetAllDocumentsQuery","page","pageSize","length","toString","sort","filters","$in","plugins","i18n","selectFromResult","restRes","results","rows","validate","createYupSchema","attributes","entry","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","documents","hasPublishPermission","useDocumentRBAC","canPublish","showPublishButton","selectRow","refetchList","contentManagerApi","util","invalidateTags","type","actionType","dialog","title","getTranslation","content","onClose","Root","defaultSelectedRows","headers"],"mappings":"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"}
|
|
@@ -55,7 +55,7 @@ const CellContent = ({ content, mainField, attribute, rowId, name })=>{
|
|
|
55
55
|
});
|
|
56
56
|
case 'string':
|
|
57
57
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
|
|
58
|
-
|
|
58
|
+
label: content,
|
|
59
59
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
60
60
|
maxWidth: "30rem",
|
|
61
61
|
ellipsis: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellContent.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n if (!hasContent(content, mainField, attribute)) {\n return (\n <Typography\n textColor=\"neutral800\"\n paddingLeft={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n paddingRight={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n >\n -\n </Typography>\n );\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip
|
|
1
|
+
{"version":3,"file":"CellContent.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n if (!hasContent(content, mainField, attribute)) {\n return (\n <Typography\n textColor=\"neutral800\"\n paddingLeft={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n paddingRight={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n >\n -\n </Typography>\n );\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip label={content}>\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n </Tooltip>\n );\n\n default:\n return (\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n );\n }\n};\n\nconst hasContent = (\n content: CellContentProps['content'],\n mainField: CellContentProps['mainField'],\n attribute: CellContentProps['attribute']\n) => {\n if (attribute.type === 'component') {\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (attribute.repeatable || !mainField) {\n return content?.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n return !isEmpty(value);\n }\n\n if (attribute.type === 'relation') {\n if (isSingleRelation(attribute.relation)) {\n return !isEmpty(content);\n }\n\n if (Array.isArray(content)) {\n return content.length > 0;\n }\n\n return content?.count > 0;\n }\n\n /*\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (['integer', 'decimal', 'float', 'number'].includes(attribute.type)) {\n return typeof content === 'number';\n }\n\n if (attribute.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['attribute'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent };\nexport type { CellContentProps };\n"],"names":["CellContent","content","mainField","attribute","rowId","name","hasContent","_jsx","Typography","textColor","paddingLeft","type","paddingRight","multiple","MediaSingle","MediaMultiple","isSingleRelation","relation","RelationSingle","RelationMultiple","repeatable","RepeatableComponent","SingleComponent","Tooltip","label","maxWidth","ellipsis","CellValue","value","length","undefined","includes","isEmpty","Array","isArray","count"],"mappings":";;;;;;;;;;AAgBA,MAAMA,WAAc,GAAA,CAAC,EAAEC,OAAO,EAAEC,SAAS,EAAEC,SAAS,EAAEC,KAAK,EAAEC,IAAI,EAAoB,GAAA;AACnF,IAAA,IAAI,CAACC,UAAAA,CAAWL,OAASC,EAAAA,SAAAA,EAAWC,SAAY,CAAA,EAAA;AAC9C,QAAA,qBACEI,cAACC,CAAAA,uBAAAA,EAAAA;YACCC,SAAU,EAAA,YAAA;AACVC,YAAAA,WAAAA,EAAaP,UAAUQ,IAAI,MAAM,UAAwB,IAAK,QAAW,GAAA,CAAA;AACzEC,YAAAA,YAAAA,EAAcT,UAAUQ,IAAI,MAAM,UAAwB,IAAK,QAAW,GAAA,CAAA;AAC3E,YAAA,QAAA,EAAA;;AAIL;AAEA,IAAA,OAAQR,UAAUQ,IAAI;QACpB,KAAK,OAAA;YACH,IAAI,CAACR,SAAUU,CAAAA,QAAQ,EAAE;AACvB,gBAAA,qBAAON,cAACO,CAAAA,iBAAAA,EAAAA;AAAa,oBAAA,GAAGb;;AAC1B;AAEA,YAAA,qBAAOM,cAACQ,CAAAA,mBAAAA,EAAAA;gBAAcd,OAASA,EAAAA;;QAEjC,KAAK,UAAA;AAAY,YAAA;gBACf,IAAIe,gBAAAA,CAAiBb,SAAUc,CAAAA,QAAQ,CAAG,EAAA;AACxC,oBAAA,qBAAOV,cAACW,CAAAA,wBAAAA,EAAAA;wBAAehB,SAAWA,EAAAA,SAAAA;wBAAWD,OAASA,EAAAA;;AACxD;AAEA,gBAAA,qBAAOM,cAACY,CAAAA,0BAAAA,EAAAA;oBAAiBf,KAAOA,EAAAA,KAAAA;oBAAOF,SAAWA,EAAAA,SAAAA;oBAAWD,OAASA,EAAAA,OAAAA;oBAASI,IAAMA,EAAAA;;AACvF;QAEA,KAAK,WAAA;YACH,IAAIF,SAAAA,CAAUiB,UAAU,EAAE;AACxB,gBAAA,qBAAOb,cAACc,CAAAA,8BAAAA,EAAAA;oBAAoBnB,SAAWA,EAAAA,SAAAA;oBAAWD,OAASA,EAAAA;;AAC7D;AAEA,YAAA,qBAAOM,cAACe,CAAAA,0BAAAA,EAAAA;gBAAgBpB,SAAWA,EAAAA,SAAAA;gBAAWD,OAASA,EAAAA;;QAEzD,KAAK,QAAA;AACH,YAAA,qBACEM,cAACgB,CAAAA,oBAAAA,EAAAA;gBAAQC,KAAOvB,EAAAA,OAAAA;AACd,gBAAA,QAAA,gBAAAM,cAACC,CAAAA,uBAAAA,EAAAA;oBAAWiB,QAAS,EAAA,OAAA;oBAAQC,QAAQ,EAAA,IAAA;oBAACjB,SAAU,EAAA,YAAA;AAC9C,oBAAA,QAAA,gBAAAF,cAACoB,CAAAA,mBAAAA,EAAAA;AAAUhB,wBAAAA,IAAAA,EAAMR,UAAUQ,IAAI;wBAAEiB,KAAO3B,EAAAA;;;;AAKhD,QAAA;AACE,YAAA,qBACEM,cAACC,CAAAA,uBAAAA,EAAAA;gBAAWiB,QAAS,EAAA,OAAA;gBAAQC,QAAQ,EAAA,IAAA;gBAACjB,SAAU,EAAA,YAAA;AAC9C,gBAAA,QAAA,gBAAAF,cAACoB,CAAAA,mBAAAA,EAAAA;AAAUhB,oBAAAA,IAAAA,EAAMR,UAAUQ,IAAI;oBAAEiB,KAAO3B,EAAAA;;;AAGhD;AACF;AAEA,MAAMK,UAAAA,GAAa,CACjBL,OAAAA,EACAC,SACAC,EAAAA,SAAAA,GAAAA;IAEA,IAAIA,SAAAA,CAAUQ,IAAI,KAAK,WAAa,EAAA;;;AAGlC,QAAA,IAAIR,SAAUiB,CAAAA,UAAU,IAAI,CAAClB,SAAW,EAAA;AACtC,YAAA,OAAOD,SAAS4B,MAAS,GAAA,CAAA;AAC3B;AAEA,QAAA,MAAMD,KAAQ3B,GAAAA,OAAAA,GAAUC,SAAAA,CAAUG,IAAI,CAAC;;AAGvC,QAAA,IAAIH,SAAUG,CAAAA,IAAI,KAAK,IAAA,IAAQ,CAAC;AAACyB,YAAAA,SAAAA;AAAW,YAAA;SAAK,CAACC,QAAQ,CAACH,KAAQ,CAAA,EAAA;YACjE,OAAO,IAAA;AACT;AAEA,QAAA,OAAO,CAACI,OAAQJ,CAAAA,KAAAA,CAAAA;AAClB;IAEA,IAAIzB,SAAAA,CAAUQ,IAAI,KAAK,UAAY,EAAA;QACjC,IAAIK,gBAAAA,CAAiBb,SAAUc,CAAAA,QAAQ,CAAG,EAAA;AACxC,YAAA,OAAO,CAACe,OAAQ/B,CAAAA,OAAAA,CAAAA;AAClB;QAEA,IAAIgC,KAAAA,CAAMC,OAAO,CAACjC,OAAU,CAAA,EAAA;YAC1B,OAAOA,OAAAA,CAAQ4B,MAAM,GAAG,CAAA;AAC1B;AAEA,QAAA,OAAO5B,SAASkC,KAAQ,GAAA,CAAA;AAC1B;AAEA;;;AAGA,KACA,IAAI;AAAC,QAAA,SAAA;AAAW,QAAA,SAAA;AAAW,QAAA,OAAA;AAAS,QAAA;AAAS,KAAA,CAACJ,QAAQ,CAAC5B,SAAUQ,CAAAA,IAAI,CAAG,EAAA;AACtE,QAAA,OAAO,OAAOV,OAAY,KAAA,QAAA;AAC5B;IAEA,IAAIE,SAAAA,CAAUQ,IAAI,KAAK,SAAW,EAAA;AAChC,QAAA,OAAOV,OAAY,KAAA,IAAA;AACrB;AAEA,IAAA,OAAO,CAAC+B,OAAQ/B,CAAAA,OAAAA,CAAAA;AAClB,CAAA;AAEA,MAAMe,gBAAAA,GAAmB,CACvBL,IACG,GAAA;AAAC,QAAA,UAAA;AAAY,QAAA,WAAA;AAAa,QAAA;AAAgB,KAAA,CAACoB,QAAQ,CAACpB,IAAAA,CAAAA;;;;"}
|
|
@@ -53,7 +53,7 @@ const CellContent = ({ content, mainField, attribute, rowId, name })=>{
|
|
|
53
53
|
});
|
|
54
54
|
case 'string':
|
|
55
55
|
return /*#__PURE__*/ jsx(Tooltip, {
|
|
56
|
-
|
|
56
|
+
label: content,
|
|
57
57
|
children: /*#__PURE__*/ jsx(Typography, {
|
|
58
58
|
maxWidth: "30rem",
|
|
59
59
|
ellipsis: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellContent.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n if (!hasContent(content, mainField, attribute)) {\n return (\n <Typography\n textColor=\"neutral800\"\n paddingLeft={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n paddingRight={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n >\n -\n </Typography>\n );\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip
|
|
1
|
+
{"version":3,"file":"CellContent.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { CellValue } from './CellValue';\nimport { SingleComponent, RepeatableComponent } from './Components';\nimport { MediaSingle, MediaMultiple } from './Media';\nimport { RelationMultiple, RelationSingle } from './Relations';\n\nimport type { ListFieldLayout } from '../../../../hooks/useDocumentLayout';\nimport type { Schema, Data } from '@strapi/types';\n\ninterface CellContentProps extends Omit<ListFieldLayout, 'cellFormatter'> {\n content: Schema.Attribute.Value<Schema.Attribute.AnyAttribute>;\n rowId: Data.ID;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name }: CellContentProps) => {\n if (!hasContent(content, mainField, attribute)) {\n return (\n <Typography\n textColor=\"neutral800\"\n paddingLeft={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n paddingRight={attribute.type === ('relation' || 'component') ? '1.6rem' : 0}\n >\n -\n </Typography>\n );\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return <MediaSingle {...content} />;\n }\n\n return <MediaMultiple content={content} />;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return <RelationSingle mainField={mainField} content={content} />;\n }\n\n return <RelationMultiple rowId={rowId} mainField={mainField} content={content} name={name} />;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return <RepeatableComponent mainField={mainField} content={content} />;\n }\n\n return <SingleComponent mainField={mainField} content={content} />;\n\n case 'string':\n return (\n <Tooltip label={content}>\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n </Tooltip>\n );\n\n default:\n return (\n <Typography maxWidth=\"30rem\" ellipsis textColor=\"neutral800\">\n <CellValue type={attribute.type} value={content} />\n </Typography>\n );\n }\n};\n\nconst hasContent = (\n content: CellContentProps['content'],\n mainField: CellContentProps['mainField'],\n attribute: CellContentProps['attribute']\n) => {\n if (attribute.type === 'component') {\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (attribute.repeatable || !mainField) {\n return content?.length > 0;\n }\n\n const value = content?.[mainField.name];\n\n // relations, media ... show the id as fallback\n if (mainField.name === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n return !isEmpty(value);\n }\n\n if (attribute.type === 'relation') {\n if (isSingleRelation(attribute.relation)) {\n return !isEmpty(content);\n }\n\n if (Array.isArray(content)) {\n return content.length > 0;\n }\n\n return content?.count > 0;\n }\n\n /*\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (['integer', 'decimal', 'float', 'number'].includes(attribute.type)) {\n return typeof content === 'number';\n }\n\n if (attribute.type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n};\n\nconst isSingleRelation = (\n type: Extract<CellContentProps['attribute'], { type: 'relation' }>['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent };\nexport type { CellContentProps };\n"],"names":["CellContent","content","mainField","attribute","rowId","name","hasContent","_jsx","Typography","textColor","paddingLeft","type","paddingRight","multiple","MediaSingle","MediaMultiple","isSingleRelation","relation","RelationSingle","RelationMultiple","repeatable","RepeatableComponent","SingleComponent","Tooltip","label","maxWidth","ellipsis","CellValue","value","length","undefined","includes","isEmpty","Array","isArray","count"],"mappings":"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"}
|
|
@@ -22,7 +22,7 @@ const MediaSingle = ({ url, mime, alternativeText, name, ext, formats })=>{
|
|
|
22
22
|
const fileExtension = getFileExtension(ext);
|
|
23
23
|
const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;
|
|
24
24
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
|
|
25
|
-
|
|
25
|
+
label: fileName,
|
|
26
26
|
children: /*#__PURE__*/ jsxRuntime.jsx(FileWrapper, {
|
|
27
27
|
children: fileExtension
|
|
28
28
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Media.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip
|
|
1
|
+
{"version":3,"file":"Media.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip label={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","label","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ const MediaSingle = ({ url, mime, alternativeText, name, ext, formats })=>{
|
|
|
20
20
|
const fileExtension = getFileExtension(ext);
|
|
21
21
|
const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;
|
|
22
22
|
return /*#__PURE__*/ jsx(Tooltip, {
|
|
23
|
-
|
|
23
|
+
label: fileName,
|
|
24
24
|
children: /*#__PURE__*/ jsx(FileWrapper, {
|
|
25
25
|
children: fileExtension
|
|
26
26
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Media.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip
|
|
1
|
+
{"version":3,"file":"Media.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Media.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Avatar, Flex, Tooltip, Typography, TypographyComponent } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/urls';\n\nimport type { Data } from '@strapi/types';\n\ninterface MediaFile {\n id?: Data.ID;\n alternativeText?: string;\n ext: string;\n formats: {\n thumbnail?: {\n url?: string;\n };\n };\n mime: string;\n name: string;\n url: string;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Media\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaSingleProps extends MediaFile {}\n\nconst getFileExtension = (ext: string) => (ext && ext[0] === '.' ? ext.substring(1) : ext);\n\nconst MediaSingle = ({ url, mime, alternativeText, name, ext, formats }: MediaSingleProps) => {\n const fileURL = prefixFileUrlWithBackendUrl(url)!;\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || name}\n fallback={alternativeText || name}\n preview\n />\n );\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip label={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nconst FileWrapper = ({ children }: { children: React.ReactNode }) => {\n return (\n <Flex\n tag=\"span\"\n position=\"relative\"\n borderRadius=\"50%\"\n width=\"26px\"\n height=\"26px\"\n borderColor=\"neutral200\"\n background=\"neutral150\"\n paddingLeft=\"1px\"\n justifyContent=\"center\"\n alignItems=\"center\"\n >\n <FileTypography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </FileTypography>\n </Flex>\n );\n};\n\nconst FileTypography = styled<TypographyComponent>(Typography)`\n font-size: 0.9rem;\n line-height: 0.9rem;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * MediaMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface MediaMultipleProps {\n content: MediaFile[];\n}\n\nconst MediaMultiple = ({ content }: MediaMultipleProps) => {\n return (\n <Avatar.Group>\n {content.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${content.length - 3}`;\n\n return <FileWrapper key={key}>{remainingFiles}</FileWrapper>;\n }\n\n if (index > 3) {\n return null;\n }\n\n return <MediaSingle key={key} {...file} />;\n })}\n </Avatar.Group>\n );\n};\n\nexport { MediaMultiple, MediaSingle };\nexport type { MediaMultipleProps, MediaSingleProps };\n"],"names":["getFileExtension","ext","substring","MediaSingle","url","mime","alternativeText","name","formats","fileURL","prefixFileUrlWithBackendUrl","includes","thumbnail","mediaURL","_jsx","Avatar","Item","src","alt","fallback","preview","fileExtension","fileName","length","Tooltip","label","FileWrapper","children","Flex","tag","position","borderRadius","width","height","borderColor","background","paddingLeft","justifyContent","alignItems","FileTypography","variant","textColor","styled","Typography","MediaMultiple","content","Group","map","file","index","key","id","remainingFiles"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var React = require('react');
|
|
5
|
+
var strapiAdmin = require('@strapi/admin/strapi-admin');
|
|
5
6
|
var designSystem = require('@strapi/design-system');
|
|
6
7
|
var reactIntl = require('react-intl');
|
|
7
8
|
var useDocument = require('../../../../hooks/useDocument.js');
|
|
@@ -36,18 +37,21 @@ const RelationSingle = ({ mainField, content })=>{
|
|
|
36
37
|
children: relations.getRelationLabel(content, mainField)
|
|
37
38
|
});
|
|
38
39
|
};
|
|
39
|
-
|
|
40
|
-
* TODO: fix this component – tracking issue https://strapi-inc.atlassian.net/browse/CONTENT-2184
|
|
41
|
-
*/ const RelationMultiple = ({ mainField, content, rowId, name })=>{
|
|
40
|
+
const RelationMultiple = ({ mainField, content, rowId, name })=>{
|
|
42
41
|
const { model } = useDocument.useDoc();
|
|
43
42
|
const { formatMessage } = reactIntl.useIntl();
|
|
44
43
|
const { notifyStatus } = designSystem.useNotifyAT();
|
|
45
44
|
const [isOpen, setIsOpen] = React__namespace.useState(false);
|
|
45
|
+
const [{ query }] = strapiAdmin.useQueryParams();
|
|
46
|
+
const locale = query.plugins?.i18n?.locale;
|
|
46
47
|
const [targetField] = name.split('.');
|
|
47
48
|
const { data, isLoading } = relations$1.useGetRelationsQuery({
|
|
48
49
|
model,
|
|
49
50
|
id: rowId,
|
|
50
|
-
targetField
|
|
51
|
+
targetField,
|
|
52
|
+
params: {
|
|
53
|
+
locale
|
|
54
|
+
}
|
|
51
55
|
}, {
|
|
52
56
|
skip: !isOpen,
|
|
53
57
|
refetchOnMountOrArgChange: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Relations.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps\n extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {}\n\
|
|
1
|
+
{"version":3,"file":"Relations.js","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Typography, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps\n extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {}\n\nconst RelationMultiple = ({ mainField, content, rowId, name }: RelationMultipleProps) => {\n const { model } = useDoc();\n const { formatMessage } = useIntl();\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = React.useState(false);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n const [targetField] = name.split('.');\n\n const { data, isLoading } = useGetRelationsQuery(\n {\n model,\n id: rowId,\n targetField,\n params: { locale },\n },\n {\n skip: !isOpen,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const contentCount = Array.isArray(content) ? content.length : content.count;\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('DynamicTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <Menu.Trigger onClick={(e) => e.stopPropagation()}>\n <Typography style={{ cursor: 'pointer' }} textColor=\"neutral800\" fontWeight=\"regular\">\n {contentCount > 0\n ? formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number} {number, plural, =0 {items} one {item} other {items}}',\n },\n { number: contentCount }\n )\n : '-'}\n </Typography>\n </Menu.Trigger>\n <Menu.Content>\n {isLoading && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTranslation('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n {data?.results && (\n <>\n {data.results.map((entry) => (\n <Menu.Item key={entry.documentId}>\n <Typography maxWidth=\"50rem\" ellipsis>\n {getRelationLabel(entry, mainField)}\n </Typography>\n </Menu.Item>\n ))}\n\n {data?.pagination && data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTranslation('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nexport { RelationSingle, RelationMultiple };\nexport type { RelationSingleProps, RelationMultipleProps };\n"],"names":["RelationSingle","mainField","content","_jsx","Typography","maxWidth","textColor","ellipsis","getRelationLabel","RelationMultiple","rowId","name","model","useDoc","formatMessage","useIntl","notifyStatus","useNotifyAT","isOpen","setIsOpen","React","useState","query","useQueryParams","locale","plugins","i18n","targetField","split","data","isLoading","useGetRelationsQuery","id","params","skip","refetchOnMountOrArgChange","contentCount","Array","isArray","length","count","useEffect","getTranslation","defaultMessage","_jsxs","Menu","Root","onOpenChange","Trigger","onClick","e","stopPropagation","style","cursor","fontWeight","number","Content","Item","disabled","Loader","small","results","_Fragment","map","entry","documentId","pagination","total","aria-disabled","aria-label"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import * as React from 'react';
|
|
3
|
+
import { useQueryParams } from '@strapi/admin/strapi-admin';
|
|
3
4
|
import { Typography, useNotifyAT, Menu, Loader } from '@strapi/design-system';
|
|
4
5
|
import { useIntl } from 'react-intl';
|
|
5
6
|
import { useDoc } from '../../../../hooks/useDocument.mjs';
|
|
@@ -15,18 +16,21 @@ const RelationSingle = ({ mainField, content })=>{
|
|
|
15
16
|
children: getRelationLabel(content, mainField)
|
|
16
17
|
});
|
|
17
18
|
};
|
|
18
|
-
|
|
19
|
-
* TODO: fix this component – tracking issue https://strapi-inc.atlassian.net/browse/CONTENT-2184
|
|
20
|
-
*/ const RelationMultiple = ({ mainField, content, rowId, name })=>{
|
|
19
|
+
const RelationMultiple = ({ mainField, content, rowId, name })=>{
|
|
21
20
|
const { model } = useDoc();
|
|
22
21
|
const { formatMessage } = useIntl();
|
|
23
22
|
const { notifyStatus } = useNotifyAT();
|
|
24
23
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
24
|
+
const [{ query }] = useQueryParams();
|
|
25
|
+
const locale = query.plugins?.i18n?.locale;
|
|
25
26
|
const [targetField] = name.split('.');
|
|
26
27
|
const { data, isLoading } = useGetRelationsQuery({
|
|
27
28
|
model,
|
|
28
29
|
id: rowId,
|
|
29
|
-
targetField
|
|
30
|
+
targetField,
|
|
31
|
+
params: {
|
|
32
|
+
locale
|
|
33
|
+
}
|
|
30
34
|
}, {
|
|
31
35
|
skip: !isOpen,
|
|
32
36
|
refetchOnMountOrArgChange: true
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Relations.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Typography, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps\n extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {}\n\
|
|
1
|
+
{"version":3,"file":"Relations.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/Relations.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useQueryParams } from '@strapi/admin/strapi-admin';\nimport { Typography, Loader, useNotifyAT, Menu } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { useGetRelationsQuery } from '../../../../services/relations';\nimport { getRelationLabel } from '../../../../utils/relations';\nimport { getTranslation } from '../../../../utils/translations';\n\nimport type { CellContentProps } from './CellContent';\n\n/* -------------------------------------------------------------------------------------------------\n * RelationSingle\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'content'> {}\n\nconst RelationSingle = ({ mainField, content }: RelationSingleProps) => {\n return (\n <Typography maxWidth=\"50rem\" textColor=\"neutral800\" ellipsis>\n {getRelationLabel(content, mainField)}\n </Typography>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * RelationMultiple\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RelationMultipleProps\n extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {}\n\nconst RelationMultiple = ({ mainField, content, rowId, name }: RelationMultipleProps) => {\n const { model } = useDoc();\n const { formatMessage } = useIntl();\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = React.useState(false);\n const [{ query }] = useQueryParams<{ plugins?: { i18n?: { locale?: string } } }>();\n const locale = query.plugins?.i18n?.locale;\n\n const [targetField] = name.split('.');\n\n const { data, isLoading } = useGetRelationsQuery(\n {\n model,\n id: rowId,\n targetField,\n params: { locale },\n },\n {\n skip: !isOpen,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const contentCount = Array.isArray(content) ? content.length : content.count;\n\n React.useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTranslation('DynamicTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <Menu.Trigger onClick={(e) => e.stopPropagation()}>\n <Typography style={{ cursor: 'pointer' }} textColor=\"neutral800\" fontWeight=\"regular\">\n {contentCount > 0\n ? formatMessage(\n {\n id: 'content-manager.containers.list.items',\n defaultMessage: '{number} {number, plural, =0 {items} one {item} other {items}}',\n },\n { number: contentCount }\n )\n : '-'}\n </Typography>\n </Menu.Trigger>\n <Menu.Content>\n {isLoading && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTranslation('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n {data?.results && (\n <>\n {data.results.map((entry) => (\n <Menu.Item key={entry.documentId}>\n <Typography maxWidth=\"50rem\" ellipsis>\n {getRelationLabel(entry, mainField)}\n </Typography>\n </Menu.Item>\n ))}\n\n {data?.pagination && data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTranslation('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nexport { RelationSingle, RelationMultiple };\nexport type { RelationSingleProps, RelationMultipleProps };\n"],"names":["RelationSingle","mainField","content","_jsx","Typography","maxWidth","textColor","ellipsis","getRelationLabel","RelationMultiple","rowId","name","model","useDoc","formatMessage","useIntl","notifyStatus","useNotifyAT","isOpen","setIsOpen","React","useState","query","useQueryParams","locale","plugins","i18n","targetField","split","data","isLoading","useGetRelationsQuery","id","params","skip","refetchOnMountOrArgChange","contentCount","Array","isArray","length","count","useEffect","getTranslation","defaultMessage","_jsxs","Menu","Root","onOpenChange","Trigger","onClick","e","stopPropagation","style","cursor","fontWeight","number","Content","Item","disabled","Loader","small","results","_Fragment","map","entry","documentId","pagination","total","aria-disabled","aria-label"],"mappings":"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"}
|
|
@@ -40,11 +40,11 @@ type RemovedFieldPath = string;
|
|
|
40
40
|
* Removes values from the data object if their corresponding attribute has a
|
|
41
41
|
* visibility condition that evaluates to false.
|
|
42
42
|
*
|
|
43
|
-
* @param
|
|
44
|
-
* @param
|
|
45
|
-
* @returns
|
|
43
|
+
* @param data - The data object to filter based on visibility
|
|
44
|
+
* @param options - Schema, initialValues, and components
|
|
45
|
+
* @returns Object with filtered data and list of removed attribute paths
|
|
46
46
|
*/
|
|
47
|
-
declare const handleInvisibleAttributes: (data: AnyData, { schema, initialValues, components }: HandleOptions
|
|
47
|
+
declare const handleInvisibleAttributes: (data: AnyData, { schema, initialValues, components }: HandleOptions) => {
|
|
48
48
|
data: AnyData;
|
|
49
49
|
removedAttributes: RemovedFieldPath[];
|
|
50
50
|
};
|
|
@@ -4,9 +4,6 @@ interface RelationSingleProps extends Pick<CellContentProps, 'mainField' | 'cont
|
|
|
4
4
|
declare const RelationSingle: ({ mainField, content }: RelationSingleProps) => import("react/jsx-runtime").JSX.Element;
|
|
5
5
|
interface RelationMultipleProps extends Pick<CellContentProps, 'mainField' | 'content' | 'name' | 'rowId'> {
|
|
6
6
|
}
|
|
7
|
-
/**
|
|
8
|
-
* TODO: fix this component – tracking issue https://strapi-inc.atlassian.net/browse/CONTENT-2184
|
|
9
|
-
*/
|
|
10
7
|
declare const RelationMultiple: ({ mainField, content, rowId, name }: RelationMultipleProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
8
|
export { RelationSingle, RelationMultiple };
|
|
12
9
|
export type { RelationSingleProps, RelationMultipleProps };
|