RenaiApp/src/renderer/store/repositories/entities/source-repository.ts

34 lines
1.7 KiB
TypeScript

import { entityApi } from '../../../services/api';
import { EditableEntityRepository } from '../editable-entity-repository';
import type { EditableEntityRepositoryInterface } from '../editable-entity-repository';
import { fillUpdatePartialArray, fillUpdatePartialPrimitive } from '../util/fill-update-partial';
import { updateMultiRelatedRepository, updateSingleRelatedRepository } from '../util/update-related';
const copyRepositoryPromise = import('./copy-repository').then((m) => m.copyRepository);
const siteRepositoryPromise = import('./site-repository').then((m) => m.siteRepository);
export const sourceRepository: EditableEntityRepositoryInterface<SourceSerializedInterface> =
new EditableEntityRepository(
(id) => entityApi.readSource(id),
(partial) => entityApi.createSource(partial),
(id, partial) => entityApi.updateSource(id, partial),
(id) => entityApi.deleteSource(id),
{
uri: (updatePartial, key, updated, original): void => {
fillUpdatePartialPrimitive(updated, original, key, updatePartial);
},
site: (updatePartial, key, updated, original): void => {
fillUpdatePartialPrimitive(updated, original, key, updatePartial);
},
copies: (updatePartial, key, updated, original): void => {
fillUpdatePartialArray(updated, original, key, updatePartial);
},
},
{
site: (updatedPartial, key, updated, original): Promise<void> =>
updateSingleRelatedRepository(updatedPartial, key, siteRepositoryPromise, updated, original),
copies: (updatedPartial, key, updated, original): Promise<void> =>
updateMultiRelatedRepository(updatedPartial, key, copyRepositoryPromise, updated, original),
},
);