This commit is contained in:
Manav Rathi
2024-10-21 16:10:11 +05:30
parent 245bb3c1b2
commit 038c91e652
5 changed files with 55 additions and 38 deletions

View File

@@ -137,7 +137,6 @@ import {
import { checkSubscriptionPurchase } from "utils/billing";
import {
COLLECTION_OPS_TYPE,
constructCollectionNameMap,
getSelectedCollection,
handleCollectionOps,
} from "utils/collection";
@@ -339,6 +338,7 @@ export default function Gallery() {
const archivedCollectionIDs = state.archivedCollectionIDs;
const defaultHiddenCollectionIDs = state.defaultHiddenCollectionIDs;
const hiddenFileIDs = state.hiddenFileIDs;
const collectionNameMap = state.allCollectionNameByID;
const collectionSummaries = state.collectionSummaries;
const hiddenCollectionSummaries = state.hiddenCollectionSummaries;
@@ -750,16 +750,6 @@ export default function Gallery() {
return constructFileToCollectionMap(files);
}, [files]);
const collectionNameMap = useMemo(() => {
if (!collections || !hiddenCollections) {
return new Map();
}
return constructCollectionNameMap([
...collections,
...hiddenCollections,
]);
}, [collections, hiddenCollections]);
const showSessionExpiredMessage = () => {
setDialogMessage(getSessionExpiredMessage(logout));
};

View File

@@ -9,6 +9,10 @@ import {
} from "@/media/file-metadata";
import { FileType } from "@/media/file-type";
import { decodeLivePhoto } from "@/media/live-photo";
import {
createCollectionNameByID,
getCollectionUserFacingName,
} from "@/new/photos/services/collection";
import downloadManager from "@/new/photos/services/download";
import { updateExifIfNeededAndPossible } from "@/new/photos/services/exif-update";
import {
@@ -34,10 +38,6 @@ import {
ExportUIUpdaters,
FileExportNames,
} from "types/export";
import {
constructCollectionNameMap,
getCollectionUserFacingName,
} from "utils/collection";
import { getAllLocalCollections } from "../collectionService";
import { migrateExport } from "./migration";
@@ -330,7 +330,7 @@ class ExportService {
convertCollectionIDExportNameObjectToMap(
exportRecord.collectionExportNames,
);
const collectionIDNameMap = constructCollectionNameMap(collections);
const collectionIDNameMap = createCollectionNameByID(collections);
const renamedCollections = getRenamedExportedCollections(
collections,

View File

@@ -11,8 +11,8 @@ import {
import { EnteFile } from "@/media/file";
import { ItemVisibility } from "@/media/file-metadata";
import {
DEFAULT_HIDDEN_COLLECTION_USER_FACING_NAME,
findDefaultHiddenCollectionIDs,
isDefaultHiddenCollection,
isHiddenCollection,
isIncomingShare,
} from "@/new/photos/services/collection";
@@ -391,26 +391,6 @@ export function getHiddenCollections(collections: Collection[]): Collection[] {
return collections.filter((collection) => isHiddenCollection(collection));
}
export function constructCollectionNameMap(
collections: Collection[],
): Map<number, string> {
return new Map<number, string>(
(collections ?? []).map((collection) => [
collection.id,
getCollectionUserFacingName(collection),
]),
);
}
const DEFAULT_HIDDEN_COLLECTION_USER_FACING_NAME = "Hidden";
export const getCollectionUserFacingName = (collection: Collection) => {
if (isDefaultHiddenCollection(collection)) {
return DEFAULT_HIDDEN_COLLECTION_USER_FACING_NAME;
}
return collection.name;
};
export const getOrCreateAlbum = async (
albumName: string,
existingCollections: Collection[],

View File

@@ -5,7 +5,10 @@ import {
} from "@/media/collection";
import type { EnteFile } from "@/media/file";
import { mergeMetadata } from "@/media/file";
import { isHiddenCollection } from "@/new/photos/services/collection";
import {
createCollectionNameByID,
isHiddenCollection,
} from "@/new/photos/services/collection";
import { splitByPredicate } from "@/utils/array";
import { ensure } from "@/utils/ensure";
import type { User } from "@ente/shared/user/types";
@@ -109,6 +112,13 @@ export interface GalleryState {
* File IDs of all the files that the user has marked as a favorite.
*/
favoriteFileIDs: Set<number>;
/**
* User visible collection names indexed by collection IDs for fast lookup.
*
* This map will contain entries for all (both normal and hidden)
* collections.
*/
allCollectionNameByID: Map<number, string>;
/*--< Derived UI state >--*/
@@ -183,6 +193,7 @@ const initialGalleryState: GalleryState = {
defaultHiddenCollectionIDs: new Set(),
hiddenFileIDs: new Set(),
favoriteFileIDs: new Set(),
allCollectionNameByID: new Map(),
collectionSummaries: new Map(),
hiddenCollectionSummaries: new Map(),
filteredData: [],
@@ -222,6 +233,9 @@ const galleryReducer: React.Reducer<GalleryState, GalleryAction> = (
collections,
action.files,
),
allCollectionNameByID: createCollectionNameByID(
action.allCollections,
),
collectionSummaries: deriveCollectionSummaries(
action.user,
collections,
@@ -255,6 +269,9 @@ const galleryReducer: React.Reducer<GalleryState, GalleryAction> = (
action.collections,
state.files,
),
allCollectionNameByID: createCollectionNameByID(
action.collections.concat(state.hiddenCollections),
),
collectionSummaries: deriveCollectionSummaries(
ensure(state.user),
action.collections,
@@ -280,6 +297,9 @@ const galleryReducer: React.Reducer<GalleryState, GalleryAction> = (
action.collections,
state.files,
),
allCollectionNameByID: createCollectionNameByID(
action.collections.concat(action.hiddenCollections),
),
collectionSummaries: deriveCollectionSummaries(
ensure(state.user),
action.collections,

View File

@@ -41,3 +41,30 @@ export const isHiddenCollection = (collection: Collection) =>
// TODO: Need to audit the types
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
collection.magicMetadata?.data.visibility === ItemVisibility.hidden;
// TODO: Does this need localizations?
export const DEFAULT_HIDDEN_COLLECTION_USER_FACING_NAME = "Hidden";
/**
* Return the "user facing" name of the given collection.
*
* Usually this is the same as the collection name, but it might be a different
* string for special collections like default hidden collections.
*/
export const getCollectionUserFacingName = (collection: Collection) => {
if (isDefaultHiddenCollection(collection)) {
return DEFAULT_HIDDEN_COLLECTION_USER_FACING_NAME;
}
return collection.name;
};
/**
* Return a map of the (user-facing) collection name, indexed by collection ID.
*/
export const createCollectionNameByID = (allCollections: Collection[]) =>
new Map<number, string>(
allCollections.map((collection) => [
collection.id,
getCollectionUserFacingName(collection),
]),
);