+
{
this.value = value;
}
- public abstract clone(): Criterion;
+ public clone() {
+ const ret = Object.assign(Object.create(Object.getPrototypeOf(this)), this);
+ ret.cloneValues();
+ return ret;
+ }
+
+ protected cloneValues() {}
public static getModifierLabel(intl: IntlShape, modifier: CriterionModifier) {
const modifierMessageID = modifierMessageIDs[modifier];
@@ -257,13 +263,8 @@ export class ILabeledIdCriterion extends Criterion {
super(type, value);
}
- public clone(): Criterion {
- const newCriterion = new ILabeledIdCriterion(
- this.criterionOption,
- this.value.map((v) => ({ ...v }))
- );
- newCriterion.modifier = this.modifier;
- return newCriterion;
+ public cloneValues() {
+ this.value = this.value.map((v) => ({ ...v }));
}
protected getLabelValue(_intl: IntlShape): string {
@@ -301,17 +302,12 @@ export class IHierarchicalLabeledIdCriterion extends Criterion {
- const newCriterion = new IHierarchicalLabeledIdCriterion(
- this.criterionOption,
- {
- ...this.value,
- items: this.value.items.map((v) => ({ ...v })),
- excluded: this.value.excluded.map((v) => ({ ...v })),
- }
- );
- newCriterion.modifier = this.modifier;
- return newCriterion;
+ public cloneValues() {
+ this.value = {
+ ...this.value,
+ items: this.value.items.map((v) => ({ ...v })),
+ excluded: this.value.excluded.map((v) => ({ ...v })),
+ };
}
override get modifier(): CriterionModifier {
@@ -512,13 +508,6 @@ 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;
}
@@ -532,18 +521,13 @@ export class StringCriterion extends Criterion {
}
}
-export class MultiStringCriterion extends Criterion {
+export abstract class MultiStringCriterion extends Criterion {
constructor(type: CriterionOption, value: string[] = []) {
super(type, value);
}
- public clone(): Criterion {
- const newCriterion = new MultiStringCriterion(
- this.criterionOption,
- this.value.slice()
- );
- newCriterion.modifier = this.modifier;
- return newCriterion;
+ public cloneValues() {
+ this.value = this.value.slice();
}
protected getLabelValue(_intl: IntlShape) {
@@ -718,11 +702,8 @@ export class NumberCriterion extends Criterion {
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 cloneValues() {
+ this.value = { ...this.value };
}
public get value(): INumberValue {
@@ -803,11 +784,8 @@ 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 cloneValues() {
+ this.value = { ...this.value };
}
public toCriterionInput(): IntCriterionInput {
@@ -887,11 +865,8 @@ export class DateCriterion extends Criterion {
super(type, { value: "", value2: undefined });
}
- public clone() {
- const newCriterion = new DateCriterion(this.criterionOption);
- newCriterion.modifier = this.modifier;
- newCriterion.value = { ...this.value };
- return newCriterion;
+ public cloneValues() {
+ this.value = { ...this.value };
}
public encodeValue() {
@@ -993,11 +968,8 @@ export class TimestampCriterion extends Criterion {
super(type, { value: "", value2: undefined });
}
- public clone() {
- const newCriterion = new TimestampCriterion(this.criterionOption);
- newCriterion.modifier = this.modifier;
- newCriterion.value = { ...this.value };
- return newCriterion;
+ public cloneValues() {
+ this.value = { ...this.value };
}
public encodeValue() {
diff --git a/ui/v2.5/src/models/list-filter/criteria/gender.ts b/ui/v2.5/src/models/list-filter/criteria/gender.ts
index 27e7bf170..31e5a38ac 100644
--- a/ui/v2.5/src/models/list-filter/criteria/gender.ts
+++ b/ui/v2.5/src/models/list-filter/criteria/gender.ts
@@ -25,8 +25,8 @@ export const GenderCriterionOption = new CriterionOption({
});
export class GenderCriterion extends MultiStringCriterion {
- constructor() {
- super(GenderCriterionOption);
+ constructor(value: string[] = []) {
+ super(GenderCriterionOption, value);
}
public toCriterionInput(): GenderCriterionInput {
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 a4ce1a1bf..e5d8178e0 100644
--- a/ui/v2.5/src/models/list-filter/criteria/performers.ts
+++ b/ui/v2.5/src/models/list-filter/criteria/performers.ts
@@ -33,11 +33,12 @@ 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;
+ public cloneValues() {
+ this.value = {
+ ...this.value,
+ items: this.value.items.map((v) => ({ ...v })),
+ excluded: this.value.excluded.map((v) => ({ ...v })),
+ };
}
override get modifier(): CriterionModifier {
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 ea794c30e..e1119bb65 100644
--- a/ui/v2.5/src/models/list-filter/criteria/phash.ts
+++ b/ui/v2.5/src/models/list-filter/criteria/phash.ts
@@ -29,11 +29,8 @@ 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;
+ public cloneValues() {
+ this.value = { ...this.value };
}
protected getLabelValue() {
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 59760a53d..ef18a7f2b 100644
--- a/ui/v2.5/src/models/list-filter/criteria/rating.ts
+++ b/ui/v2.5/src/models/list-filter/criteria/rating.ts
@@ -45,11 +45,8 @@ export class RatingCriterion extends Criterion {
this.ratingSystem = ratingSystem;
}
- public clone() {
- const newCriterion = new RatingCriterion(this.ratingSystem);
- newCriterion.modifier = this.modifier;
- newCriterion.value = { ...this.value };
- return newCriterion;
+ public cloneValues() {
+ this.value = { ...this.value };
}
public get value(): INumberValue {
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 0ea7b0655..94d53ed92 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,11 +27,8 @@ export class StashIDCriterion extends Criterion {
});
}
- public clone() {
- const newCriterion = new StashIDCriterion();
- newCriterion.modifier = this.modifier;
- newCriterion.value = { ...this.value };
- return newCriterion;
+ public cloneValues() {
+ this.value = { ...this.value };
}
public get value(): IStashIDValue {