← marzneshin
/
v0.3.1
/
dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/expiration-method.strategy.ts
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/users/components/dialogs/mutation/sections/expiration-method/expiration-method.strategy.ts
· TypeScript
Blame
Raw
1import { useFormContext } from "react-hook-form";
2import { ExpireStrategy } from "@marzneshin/features/users";
3
4class ExpirationMethodErrorClear {
5 protected clearErrors(form: ReturnType<typeof useFormContext>) {
6 form.clearErrors("expire_date");
7 form.clearErrors("usage_duration");
8 form.clearErrors("activation_deadline");
9 }
10}
11
12abstract class ExpirationMethodStrategy {
13 abstract apply(form: ReturnType<typeof useFormContext>): void;
14}
15
16export class FirstUseStrategy
17 extends ExpirationMethodErrorClear
18 implements ExpirationMethodStrategy {
19
20 apply(form: ReturnType<typeof useFormContext>) {
21 form.setValue("expire_strategy", "start_on_first_use");
22 form.setValue("expire", undefined);
23 this.clearErrors(form);
24 }
25}
26
27export class NeverStrategy
28 extends ExpirationMethodErrorClear
29 implements ExpirationMethodStrategy {
30
31 apply(form: ReturnType<typeof useFormContext>) {
32 form.setValue("expire_strategy", 'never');
33 form.setValue("expire_date", undefined);
34 form.setValue("activation_deadline", undefined);
35 form.setValue("usage_duration", undefined);
36 this.clearErrors(form);
37 }
38}
39
40export class FixedStrategy
41 extends ExpirationMethodErrorClear
42 implements ExpirationMethodStrategy {
43
44 apply(form: ReturnType<typeof useFormContext>) {
45 form.setValue("expire_strategy", 'fixed_date');
46 form.setValue("on_hold_expire_duration", 0);
47 form.setValue("activation_deadline", null);
48 this.clearErrors(form);
49 }
50}
51
52export const strategies: { [key in ExpireStrategy]: ExpirationMethodStrategy } = {
53 start_on_first_use: new FirstUseStrategy(),
54 never: new NeverStrategy(),
55 fixed_date: new FixedStrategy(),
56};