diff options
Diffstat (limited to 'frontend/src/lib/Update.ts')
-rw-r--r-- | frontend/src/lib/Update.ts | 95 |
1 files changed, 0 insertions, 95 deletions
diff --git a/frontend/src/lib/Update.ts b/frontend/src/lib/Update.ts deleted file mode 100644 index 13aec61..0000000 --- a/frontend/src/lib/Update.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { - UpdateMode, - type UpdateComicInput, - type UpdateOptions, - type UpdateTagInput -} from '$gql/graphql'; - -type Key = string | number | symbol; - -interface AssociationUpdate { - ids?: number[] | string[] | null; - options?: UpdateOptions | null; -} - -type Input<T, K extends Key> = Partial<Record<K, T | null>>; - -abstract class Entry<K extends Key> { - key: K; - - constructor(key: K) { - this.key = key; - } - - abstract integrate(input: Input<unknown, K>): void; - abstract hasInput(): boolean; -} - -class Association<K extends Key> extends Entry<K> { - ids = []; - options = { - mode: UpdateMode.Add - }; - - constructor(key: K) { - super(key); - } - - integrate(input: Input<AssociationUpdate, K>) { - if (this.hasInput()) { - input[this.key] = { ids: this.ids, options: this.options }; - } - } - - hasInput() { - return this.ids.length > 0; - } -} - -class Enum<K extends Key> extends Entry<K> { - value?: string = undefined; - - constructor(key: K) { - super(key); - } - - integrate(input: Input<string, K>): void { - if (this.hasInput()) { - input[this.key] = this.value; - } - } - - hasInput() { - return this.value !== undefined && this.value !== null; - } -} - -abstract class Controls<I> { - toInput() { - const input = {} as I; - Object.values(this).forEach((v: Entry<keyof I>) => v.integrate(input)); - return input; - } - - hasInput() { - return Object.values(this).some((i: Entry<keyof I>) => i.hasInput()); - } -} - -export class UpdateTagsControls extends Controls<UpdateTagInput> { - namespaces = new Association('namespaces'); -} - -export class UpdateComicsControls extends Controls<UpdateComicInput> { - artists = new Association('artists'); - category = new Enum('category'); - censorship = new Enum('censorship'); - direction = new Enum('direction'); - layout = new Enum('layout'); - characters = new Association('characters'); - circles = new Association('circles'); - language = new Enum('language'); - rating = new Enum('rating'); - tags = new Association('tags'); - worlds = new Association('worlds'); -} |