diff --git a/ui/v2.5/src/models/list-filter/criteria/criterion.ts b/ui/v2.5/src/models/list-filter/criteria/criterion.ts index 2c36cf545..36ed39894 100644 --- a/ui/v2.5/src/models/list-filter/criteria/criterion.ts +++ b/ui/v2.5/src/models/list-filter/criteria/criterion.ts @@ -89,14 +89,7 @@ export abstract class Criterion { this.value = value; } - public clone(): Criterion { - const newCriterion = new (this.constructor as new ( - type: CriterionOption, - value: V - ) => Criterion)(this.criterionOption, this.value); - newCriterion.modifier = this.modifier; - return newCriterion; - } + public abstract clone(): Criterion; public static getModifierLabel(intl: IntlShape, modifier: CriterionModifier) { const modifierMessageID = modifierMessageIDs[modifier]; @@ -519,6 +512,13 @@ export class StringCriterion extends Criterion { super(type, ""); } + public clone() { + const newCriterion = new StringCriterion(this.criterionOption); + newCriterion.modifier = this.modifier; + newCriterion.value = this.value; + return newCriterion; + } + protected getLabelValue(_intl: IntlShape) { return this.value; } @@ -714,6 +714,17 @@ export function createMandatoryNumberCriterionOption( } export class NumberCriterion extends Criterion { + constructor(type: CriterionOption) { + super(type, { value: undefined, value2: undefined }); + } + + public clone() { + const newCriterion = new NumberCriterion(this.criterionOption); + newCriterion.modifier = this.modifier; + newCriterion.value = { ...this.value }; + return newCriterion; + } + public get value(): INumberValue { return this._value; } @@ -772,10 +783,6 @@ export class NumberCriterion extends Criterion { return true; } - - constructor(type: CriterionOption) { - super(type, { value: undefined, value2: undefined }); - } } export class DurationCriterionOption extends MandatoryNumberCriterionOption { @@ -796,6 +803,13 @@ export class DurationCriterion extends Criterion { super(type, { value: undefined, value2: undefined }); } + public clone() { + const newCriterion = new DurationCriterion(this.criterionOption); + newCriterion.modifier = this.modifier; + newCriterion.value = { ...this.value }; + return newCriterion; + } + public toCriterionInput(): IntCriterionInput { return { modifier: this.modifier, @@ -869,6 +883,17 @@ export function createDateCriterionOption(value: CriterionType) { } export class DateCriterion extends Criterion { + constructor(type: CriterionOption) { + super(type, { value: "", value2: undefined }); + } + + public clone() { + const newCriterion = new DateCriterion(this.criterionOption); + newCriterion.modifier = this.modifier; + newCriterion.value = { ...this.value }; + return newCriterion; + } + public encodeValue() { return { value: this.value.value, @@ -915,10 +940,6 @@ export class DateCriterion extends Criterion { return true; } - - constructor(type: CriterionOption) { - super(type, { value: "", value2: undefined }); - } } export class TimestampCriterionOption extends CriterionOption { @@ -968,6 +989,17 @@ export function createMandatoryTimestampCriterionOption(value: CriterionType) { } export class TimestampCriterion extends Criterion { + constructor(type: CriterionOption) { + super(type, { value: "", value2: undefined }); + } + + public clone() { + const newCriterion = new TimestampCriterion(this.criterionOption); + newCriterion.modifier = this.modifier; + newCriterion.value = { ...this.value }; + return newCriterion; + } + public encodeValue() { return { value: this.value?.value, @@ -1025,8 +1057,4 @@ export class TimestampCriterion extends Criterion { return true; } - - constructor(type: CriterionOption) { - super(type, { value: "", value2: undefined }); - } } diff --git a/ui/v2.5/src/models/list-filter/criteria/performers.ts b/ui/v2.5/src/models/list-filter/criteria/performers.ts index 3d29dd9dc..a4ce1a1bf 100644 --- a/ui/v2.5/src/models/list-filter/criteria/performers.ts +++ b/ui/v2.5/src/models/list-filter/criteria/performers.ts @@ -33,6 +33,13 @@ export class PerformersCriterion extends Criterion { super(PerformersCriterionOption, { items: [], excluded: [] }); } + public clone() { + const newCriterion = new PerformersCriterion(); + newCriterion.modifier = this.modifier; + newCriterion.value = { ...this.value }; + return newCriterion; + } + override get modifier(): CriterionModifier { return this._modifier; } diff --git a/ui/v2.5/src/models/list-filter/criteria/phash.ts b/ui/v2.5/src/models/list-filter/criteria/phash.ts index 4887751b3..ea794c30e 100644 --- a/ui/v2.5/src/models/list-filter/criteria/phash.ts +++ b/ui/v2.5/src/models/list-filter/criteria/phash.ts @@ -29,6 +29,13 @@ export class PhashCriterion extends Criterion { super(PhashCriterionOption, { value: "", distance: 0 }); } + public clone() { + const newCriterion = new PhashCriterion(); + newCriterion.modifier = this.modifier; + newCriterion.value = { ...this.value }; + return newCriterion; + } + protected getLabelValue() { const { value, distance } = this.value; if ( diff --git a/ui/v2.5/src/models/list-filter/criteria/rating.ts b/ui/v2.5/src/models/list-filter/criteria/rating.ts index b3feb85af..59760a53d 100644 --- a/ui/v2.5/src/models/list-filter/criteria/rating.ts +++ b/ui/v2.5/src/models/list-filter/criteria/rating.ts @@ -40,6 +40,18 @@ export const RatingCriterionOption = new CriterionOption({ export class RatingCriterion extends Criterion { ratingSystem: RatingSystemOptions; + constructor(ratingSystem: RatingSystemOptions) { + super(RatingCriterionOption, { value: 0, value2: undefined }); + this.ratingSystem = ratingSystem; + } + + public clone() { + const newCriterion = new RatingCriterion(this.ratingSystem); + newCriterion.modifier = this.modifier; + newCriterion.value = { ...this.value }; + return newCriterion; + } + public get value(): INumberValue { return this._value; } @@ -76,9 +88,4 @@ export class RatingCriterion extends Criterion { return `${convertToRatingFormat(value, this.ratingSystem) ?? 0}`; } } - - constructor(ratingSystem: RatingSystemOptions) { - super(RatingCriterionOption, { value: 0, value2: undefined }); - this.ratingSystem = ratingSystem; - } } diff --git a/ui/v2.5/src/models/list-filter/criteria/stash-ids.ts b/ui/v2.5/src/models/list-filter/criteria/stash-ids.ts index 951c88b41..0ea7b0655 100644 --- a/ui/v2.5/src/models/list-filter/criteria/stash-ids.ts +++ b/ui/v2.5/src/models/list-filter/criteria/stash-ids.ts @@ -27,6 +27,13 @@ export class StashIDCriterion extends Criterion { }); } + public clone() { + const newCriterion = new StashIDCriterion(); + newCriterion.modifier = this.modifier; + newCriterion.value = { ...this.value }; + return newCriterion; + } + public get value(): IStashIDValue { return this._value; }