{"version":3,"file":"ReleaseListCell.mjs","sources":["../../../admin/src/components/ReleaseListCell.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useTable, useQueryParams } from '@strapi/admin/strapi-admin';\nimport { ListFieldLayout, ListLayout } from '@strapi/content-manager/strapi-admin';\nimport { Box, Popover, Typography, Button, Link } from '@strapi/design-system';\nimport { CaretDown } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useGetMappedEntriesInReleasesQuery } from '../services/release';\n\nimport type { Modules, UID } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * useReleasesList\n * -----------------------------------------------------------------------------------------------*/\ninterface QueryParams {\n  plugins?: {\n    i18n?: {\n      locale: string;\n    };\n  };\n}\n\nconst useReleasesList = (contentTypeUid: UID.ContentType, documentId: Modules.Documents.ID) => {\n  const listViewData = useTable('ListView', (state) => state.rows);\n  const documentIds = listViewData.map((entry) => entry.documentId);\n  const [{ query }] = useQueryParams();\n  const locale = (query as QueryParams)?.plugins?.i18n?.locale || undefined;\n\n  const response = useGetMappedEntriesInReleasesQuery(\n    { contentTypeUid, documentIds, locale },\n    { skip: !documentIds || !contentTypeUid || documentIds.length === 0 }\n  );\n\n  const mappedEntriesInReleases = response.data || {};\n\n  return mappedEntriesInReleases?.[documentId] || [];\n};\n\n/* -------------------------------------------------------------------------------------------------\n * addColumnToTableHook\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AddColumnToTableHookArgs {\n  layout: ListLayout;\n  displayedHeaders: ListFieldLayout[];\n}\n\nconst addColumnToTableHook = ({ displayedHeaders, layout }: AddColumnToTableHookArgs) => {\n  const { options } = layout;\n\n  if (!options?.draftAndPublish) {\n    return { displayedHeaders, layout };\n  }\n\n  return {\n    displayedHeaders: [\n      ...displayedHeaders,\n      {\n        searchable: false,\n        sortable: false,\n        name: 'releases',\n        label: {\n          id: 'content-releases.content-manager.list-view.releases.header',\n          defaultMessage: 'To be released in',\n        },\n        cellFormatter: (\n          props: Modules.Documents.AnyDocument,\n          _: any,\n          { model }: { model: UID.ContentType }\n        ) => <ReleaseListCell {...props} model={model} />,\n      },\n    ],\n    layout,\n  };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ReleaseListCell\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ReleaseListCellProps extends Modules.Documents.AnyDocument {\n  documentId: Modules.Documents.ID;\n  model: UID.ContentType;\n}\n\nconst ReleaseListCell = ({ documentId, model }: ReleaseListCellProps) => {\n  const releases = useReleasesList(model, documentId);\n  const { formatMessage } = useIntl();\n\n  return (\n    <Popover.Root>\n      <Popover.Trigger>\n        <Button\n          variant=\"ghost\"\n          onClick={(e: React.MouseEvent<HTMLElement>) => e.stopPropagation()}\n          // TODO: find a way in the DS to define the widht and height of the icon\n          endIcon={releases.length > 0 ? <CaretDown width=\"1.2rem\" height=\"1.2rem\" /> : null}\n        >\n          <Typography\n            style={{ maxWidth: '252px', cursor: 'pointer' }}\n            textColor=\"neutral800\"\n            fontWeight=\"regular\"\n          >\n            {releases.length > 0\n              ? formatMessage(\n                  {\n                    id: 'content-releases.content-manager.list-view.releases-number',\n                    defaultMessage: '{number} {number, plural, one {release} other {releases}}',\n                  },\n                  {\n                    number: releases.length,\n                  }\n                )\n              : '-'}\n          </Typography>\n        </Button>\n      </Popover.Trigger>\n      <Popover.Content>\n        <ul>\n          {releases.map(({ id, name }) => (\n            <Box key={id} padding={3} tag=\"li\">\n              <Link href={`/admin/plugins/content-releases/${id}`} isExternal={false}>\n                {name}\n              </Link>\n            </Box>\n          ))}\n        </ul>\n      </Popover.Content>\n    </Popover.Root>\n  );\n};\n\nexport { ReleaseListCell, addColumnToTableHook };\nexport type { ReleaseListCellProps };\n"],"names":["useReleasesList","contentTypeUid","documentId","listViewData","useTable","state","rows","documentIds","map","entry","query","useQueryParams","locale","plugins","i18n","undefined","response","useGetMappedEntriesInReleasesQuery","skip","length","mappedEntriesInReleases","data","addColumnToTableHook","displayedHeaders","layout","options","draftAndPublish","searchable","sortable","name","label","id","defaultMessage","cellFormatter","props","_","model","_jsx","ReleaseListCell","releases","formatMessage","useIntl","_jsxs","Popover","Root","Trigger","Button","variant","onClick","e","stopPropagation","endIcon","CaretDown","width","height","Typography","style","maxWidth","cursor","textColor","fontWeight","number","Content","ul","Box","padding","tag","Link","href","isExternal"],"mappings":"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"}