@strapi/content-manager 5.27.0 → 5.29.0
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 +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.js.map +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs +1 -1
- package/dist/admin/components/ConfigurationForm/EditFieldForm.mjs.map +1 -1
- package/dist/admin/components/LeftMenu.js +3 -3
- package/dist/admin/components/LeftMenu.js.map +1 -1
- package/dist/admin/components/LeftMenu.mjs +3 -3
- package/dist/admin/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +22 -6
- package/dist/admin/components/Widgets.js.map +1 -1
- package/dist/admin/components/Widgets.mjs +22 -6
- package/dist/admin/components/Widgets.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.js +6 -0
- package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
- package/dist/admin/pages/EditView/components/DocumentActions.mjs +6 -0
- package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +2 -2
- package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
- package/dist/admin/pages/EditView/components/Header.js +63 -18
- package/dist/admin/pages/EditView/components/Header.js.map +1 -1
- package/dist/admin/pages/EditView/components/Header.mjs +65 -20
- package/dist/admin/pages/EditView/components/Header.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.js +4 -1
- package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
- package/dist/admin/pages/ListView/components/Filters.mjs +4 -1
- package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.js.map +1 -1
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs +5 -2
- package/dist/admin/pages/ListView/components/ViewSettingsMenu.mjs.map +1 -1
- package/dist/admin/services/documents.js +9 -1
- package/dist/admin/services/documents.js.map +1 -1
- package/dist/admin/services/documents.mjs +9 -1
- package/dist/admin/services/documents.mjs.map +1 -1
- package/dist/admin/src/components/Widgets.d.ts +6 -2
- package/dist/admin/src/pages/EditView/components/Header.d.ts +4 -0
- package/dist/server/controllers/relations.js +6 -4
- package/dist/server/controllers/relations.js.map +1 -1
- package/dist/server/controllers/relations.mjs +6 -4
- package/dist/server/controllers/relations.mjs.map +1 -1
- package/dist/server/src/controllers/relations.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Widgets.js","sources":["../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Widget, useTracking, useGetCountDocumentsQuery } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n IconButton,\n Table,\n Tbody,\n Td,\n Tr,\n Typography,\n Portal,\n} from '@strapi/design-system';\nimport { Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled, DefaultTheme } from 'styled-components';\n\nimport { DocumentStatus } from '../pages/EditView/components/DocumentStatus';\nimport { useGetRecentDocumentsQuery } from '../services/homepage';\n\nimport { RelativeTime } from './RelativeTime';\n\nimport type { RecentDocument } from '../../../shared/contracts/homepage';\n\nconst CellTypography = styled(Typography)`\n display: block;\n max-width: 14.4rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst RecentDocumentsTable = ({\n documents,\n type,\n}: {\n documents: RecentDocument[];\n type: 'edited' | 'published';\n}) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getEditViewLink = (document: RecentDocument): string => {\n const isSingleType = document.kind === 'singleType';\n const kindPath = isSingleType ? 'single-types' : 'collection-types';\n const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';\n\n return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;\n };\n\n const handleRowClick = (document: RecentDocument) => () => {\n trackUsage('willEditEntryFromHome', {\n entryType: type,\n });\n const link = getEditViewLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={5} rowCount={documents?.length ?? 0}>\n <Tbody>\n {documents?.map((document) => (\n <Tr onClick={handleRowClick(document)} cursor=\"pointer\" key={document.documentId}>\n <Td>\n <CellTypography title={document.title} variant=\"omega\" textColor=\"neutral800\">\n {document.title}\n </CellTypography>\n </Td>\n <Td>\n <CellTypography variant=\"omega\" textColor=\"neutral600\">\n {document.kind === 'singleType'\n ? formatMessage({\n id: 'content-manager.widget.last-edited.single-type',\n defaultMessage: 'Single-Type',\n })\n : formatMessage({\n id: document.contentTypeDisplayName,\n defaultMessage: document.contentTypeDisplayName,\n })}\n </CellTypography>\n </Td>\n <Td>\n <Box display=\"inline-block\">\n {document.status ? (\n <DocumentStatus status={document.status} />\n ) : (\n <Typography textColor=\"neutral600\" aria-hidden>\n -\n </Typography>\n )}\n </Box>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\">\n <RelativeTime timestamp={new Date(document.updatedAt)} />\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getEditViewLink(document)}\n onClick={() => trackUsage('willEditEntryFromHome', { type })}\n label={formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastEditedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastEditedWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'update' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-edited.no-data',\n defaultMessage: 'No edited entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} type=\"edited\" />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastPublishedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastPublishedWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'publish' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} type=\"published\" />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ChartEntriesWidget\n * -----------------------------------------------------------------------------------------------*/\nconst RADIUS = 80;\nconst STROKE = 10;\nconst CIRCUMFERENCE = 2 * Math.PI * (RADIUS - STROKE / 2);\n\ntype ThemeColor = keyof DefaultTheme['colors'];\n\nconst ArcChart = styled.circle<{ $arcColor: ThemeColor }>`\n stroke: ${({ theme, $arcColor }) => theme.colors[$arcColor]};\n`;\n\nconst TextChart = styled.tspan<{ $textColor: ThemeColor }>`\n text-transform: lowercase;\n fill: ${({ theme, $textColor }) => theme.colors[$textColor]};\n`;\n\nconst KeyChartItem = styled(Flex)`\n width: 100%;\n\n ${({ theme }) => theme.breakpoints.small} {\n width: auto;\n }\n`;\n\ninterface ChartData {\n label: string;\n count: number;\n color: ThemeColor;\n}\n\nconst DonutChartSVG = ({ data }: { data: ChartData[] }) => {\n const { locale } = useIntl();\n const { formatMessage } = useIntl();\n const total = data.reduce((acc, curr) => acc + curr.count, 0);\n const [tooltip, setTooltip] = React.useState<{\n visible: boolean;\n x: number;\n y: number;\n value: ChartData | null;\n isTouch?: boolean;\n }>({ visible: false, x: 0, y: 0, value: null });\n\n let cumulativePercent = 0;\n\n const handleMouseOver = (e: React.MouseEvent<SVGCircleElement>, value: ChartData) => {\n setTooltip({\n visible: true,\n x: e.clientX,\n y: e.clientY,\n value,\n });\n };\n const handleMouseOut = () => {\n setTooltip((t) => ({ ...t, visible: false }));\n };\n\n const handleFocus = (e: React.FocusEvent<SVGCircleElement>, value: ChartData) => {\n setTooltip({\n visible: true,\n x:\n e.currentTarget.getBoundingClientRect().width / 2 +\n e.currentTarget.getBoundingClientRect().left,\n y:\n e.currentTarget.getBoundingClientRect().height +\n e.currentTarget.getBoundingClientRect().top,\n value,\n });\n };\n\n return (\n <Flex direction=\"column\" gap={6} margin=\"auto\">\n <svg\n width={RADIUS * 2}\n height={RADIUS * 2}\n viewBox={`0 0 ${RADIUS * 2} ${RADIUS * 2}`}\n style={{ position: 'relative', zIndex: 1 }}\n >\n <g transform={`rotate(-90 ${RADIUS} ${RADIUS})`}>\n {data.map((value) => {\n const percent = (value.count / total) * 100;\n const arcLength = (percent / 100) * CIRCUMFERENCE;\n const dashArray = `${arcLength} ${CIRCUMFERENCE - arcLength}`;\n const dashOffset = CIRCUMFERENCE * (1 - cumulativePercent / 100);\n const el = (\n <ArcChart\n key={value.label}\n cx={RADIUS}\n cy={RADIUS}\n r={RADIUS - STROKE / 2}\n fill=\"none\"\n strokeWidth={STROKE}\n strokeDasharray={dashArray}\n strokeDashoffset={dashOffset}\n style={{ transition: 'stroke-dashoffset 0.3s', cursor: 'pointer' }}\n tabIndex={0}\n aria-describedby={tooltip.visible ? 'chart-tooltip' : undefined}\n onFocus={(e) => handleFocus(e, value)}\n onBlur={handleMouseOut}\n onMouseMove={(e) => handleMouseOver(e, value)}\n onMouseLeave={handleMouseOut}\n $arcColor={value.color}\n />\n );\n cumulativePercent += percent;\n return el;\n })}\n </g>\n <text x={RADIUS} y={RADIUS} textAnchor=\"middle\" fontSize=\"2.4rem\" fontWeight=\"bold\">\n <TextChart x={RADIUS} dy=\"0\" $textColor=\"neutral800\">\n {new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(total)}\n </TextChart>\n <TextChart\n x={RADIUS}\n dy=\"1.4em\"\n fontSize=\"1.4rem\"\n fontWeight=\"normal\"\n $textColor=\"neutral600\"\n >\n {formatMessage(\n {\n id: 'content-manager.widget.chart-entries.count.label',\n defaultMessage: '{count, plural, =0 {entries} one {entry} other {entries}}',\n },\n { count: total }\n )}\n </TextChart>\n </text>\n </svg>\n {tooltip.visible && tooltip.value && (\n <Portal\n style={{\n position: 'fixed',\n left: 16,\n top: 16,\n zIndex: 2,\n transform: `translate(${tooltip.x}px, ${tooltip.y}px)`,\n }}\n data-testid=\"entries-chart-tooltip\"\n >\n <Box\n background=\"neutral900\"\n padding={2}\n borderRadius={1}\n textAlign=\"center\"\n role=\"tooltip\"\n aria-live=\"polite\"\n >\n <Typography textColor=\"neutral0\">\n {formatMessage(\n {\n id: 'content-manager.widget.chart-entries.tooltip',\n defaultMessage: '{count} items',\n },\n {\n count: tooltip.value.count,\n label: tooltip.value.label,\n }\n )}\n </Typography>\n </Box>\n </Portal>\n )}\n <Flex gap={4} wrap=\"wrap\">\n {data.map(\n (value) =>\n value.count > 0 && (\n <KeyChartItem gap={1} key={value.label}>\n <Box background={value.color} padding={2} borderRadius={1} />\n <Typography variant=\"pi\">{value.label}</Typography>\n </KeyChartItem>\n )\n )}\n </Flex>\n </Flex>\n );\n};\n\nconst ChartEntriesWidget = () => {\n const { formatMessage } = useIntl();\n const { data: countDocuments, isLoading, error } = useGetCountDocumentsQuery();\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error) {\n return <Widget.Error />;\n }\n\n const { draft, published, modified } = countDocuments ?? {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n const total = draft + published + modified;\n\n if (!total) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return (\n <Flex minHeight=\"100%\">\n <DonutChartSVG\n data={[\n {\n label: formatMessage({\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'Draft',\n }),\n count: draft,\n color: 'secondary500',\n },\n {\n label: formatMessage({\n id: 'content-manager.containers.List.modified',\n defaultMessage: 'Modified',\n }),\n count: modified,\n color: 'alternative500',\n },\n {\n label: formatMessage({\n id: 'content-manager.containers.List.published',\n defaultMessage: 'Published',\n }),\n count: published,\n color: 'success500',\n },\n ]}\n />\n </Flex>\n );\n};\n\nexport { ChartEntriesWidget, LastEditedWidget, LastPublishedWidget };\n"],"names":["CellTypography","styled","Typography","RecentDocumentsTable","documents","type","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getEditViewLink","document","isSingleType","kind","kindPath","queryParams","locale","contentTypeUid","documentId","handleRowClick","entryType","link","_jsx","Table","colCount","rowCount","length","Tbody","map","_jsxs","Tr","onClick","cursor","Td","title","variant","textColor","id","defaultMessage","contentTypeDisplayName","Box","display","status","DocumentStatus","aria-hidden","RelativeTime","timestamp","Date","updatedAt","e","stopPropagation","IconButton","tag","Link","to","label","Pencil","LastEditedWidget","data","isLoading","error","useGetRecentDocumentsQuery","action","Widget","Loading","Error","NoData","LastPublishedWidget","RADIUS","STROKE","CIRCUMFERENCE","Math","PI","ArcChart","circle","theme","$arcColor","colors","TextChart","tspan","$textColor","KeyChartItem","Flex","breakpoints","small","DonutChartSVG","total","reduce","acc","curr","count","tooltip","setTooltip","React","useState","visible","x","y","value","cumulativePercent","handleMouseOver","clientX","clientY","handleMouseOut","t","handleFocus","currentTarget","getBoundingClientRect","width","left","height","top","direction","gap","margin","svg","viewBox","style","position","zIndex","g","transform","percent","arcLength","dashArray","dashOffset","el","cx","cy","r","fill","strokeWidth","strokeDasharray","strokeDashoffset","transition","tabIndex","aria-describedby","undefined","onFocus","onBlur","onMouseMove","onMouseLeave","color","text","textAnchor","fontSize","fontWeight","dy","Intl","NumberFormat","notation","maximumFractionDigits","format","Portal","data-testid","background","padding","borderRadius","textAlign","role","aria-live","wrap","ChartEntriesWidget","countDocuments","useGetCountDocumentsQuery","draft","published","modified","minHeight"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Widgets.js","sources":["../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Widget, useTracking, useGetCountDocumentsQuery } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n IconButton,\n Table,\n Tbody,\n Td,\n Tr,\n Typography,\n Portal,\n} from '@strapi/design-system';\nimport { Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled, DefaultTheme } from 'styled-components';\n\nimport { DocumentStatus } from '../pages/EditView/components/DocumentStatus';\nimport { useGetRecentDocumentsQuery } from '../services/homepage';\n\nimport { RelativeTime } from './RelativeTime';\n\nimport type { RecentDocument } from '../../../shared/contracts/homepage';\n\nconst BASE_MAX_WIDTH = '14.4rem';\n\n/**\n * Calculate dynamic max-width based on column span\n * Base width is 14.4rem for 6 columns, scale proportionally\n */\nconst calculateDynamicMaxWidth = (columnWidth: number = 4): string => {\n const baseColumnWidth = 4;\n const baseMaxWidth = 14.4; // rem\n const calculatedWidth = (baseMaxWidth * columnWidth) / baseColumnWidth;\n return `${Math.round(calculatedWidth * 10) / 10}rem`;\n};\n\nconst CellTypography = styled(Typography)<{ $maxWidth?: string }>`\n display: block;\n max-width: ${({ $maxWidth }) => $maxWidth || BASE_MAX_WIDTH};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst RecentDocumentsTable = ({\n documents,\n type,\n dynamicMaxWidth = BASE_MAX_WIDTH,\n}: {\n documents: RecentDocument[];\n type: 'edited' | 'published';\n dynamicMaxWidth?: string;\n}) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getEditViewLink = (document: RecentDocument): string => {\n const isSingleType = document.kind === 'singleType';\n const kindPath = isSingleType ? 'single-types' : 'collection-types';\n const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';\n\n return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;\n };\n\n const handleRowClick = (document: RecentDocument) => () => {\n trackUsage('willEditEntryFromHome', {\n entryType: type,\n });\n const link = getEditViewLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={5} rowCount={documents?.length ?? 0}>\n <Tbody>\n {documents?.map((document) => (\n <Tr onClick={handleRowClick(document)} cursor=\"pointer\" key={document.documentId}>\n <Td>\n <CellTypography\n title={document.title}\n variant=\"omega\"\n textColor=\"neutral800\"\n $maxWidth={dynamicMaxWidth}\n >\n {document.title}\n </CellTypography>\n </Td>\n <Td>\n <CellTypography variant=\"omega\" textColor=\"neutral600\" $maxWidth={dynamicMaxWidth}>\n {document.kind === 'singleType'\n ? formatMessage({\n id: 'content-manager.widget.last-edited.single-type',\n defaultMessage: 'Single-Type',\n })\n : formatMessage({\n id: document.contentTypeDisplayName,\n defaultMessage: document.contentTypeDisplayName,\n })}\n </CellTypography>\n </Td>\n <Td>\n <Box display=\"inline-block\">\n {document.status ? (\n <DocumentStatus status={document.status} />\n ) : (\n <Typography textColor=\"neutral600\" aria-hidden>\n -\n </Typography>\n )}\n </Box>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\">\n <RelativeTime timestamp={new Date(document.updatedAt)} />\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getEditViewLink(document)}\n onClick={() => trackUsage('willEditEntryFromHome', { type })}\n label={formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastEditedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastEditedWidget = ({ columnWidth = 6 }: { columnWidth?: number }) => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'update' });\n\n const dynamicMaxWidth = calculateDynamicMaxWidth(columnWidth);\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-edited.no-data',\n defaultMessage: 'No edited entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} type=\"edited\" dynamicMaxWidth={dynamicMaxWidth} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastPublishedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastPublishedWidget = ({ columnWidth = 6 }: { columnWidth?: number }) => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'publish' });\n\n const dynamicMaxWidth = calculateDynamicMaxWidth(columnWidth);\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return (\n <RecentDocumentsTable documents={data} type=\"published\" dynamicMaxWidth={dynamicMaxWidth} />\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ChartEntriesWidget\n * -----------------------------------------------------------------------------------------------*/\nconst RADIUS = 80;\nconst STROKE = 10;\nconst CIRCUMFERENCE = 2 * Math.PI * (RADIUS - STROKE / 2);\n\ntype ThemeColor = keyof DefaultTheme['colors'];\n\nconst ArcChart = styled.circle<{ $arcColor: ThemeColor }>`\n stroke: ${({ theme, $arcColor }) => theme.colors[$arcColor]};\n`;\n\nconst TextChart = styled.tspan<{ $textColor: ThemeColor }>`\n text-transform: lowercase;\n fill: ${({ theme, $textColor }) => theme.colors[$textColor]};\n`;\n\nconst KeyChartItem = styled(Flex)`\n width: 100%;\n\n ${({ theme }) => theme.breakpoints.small} {\n width: auto;\n }\n`;\n\ninterface ChartData {\n label: string;\n count: number;\n color: ThemeColor;\n}\n\nconst DonutChartSVG = ({ data }: { data: ChartData[] }) => {\n const { locale } = useIntl();\n const { formatMessage } = useIntl();\n const total = data.reduce((acc, curr) => acc + curr.count, 0);\n const [tooltip, setTooltip] = React.useState<{\n visible: boolean;\n x: number;\n y: number;\n value: ChartData | null;\n isTouch?: boolean;\n }>({ visible: false, x: 0, y: 0, value: null });\n\n let cumulativePercent = 0;\n\n const handleMouseOver = (e: React.MouseEvent<SVGCircleElement>, value: ChartData) => {\n setTooltip({\n visible: true,\n x: e.clientX,\n y: e.clientY,\n value,\n });\n };\n const handleMouseOut = () => {\n setTooltip((t) => ({ ...t, visible: false }));\n };\n\n const handleFocus = (e: React.FocusEvent<SVGCircleElement>, value: ChartData) => {\n setTooltip({\n visible: true,\n x:\n e.currentTarget.getBoundingClientRect().width / 2 +\n e.currentTarget.getBoundingClientRect().left,\n y:\n e.currentTarget.getBoundingClientRect().height +\n e.currentTarget.getBoundingClientRect().top,\n value,\n });\n };\n\n return (\n <Flex direction=\"column\" gap={6} margin=\"auto\">\n <svg\n width={RADIUS * 2}\n height={RADIUS * 2}\n viewBox={`0 0 ${RADIUS * 2} ${RADIUS * 2}`}\n style={{ position: 'relative', zIndex: 1 }}\n >\n <g transform={`rotate(-90 ${RADIUS} ${RADIUS})`}>\n {data.map((value) => {\n const percent = (value.count / total) * 100;\n const arcLength = (percent / 100) * CIRCUMFERENCE;\n const dashArray = `${arcLength} ${CIRCUMFERENCE - arcLength}`;\n const dashOffset = CIRCUMFERENCE * (1 - cumulativePercent / 100);\n const el = (\n <ArcChart\n key={value.label}\n cx={RADIUS}\n cy={RADIUS}\n r={RADIUS - STROKE / 2}\n fill=\"none\"\n strokeWidth={STROKE}\n strokeDasharray={dashArray}\n strokeDashoffset={dashOffset}\n style={{ transition: 'stroke-dashoffset 0.3s', cursor: 'pointer' }}\n tabIndex={0}\n aria-describedby={tooltip.visible ? 'chart-tooltip' : undefined}\n onFocus={(e) => handleFocus(e, value)}\n onBlur={handleMouseOut}\n onMouseMove={(e) => handleMouseOver(e, value)}\n onMouseLeave={handleMouseOut}\n $arcColor={value.color}\n />\n );\n cumulativePercent += percent;\n return el;\n })}\n </g>\n <text x={RADIUS} y={RADIUS} textAnchor=\"middle\" fontSize=\"2.4rem\" fontWeight=\"bold\">\n <TextChart x={RADIUS} dy=\"0\" $textColor=\"neutral800\">\n {new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(total)}\n </TextChart>\n <TextChart\n x={RADIUS}\n dy=\"1.4em\"\n fontSize=\"1.4rem\"\n fontWeight=\"normal\"\n $textColor=\"neutral600\"\n >\n {formatMessage(\n {\n id: 'content-manager.widget.chart-entries.count.label',\n defaultMessage: '{count, plural, =0 {entries} one {entry} other {entries}}',\n },\n { count: total }\n )}\n </TextChart>\n </text>\n </svg>\n {tooltip.visible && tooltip.value && (\n <Portal\n style={{\n position: 'fixed',\n left: 16,\n top: 16,\n zIndex: 2,\n transform: `translate(${tooltip.x}px, ${tooltip.y}px)`,\n }}\n data-testid=\"entries-chart-tooltip\"\n >\n <Box\n background=\"neutral900\"\n padding={2}\n borderRadius={1}\n textAlign=\"center\"\n role=\"tooltip\"\n aria-live=\"polite\"\n >\n <Typography textColor=\"neutral0\">\n {formatMessage(\n {\n id: 'content-manager.widget.chart-entries.tooltip',\n defaultMessage: '{count} items',\n },\n {\n count: tooltip.value.count,\n label: tooltip.value.label,\n }\n )}\n </Typography>\n </Box>\n </Portal>\n )}\n <Flex gap={4} wrap=\"wrap\">\n {data.map(\n (value) =>\n value.count > 0 && (\n <KeyChartItem gap={1} key={value.label}>\n <Box background={value.color} padding={2} borderRadius={1} />\n <Typography variant=\"pi\">{value.label}</Typography>\n </KeyChartItem>\n )\n )}\n </Flex>\n </Flex>\n );\n};\n\nconst ChartEntriesWidget = () => {\n const { formatMessage } = useIntl();\n const { data: countDocuments, isLoading, error } = useGetCountDocumentsQuery();\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error) {\n return <Widget.Error />;\n }\n\n const { draft, published, modified } = countDocuments ?? {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n const total = draft + published + modified;\n\n if (!total) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return (\n <Flex minHeight=\"100%\">\n <DonutChartSVG\n data={[\n {\n label: formatMessage({\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'Draft',\n }),\n count: draft,\n color: 'secondary500',\n },\n {\n label: formatMessage({\n id: 'content-manager.containers.List.modified',\n defaultMessage: 'Modified',\n }),\n count: modified,\n color: 'alternative500',\n },\n {\n label: formatMessage({\n id: 'content-manager.containers.List.published',\n defaultMessage: 'Published',\n }),\n count: published,\n color: 'success500',\n },\n ]}\n />\n </Flex>\n );\n};\n\nexport { ChartEntriesWidget, LastEditedWidget, LastPublishedWidget };\n"],"names":["BASE_MAX_WIDTH","calculateDynamicMaxWidth","columnWidth","baseColumnWidth","baseMaxWidth","calculatedWidth","Math","round","CellTypography","styled","Typography","$maxWidth","RecentDocumentsTable","documents","type","dynamicMaxWidth","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getEditViewLink","document","isSingleType","kind","kindPath","queryParams","locale","contentTypeUid","documentId","handleRowClick","entryType","link","_jsx","Table","colCount","rowCount","length","Tbody","map","_jsxs","Tr","onClick","cursor","Td","title","variant","textColor","id","defaultMessage","contentTypeDisplayName","Box","display","status","DocumentStatus","aria-hidden","RelativeTime","timestamp","Date","updatedAt","e","stopPropagation","IconButton","tag","Link","to","label","Pencil","LastEditedWidget","data","isLoading","error","useGetRecentDocumentsQuery","action","Widget","Loading","Error","NoData","LastPublishedWidget","RADIUS","STROKE","CIRCUMFERENCE","PI","ArcChart","circle","theme","$arcColor","colors","TextChart","tspan","$textColor","KeyChartItem","Flex","breakpoints","small","DonutChartSVG","total","reduce","acc","curr","count","tooltip","setTooltip","React","useState","visible","x","y","value","cumulativePercent","handleMouseOver","clientX","clientY","handleMouseOut","t","handleFocus","currentTarget","getBoundingClientRect","width","left","height","top","direction","gap","margin","svg","viewBox","style","position","zIndex","g","transform","percent","arcLength","dashArray","dashOffset","el","cx","cy","r","fill","strokeWidth","strokeDasharray","strokeDashoffset","transition","tabIndex","aria-describedby","undefined","onFocus","onBlur","onMouseMove","onMouseLeave","color","text","textAnchor","fontSize","fontWeight","dy","Intl","NumberFormat","notation","maximumFractionDigits","format","Portal","data-testid","background","padding","borderRadius","textAlign","role","aria-live","wrap","ChartEntriesWidget","countDocuments","useGetCountDocumentsQuery","draft","published","modified","minHeight"],"mappings":"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"}
|
|
@@ -10,14 +10,24 @@ import { DocumentStatus } from '../pages/EditView/components/DocumentStatus.mjs'
|
|
|
10
10
|
import { useGetRecentDocumentsQuery } from '../services/homepage.mjs';
|
|
11
11
|
import { RelativeTime } from './RelativeTime.mjs';
|
|
12
12
|
|
|
13
|
+
const BASE_MAX_WIDTH = '14.4rem';
|
|
14
|
+
/**
|
|
15
|
+
* Calculate dynamic max-width based on column span
|
|
16
|
+
* Base width is 14.4rem for 6 columns, scale proportionally
|
|
17
|
+
*/ const calculateDynamicMaxWidth = (columnWidth = 4)=>{
|
|
18
|
+
const baseColumnWidth = 4;
|
|
19
|
+
const baseMaxWidth = 14.4; // rem
|
|
20
|
+
const calculatedWidth = baseMaxWidth * columnWidth / baseColumnWidth;
|
|
21
|
+
return `${Math.round(calculatedWidth * 10) / 10}rem`;
|
|
22
|
+
};
|
|
13
23
|
const CellTypography = styled(Typography)`
|
|
14
24
|
display: block;
|
|
15
|
-
max-width:
|
|
25
|
+
max-width: ${({ $maxWidth })=>$maxWidth || BASE_MAX_WIDTH};
|
|
16
26
|
overflow: hidden;
|
|
17
27
|
text-overflow: ellipsis;
|
|
18
28
|
white-space: nowrap;
|
|
19
29
|
`;
|
|
20
|
-
const RecentDocumentsTable = ({ documents, type })=>{
|
|
30
|
+
const RecentDocumentsTable = ({ documents, type, dynamicMaxWidth = BASE_MAX_WIDTH })=>{
|
|
21
31
|
const { formatMessage } = useIntl();
|
|
22
32
|
const { trackUsage } = useTracking();
|
|
23
33
|
const navigate = useNavigate();
|
|
@@ -47,6 +57,7 @@ const RecentDocumentsTable = ({ documents, type })=>{
|
|
|
47
57
|
title: document.title,
|
|
48
58
|
variant: "omega",
|
|
49
59
|
textColor: "neutral800",
|
|
60
|
+
$maxWidth: dynamicMaxWidth,
|
|
50
61
|
children: document.title
|
|
51
62
|
})
|
|
52
63
|
}),
|
|
@@ -54,6 +65,7 @@ const RecentDocumentsTable = ({ documents, type })=>{
|
|
|
54
65
|
children: /*#__PURE__*/ jsx(CellTypography, {
|
|
55
66
|
variant: "omega",
|
|
56
67
|
textColor: "neutral600",
|
|
68
|
+
$maxWidth: dynamicMaxWidth,
|
|
57
69
|
children: document.kind === 'singleType' ? formatMessage({
|
|
58
70
|
id: 'content-manager.widget.last-edited.single-type',
|
|
59
71
|
defaultMessage: 'Single-Type'
|
|
@@ -109,11 +121,12 @@ const RecentDocumentsTable = ({ documents, type })=>{
|
|
|
109
121
|
};
|
|
110
122
|
/* -------------------------------------------------------------------------------------------------
|
|
111
123
|
* LastEditedWidget
|
|
112
|
-
* -----------------------------------------------------------------------------------------------*/ const LastEditedWidget = ()=>{
|
|
124
|
+
* -----------------------------------------------------------------------------------------------*/ const LastEditedWidget = ({ columnWidth = 6 })=>{
|
|
113
125
|
const { formatMessage } = useIntl();
|
|
114
126
|
const { data, isLoading, error } = useGetRecentDocumentsQuery({
|
|
115
127
|
action: 'update'
|
|
116
128
|
});
|
|
129
|
+
const dynamicMaxWidth = calculateDynamicMaxWidth(columnWidth);
|
|
117
130
|
if (isLoading) {
|
|
118
131
|
return /*#__PURE__*/ jsx(Widget.Loading, {});
|
|
119
132
|
}
|
|
@@ -130,16 +143,18 @@ const RecentDocumentsTable = ({ documents, type })=>{
|
|
|
130
143
|
}
|
|
131
144
|
return /*#__PURE__*/ jsx(RecentDocumentsTable, {
|
|
132
145
|
documents: data,
|
|
133
|
-
type: "edited"
|
|
146
|
+
type: "edited",
|
|
147
|
+
dynamicMaxWidth: dynamicMaxWidth
|
|
134
148
|
});
|
|
135
149
|
};
|
|
136
150
|
/* -------------------------------------------------------------------------------------------------
|
|
137
151
|
* LastPublishedWidget
|
|
138
|
-
* -----------------------------------------------------------------------------------------------*/ const LastPublishedWidget = ()=>{
|
|
152
|
+
* -----------------------------------------------------------------------------------------------*/ const LastPublishedWidget = ({ columnWidth = 6 })=>{
|
|
139
153
|
const { formatMessage } = useIntl();
|
|
140
154
|
const { data, isLoading, error } = useGetRecentDocumentsQuery({
|
|
141
155
|
action: 'publish'
|
|
142
156
|
});
|
|
157
|
+
const dynamicMaxWidth = calculateDynamicMaxWidth(columnWidth);
|
|
143
158
|
if (isLoading) {
|
|
144
159
|
return /*#__PURE__*/ jsx(Widget.Loading, {});
|
|
145
160
|
}
|
|
@@ -156,7 +171,8 @@ const RecentDocumentsTable = ({ documents, type })=>{
|
|
|
156
171
|
}
|
|
157
172
|
return /*#__PURE__*/ jsx(RecentDocumentsTable, {
|
|
158
173
|
documents: data,
|
|
159
|
-
type: "published"
|
|
174
|
+
type: "published",
|
|
175
|
+
dynamicMaxWidth: dynamicMaxWidth
|
|
160
176
|
});
|
|
161
177
|
};
|
|
162
178
|
/* -------------------------------------------------------------------------------------------------
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Widgets.mjs","sources":["../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Widget, useTracking, useGetCountDocumentsQuery } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n IconButton,\n Table,\n Tbody,\n Td,\n Tr,\n Typography,\n Portal,\n} from '@strapi/design-system';\nimport { Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled, DefaultTheme } from 'styled-components';\n\nimport { DocumentStatus } from '../pages/EditView/components/DocumentStatus';\nimport { useGetRecentDocumentsQuery } from '../services/homepage';\n\nimport { RelativeTime } from './RelativeTime';\n\nimport type { RecentDocument } from '../../../shared/contracts/homepage';\n\nconst CellTypography = styled(Typography)`\n display: block;\n max-width: 14.4rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst RecentDocumentsTable = ({\n documents,\n type,\n}: {\n documents: RecentDocument[];\n type: 'edited' | 'published';\n}) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getEditViewLink = (document: RecentDocument): string => {\n const isSingleType = document.kind === 'singleType';\n const kindPath = isSingleType ? 'single-types' : 'collection-types';\n const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';\n\n return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;\n };\n\n const handleRowClick = (document: RecentDocument) => () => {\n trackUsage('willEditEntryFromHome', {\n entryType: type,\n });\n const link = getEditViewLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={5} rowCount={documents?.length ?? 0}>\n <Tbody>\n {documents?.map((document) => (\n <Tr onClick={handleRowClick(document)} cursor=\"pointer\" key={document.documentId}>\n <Td>\n <CellTypography title={document.title} variant=\"omega\" textColor=\"neutral800\">\n {document.title}\n </CellTypography>\n </Td>\n <Td>\n <CellTypography variant=\"omega\" textColor=\"neutral600\">\n {document.kind === 'singleType'\n ? formatMessage({\n id: 'content-manager.widget.last-edited.single-type',\n defaultMessage: 'Single-Type',\n })\n : formatMessage({\n id: document.contentTypeDisplayName,\n defaultMessage: document.contentTypeDisplayName,\n })}\n </CellTypography>\n </Td>\n <Td>\n <Box display=\"inline-block\">\n {document.status ? (\n <DocumentStatus status={document.status} />\n ) : (\n <Typography textColor=\"neutral600\" aria-hidden>\n -\n </Typography>\n )}\n </Box>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\">\n <RelativeTime timestamp={new Date(document.updatedAt)} />\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getEditViewLink(document)}\n onClick={() => trackUsage('willEditEntryFromHome', { type })}\n label={formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastEditedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastEditedWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'update' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-edited.no-data',\n defaultMessage: 'No edited entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} type=\"edited\" />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastPublishedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastPublishedWidget = () => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'publish' });\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} type=\"published\" />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ChartEntriesWidget\n * -----------------------------------------------------------------------------------------------*/\nconst RADIUS = 80;\nconst STROKE = 10;\nconst CIRCUMFERENCE = 2 * Math.PI * (RADIUS - STROKE / 2);\n\ntype ThemeColor = keyof DefaultTheme['colors'];\n\nconst ArcChart = styled.circle<{ $arcColor: ThemeColor }>`\n stroke: ${({ theme, $arcColor }) => theme.colors[$arcColor]};\n`;\n\nconst TextChart = styled.tspan<{ $textColor: ThemeColor }>`\n text-transform: lowercase;\n fill: ${({ theme, $textColor }) => theme.colors[$textColor]};\n`;\n\nconst KeyChartItem = styled(Flex)`\n width: 100%;\n\n ${({ theme }) => theme.breakpoints.small} {\n width: auto;\n }\n`;\n\ninterface ChartData {\n label: string;\n count: number;\n color: ThemeColor;\n}\n\nconst DonutChartSVG = ({ data }: { data: ChartData[] }) => {\n const { locale } = useIntl();\n const { formatMessage } = useIntl();\n const total = data.reduce((acc, curr) => acc + curr.count, 0);\n const [tooltip, setTooltip] = React.useState<{\n visible: boolean;\n x: number;\n y: number;\n value: ChartData | null;\n isTouch?: boolean;\n }>({ visible: false, x: 0, y: 0, value: null });\n\n let cumulativePercent = 0;\n\n const handleMouseOver = (e: React.MouseEvent<SVGCircleElement>, value: ChartData) => {\n setTooltip({\n visible: true,\n x: e.clientX,\n y: e.clientY,\n value,\n });\n };\n const handleMouseOut = () => {\n setTooltip((t) => ({ ...t, visible: false }));\n };\n\n const handleFocus = (e: React.FocusEvent<SVGCircleElement>, value: ChartData) => {\n setTooltip({\n visible: true,\n x:\n e.currentTarget.getBoundingClientRect().width / 2 +\n e.currentTarget.getBoundingClientRect().left,\n y:\n e.currentTarget.getBoundingClientRect().height +\n e.currentTarget.getBoundingClientRect().top,\n value,\n });\n };\n\n return (\n <Flex direction=\"column\" gap={6} margin=\"auto\">\n <svg\n width={RADIUS * 2}\n height={RADIUS * 2}\n viewBox={`0 0 ${RADIUS * 2} ${RADIUS * 2}`}\n style={{ position: 'relative', zIndex: 1 }}\n >\n <g transform={`rotate(-90 ${RADIUS} ${RADIUS})`}>\n {data.map((value) => {\n const percent = (value.count / total) * 100;\n const arcLength = (percent / 100) * CIRCUMFERENCE;\n const dashArray = `${arcLength} ${CIRCUMFERENCE - arcLength}`;\n const dashOffset = CIRCUMFERENCE * (1 - cumulativePercent / 100);\n const el = (\n <ArcChart\n key={value.label}\n cx={RADIUS}\n cy={RADIUS}\n r={RADIUS - STROKE / 2}\n fill=\"none\"\n strokeWidth={STROKE}\n strokeDasharray={dashArray}\n strokeDashoffset={dashOffset}\n style={{ transition: 'stroke-dashoffset 0.3s', cursor: 'pointer' }}\n tabIndex={0}\n aria-describedby={tooltip.visible ? 'chart-tooltip' : undefined}\n onFocus={(e) => handleFocus(e, value)}\n onBlur={handleMouseOut}\n onMouseMove={(e) => handleMouseOver(e, value)}\n onMouseLeave={handleMouseOut}\n $arcColor={value.color}\n />\n );\n cumulativePercent += percent;\n return el;\n })}\n </g>\n <text x={RADIUS} y={RADIUS} textAnchor=\"middle\" fontSize=\"2.4rem\" fontWeight=\"bold\">\n <TextChart x={RADIUS} dy=\"0\" $textColor=\"neutral800\">\n {new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(total)}\n </TextChart>\n <TextChart\n x={RADIUS}\n dy=\"1.4em\"\n fontSize=\"1.4rem\"\n fontWeight=\"normal\"\n $textColor=\"neutral600\"\n >\n {formatMessage(\n {\n id: 'content-manager.widget.chart-entries.count.label',\n defaultMessage: '{count, plural, =0 {entries} one {entry} other {entries}}',\n },\n { count: total }\n )}\n </TextChart>\n </text>\n </svg>\n {tooltip.visible && tooltip.value && (\n <Portal\n style={{\n position: 'fixed',\n left: 16,\n top: 16,\n zIndex: 2,\n transform: `translate(${tooltip.x}px, ${tooltip.y}px)`,\n }}\n data-testid=\"entries-chart-tooltip\"\n >\n <Box\n background=\"neutral900\"\n padding={2}\n borderRadius={1}\n textAlign=\"center\"\n role=\"tooltip\"\n aria-live=\"polite\"\n >\n <Typography textColor=\"neutral0\">\n {formatMessage(\n {\n id: 'content-manager.widget.chart-entries.tooltip',\n defaultMessage: '{count} items',\n },\n {\n count: tooltip.value.count,\n label: tooltip.value.label,\n }\n )}\n </Typography>\n </Box>\n </Portal>\n )}\n <Flex gap={4} wrap=\"wrap\">\n {data.map(\n (value) =>\n value.count > 0 && (\n <KeyChartItem gap={1} key={value.label}>\n <Box background={value.color} padding={2} borderRadius={1} />\n <Typography variant=\"pi\">{value.label}</Typography>\n </KeyChartItem>\n )\n )}\n </Flex>\n </Flex>\n );\n};\n\nconst ChartEntriesWidget = () => {\n const { formatMessage } = useIntl();\n const { data: countDocuments, isLoading, error } = useGetCountDocumentsQuery();\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error) {\n return <Widget.Error />;\n }\n\n const { draft, published, modified } = countDocuments ?? {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n const total = draft + published + modified;\n\n if (!total) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return (\n <Flex minHeight=\"100%\">\n <DonutChartSVG\n data={[\n {\n label: formatMessage({\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'Draft',\n }),\n count: draft,\n color: 'secondary500',\n },\n {\n label: formatMessage({\n id: 'content-manager.containers.List.modified',\n defaultMessage: 'Modified',\n }),\n count: modified,\n color: 'alternative500',\n },\n {\n label: formatMessage({\n id: 'content-manager.containers.List.published',\n defaultMessage: 'Published',\n }),\n count: published,\n color: 'success500',\n },\n ]}\n />\n </Flex>\n );\n};\n\nexport { ChartEntriesWidget, LastEditedWidget, LastPublishedWidget };\n"],"names":["CellTypography","styled","Typography","RecentDocumentsTable","documents","type","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getEditViewLink","document","isSingleType","kind","kindPath","queryParams","locale","contentTypeUid","documentId","handleRowClick","entryType","link","_jsx","Table","colCount","rowCount","length","Tbody","map","_jsxs","Tr","onClick","cursor","Td","title","variant","textColor","id","defaultMessage","contentTypeDisplayName","Box","display","status","DocumentStatus","aria-hidden","RelativeTime","timestamp","Date","updatedAt","e","stopPropagation","IconButton","tag","Link","to","label","Pencil","LastEditedWidget","data","isLoading","error","useGetRecentDocumentsQuery","action","Widget","Loading","Error","NoData","LastPublishedWidget","RADIUS","STROKE","CIRCUMFERENCE","Math","PI","ArcChart","circle","theme","$arcColor","colors","TextChart","tspan","$textColor","KeyChartItem","Flex","breakpoints","small","DonutChartSVG","total","reduce","acc","curr","count","tooltip","setTooltip","React","useState","visible","x","y","value","cumulativePercent","handleMouseOver","clientX","clientY","handleMouseOut","t","handleFocus","currentTarget","getBoundingClientRect","width","left","height","top","direction","gap","margin","svg","viewBox","style","position","zIndex","g","transform","percent","arcLength","dashArray","dashOffset","el","cx","cy","r","fill","strokeWidth","strokeDasharray","strokeDashoffset","transition","tabIndex","aria-describedby","undefined","onFocus","onBlur","onMouseMove","onMouseLeave","color","text","textAnchor","fontSize","fontWeight","dy","Intl","NumberFormat","notation","maximumFractionDigits","format","Portal","data-testid","background","padding","borderRadius","textAlign","role","aria-live","wrap","ChartEntriesWidget","countDocuments","useGetCountDocumentsQuery","draft","published","modified","minHeight"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Widgets.mjs","sources":["../../../admin/src/components/Widgets.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Widget, useTracking, useGetCountDocumentsQuery } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n IconButton,\n Table,\n Tbody,\n Td,\n Tr,\n Typography,\n Portal,\n} from '@strapi/design-system';\nimport { Pencil } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled, DefaultTheme } from 'styled-components';\n\nimport { DocumentStatus } from '../pages/EditView/components/DocumentStatus';\nimport { useGetRecentDocumentsQuery } from '../services/homepage';\n\nimport { RelativeTime } from './RelativeTime';\n\nimport type { RecentDocument } from '../../../shared/contracts/homepage';\n\nconst BASE_MAX_WIDTH = '14.4rem';\n\n/**\n * Calculate dynamic max-width based on column span\n * Base width is 14.4rem for 6 columns, scale proportionally\n */\nconst calculateDynamicMaxWidth = (columnWidth: number = 4): string => {\n const baseColumnWidth = 4;\n const baseMaxWidth = 14.4; // rem\n const calculatedWidth = (baseMaxWidth * columnWidth) / baseColumnWidth;\n return `${Math.round(calculatedWidth * 10) / 10}rem`;\n};\n\nconst CellTypography = styled(Typography)<{ $maxWidth?: string }>`\n display: block;\n max-width: ${({ $maxWidth }) => $maxWidth || BASE_MAX_WIDTH};\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst RecentDocumentsTable = ({\n documents,\n type,\n dynamicMaxWidth = BASE_MAX_WIDTH,\n}: {\n documents: RecentDocument[];\n type: 'edited' | 'published';\n dynamicMaxWidth?: string;\n}) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getEditViewLink = (document: RecentDocument): string => {\n const isSingleType = document.kind === 'singleType';\n const kindPath = isSingleType ? 'single-types' : 'collection-types';\n const queryParams = document.locale ? `?plugins[i18n][locale]=${document.locale}` : '';\n\n return `/content-manager/${kindPath}/${document.contentTypeUid}${isSingleType ? '' : '/' + document.documentId}${queryParams}`;\n };\n\n const handleRowClick = (document: RecentDocument) => () => {\n trackUsage('willEditEntryFromHome', {\n entryType: type,\n });\n const link = getEditViewLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={5} rowCount={documents?.length ?? 0}>\n <Tbody>\n {documents?.map((document) => (\n <Tr onClick={handleRowClick(document)} cursor=\"pointer\" key={document.documentId}>\n <Td>\n <CellTypography\n title={document.title}\n variant=\"omega\"\n textColor=\"neutral800\"\n $maxWidth={dynamicMaxWidth}\n >\n {document.title}\n </CellTypography>\n </Td>\n <Td>\n <CellTypography variant=\"omega\" textColor=\"neutral600\" $maxWidth={dynamicMaxWidth}>\n {document.kind === 'singleType'\n ? formatMessage({\n id: 'content-manager.widget.last-edited.single-type',\n defaultMessage: 'Single-Type',\n })\n : formatMessage({\n id: document.contentTypeDisplayName,\n defaultMessage: document.contentTypeDisplayName,\n })}\n </CellTypography>\n </Td>\n <Td>\n <Box display=\"inline-block\">\n {document.status ? (\n <DocumentStatus status={document.status} />\n ) : (\n <Typography textColor=\"neutral600\" aria-hidden>\n -\n </Typography>\n )}\n </Box>\n </Td>\n <Td>\n <Typography textColor=\"neutral600\">\n <RelativeTime timestamp={new Date(document.updatedAt)} />\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getEditViewLink(document)}\n onClick={() => trackUsage('willEditEntryFromHome', { type })}\n label={formatMessage({\n id: 'content-manager.actions.edit.label',\n defaultMessage: 'Edit',\n })}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastEditedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastEditedWidget = ({ columnWidth = 6 }: { columnWidth?: number }) => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'update' });\n\n const dynamicMaxWidth = calculateDynamicMaxWidth(columnWidth);\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-edited.no-data',\n defaultMessage: 'No edited entries',\n })}\n </Widget.NoData>\n );\n }\n\n return <RecentDocumentsTable documents={data} type=\"edited\" dynamicMaxWidth={dynamicMaxWidth} />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * LastPublishedWidget\n * -----------------------------------------------------------------------------------------------*/\n\nconst LastPublishedWidget = ({ columnWidth = 6 }: { columnWidth?: number }) => {\n const { formatMessage } = useIntl();\n const { data, isLoading, error } = useGetRecentDocumentsQuery({ action: 'publish' });\n\n const dynamicMaxWidth = calculateDynamicMaxWidth(columnWidth);\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data) {\n return <Widget.Error />;\n }\n\n if (data.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return (\n <RecentDocumentsTable documents={data} type=\"published\" dynamicMaxWidth={dynamicMaxWidth} />\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ChartEntriesWidget\n * -----------------------------------------------------------------------------------------------*/\nconst RADIUS = 80;\nconst STROKE = 10;\nconst CIRCUMFERENCE = 2 * Math.PI * (RADIUS - STROKE / 2);\n\ntype ThemeColor = keyof DefaultTheme['colors'];\n\nconst ArcChart = styled.circle<{ $arcColor: ThemeColor }>`\n stroke: ${({ theme, $arcColor }) => theme.colors[$arcColor]};\n`;\n\nconst TextChart = styled.tspan<{ $textColor: ThemeColor }>`\n text-transform: lowercase;\n fill: ${({ theme, $textColor }) => theme.colors[$textColor]};\n`;\n\nconst KeyChartItem = styled(Flex)`\n width: 100%;\n\n ${({ theme }) => theme.breakpoints.small} {\n width: auto;\n }\n`;\n\ninterface ChartData {\n label: string;\n count: number;\n color: ThemeColor;\n}\n\nconst DonutChartSVG = ({ data }: { data: ChartData[] }) => {\n const { locale } = useIntl();\n const { formatMessage } = useIntl();\n const total = data.reduce((acc, curr) => acc + curr.count, 0);\n const [tooltip, setTooltip] = React.useState<{\n visible: boolean;\n x: number;\n y: number;\n value: ChartData | null;\n isTouch?: boolean;\n }>({ visible: false, x: 0, y: 0, value: null });\n\n let cumulativePercent = 0;\n\n const handleMouseOver = (e: React.MouseEvent<SVGCircleElement>, value: ChartData) => {\n setTooltip({\n visible: true,\n x: e.clientX,\n y: e.clientY,\n value,\n });\n };\n const handleMouseOut = () => {\n setTooltip((t) => ({ ...t, visible: false }));\n };\n\n const handleFocus = (e: React.FocusEvent<SVGCircleElement>, value: ChartData) => {\n setTooltip({\n visible: true,\n x:\n e.currentTarget.getBoundingClientRect().width / 2 +\n e.currentTarget.getBoundingClientRect().left,\n y:\n e.currentTarget.getBoundingClientRect().height +\n e.currentTarget.getBoundingClientRect().top,\n value,\n });\n };\n\n return (\n <Flex direction=\"column\" gap={6} margin=\"auto\">\n <svg\n width={RADIUS * 2}\n height={RADIUS * 2}\n viewBox={`0 0 ${RADIUS * 2} ${RADIUS * 2}`}\n style={{ position: 'relative', zIndex: 1 }}\n >\n <g transform={`rotate(-90 ${RADIUS} ${RADIUS})`}>\n {data.map((value) => {\n const percent = (value.count / total) * 100;\n const arcLength = (percent / 100) * CIRCUMFERENCE;\n const dashArray = `${arcLength} ${CIRCUMFERENCE - arcLength}`;\n const dashOffset = CIRCUMFERENCE * (1 - cumulativePercent / 100);\n const el = (\n <ArcChart\n key={value.label}\n cx={RADIUS}\n cy={RADIUS}\n r={RADIUS - STROKE / 2}\n fill=\"none\"\n strokeWidth={STROKE}\n strokeDasharray={dashArray}\n strokeDashoffset={dashOffset}\n style={{ transition: 'stroke-dashoffset 0.3s', cursor: 'pointer' }}\n tabIndex={0}\n aria-describedby={tooltip.visible ? 'chart-tooltip' : undefined}\n onFocus={(e) => handleFocus(e, value)}\n onBlur={handleMouseOut}\n onMouseMove={(e) => handleMouseOver(e, value)}\n onMouseLeave={handleMouseOut}\n $arcColor={value.color}\n />\n );\n cumulativePercent += percent;\n return el;\n })}\n </g>\n <text x={RADIUS} y={RADIUS} textAnchor=\"middle\" fontSize=\"2.4rem\" fontWeight=\"bold\">\n <TextChart x={RADIUS} dy=\"0\" $textColor=\"neutral800\">\n {new Intl.NumberFormat(locale, {\n notation: 'compact',\n maximumFractionDigits: 1,\n }).format(total)}\n </TextChart>\n <TextChart\n x={RADIUS}\n dy=\"1.4em\"\n fontSize=\"1.4rem\"\n fontWeight=\"normal\"\n $textColor=\"neutral600\"\n >\n {formatMessage(\n {\n id: 'content-manager.widget.chart-entries.count.label',\n defaultMessage: '{count, plural, =0 {entries} one {entry} other {entries}}',\n },\n { count: total }\n )}\n </TextChart>\n </text>\n </svg>\n {tooltip.visible && tooltip.value && (\n <Portal\n style={{\n position: 'fixed',\n left: 16,\n top: 16,\n zIndex: 2,\n transform: `translate(${tooltip.x}px, ${tooltip.y}px)`,\n }}\n data-testid=\"entries-chart-tooltip\"\n >\n <Box\n background=\"neutral900\"\n padding={2}\n borderRadius={1}\n textAlign=\"center\"\n role=\"tooltip\"\n aria-live=\"polite\"\n >\n <Typography textColor=\"neutral0\">\n {formatMessage(\n {\n id: 'content-manager.widget.chart-entries.tooltip',\n defaultMessage: '{count} items',\n },\n {\n count: tooltip.value.count,\n label: tooltip.value.label,\n }\n )}\n </Typography>\n </Box>\n </Portal>\n )}\n <Flex gap={4} wrap=\"wrap\">\n {data.map(\n (value) =>\n value.count > 0 && (\n <KeyChartItem gap={1} key={value.label}>\n <Box background={value.color} padding={2} borderRadius={1} />\n <Typography variant=\"pi\">{value.label}</Typography>\n </KeyChartItem>\n )\n )}\n </Flex>\n </Flex>\n );\n};\n\nconst ChartEntriesWidget = () => {\n const { formatMessage } = useIntl();\n const { data: countDocuments, isLoading, error } = useGetCountDocumentsQuery();\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error) {\n return <Widget.Error />;\n }\n\n const { draft, published, modified } = countDocuments ?? {\n draft: 0,\n published: 0,\n modified: 0,\n };\n\n const total = draft + published + modified;\n\n if (!total) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'content-manager.widget.last-published.no-data',\n defaultMessage: 'No published entries',\n })}\n </Widget.NoData>\n );\n }\n\n return (\n <Flex minHeight=\"100%\">\n <DonutChartSVG\n data={[\n {\n label: formatMessage({\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'Draft',\n }),\n count: draft,\n color: 'secondary500',\n },\n {\n label: formatMessage({\n id: 'content-manager.containers.List.modified',\n defaultMessage: 'Modified',\n }),\n count: modified,\n color: 'alternative500',\n },\n {\n label: formatMessage({\n id: 'content-manager.containers.List.published',\n defaultMessage: 'Published',\n }),\n count: published,\n color: 'success500',\n },\n ]}\n />\n </Flex>\n );\n};\n\nexport { ChartEntriesWidget, LastEditedWidget, LastPublishedWidget };\n"],"names":["BASE_MAX_WIDTH","calculateDynamicMaxWidth","columnWidth","baseColumnWidth","baseMaxWidth","calculatedWidth","Math","round","CellTypography","styled","Typography","$maxWidth","RecentDocumentsTable","documents","type","dynamicMaxWidth","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getEditViewLink","document","isSingleType","kind","kindPath","queryParams","locale","contentTypeUid","documentId","handleRowClick","entryType","link","_jsx","Table","colCount","rowCount","length","Tbody","map","_jsxs","Tr","onClick","cursor","Td","title","variant","textColor","id","defaultMessage","contentTypeDisplayName","Box","display","status","DocumentStatus","aria-hidden","RelativeTime","timestamp","Date","updatedAt","e","stopPropagation","IconButton","tag","Link","to","label","Pencil","LastEditedWidget","data","isLoading","error","useGetRecentDocumentsQuery","action","Widget","Loading","Error","NoData","LastPublishedWidget","RADIUS","STROKE","CIRCUMFERENCE","PI","ArcChart","circle","theme","$arcColor","colors","TextChart","tspan","$textColor","KeyChartItem","Flex","breakpoints","small","DonutChartSVG","total","reduce","acc","curr","count","tooltip","setTooltip","React","useState","visible","x","y","value","cumulativePercent","handleMouseOver","clientX","clientY","handleMouseOut","t","handleFocus","currentTarget","getBoundingClientRect","width","left","height","top","direction","gap","margin","svg","viewBox","style","position","zIndex","g","transform","percent","arcLength","dashArray","dashOffset","el","cx","cy","r","fill","strokeWidth","strokeDasharray","strokeDashoffset","transition","tabIndex","aria-describedby","undefined","onFocus","onBlur","onMouseMove","onMouseLeave","color","text","textAnchor","fontSize","fontWeight","dy","Intl","NumberFormat","notation","maximumFractionDigits","format","Portal","data-testid","background","padding","borderRadius","textAlign","role","aria-live","wrap","ChartEntriesWidget","countDocuments","useGetCountDocumentsQuery","draft","published","modified","minHeight"],"mappings":"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"}
|
|
@@ -526,6 +526,12 @@ const transformData = (data)=>{
|
|
|
526
526
|
if (errors) {
|
|
527
527
|
const hasUnreadableRequiredField = Object.keys(schema.attributes).some((fieldName)=>{
|
|
528
528
|
const attribute = schema.attributes[fieldName];
|
|
529
|
+
// For components, check if any of the component fields are readable
|
|
530
|
+
if (attribute.type === 'component') {
|
|
531
|
+
const componentFields = (canReadFields ?? []).filter((field)=>field.startsWith(`${fieldName}.`));
|
|
532
|
+
return componentFields.length === 0;
|
|
533
|
+
}
|
|
534
|
+
// For regular fields, check if the field itself is readable
|
|
529
535
|
return attribute?.required && !(canReadFields ?? []).includes(fieldName);
|
|
530
536
|
});
|
|
531
537
|
if (hasUnreadableRequiredField) {
|