Album cover (#1238)
This commit is contained in:
commit
ea92b1a17c
|
@ -19,7 +19,7 @@ export default function AllCollectionCard({
|
|||
return (
|
||||
<CollectionCard
|
||||
collectionTile={AllCollectionTile}
|
||||
latestFile={collectionSummary.latestFile}
|
||||
coverFile={collectionSummary.coverFile}
|
||||
onClick={() => onCollectionClick(collectionSummary.id)}
|
||||
isScrolling={isScrolling}>
|
||||
<AllCollectionTileText>
|
||||
|
|
|
@ -8,13 +8,13 @@ import { LoadingThumbnail } from 'components/PlaceholderThumbnails';
|
|||
|
||||
export default function CollectionCard(props: {
|
||||
children?: any;
|
||||
latestFile: EnteFile;
|
||||
coverFile: EnteFile;
|
||||
onClick: () => void;
|
||||
collectionTile: any;
|
||||
isScrolling?: boolean;
|
||||
}) {
|
||||
const {
|
||||
latestFile: file,
|
||||
coverFile: file,
|
||||
onClick,
|
||||
children,
|
||||
collectionTile: CustomCollectionTile,
|
||||
|
|
|
@ -30,7 +30,7 @@ const CollectionListBarCard = (props: Iprops) => {
|
|||
<Box>
|
||||
<CollectionCard
|
||||
collectionTile={CollectionBarTile}
|
||||
latestFile={collectionSummary.latestFile}
|
||||
coverFile={collectionSummary.coverFile}
|
||||
onClick={() => {
|
||||
onCollectionClick(collectionSummary.id);
|
||||
}}>
|
||||
|
|
|
@ -76,7 +76,7 @@ const CollectionCardContainer = React.memo(
|
|||
);
|
||||
|
||||
const getItemKey = (index: number, data: ItemData) => {
|
||||
return `${data.collectionSummaries[index].id}-${data.collectionSummaries[index].latestFile?.id}`;
|
||||
return `${data.collectionSummaries[index].id}-${data.collectionSummaries[index].coverFile?.id}`;
|
||||
};
|
||||
|
||||
const CollectionListBar = (props: IProps) => {
|
||||
|
|
|
@ -22,7 +22,7 @@ export default function AddCollectionButton({ showNextModal }: Iprops) {
|
|||
<CollectionCard
|
||||
collectionTile={AllCollectionTile}
|
||||
onClick={() => showNextModal()}
|
||||
latestFile={null}>
|
||||
coverFile={null}>
|
||||
<AllCollectionTileText>
|
||||
{t('CREATE_COLLECTION')}
|
||||
</AllCollectionTileText>
|
||||
|
|
|
@ -16,7 +16,7 @@ export default function CollectionSelectorCard({
|
|||
return (
|
||||
<CollectionCard
|
||||
collectionTile={AllCollectionTile}
|
||||
latestFile={collectionSummary.latestFile}
|
||||
coverFile={collectionSummary.coverFile}
|
||||
onClick={() => onCollectionClick(collectionSummary.id)}>
|
||||
<AllCollectionTileText>
|
||||
<Typography>{collectionSummary.name}</Typography>
|
||||
|
|
|
@ -40,7 +40,7 @@ const LabelWithInfo = ({ data }: { data: SearchOption }) => {
|
|||
{data.previewFiles.map((file) => (
|
||||
<CollectionCard
|
||||
key={file.id}
|
||||
latestFile={file}
|
||||
coverFile={file}
|
||||
onClick={() => null}
|
||||
collectionTile={ResultPreviewTile}
|
||||
/>
|
||||
|
|
|
@ -15,7 +15,7 @@ import {
|
|||
} from 'utils/file';
|
||||
import {
|
||||
Collection,
|
||||
CollectionLatestFiles,
|
||||
CollectionToFileMap,
|
||||
AddToCollectionRequest,
|
||||
MoveToCollectionRequest,
|
||||
EncryptedFileKey,
|
||||
|
@ -297,10 +297,9 @@ export const getCollection = async (
|
|||
};
|
||||
|
||||
export const getCollectionLatestFiles = (
|
||||
user: User,
|
||||
files: EnteFile[],
|
||||
archivedCollections: Set<number>
|
||||
): CollectionLatestFiles => {
|
||||
): CollectionToFileMap => {
|
||||
const latestFiles = new Map<number, EnteFile>();
|
||||
|
||||
files.forEach((file) => {
|
||||
|
@ -310,7 +309,6 @@ export const getCollectionLatestFiles = (
|
|||
if (
|
||||
!latestFiles.has(ALL_SECTION) &&
|
||||
!isArchivedFile(file) &&
|
||||
file.ownerID === user.id &&
|
||||
!archivedCollections.has(file.collectionID)
|
||||
) {
|
||||
latestFiles.set(ALL_SECTION, file);
|
||||
|
@ -319,6 +317,54 @@ export const getCollectionLatestFiles = (
|
|||
return latestFiles;
|
||||
};
|
||||
|
||||
export const getCollectionCoverFiles = (
|
||||
files: EnteFile[],
|
||||
archivedCollections: Set<number>,
|
||||
collections: Collection[]
|
||||
): CollectionToFileMap => {
|
||||
const collectionIDToFileMap = groupFilesBasedOnCollectionID(files);
|
||||
|
||||
const coverFiles = new Map<number, EnteFile>();
|
||||
|
||||
collections.forEach((collection) => {
|
||||
const collectionFiles = collectionIDToFileMap.get(collection.id);
|
||||
if (!collectionFiles || collectionFiles.length === 0) {
|
||||
return;
|
||||
}
|
||||
if (typeof collection.pubMagicMetadata?.data?.coverID !== 'undefined') {
|
||||
const coverFile = collectionFiles.find(
|
||||
(file) => file.id === collection.pubMagicMetadata?.data?.coverID
|
||||
);
|
||||
if (coverFile) {
|
||||
coverFiles.set(collection.id, coverFile);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (collection.pubMagicMetadata?.data?.asc) {
|
||||
coverFiles.set(
|
||||
collection.id,
|
||||
collectionFiles[collectionFiles.length - 1]
|
||||
);
|
||||
} else {
|
||||
coverFiles.set(collection.id, collectionFiles[0]);
|
||||
}
|
||||
});
|
||||
|
||||
for (const file of files) {
|
||||
if (coverFiles.has(ALL_SECTION)) {
|
||||
break;
|
||||
}
|
||||
if (
|
||||
!isArchivedFile(file) &&
|
||||
!archivedCollections.has(file.collectionID)
|
||||
) {
|
||||
coverFiles.set(ALL_SECTION, file);
|
||||
}
|
||||
}
|
||||
|
||||
return coverFiles;
|
||||
};
|
||||
|
||||
export const getFavItemIds = async (
|
||||
files: EnteFile[]
|
||||
): Promise<Set<number>> => {
|
||||
|
@ -1068,10 +1114,14 @@ export async function getCollectionSummaries(
|
|||
): Promise<CollectionSummaries> {
|
||||
const collectionSummaries: CollectionSummaries = new Map();
|
||||
const collectionLatestFiles = getCollectionLatestFiles(
|
||||
user,
|
||||
files,
|
||||
archivedCollections
|
||||
);
|
||||
const collectionCoverFiles = getCollectionCoverFiles(
|
||||
files,
|
||||
archivedCollections,
|
||||
collections
|
||||
);
|
||||
const collectionFilesCount = getCollectionsFileCount(
|
||||
files,
|
||||
trashedFiles,
|
||||
|
@ -1109,6 +1159,7 @@ export async function getCollectionSummaries(
|
|||
id: collection.id,
|
||||
name: collection.name,
|
||||
latestFile: collectionLatestFiles.get(collection.id),
|
||||
coverFile: collectionCoverFiles.get(collection.id),
|
||||
fileCount: collectionFilesCount.get(collection.id) ?? 0,
|
||||
updationTime: collection.updationTime,
|
||||
type: type,
|
||||
|
@ -1140,7 +1191,11 @@ export async function getCollectionSummaries(
|
|||
|
||||
collectionSummaries.set(
|
||||
ALL_SECTION,
|
||||
getAllCollectionSummaries(collectionFilesCount, collectionLatestFiles)
|
||||
getAllCollectionSummaries(
|
||||
collectionFilesCount,
|
||||
collectionCoverFiles,
|
||||
collectionLatestFiles
|
||||
)
|
||||
);
|
||||
collectionSummaries.set(
|
||||
ARCHIVE_SECTION,
|
||||
|
@ -1200,12 +1255,14 @@ function getCollectionsFileCount(
|
|||
|
||||
function getAllCollectionSummaries(
|
||||
collectionFilesCount: CollectionFilesCount,
|
||||
collectionsLatestFile: CollectionLatestFiles
|
||||
collectionCoverFiles: CollectionToFileMap,
|
||||
collectionsLatestFile: CollectionToFileMap
|
||||
): CollectionSummary {
|
||||
return {
|
||||
id: ALL_SECTION,
|
||||
name: t('ALL_SECTION_NAME'),
|
||||
type: CollectionSummaryType.all,
|
||||
coverFile: collectionCoverFiles.get(ALL_SECTION),
|
||||
latestFile: collectionsLatestFile.get(ALL_SECTION),
|
||||
fileCount: collectionFilesCount.get(ALL_SECTION) || 0,
|
||||
updationTime: collectionsLatestFile.get(ALL_SECTION)?.updationTime,
|
||||
|
@ -1219,6 +1276,7 @@ function getDummyUncategorizedCollectionSummaries(): CollectionSummary {
|
|||
name: t('UNCATEGORIZED'),
|
||||
type: CollectionSummaryType.uncategorized,
|
||||
latestFile: null,
|
||||
coverFile: null,
|
||||
fileCount: 0,
|
||||
updationTime: 0,
|
||||
order: 1,
|
||||
|
@ -1227,12 +1285,13 @@ function getDummyUncategorizedCollectionSummaries(): CollectionSummary {
|
|||
|
||||
function getHiddenCollectionSummaries(
|
||||
collectionFilesCount: CollectionFilesCount,
|
||||
collectionsLatestFile: CollectionLatestFiles
|
||||
collectionsLatestFile: CollectionToFileMap
|
||||
): CollectionSummary {
|
||||
return {
|
||||
id: HIDDEN_SECTION,
|
||||
name: t('HIDDEN'),
|
||||
type: CollectionSummaryType.hidden,
|
||||
coverFile: null,
|
||||
latestFile: collectionsLatestFile.get(HIDDEN_SECTION),
|
||||
fileCount: collectionFilesCount.get(HIDDEN_SECTION) ?? 0,
|
||||
updationTime: collectionsLatestFile.get(HIDDEN_SECTION)?.updationTime,
|
||||
|
@ -1241,12 +1300,13 @@ function getHiddenCollectionSummaries(
|
|||
}
|
||||
function getArchivedCollectionSummaries(
|
||||
collectionFilesCount: CollectionFilesCount,
|
||||
collectionsLatestFile: CollectionLatestFiles
|
||||
collectionsLatestFile: CollectionToFileMap
|
||||
): CollectionSummary {
|
||||
return {
|
||||
id: ARCHIVE_SECTION,
|
||||
name: t('ARCHIVE_SECTION_NAME'),
|
||||
type: CollectionSummaryType.archive,
|
||||
coverFile: null,
|
||||
latestFile: collectionsLatestFile.get(ARCHIVE_SECTION),
|
||||
fileCount: collectionFilesCount.get(ARCHIVE_SECTION) ?? 0,
|
||||
updationTime: collectionsLatestFile.get(ARCHIVE_SECTION)?.updationTime,
|
||||
|
@ -1256,12 +1316,13 @@ function getArchivedCollectionSummaries(
|
|||
|
||||
function getTrashedCollectionSummaries(
|
||||
collectionFilesCount: CollectionFilesCount,
|
||||
collectionsLatestFile: CollectionLatestFiles
|
||||
collectionsLatestFile: CollectionToFileMap
|
||||
): CollectionSummary {
|
||||
return {
|
||||
id: TRASH_SECTION,
|
||||
name: t('TRASH'),
|
||||
type: CollectionSummaryType.trash,
|
||||
coverFile: null,
|
||||
latestFile: collectionsLatestFile.get(TRASH_SECTION),
|
||||
fileCount: collectionFilesCount.get(TRASH_SECTION) ?? 0,
|
||||
updationTime: collectionsLatestFile.get(TRASH_SECTION)?.updationTime,
|
||||
|
|
|
@ -111,7 +111,7 @@ export interface collectionAttributes {
|
|||
pathDecryptionNonce?: string;
|
||||
}
|
||||
|
||||
export type CollectionLatestFiles = Map<number, EnteFile>;
|
||||
export type CollectionToFileMap = Map<number, EnteFile>;
|
||||
|
||||
export interface RemoveFromCollectionRequest {
|
||||
collectionID: number;
|
||||
|
@ -145,6 +145,7 @@ export interface CollectionSummary {
|
|||
id: number;
|
||||
name: string;
|
||||
type: CollectionSummaryType;
|
||||
coverFile: EnteFile;
|
||||
latestFile: EnteFile;
|
||||
fileCount: number;
|
||||
updationTime: number;
|
||||
|
|
Loading…
Reference in a new issue