Introduce new batch metadata update function
This commit is contained in:
@@ -34,7 +34,7 @@ import {
|
||||
SourceNameInfo,
|
||||
} from '@/features/source/Source.types.ts';
|
||||
import { Sources } from '@/features/source/services/Sources';
|
||||
import { getSourceMetadata, updateSourceMetadata } from '@/features/source/services/SourceMetadata.ts';
|
||||
import { batchUpdateSourceMetadata, getSourceMetadata } from '@/features/source/services/SourceMetadata.ts';
|
||||
import { requestManager } from '@/lib/requests/RequestManager.ts';
|
||||
import { ListCardAvatar } from '@/base/components/lists/cards/ListCardAvatar.tsx';
|
||||
import { makeToast } from '@/base/utils/Toast.ts';
|
||||
@@ -113,10 +113,21 @@ export const SourceLanguageSelect = ({
|
||||
const handleOk = () => {
|
||||
setOpen(false);
|
||||
|
||||
Promise.all(
|
||||
Object.entries(tmpSourceIdToEnabledState).map(([sourceId, enabled]) =>
|
||||
updateSourceMetadata(sources.find((source) => source.id === sourceId)!, 'isEnabled', enabled),
|
||||
),
|
||||
batchUpdateSourceMetadata(
|
||||
Object.entries(tmpSourceIdToEnabledState)
|
||||
.map(([sourceId, enabled]) => {
|
||||
const source = sources.find((sourceToEnable) => sourceToEnable.id === sourceId);
|
||||
|
||||
if (!source) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
sources: [source],
|
||||
entries: [{ metadataKey: 'isEnabled' as const, value: enabled }],
|
||||
};
|
||||
})
|
||||
.filter((entry) => entry !== null),
|
||||
).catch((e) => makeToast(t`Failed to save changes`, 'error', getErrorMessage(e)));
|
||||
setTmpSourceIdToEnabledState({});
|
||||
setSelectedLanguages(toUniqueLanguageCodes(tmpSelectedLanguages));
|
||||
|
||||
@@ -7,7 +7,10 @@
|
||||
*/
|
||||
|
||||
import { useEffect, useMemo } from 'react';
|
||||
import { requestSourceMetadataUpdate } from '@/features/metadata/services/MetadataUpdater.ts';
|
||||
import {
|
||||
requestSourceMetadataUpdate,
|
||||
requestBatchSourceMetadataUpdate,
|
||||
} from '@/features/metadata/services/MetadataUpdater.ts';
|
||||
import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts';
|
||||
import { ISourceMetadata, SourceIdInfo, SourceMetadataKeys } from '@/features/source/Source.types.ts';
|
||||
import { convertFromGqlMeta } from '@/features/metadata/services/MetadataConverter.ts';
|
||||
@@ -55,6 +58,27 @@ export const updateSourceMetadata = async <
|
||||
update: [[metadataKey, convertAppMetadataToGqlMetadata({ [metadataKey]: value })[metadataKey]]],
|
||||
});
|
||||
|
||||
export const batchUpdateSourceMetadata = async <
|
||||
MetadataKeys extends SourceMetadataKeys = SourceMetadataKeys,
|
||||
MetadataKey extends MetadataKeys = MetadataKeys,
|
||||
>(
|
||||
updates: Array<{
|
||||
sources: (SourceIdInfo & GqlMetaHolder)[];
|
||||
entries: Array<{ metadataKey: MetadataKey; value: ISourceMetadata[MetadataKey] }>;
|
||||
}>,
|
||||
): Promise<void> =>
|
||||
requestBatchSourceMetadataUpdate(
|
||||
updates.map(({ sources, entries }) => ({
|
||||
sources,
|
||||
options: {
|
||||
update: entries.map(({ metadataKey, value }) => [
|
||||
metadataKey,
|
||||
convertAppMetadataToGqlMetadata({ [metadataKey]: value })[metadataKey],
|
||||
]),
|
||||
},
|
||||
})),
|
||||
);
|
||||
|
||||
export const createUpdateSourceMetadata =
|
||||
<Settings extends SourceMetadataKeys>(
|
||||
source: SourceIdInfo & GqlMetaHolder,
|
||||
|
||||
Reference in New Issue
Block a user