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