diff --git a/frontend/src/metadata/views/gallery/content.js b/frontend/src/metadata/views/gallery/content.js
index f82ed6bd0e..0d055249cd 100644
--- a/frontend/src/metadata/views/gallery/content.js
+++ b/frontend/src/metadata/views/gallery/content.js
@@ -51,7 +51,7 @@ const Content = ({
const selected = [];
groups.forEach(group => {
- group.displayChildren.forEach((row) => {
+ group.children.forEach((row) => {
row.children.forEach((img) => {
const imgElement = document.getElementById(img.id);
if (imgElement) {
@@ -83,7 +83,7 @@ const Content = ({
const renderDisplayGroup = useCallback((group) => {
const { top: overScanTop, bottom: overScanBottom } = overScan;
- const { name, displayChildren: children, height, top, paddingTop } = group;
+ const { name, children, height, top, paddingTop } = group;
// group not in rendering area, return empty div
if (top >= overScanBottom || top + height <= overScanTop) {
@@ -117,9 +117,7 @@ const Content = ({
if ([GALLERY_DATE_MODE.YEAR, GALLERY_DATE_MODE.MONTH].includes(mode)) {
newChildren = children.flatMap(row => row.children);
listStyle['gap'] = GALLERY_YEAR_MODE_GRID_GAP;
- if (newChildren.length === 1) {
- listStyle['gridTemplateColumns'] = '1fr';
- }
+ if (newChildren.length === 1) listStyle['gridTemplateColumns'] = '1fr';
} else if (mode === GALLERY_DATE_MODE.DAY) {
newChildren = children.flatMap(row => row.children);
if (newChildren.length === 1) {
@@ -127,8 +125,8 @@ const Content = ({
} else if (newChildren.length < 7) {
listStyle['gridTemplateColumns'] = '1fr 1fr';
} else {
- delete listStyle['gridTemplateColumns'];
- listStyle['display'] = 'flex';
+ listStyle['gridTemplateColumns'] = `repeat(${columns}, ${size.small}px)`;
+ listStyle['gridTemplateRows'] = `repeat(3, ${size.small}px)`;
}
}
const imgEvents = {
@@ -169,7 +167,7 @@ const Content = ({
})}
>
) : (
-
+
)}
@@ -199,7 +197,6 @@ Content.propTypes = {
height: PropTypes.number.isRequired,
top: PropTypes.number.isRequired,
paddingTop: PropTypes.number.isRequired,
- displayChildren: PropTypes.array,
children: PropTypes.arrayOf(PropTypes.shape({
top: PropTypes.number.isRequired,
children: PropTypes.arrayOf(PropTypes.shape({
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 f5bc8055a1..edf3a7c859 100644
--- a/frontend/src/metadata/views/gallery/day-images/images-grid.js
+++ b/frontend/src/metadata/views/gallery/day-images/images-grid.js
@@ -1,68 +1,212 @@
-import React from 'react';
+import React, { useMemo } from 'react';
import PropTypes from 'prop-types';
import Image from '../image';
-import { GALLERY_DEFAULT_GRID_GAP } from '../../../constants';
-const ImagesGrid = ({ images, size, imgEvents }) => {
- const allStyles = [
+/*
+ small size: *
+ middle 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;
+
+ // 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 = [
+ [
+ { 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 },
+ ], [
+ { 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 },
+ ], [
+ { 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 },
+ ], [
+ { 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 },
+ ]
+ ];
+ 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 = [
[
- { position: 'absolute', top: 0, left: 0 },
+ /*
+ - - * * * *
+ - - * * - -
+ * * * * - -
+ */
+ { 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 },
], [
- { position: 'absolute', top: 0, left: size.small + GALLERY_DEFAULT_GRID_GAP },
+ /*
+ * * * * - -
+ - - * * - -
+ - - * * * *
+ */
+ { gridRow: '1 / 2', gridColumn: '5 / 6' },
+ { gridRow: '2 / 3', gridColumn: '1 / 2' },
{ gridRow: 1, gridColumn: 1 },
- { gridRow: 2, 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 },
+ ], [
+ /*
+ - - * - - *
+ - - * - - *
+ * * * * * *
+ */
+ { 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 },
], [
- { position: 'absolute', top: size.small + GALLERY_DEFAULT_GRID_GAP, left: 0 },
- { gridRow: 1, gridColumn: 1 },
- { gridRow: 1, gridColumn: 2 },
+ /*
+ - - * * * *
+ - - * - - *
+ * * * - - *
+ */
+ { 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: 3, gridColumn: 3 },
- ], [
- { position: 'absolute', top: size.small + GALLERY_DEFAULT_GRID_GAP, left: size.small + GALLERY_DEFAULT_GRID_GAP },
- { gridRow: 1, gridColumn: 1 },
- { gridRow: 1, gridColumn: 2 },
- { gridRow: 1, gridColumn: 3 },
- { gridRow: 2, gridColumn: 1 },
+ { gridRow: 2, gridColumn: 6 },
{ gridRow: 3, gridColumn: 1 },
+ { gridRow: 3, gridColumn: 2 },
+ { gridRow: 3, gridColumn: 3 },
+ { gridRow: 3, gridColumn: 6 },
]
];
-
- let day = images[0].day;
- day = day ? Number(day) : 0;
- const styles = allStyles[day % 4];
+ const style = styles[day % styles.length];
return (
-
-
- {images.slice(1, 6).map((image, index) => {
- const style = styles[index + 1] || {};
- return ();
+ <>
+
+
+ {others.slice(0, 10).map((image, index) => {
+ return ();
})}
-
+ >
);
+
};
ImagesGrid.propTypes = {
images: PropTypes.array.isRequired,
+ selectedImageIds: PropTypes.array,
size: PropTypes.object.isRequired,
imgEvents: PropTypes.object,
};
diff --git a/frontend/src/metadata/views/gallery/day-images/index.js b/frontend/src/metadata/views/gallery/day-images/index.js
index 0e5db8eda7..dcf9b27786 100644
--- a/frontend/src/metadata/views/gallery/day-images/index.js
+++ b/frontend/src/metadata/views/gallery/day-images/index.js
@@ -3,43 +3,26 @@ import PropTypes from 'prop-types';
import Image from '../image';
import ImagesGrid from './images-grid';
-const DayImages = ({ size, images, imgEvents }) => {
+const DayImages = ({ size, selectedImageIds, images, imgEvents }) => {
const imagesCount = Array.isArray(images) ? images.length : 0;
if (imagesCount === 0) return null;
if (imagesCount === 1) {
const img = images[0];
- return ();
+ return ();
}
if (imagesCount < 7) {
const imgs = images.slice(0, 2);
- return imgs.map(img => ());
- }
- if (imagesCount < 12) {
- const i = imagesCount % 2;
- const firstImg = images[0];
- const renderContent = [
- (),
- ()
- ];
- return (
-
- {i === 0 ? renderContent : [renderContent[1], renderContent[0]]}
-
- );
+ return imgs.map(img => ());
}
- return (
-
-
-
-
- );
+ return ();
};
DayImages.propTypes = {
size: PropTypes.object,
images: PropTypes.array,
+ selectedImageIds: PropTypes.array,
imgEvents: PropTypes.object,
};
diff --git a/frontend/src/metadata/views/gallery/main.js b/frontend/src/metadata/views/gallery/main.js
index 2130009451..788d7e7bae 100644
--- a/frontend/src/metadata/views/gallery/main.js
+++ b/frontend/src/metadata/views/gallery/main.js
@@ -93,7 +93,6 @@ const Main = ({ isLoadingMore, metadata, onDelete, onLoadMore, duplicateRecord,
const { children, ...__init } = _init;
let top = 0;
let rows = [];
- let displayChildren = [];
if (index > 0) {
const lastGroup = _groups[index - 1];
const { top: lastGroupTop, height: lastGroupHeight } = lastGroup;
@@ -107,16 +106,14 @@ const Main = ({ isLoadingMore, metadata, onDelete, onLoadMore, duplicateRecord,
rows[rowIndex].children.push(child);
});
- if (mode === GALLERY_DATE_MODE.YEAR) displayChildren = rows.slice(0, 1);
- if (mode === GALLERY_DATE_MODE.MONTH) displayChildren = rows.slice(0, 1);
- if (mode === GALLERY_DATE_MODE.DAY) displayChildren = [{ top: rows[0].top, children: rows.flatMap(r => r.children) }];
- if (mode === GALLERY_DATE_MODE.ALL) displayChildren = rows;
+ if (mode === GALLERY_DATE_MODE.YEAR) rows = rows.slice(0, 1);
+ if (mode === GALLERY_DATE_MODE.MONTH) rows = rows.slice(0, 1);
+ if (mode === GALLERY_DATE_MODE.DAY) rows = [{ top: rows[0].top, children: rows.slice(0, 2).flatMap(r => r.children) }];
_groups.push({
...__init,
top,
- height: displayChildren.length * rowHeight + paddingTop,
+ height: rows.length * rowHeight + paddingTop,
paddingTop,
- displayChildren,
children: rows
});
});