{"version":3,"file":"CellContent.mjs","sources":["../../../../../../admin/src/pages/ListView/components/TableCells/CellContent.tsx"],"sourcesContent":["import type { MouseEvent } from 'react';\n\nimport { Tooltip, Typography } from '@strapi/design-system';\nimport isEmpty from 'lodash/isEmpty';\nimport { Link as ReactRouterLink } from 'react-router-dom';\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';\nimport type { To } from 'react-router-dom';\n\ninterface CellContentProps extends Omit {\n content: Schema.Attribute.Value;\n rowId: Data.ID;\n /**\n * When set, the cell renders its value as a navigational link to the entry.\n * Used for the primary (first scalar) column so users can open an entry in a\n * new tab via right-click / cmd+click / middle-click, while a plain click\n * still navigates within the SPA. Only passed for non-interactive cell types.\n */\n linkTo?: To;\n}\n\nconst CellContent = ({ content, mainField, attribute, rowId, name, linkTo }: CellContentProps) => {\n const isIdColumn = name === 'id';\n\n if (!hasContent(content, mainField, attribute)) {\n return (\n \n -\n \n );\n }\n\n // Primary scalar column: render the value as a link to the entry so it gets\n // native open-in-new-tab semantics. stopPropagation prevents the row's own\n // onClick from firing a second navigation; React Router's Link still handles\n // the click (stopPropagation does not preventDefault).\n if (linkTo) {\n const link = (\n e.stopPropagation()}\n maxWidth=\"30rem\"\n ellipsis\n textColor=\"neutral800\"\n >\n \n \n );\n\n return attribute.type === 'string' ? {link} : link;\n }\n\n switch (attribute.type) {\n case 'media':\n if (!attribute.multiple) {\n return ;\n }\n\n return ;\n\n case 'relation': {\n if (isSingleRelation(attribute.relation)) {\n return ;\n }\n\n return ;\n }\n\n case 'component':\n if (attribute.repeatable) {\n return ;\n }\n\n return ;\n\n case 'string':\n return (\n \n \n \n \n \n );\n\n default:\n return (\n \n \n \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['relation']\n) => ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n\nexport { CellContent, hasContent };\nexport type { CellContentProps };\n"],"names":["CellContent","content","mainField","attribute","rowId","name","linkTo","isIdColumn","hasContent","_jsx","Typography","textColor","paddingLeft","type","paddingRight","link","tag","ReactRouterLink","to","onClick","e","stopPropagation","maxWidth","ellipsis","CellValue","value","Tooltip","label","multiple","MediaSingle","MediaMultiple","isSingleRelation","relation","RelationSingle","RelationMultiple","repeatable","RepeatableComponent","SingleComponent","length","undefined","includes","isEmpty","Array","isArray","count"],"mappings":"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"}