diff --git a/frontend/src/metadata/views/gallery/day-images/images-grid.js b/frontend/src/metadata/views/gallery/day-images/images-grid.js index 1835195136..ff1a668c8a 100644 --- a/frontend/src/metadata/views/gallery/day-images/images-grid.js +++ b/frontend/src/metadata/views/gallery/day-images/images-grid.js @@ -3,205 +3,177 @@ import PropTypes from 'prop-types'; import Image from '../image'; /* - small size: * - middle size: - - - - - - large size: . . . - . . . - . . . + small size: * + medium size: - - + - - + large size: . . . + . . . + . . . */ -const ImagesGrid = ({ images, selectedImageIds, size, imgEvents }) => { - const imagesCount = useMemo(() => images.length, [images.length]); - const [firstImg, secondImg, ...others] = images; - const day = firstImg.day ? Number(firstImg.day) : 0; +const getStyles = (imagesCount, size) => { + const { large, medium, small } = size; // One large image, one medium image, five small images if (imagesCount < 12) { - const i = imagesCount % 2; - const firstImgOffset = i === 0 ? 0 : 3; - const columnsOffset = i === 0 ? 3 : 0; - const styles = [ + return [ [ - { gridRow: '1 / 2', gridColumn: `${1 + columnsOffset} / ${2 + columnsOffset}` }, - { gridRow: 1, gridColumn: 3 + columnsOffset }, - { gridRow: 2, gridColumn: 3 + columnsOffset }, - { gridRow: 3, gridColumn: 1 + columnsOffset }, - { gridRow: 3, gridColumn: 2 + columnsOffset }, - { gridRow: 3, gridColumn: 3 + columnsOffset }, + /* + · · · - - * + · · · - - * + · · · * * * + */ + { size: large, gridRow: '1 / 3', gridColumn: '1 / 3' }, + { size: medium, gridRow: '1 / 2', gridColumn: '4 / 5' }, + { size: small, gridRow: 1, gridColumn: 6 }, + { size: small, gridRow: 2, gridColumn: 6 }, + { size: small, gridRow: 3, gridColumn: 4 }, + { size: small, gridRow: 3, gridColumn: 5 }, + { size: small, gridRow: 3, gridColumn: 6 }, ], [ - { gridRow: '1 / 2', gridColumn: `${2 + columnsOffset} / ${3 + columnsOffset}` }, - { gridRow: 1, gridColumn: 1 + columnsOffset }, - { gridRow: 2, gridColumn: 1 + columnsOffset }, - { gridRow: 3, gridColumn: 1 + columnsOffset }, - { gridRow: 3, gridColumn: 2 + columnsOffset }, - { gridRow: 3, gridColumn: 3 + columnsOffset }, + /* + · · · * - - + · · · * - - + · · · * * * + */ + { size: large, gridRow: '1 / 3', gridColumn: '1 / 3' }, + { size: small, gridRow: 1, gridColumn: 4 }, + { size: small, gridRow: 2, gridColumn: 4 }, + { size: medium, gridRow: '1 / 2', gridColumn: '5 / 6' }, + { size: small, gridRow: 3, gridColumn: 4 }, + { size: small, gridRow: 3, gridColumn: 5 }, + { size: small, gridRow: 3, gridColumn: 6 }, ], [ - { gridRow: '2 / 3', gridColumn: `${1 + columnsOffset} / ${2 + columnsOffset}` }, - { gridRow: 1, gridColumn: 1 + columnsOffset }, - { gridRow: 1, gridColumn: 2 + columnsOffset }, - { gridRow: 1, gridColumn: 3 + columnsOffset }, - { gridRow: 2, gridColumn: 3 + columnsOffset }, - { gridRow: 3, gridColumn: 3 + columnsOffset }, + /* + - - * · · · + - - * · · · + * * * · · · + */ + { size: medium, gridRow: '1 / 2', gridColumn: '1 / 2' }, + { size: small, gridRow: 1, gridColumn: 3 }, + { size: small, gridRow: 2, gridColumn: 3 }, + { size: small, gridRow: 3, gridColumn: 1 }, + { size: small, gridRow: 3, gridColumn: 2 }, + { size: small, gridRow: 3, gridColumn: 3 }, + { size: large, gridRow: '1 / 3', gridColumn: '4 / 6' }, ], [ - { gridRow: '2 / 3', gridColumn: `${2 + columnsOffset} / ${3 + columnsOffset}` }, - { gridRow: 1, gridColumn: 1 + columnsOffset }, - { gridRow: 1, gridColumn: 2 + columnsOffset }, - { gridRow: 1, gridColumn: 3 + columnsOffset }, - { gridRow: 2, gridColumn: 1 + columnsOffset }, - { gridRow: 3, gridColumn: 1 + columnsOffset }, + /* + * - - · · · + * - - · · · + * * * · · · + */ + { size: small, gridRow: 1, gridColumn: 1 }, + { size: small, gridRow: 2, gridColumn: 1 }, + { size: medium, gridRow: '1 / 2', gridColumn: '2 / 3' }, + { size: small, gridRow: 3, gridColumn: 1 }, + { size: small, gridRow: 3, gridColumn: 2 }, + { size: small, gridRow: 3, gridColumn: 3 }, + { size: large, gridRow: '1 / 3', gridColumn: '4 / 6' }, ] ]; - const style = styles[day % styles.length]; - - return ( - <> - - - {others.slice(0, 5).map((image, index) => { - return (); - })} - - ); } - // Three medium image, six small images - // if (imagesCount < 12) { - // const styles = [ - // [ - // /* - // - - * * - - - // - - - - - - - // * * - - * * - // */ - // { gridRow: '1 / 2', gridColumn: '1 / 2' }, - // { gridRow: '1 / 2', gridColumn: '5 / 6' }, - // { gridRow: '2 / 3', gridColumn: '3 / 4' }, - // { gridRow: 1, gridColumn: 3 }, - // { gridRow: 1, gridColumn: 4 }, - // { gridRow: 3, gridColumn: 1 }, - // { gridRow: 3, gridColumn: 2 }, - // { gridRow: 3, gridColumn: 5 }, - // { gridRow: 3, gridColumn: 6 }, - // ], [ - // /* - // * * - - * * - // - - - - - - - // - - * * - - - // */ - // { gridRow: '1 / 2', gridColumn: '3 / 4' }, - // { gridRow: '2 / 3', gridColumn: '1 / 2' }, - // { gridRow: '2 / 3', gridColumn: '5 / 6' }, - // { gridRow: 1, gridColumn: 1 }, - // { gridRow: 1, gridColumn: 2 }, - // { gridRow: 1, gridColumn: 5 }, - // { gridRow: 1, gridColumn: 6 }, - // { gridRow: 3, gridColumn: 3 }, - // { gridRow: 3, gridColumn: 4 }, - // ] - // ]; - - // const style = styles[day % styles.length]; - - // return ( - // <> - // - // - // - // {others.slice(1, 7).map((image, index) => { - // return (); - // })} - // - // ); - // } - - // Two medium images, ten small images - const styles = [ + return [ [ /* - - * * * * - - * * - - * * * * - - */ - { gridRow: '1 / 2', gridColumn: '1 / 2' }, - { gridRow: '2 / 3', gridColumn: '5 / 6' }, - { gridRow: 1, gridColumn: 3 }, - { gridRow: 1, gridColumn: 4 }, - { gridRow: 1, gridColumn: 5 }, - { gridRow: 1, gridColumn: 6 }, - { gridRow: 2, gridColumn: 3 }, - { gridRow: 2, gridColumn: 4 }, - { gridRow: 3, gridColumn: 1 }, - { gridRow: 3, gridColumn: 2 }, - { gridRow: 3, gridColumn: 3 }, - { gridRow: 3, gridColumn: 4 }, + { size: medium, gridRow: '1 / 2', gridColumn: '1 / 2' }, + { size: small, gridRow: 1, gridColumn: 3 }, + { size: small, gridRow: 1, gridColumn: 4 }, + { size: small, gridRow: 1, gridColumn: 5 }, + { size: small, gridRow: 1, gridColumn: 6 }, + { size: small, gridRow: 2, gridColumn: 3 }, + { size: small, gridRow: 2, gridColumn: 4 }, + { size: small, gridRow: 3, gridColumn: 1 }, + { size: small, gridRow: 3, gridColumn: 2 }, + { size: small, gridRow: 3, gridColumn: 3 }, + { size: small, gridRow: 3, gridColumn: 4 }, + { size: medium, gridRow: '2 / 3', gridColumn: '5 / 6' }, ], [ - /* + /* * * * * - - - - * * - - - - * * * * */ - { gridRow: '1 / 2', gridColumn: '5 / 6' }, - { gridRow: '2 / 3', gridColumn: '1 / 2' }, - { gridRow: 1, gridColumn: 1 }, - { gridRow: 1, gridColumn: 2 }, - { gridRow: 1, gridColumn: 3 }, - { gridRow: 1, gridColumn: 4 }, - { gridRow: 2, gridColumn: 3 }, - { gridRow: 2, gridColumn: 4 }, - { gridRow: 3, gridColumn: 3 }, - { gridRow: 3, gridColumn: 4 }, - { gridRow: 3, gridColumn: 5 }, - { gridRow: 3, gridColumn: 6 }, + { size: small, gridRow: 1, gridColumn: 1 }, + { size: small, gridRow: 1, gridColumn: 2 }, + { size: small, gridRow: 1, gridColumn: 3 }, + { size: small, gridRow: 1, gridColumn: 4 }, + { size: medium, gridRow: '1 / 2', gridColumn: '5 / 6' }, + { size: medium, gridRow: '2 / 3', gridColumn: '1 / 2' }, + { size: small, gridRow: 2, gridColumn: 3 }, + { size: small, gridRow: 2, gridColumn: 4 }, + { size: small, gridRow: 3, gridColumn: 3 }, + { size: small, gridRow: 3, gridColumn: 4 }, + { size: small, gridRow: 3, gridColumn: 5 }, + { size: small, gridRow: 3, gridColumn: 6 }, ], [ - /* + /* - - * - - * - - * - - * * * * * * * */ - { gridRow: '1 / 2', gridColumn: '1 / 2' }, - { gridRow: '1 / 2', gridColumn: '4 / 5' }, - { gridRow: 1, gridColumn: 3 }, - { gridRow: 1, gridColumn: 6 }, - { gridRow: 2, gridColumn: 3 }, - { gridRow: 2, gridColumn: 6 }, - { gridRow: 3, gridColumn: 1 }, - { gridRow: 3, gridColumn: 2 }, - { gridRow: 3, gridColumn: 3 }, - { gridRow: 3, gridColumn: 4 }, - { gridRow: 3, gridColumn: 5 }, - { gridRow: 3, gridColumn: 6 }, + { size: medium, gridRow: '1 / 2', gridColumn: '1 / 2' }, + { size: small, gridRow: 1, gridColumn: 3 }, + { size: small, gridRow: 2, gridColumn: 3 }, + { size: medium, gridRow: '1 / 2', gridColumn: '4 / 5' }, + { size: small, gridRow: 1, gridColumn: 6 }, + { size: small, gridRow: 2, gridColumn: 6 }, + { size: small, gridRow: 3, gridColumn: 1 }, + { size: small, gridRow: 3, gridColumn: 2 }, + { size: small, gridRow: 3, gridColumn: 3 }, + { size: small, gridRow: 3, gridColumn: 4 }, + { size: small, gridRow: 3, gridColumn: 5 }, + { size: small, gridRow: 3, gridColumn: 6 }, ], [ - /* + /* - - * * * * - - * - - * * * * - - * */ - { gridRow: '1 / 2', gridColumn: '1 / 2' }, - { gridRow: '2 / 3', gridColumn: '4 / 5' }, - { gridRow: 1, gridColumn: 3 }, - { gridRow: 1, gridColumn: 4 }, - { gridRow: 1, gridColumn: 5 }, - { gridRow: 1, gridColumn: 6 }, - { gridRow: 2, gridColumn: 3 }, - { gridRow: 2, gridColumn: 6 }, - { gridRow: 3, gridColumn: 1 }, - { gridRow: 3, gridColumn: 2 }, - { gridRow: 3, gridColumn: 3 }, - { gridRow: 3, gridColumn: 6 }, + { size: medium, gridRow: '1 / 2', gridColumn: '1 / 2' }, + { size: small, gridRow: 1, gridColumn: 3 }, + { size: small, gridRow: 1, gridColumn: 4 }, + { size: small, gridRow: 1, gridColumn: 5 }, + { size: small, gridRow: 1, gridColumn: 6 }, + { size: small, gridRow: 2, gridColumn: 3 }, + { size: small, gridRow: 3, gridColumn: 1 }, + { size: small, gridRow: 3, gridColumn: 2 }, + { size: small, gridRow: 3, gridColumn: 3 }, + { size: medium, gridRow: '2 / 3', gridColumn: '4 / 5' }, + { size: small, gridRow: 2, gridColumn: 6 }, + { size: small, gridRow: 3, gridColumn: 6 }, ] ]; - const style = styles[day % styles.length]; +}; + +const ImagesGrid = ({ images, selectedImageIds, size, imgEvents }) => { + const imagesCount = useMemo(() => images.length, [images.length]); + const day = images[0].day ? Number(images[0].day) : 0; + + const styles = useMemo(() => getStyles(imagesCount, size), [imagesCount, size]); + const count = imagesCount < 12 ? 7 : 12; return ( <> - - - {others.slice(0, 10).map((image, index) => { - return (); + {images.slice(0, count).map((image, index) => { + const styleInfo = styles[day % styles.length][index]; + return ( + size.small} + style={{ gridRow: styleInfo.gridRow, gridColumn: styleInfo.gridColumn }} + {...imgEvents} + /> + ); })} ); - }; ImagesGrid.propTypes = { diff --git a/frontend/src/metadata/views/gallery/utils.js b/frontend/src/metadata/views/gallery/utils.js index c1d2d46527..15cd0dda6a 100644 --- a/frontend/src/metadata/views/gallery/utils.js +++ b/frontend/src/metadata/views/gallery/utils.js @@ -27,18 +27,18 @@ export const getImageSize = (containerWidth, columns, mode) => { case GALLERY_DATE_MODE.YEAR: case GALLERY_DATE_MODE.MONTH: { const size = (contentWidth - GALLERY_YEAR_MODE_GRID_GAP * gapCount) / columns; - return { large: size, middle: size, small: size }; + return { large: size, medium: size, small: size }; } case GALLERY_DATE_MODE.DAY: { const imagesWidth = contentWidth - GALLERY_DEFAULT_GRID_GAP * gapCount; const small = imagesWidth / 6; const large = small * 3 + GALLERY_DEFAULT_GRID_GAP * 2; - const middle = small * 2 + GALLERY_DEFAULT_GRID_GAP; - return { large, middle, small }; + const medium = small * 2 + GALLERY_DEFAULT_GRID_GAP; + return { large, medium, small }; } default: { const size = (containerWidth - 32 - GALLERY_DEFAULT_GRID_GAP * gapCount) / columns; - return { large: size, middle: size, small: size }; + return { large: size, medium: size, small: size }; } } };