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