Introduce new batch metadata update function

This commit is contained in:
schroda
2026-03-06 21:40:41 +01:00
parent 430939a47a
commit 57e05bf20d
5 changed files with 266 additions and 54 deletions

View File

@@ -7,7 +7,10 @@
*/
import { useEffect, useMemo } from 'react';
import { requestCategoryMetadataUpdate } from '@/features/metadata/services/MetadataUpdater.ts';
import {
requestCategoryMetadataUpdate,
requestBatchCategoryMetadataUpdate,
} from '@/features/metadata/services/MetadataUpdater.ts';
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
import { LibraryOptions } from '@/features/library/Library.types.ts';
import { CategoryIdInfo, CategoryMetadataKeys, ICategoryMetadata } from '@/features/category/Category.types.ts';
@@ -85,6 +88,27 @@ export const updateCategoryMetadata = async <
update: [[metadataKey, convertAppMetadataToGqlMetadata({ [metadataKey]: value })[metadataKey]]],
});
export const batchUpdateCategoryMetadata = async <
MetadataKeys extends CategoryMetadataKeys = CategoryMetadataKeys,
MetadataKey extends MetadataKeys = MetadataKeys,
>(
updates: Array<{
categories: (CategoryIdInfo & GqlMetaHolder)[];
entries: Array<{ metadataKey: MetadataKey; value: ICategoryMetadata[MetadataKey] }>;
}>,
): Promise<void> =>
requestBatchCategoryMetadataUpdate(
updates.map(({ categories, entries }) => ({
categories,
options: {
update: entries.map(({ metadataKey, value }) => [
metadataKey,
convertAppMetadataToGqlMetadata({ [metadataKey]: value })[metadataKey],
]),
},
})),
);
export const createUpdateCategoryMetadata =
<Settings extends CategoryMetadataKeys>(
category: CategoryIdInfo & GqlMetaHolder,