From 522dce5b8a3cc7d2a25bb8684c8bdca668cd7f65 Mon Sep 17 00:00:00 2001 From: soupette Date: Thu, 23 Sep 2021 07:37:46 +0200 Subject: [PATCH] Add count remaining files Signed-off-by: soupette --- .../api/temp/content-types/temp/schema.json | 14 ++++++ .../CellContent/Media/FileWrapper.js | 48 +++++++++++++++++++ .../CellContent/{Media.js => Media/index.js} | 25 +--------- .../CellContent/MultipleMedias.js | 15 ++++++ 4 files changed, 79 insertions(+), 23 deletions(-) create mode 100644 packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/FileWrapper.js rename packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/{Media.js => Media/index.js} (63%) diff --git a/examples/getstarted/src/api/temp/content-types/temp/schema.json b/examples/getstarted/src/api/temp/content-types/temp/schema.json index f1c27e520c..907a1943ea 100644 --- a/examples/getstarted/src/api/temp/content-types/temp/schema.json +++ b/examples/getstarted/src/api/temp/content-types/temp/schema.json @@ -45,6 +45,20 @@ "localized": true } } + }, + "multiple": { + "allowedTypes": [ + "images", + "files", + "videos" + ], + "type": "media", + "multiple": true, + "pluginOptions": { + "i18n": { + "localized": true + } + } } } } diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/FileWrapper.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/FileWrapper.js new file mode 100644 index 0000000000..2f0701c298 --- /dev/null +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/FileWrapper.js @@ -0,0 +1,48 @@ +import React, { useState } from 'react'; +import PropTypes from 'prop-types'; +import styled from 'styled-components'; +import { Row } from '@strapi/parts/Row'; +import { TableLabel } from '@strapi/parts/Text'; + +const Wrapper = styled(Row)` + position: relative; + border-radius: 50%; + width: 26px; + height: 26px; + border: 1px solid ${({ theme }) => theme.colors.neutral200}; + background: ${({ theme }) => theme.colors.neutral150}; + padding-left: 1px; + z-index: ${({ hovering }) => (hovering ? 1 : undefined)}; + + span { + line-height: 0.6rem; + font-size: 0.6rem; + } +`; + +const FileWrapper = ({ children, preview }) => { + const [previewVisible, setPreviewVisible] = useState(false); + + return ( + setPreviewVisible(true)} + onMouseLeave={() => setPreviewVisible(false)} + > + {children} + + ); +}; + +FileWrapper.defaultProps = { + preview: true, +}; + +FileWrapper.propTypes = { + children: PropTypes.string.isRequired, + preview: PropTypes.bool, +}; + +export default FileWrapper; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/index.js similarity index 63% rename from packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media.js rename to packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/index.js index 2c31f9a46f..aef3dba95e 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/Media/index.js @@ -1,28 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; -import styled from 'styled-components'; import { Avatar } from '@strapi/parts/Avatar'; import { Tooltip } from '@strapi/parts/Tooltip'; -import { TableLabel } from '@strapi/parts/Text'; -import { Row } from '@strapi/parts/Row'; - import { getFileExtension, prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin'; - -// TODO: this is very temporary until we get a design -const FileWrapper = styled(Row)` - position: relative; - border-radius: 50%; - width: 26px; - height: 26px; - border: 1px solid ${({ theme }) => theme.colors.neutral200}; - background: ${({ theme }) => theme.colors.neutral150}; - padding-left: 1px; - - span { - line-height: 0.6rem; - font-size: 0.6rem; - } -`; +import FileWrapper from './FileWrapper'; const Media = ({ url, mime, alternativeText, name, ext, formats }) => { const fileURL = prefixFileUrlWithBackendUrl(url); @@ -39,9 +20,7 @@ const Media = ({ url, mime, alternativeText, name, ext, formats }) => { return ( - - {fileExtension} - + {fileExtension} ); }; diff --git a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/MultipleMedias.js b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/MultipleMedias.js index ba4d6719b7..a317d98897 100644 --- a/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/MultipleMedias.js +++ b/packages/core/admin/admin/src/content-manager/components/DynamicTable/CellContent/MultipleMedias.js @@ -2,6 +2,7 @@ import React from 'react'; import PropTypes from 'prop-types'; import { AvatarGroup } from '@strapi/parts/Avatar'; import Media from './Media'; +import FileWrapper from './Media/FileWrapper'; const MultipleMedia = ({ value }) => { return ( @@ -9,6 +10,20 @@ const MultipleMedia = ({ value }) => { {value.map((file, index) => { const key = `${file.id}${index}`; + if (index === 3) { + const remainingFiles = `+${value.length - 3}`; + + return ( + + {remainingFiles} + + ); + } + + if (index > 3) { + return null; + } + return ; })}