@greatapps/common 1.1.261 → 1.1.262
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/account/ConfigurationsMyAccountModal.mjs +1 -1
- package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
- package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
- package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
- package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
- package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
- package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
- package/dist/components/account/TwoFactorAuthModal.mjs.map +1 -1
- package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
- package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
- package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
- package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
- package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
- package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
- package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
- package/dist/components/account/sections/SecuritySection.mjs.map +1 -1
- package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
- package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
- package/dist/components/layouts/AppMobileNavBar.mjs +1 -1
- package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
- package/dist/components/layouts/AppNavBar.mjs.map +1 -1
- package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -1
- package/dist/components/layouts/NavBar.mjs.map +1 -1
- package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
- package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
- package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
- package/dist/components/modals/BuyCreditsModal.mjs.map +1 -1
- package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
- package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
- package/dist/components/navigation/ProjectSelectorPopover.mjs.map +1 -1
- package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
- package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
- package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
- package/dist/components/ui/buttons/Button.mjs.map +1 -1
- package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
- package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
- package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
- package/dist/components/ui/data-display/Badge.mjs.map +1 -1
- package/dist/components/ui/data-display/Card.mjs.map +1 -1
- package/dist/components/ui/data-display/CardBrandIcons.mjs.map +1 -1
- package/dist/components/ui/data-display/CardItem.mjs.map +1 -1
- package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
- package/dist/components/ui/data-display/PaymentInfoCard.mjs.map +1 -1
- package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
- package/dist/components/ui/data-display/Separator.mjs.map +1 -1
- package/dist/components/ui/data-display/Table.mjs.map +1 -1
- package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
- package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
- package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
- package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
- package/dist/components/ui/feedback/Progress.mjs.map +1 -1
- package/dist/components/ui/feedback/Skeleton.mjs.map +1 -1
- package/dist/components/ui/feedback/Toast.mjs.map +1 -1
- package/dist/components/ui/form/Calendar.mjs.map +1 -1
- package/dist/components/ui/form/Checkbox.mjs.map +1 -1
- package/dist/components/ui/form/ComboboxField.mjs.map +1 -1
- package/dist/components/ui/form/DatePicker.mjs.map +1 -1
- package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
- package/dist/components/ui/form/FormField.mjs.map +1 -1
- package/dist/components/ui/form/Input.mjs.map +1 -1
- package/dist/components/ui/form/InputOtp.mjs.map +1 -1
- package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
- package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
- package/dist/components/ui/form/Select.mjs +1 -1
- package/dist/components/ui/form/Select.mjs.map +1 -1
- package/dist/components/ui/form/Switch.mjs.map +1 -1
- package/dist/components/ui/form/Textarea.mjs.map +1 -1
- package/dist/components/ui/overlay/Command.mjs.map +1 -1
- package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
- package/dist/components/ui/overlay/Popover.mjs.map +1 -1
- package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
- package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
- package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/middleware.mjs.map +1 -1
- package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
- package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
- package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
- package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
- package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
- package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
- package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
- package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
- package/dist/modules/accounts/services/account.service.mjs.map +1 -1
- package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -1
- package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
- package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
- package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
- package/dist/modules/cards/actions/list-cards.action.mjs.map +1 -1
- package/dist/modules/cards/hooks/cards.hook.mjs.map +1 -1
- package/dist/modules/cards/services/cards.service.mjs.map +1 -1
- package/dist/modules/cards/types.mjs.map +1 -1
- package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
- package/dist/modules/plans/actions/find-plan-by-id.action.mjs.map +1 -1
- package/dist/modules/plans/hooks/use-has-plan-addon.hook.mjs.map +1 -1
- package/dist/modules/plans/hooks/use-plan-by-id.hook.mjs.map +1 -1
- package/dist/modules/plans/services/plans.service.mjs.map +1 -1
- package/dist/modules/plans/types/plan.type.mjs.map +1 -1
- package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
- package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
- package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
- package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
- package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
- package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
- package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/actions/calculate-subscription.action.mjs.map +1 -1
- package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
- package/dist/modules/subscriptions/actions/update-subscription-plan.action.mjs.map +1 -1
- package/dist/modules/subscriptions/constants/query-keys.constants.mjs.map +1 -1
- package/dist/modules/subscriptions/hooks/calculate-subscription.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/hooks/update-subscription-plan.hook.mjs.map +1 -1
- package/dist/modules/subscriptions/types/calculate-subscription.type.mjs.map +1 -1
- package/dist/modules/subscriptions/utils/build-plan-extras.mjs.map +1 -1
- package/dist/modules/subscriptions/utils/periodicity.mjs.map +1 -1
- package/dist/modules/subscriptions/utils/resolve-plan-extras-prices.mjs.map +1 -1
- package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
- package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
- package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
- package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
- package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
- package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs.map +1 -1
- package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
- package/dist/modules/whitelabel/actions/revalidate-whitelabel-styles.action.mjs.map +1 -1
- package/dist/modules/whitelabel/actions/revalidate-whitelabel.action.mjs.map +1 -1
- package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs.map +1 -1
- package/dist/providers/whitelabel.provider.mjs.map +1 -1
- package/dist/store/useBuyCreditsModal.mjs.map +1 -1
- package/dist/utils/countries.mjs.map +1 -1
- package/dist/utils/safeServerAction.mjs.map +1 -1
- package/dist/utils/withAction.mjs.map +1 -1
- package/package.json +89 -89
- package/src/components/account/ConfigurationsMyAccountModal.tsx +150 -150
- package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
- package/src/components/account/ConfirmGlobalPreferencesModal.tsx +66 -66
- package/src/components/account/DeleteAccountModal.tsx +130 -130
- package/src/components/account/DisableTwoFactorAuthModal.tsx +86 -86
- package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
- package/src/components/account/TwoFactorAuthModal.tsx +223 -223
- package/src/components/account/hooks/useChangePhoneForm.tsx +81 -81
- package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
- package/src/components/account/sections/ChangeEmailModal.tsx +225 -225
- package/src/components/account/sections/ChangePasswordSection.tsx +64 -64
- package/src/components/account/sections/ChangePhoneModal.tsx +231 -231
- package/src/components/account/sections/MyProfileSection.tsx +327 -327
- package/src/components/account/sections/PreferencesSection.tsx +273 -273
- package/src/components/account/sections/SecuritySection.tsx +160 -160
- package/src/components/embeds/CrispEmbed.tsx +101 -101
- package/src/components/embeds/FrillEmbed.tsx +119 -119
- package/src/components/layouts/AppMobileNavBar.tsx +118 -118
- package/src/components/layouts/AppNavBar.tsx +51 -51
- package/src/components/layouts/MdSideBarNavigation.tsx +56 -56
- package/src/components/layouts/NavBar.tsx +120 -120
- package/src/components/layouts/NotificationsPopover.tsx +115 -115
- package/src/components/layouts/ProfilePopover.tsx +164 -164
- package/src/components/layouts/UsersSelectorPopover.tsx +238 -238
- package/src/components/modals/BuyCreditsModal.tsx +301 -301
- package/src/components/navigation/CancelledSubscriptionBanner.tsx +69 -69
- package/src/components/navigation/NavItemsContext.ts +20 -20
- package/src/components/navigation/ProjectSelectorPopover.tsx +157 -157
- package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
- package/src/components/navigation/subcomponents/ProjectSelector.tsx +156 -156
- package/src/components/pages/notifications/Notifications.tsx +160 -160
- package/src/components/ui/buttons/Button.tsx +57 -57
- package/src/components/ui/buttons/CancelButton.tsx +14 -14
- package/src/components/ui/buttons/CopyButton.tsx +54 -54
- package/src/components/ui/data-display/Accordion.tsx +81 -81
- package/src/components/ui/data-display/Badge.tsx +47 -47
- package/src/components/ui/data-display/Card.tsx +93 -93
- package/src/components/ui/data-display/CardBrandIcons.tsx +336 -336
- package/src/components/ui/data-display/CardItem.tsx +75 -75
- package/src/components/ui/data-display/Pagination.tsx +126 -126
- package/src/components/ui/data-display/PaymentInfoCard.tsx +186 -186
- package/src/components/ui/data-display/ScrollArea.tsx +59 -59
- package/src/components/ui/data-display/Separator.tsx +29 -29
- package/src/components/ui/data-display/Table.tsx +117 -117
- package/src/components/ui/data-display/Tabs.tsx +67 -67
- package/src/components/ui/feedback/CircularProgress.tsx +75 -75
- package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
- package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
- package/src/components/ui/feedback/Progress.tsx +40 -40
- package/src/components/ui/feedback/Skeleton.tsx +5 -5
- package/src/components/ui/feedback/Toast.tsx +101 -101
- package/src/components/ui/form/Calendar.tsx +228 -228
- package/src/components/ui/form/Checkbox.tsx +31 -31
- package/src/components/ui/form/ComboboxField.tsx +154 -154
- package/src/components/ui/form/DatePicker.tsx +97 -97
- package/src/components/ui/form/DateRangePicker.tsx +108 -108
- package/src/components/ui/form/FormField.tsx +131 -131
- package/src/components/ui/form/Input.tsx +20 -20
- package/src/components/ui/form/InputOtp.tsx +80 -80
- package/src/components/ui/form/PhoneInput.tsx +205 -205
- package/src/components/ui/form/RadioGroup.tsx +45 -45
- package/src/components/ui/form/Select.tsx +200 -200
- package/src/components/ui/form/Switch.tsx +32 -32
- package/src/components/ui/form/Textarea.tsx +19 -19
- package/src/components/ui/overlay/Command.tsx +185 -185
- package/src/components/ui/overlay/Dialog.tsx +151 -151
- package/src/components/ui/overlay/Popover.tsx +49 -49
- package/src/components/ui/overlay/Sheet.tsx +166 -166
- package/src/components/ui/overlay/Tooltip.tsx +62 -62
- package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
- package/src/index.ts +376 -376
- package/src/middleware.ts +4 -4
- package/src/modules/accounts/actions/account-management.action.ts +91 -91
- package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
- package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
- package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
- package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
- package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
- package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
- package/src/modules/accounts/hooks/useTimezones.ts +15 -15
- package/src/modules/accounts/services/account.service.ts +236 -236
- package/src/modules/accounts/types.ts +214 -214
- package/src/modules/auth/actions/validate-session.action.ts +56 -56
- package/src/modules/auth/hooks/login.hook.tsx +13 -13
- package/src/modules/auth/hooks/logout.hook.tsx +11 -11
- package/src/modules/auth/hooks/register.hook.tsx +11 -11
- package/src/modules/cards/actions/list-cards.action.ts +8 -8
- package/src/modules/cards/hooks/cards.hook.ts +14 -14
- package/src/modules/cards/services/cards.service.ts +32 -32
- package/src/modules/cards/types.ts +32 -32
- package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
- package/src/modules/plans/actions/find-plan-by-id.action.ts +8 -8
- package/src/modules/plans/hooks/use-has-plan-addon.hook.ts +17 -17
- package/src/modules/plans/hooks/use-plan-by-id.hook.ts +13 -13
- package/src/modules/plans/services/plans.service.ts +36 -36
- package/src/modules/plans/types/plan.type.ts +21 -21
- package/src/modules/projects/actions/add-project-user.action.ts +9 -9
- package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
- package/src/modules/projects/actions/list-available-users.action.ts +9 -9
- package/src/modules/projects/actions/list-project-users.action.ts +9 -9
- package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
- package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
- package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
- package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
- package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
- package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
- package/src/modules/subscriptions/actions/calculate-subscription.action.ts +9 -9
- package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
- package/src/modules/subscriptions/actions/update-subscription-plan.action.ts +26 -26
- package/src/modules/subscriptions/constants/query-keys.constants.ts +1 -1
- package/src/modules/subscriptions/hooks/calculate-subscription.hook.ts +13 -13
- package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
- package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +16 -16
- package/src/modules/subscriptions/hooks/update-subscription-plan.hook.ts +25 -25
- package/src/modules/subscriptions/types/billing-period.type.ts +1 -1
- package/src/modules/subscriptions/types/calculate-subscription.type.ts +75 -75
- package/src/modules/subscriptions/utils/build-plan-extras.ts +56 -56
- package/src/modules/subscriptions/utils/periodicity.ts +52 -52
- package/src/modules/subscriptions/utils/resolve-plan-extras-prices.ts +23 -23
- package/src/modules/users/action/find-user-by-id.action.ts +8 -8
- package/src/modules/users/action/list-messages.action.ts +12 -12
- package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
- package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
- package/src/modules/users/hooks/messages.hook.ts +60 -60
- package/src/modules/whitelabel/actions/find-whitelabel-styles.action.ts +14 -14
- package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
- package/src/modules/whitelabel/actions/revalidate-whitelabel-styles.action.ts +10 -10
- package/src/modules/whitelabel/actions/revalidate-whitelabel.action.ts +19 -19
- package/src/modules/whitelabel/schema.ts +83 -83
- package/src/modules/whitelabel/services/whitelabel-styles.service.ts +129 -129
- package/src/modules/whitelabel/styles-schema.ts +37 -37
- package/src/providers/whitelabel.provider.tsx +54 -54
- package/src/store/useBuyCreditsModal.ts +25 -25
- package/src/utils/countries.ts +224 -224
- package/src/utils/safeServerAction.ts +21 -21
- package/src/utils/withAction.ts +13 -13
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
import z from 'zod';
|
|
2
|
-
|
|
3
|
-
export const CalculateSubscriptionPlanExtraRequestSchema = z.object({
|
|
4
|
-
id_addon: z.number(),
|
|
5
|
-
value: z.number(),
|
|
6
|
-
quantity: z.number(),
|
|
7
|
-
currency: z.string(),
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
export const CalculateSubscriptionRequestSchema = z.object({
|
|
11
|
-
id_product: z.number(),
|
|
12
|
-
id_plan: z.number().optional(),
|
|
13
|
-
id_subscription: z.union([z.number(), z.string()]).optional(),
|
|
14
|
-
id_coupon: z.number().optional(),
|
|
15
|
-
plan_extras: z.array(CalculateSubscriptionPlanExtraRequestSchema.partial({ value: true })).optional(),
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
export type CalculateSubscriptionRequest = z.infer<typeof CalculateSubscriptionRequestSchema>;
|
|
19
|
-
|
|
20
|
-
export const CalculateSubscriptionPlanExtraResponseSchema = z.object({
|
|
21
|
-
id_addon: z.number(),
|
|
22
|
-
value: z.number(),
|
|
23
|
-
value_original: z.number().optional().default(0),
|
|
24
|
-
value_discount: z.number().optional().default(0),
|
|
25
|
-
quantity: z.number(),
|
|
26
|
-
currency: z.string(),
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
export const CalculateSubscriptionResponseSchema = z.object({
|
|
30
|
-
name: z.string(),
|
|
31
|
-
month: z.number(),
|
|
32
|
-
month_discount: z.number(),
|
|
33
|
-
month_discount_coupom: z.number().optional().default(0),
|
|
34
|
-
month_original: z.number(),
|
|
35
|
-
month_original_discount: z.number().optional().default(0),
|
|
36
|
-
month_original_discount_cupom: z.number().optional().default(0),
|
|
37
|
-
semmester: z.number(),
|
|
38
|
-
semmester_price: z.number().optional().default(0),
|
|
39
|
-
semmester_discount: z.number(),
|
|
40
|
-
semmester_discount_coupom: z.number().optional().default(0),
|
|
41
|
-
semmester_original: z.number(),
|
|
42
|
-
semmester_original_discount: z.number().optional().default(0),
|
|
43
|
-
semmester_original_discount_cupom: z.number().optional().default(0),
|
|
44
|
-
year: z.number(),
|
|
45
|
-
year_discount: z.number(),
|
|
46
|
-
year_discount_coupom: z.number().optional().default(0),
|
|
47
|
-
year_original: z.number(),
|
|
48
|
-
year_original_discount: z.number().optional().default(0),
|
|
49
|
-
year_original_discount_cupom: z.number().optional().default(0),
|
|
50
|
-
plan_extras: z.array(CalculateSubscriptionPlanExtraResponseSchema),
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
export type CalculateSubscriptionResponse = z.infer<typeof CalculateSubscriptionResponseSchema>;
|
|
54
|
-
|
|
55
|
-
export const UpdateSubscriptionPlanExtraSchema = z.object({
|
|
56
|
-
id_addon: z.number(),
|
|
57
|
-
value: z.number().optional(),
|
|
58
|
-
quantity: z.number(),
|
|
59
|
-
price: z.string().optional(),
|
|
60
|
-
trial: z.boolean().optional(),
|
|
61
|
-
trial_days: z.number().optional(),
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
export const UpdateSubscriptionPlanRequestSchema = z.object({
|
|
65
|
-
id_plan: z.number().optional(),
|
|
66
|
-
id_coupon: z.union([z.number(), z.null()]).optional(),
|
|
67
|
-
date_due: z.string().optional(),
|
|
68
|
-
type: z.string().optional(),
|
|
69
|
-
active: z.boolean().optional(),
|
|
70
|
-
periodicity: z.number().optional(),
|
|
71
|
-
plan_extras: z.array(UpdateSubscriptionPlanExtraSchema).optional(),
|
|
72
|
-
enable_charge: z.boolean().optional(),
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
export type UpdateSubscriptionPlanRequest = z.infer<typeof UpdateSubscriptionPlanRequestSchema>;
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
|
|
3
|
+
export const CalculateSubscriptionPlanExtraRequestSchema = z.object({
|
|
4
|
+
id_addon: z.number(),
|
|
5
|
+
value: z.number(),
|
|
6
|
+
quantity: z.number(),
|
|
7
|
+
currency: z.string(),
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
export const CalculateSubscriptionRequestSchema = z.object({
|
|
11
|
+
id_product: z.number(),
|
|
12
|
+
id_plan: z.number().optional(),
|
|
13
|
+
id_subscription: z.union([z.number(), z.string()]).optional(),
|
|
14
|
+
id_coupon: z.number().optional(),
|
|
15
|
+
plan_extras: z.array(CalculateSubscriptionPlanExtraRequestSchema.partial({ value: true })).optional(),
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export type CalculateSubscriptionRequest = z.infer<typeof CalculateSubscriptionRequestSchema>;
|
|
19
|
+
|
|
20
|
+
export const CalculateSubscriptionPlanExtraResponseSchema = z.object({
|
|
21
|
+
id_addon: z.number(),
|
|
22
|
+
value: z.number(),
|
|
23
|
+
value_original: z.number().optional().default(0),
|
|
24
|
+
value_discount: z.number().optional().default(0),
|
|
25
|
+
quantity: z.number(),
|
|
26
|
+
currency: z.string(),
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export const CalculateSubscriptionResponseSchema = z.object({
|
|
30
|
+
name: z.string(),
|
|
31
|
+
month: z.number(),
|
|
32
|
+
month_discount: z.number(),
|
|
33
|
+
month_discount_coupom: z.number().optional().default(0),
|
|
34
|
+
month_original: z.number(),
|
|
35
|
+
month_original_discount: z.number().optional().default(0),
|
|
36
|
+
month_original_discount_cupom: z.number().optional().default(0),
|
|
37
|
+
semmester: z.number(),
|
|
38
|
+
semmester_price: z.number().optional().default(0),
|
|
39
|
+
semmester_discount: z.number(),
|
|
40
|
+
semmester_discount_coupom: z.number().optional().default(0),
|
|
41
|
+
semmester_original: z.number(),
|
|
42
|
+
semmester_original_discount: z.number().optional().default(0),
|
|
43
|
+
semmester_original_discount_cupom: z.number().optional().default(0),
|
|
44
|
+
year: z.number(),
|
|
45
|
+
year_discount: z.number(),
|
|
46
|
+
year_discount_coupom: z.number().optional().default(0),
|
|
47
|
+
year_original: z.number(),
|
|
48
|
+
year_original_discount: z.number().optional().default(0),
|
|
49
|
+
year_original_discount_cupom: z.number().optional().default(0),
|
|
50
|
+
plan_extras: z.array(CalculateSubscriptionPlanExtraResponseSchema),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
export type CalculateSubscriptionResponse = z.infer<typeof CalculateSubscriptionResponseSchema>;
|
|
54
|
+
|
|
55
|
+
export const UpdateSubscriptionPlanExtraSchema = z.object({
|
|
56
|
+
id_addon: z.number(),
|
|
57
|
+
value: z.number().optional(),
|
|
58
|
+
quantity: z.number(),
|
|
59
|
+
price: z.string().optional(),
|
|
60
|
+
trial: z.boolean().optional(),
|
|
61
|
+
trial_days: z.number().optional(),
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
export const UpdateSubscriptionPlanRequestSchema = z.object({
|
|
65
|
+
id_plan: z.number().optional(),
|
|
66
|
+
id_coupon: z.union([z.number(), z.null()]).optional(),
|
|
67
|
+
date_due: z.string().optional(),
|
|
68
|
+
type: z.string().optional(),
|
|
69
|
+
active: z.boolean().optional(),
|
|
70
|
+
periodicity: z.number().optional(),
|
|
71
|
+
plan_extras: z.array(UpdateSubscriptionPlanExtraSchema).optional(),
|
|
72
|
+
enable_charge: z.boolean().optional(),
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
export type UpdateSubscriptionPlanRequest = z.infer<typeof UpdateSubscriptionPlanRequestSchema>;
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import type { SubscriptionItem } from '../types/subscription.type';
|
|
2
|
-
|
|
3
|
-
export interface PlanExtraOverride {
|
|
4
|
-
id_addon: number;
|
|
5
|
-
quantity: number;
|
|
6
|
-
currency: string;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface PlanExtra {
|
|
10
|
-
id_addon: number;
|
|
11
|
-
value?: number;
|
|
12
|
-
quantity: number;
|
|
13
|
-
currency: string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function buildPlanExtras(
|
|
17
|
-
items: SubscriptionItem[],
|
|
18
|
-
overrides: PlanExtraOverride[]
|
|
19
|
-
): PlanExtra[] {
|
|
20
|
-
const overrideMap = new Map(overrides.map((o) => [o.id_addon, o]));
|
|
21
|
-
const seen = new Set<number>();
|
|
22
|
-
|
|
23
|
-
const extras: PlanExtra[] = [];
|
|
24
|
-
|
|
25
|
-
for (const item of items) {
|
|
26
|
-
if (item.id_addon == null || seen.has(item.id_addon)) continue;
|
|
27
|
-
seen.add(item.id_addon);
|
|
28
|
-
|
|
29
|
-
const override = overrideMap.get(item.id_addon);
|
|
30
|
-
if (override) {
|
|
31
|
-
overrideMap.delete(item.id_addon);
|
|
32
|
-
extras.push({
|
|
33
|
-
id_addon: override.id_addon,
|
|
34
|
-
quantity: override.quantity,
|
|
35
|
-
currency: override.currency,
|
|
36
|
-
});
|
|
37
|
-
} else {
|
|
38
|
-
extras.push({
|
|
39
|
-
id_addon: item.id_addon,
|
|
40
|
-
value: item.value,
|
|
41
|
-
quantity: item.quantity,
|
|
42
|
-
currency: item.currency,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
for (const override of overrideMap.values()) {
|
|
48
|
-
extras.push({
|
|
49
|
-
id_addon: override.id_addon,
|
|
50
|
-
quantity: override.quantity,
|
|
51
|
-
currency: override.currency,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
return extras;
|
|
56
|
-
}
|
|
1
|
+
import type { SubscriptionItem } from '../types/subscription.type';
|
|
2
|
+
|
|
3
|
+
export interface PlanExtraOverride {
|
|
4
|
+
id_addon: number;
|
|
5
|
+
quantity: number;
|
|
6
|
+
currency: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface PlanExtra {
|
|
10
|
+
id_addon: number;
|
|
11
|
+
value?: number;
|
|
12
|
+
quantity: number;
|
|
13
|
+
currency: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function buildPlanExtras(
|
|
17
|
+
items: SubscriptionItem[],
|
|
18
|
+
overrides: PlanExtraOverride[]
|
|
19
|
+
): PlanExtra[] {
|
|
20
|
+
const overrideMap = new Map(overrides.map((o) => [o.id_addon, o]));
|
|
21
|
+
const seen = new Set<number>();
|
|
22
|
+
|
|
23
|
+
const extras: PlanExtra[] = [];
|
|
24
|
+
|
|
25
|
+
for (const item of items) {
|
|
26
|
+
if (item.id_addon == null || seen.has(item.id_addon)) continue;
|
|
27
|
+
seen.add(item.id_addon);
|
|
28
|
+
|
|
29
|
+
const override = overrideMap.get(item.id_addon);
|
|
30
|
+
if (override) {
|
|
31
|
+
overrideMap.delete(item.id_addon);
|
|
32
|
+
extras.push({
|
|
33
|
+
id_addon: override.id_addon,
|
|
34
|
+
quantity: override.quantity,
|
|
35
|
+
currency: override.currency,
|
|
36
|
+
});
|
|
37
|
+
} else {
|
|
38
|
+
extras.push({
|
|
39
|
+
id_addon: item.id_addon,
|
|
40
|
+
value: item.value,
|
|
41
|
+
quantity: item.quantity,
|
|
42
|
+
currency: item.currency,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
for (const override of overrideMap.values()) {
|
|
48
|
+
extras.push({
|
|
49
|
+
id_addon: override.id_addon,
|
|
50
|
+
quantity: override.quantity,
|
|
51
|
+
currency: override.currency,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return extras;
|
|
56
|
+
}
|
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
import type { BillingPeriod } from '../types/billing-period.type';
|
|
2
|
-
import type { CalculateSubscriptionResponse } from '../types/calculate-subscription.type';
|
|
3
|
-
|
|
4
|
-
export function periodicityToBillingPeriod(
|
|
5
|
-
periodicity: number | string | null | undefined
|
|
6
|
-
): BillingPeriod | null {
|
|
7
|
-
if (periodicity === 30 || periodicity === 1 || periodicity === 'monthly') return 'monthly';
|
|
8
|
-
if (periodicity === 180 || periodicity === 3 || periodicity === 'semiannual') return 'semiannual';
|
|
9
|
-
if (periodicity === 365 || periodicity === 2 || periodicity === 'annual') return 'annual';
|
|
10
|
-
return null;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function billingPeriodToNumeric(billingPeriod: BillingPeriod): 30 | 180 | 365 {
|
|
14
|
-
if (billingPeriod === 'semiannual') return 180;
|
|
15
|
-
if (billingPeriod === 'annual') return 365;
|
|
16
|
-
return 30;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function getPeriodicityLabel(periodicity: number | string | null | undefined): string {
|
|
20
|
-
const period = periodicityToBillingPeriod(periodicity);
|
|
21
|
-
if (period === 'semiannual') return 'Semestral';
|
|
22
|
-
if (period === 'annual') return 'Anual';
|
|
23
|
-
return 'Mensal';
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function getBillingPeriodSuffix(billingPeriod: BillingPeriod): string {
|
|
27
|
-
if (billingPeriod === 'semiannual') return '/semestre';
|
|
28
|
-
if (billingPeriod === 'annual') return '/ano';
|
|
29
|
-
return '/mês';
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export function getBillingPeriodLabel(billingPeriod: BillingPeriod): string {
|
|
33
|
-
if (billingPeriod === 'semiannual') return 'semestral';
|
|
34
|
-
if (billingPeriod === 'annual') return 'anual';
|
|
35
|
-
return 'mensal';
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export function getBillingPeriodMonths(billingPeriod: BillingPeriod): number {
|
|
39
|
-
if (billingPeriod === 'semiannual') return 6;
|
|
40
|
-
if (billingPeriod === 'annual') return 12;
|
|
41
|
-
return 1;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function getPriceFromCalculatedData(
|
|
45
|
-
data: CalculateSubscriptionResponse,
|
|
46
|
-
periodicity: number | string | null | undefined
|
|
47
|
-
): number {
|
|
48
|
-
const period = periodicityToBillingPeriod(periodicity);
|
|
49
|
-
if (period === 'annual') return data.year;
|
|
50
|
-
if (period === 'semiannual') return data.semmester;
|
|
51
|
-
return data.month;
|
|
52
|
-
}
|
|
1
|
+
import type { BillingPeriod } from '../types/billing-period.type';
|
|
2
|
+
import type { CalculateSubscriptionResponse } from '../types/calculate-subscription.type';
|
|
3
|
+
|
|
4
|
+
export function periodicityToBillingPeriod(
|
|
5
|
+
periodicity: number | string | null | undefined
|
|
6
|
+
): BillingPeriod | null {
|
|
7
|
+
if (periodicity === 30 || periodicity === 1 || periodicity === 'monthly') return 'monthly';
|
|
8
|
+
if (periodicity === 180 || periodicity === 3 || periodicity === 'semiannual') return 'semiannual';
|
|
9
|
+
if (periodicity === 365 || periodicity === 2 || periodicity === 'annual') return 'annual';
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function billingPeriodToNumeric(billingPeriod: BillingPeriod): 30 | 180 | 365 {
|
|
14
|
+
if (billingPeriod === 'semiannual') return 180;
|
|
15
|
+
if (billingPeriod === 'annual') return 365;
|
|
16
|
+
return 30;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export function getPeriodicityLabel(periodicity: number | string | null | undefined): string {
|
|
20
|
+
const period = periodicityToBillingPeriod(periodicity);
|
|
21
|
+
if (period === 'semiannual') return 'Semestral';
|
|
22
|
+
if (period === 'annual') return 'Anual';
|
|
23
|
+
return 'Mensal';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function getBillingPeriodSuffix(billingPeriod: BillingPeriod): string {
|
|
27
|
+
if (billingPeriod === 'semiannual') return '/semestre';
|
|
28
|
+
if (billingPeriod === 'annual') return '/ano';
|
|
29
|
+
return '/mês';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function getBillingPeriodLabel(billingPeriod: BillingPeriod): string {
|
|
33
|
+
if (billingPeriod === 'semiannual') return 'semestral';
|
|
34
|
+
if (billingPeriod === 'annual') return 'anual';
|
|
35
|
+
return 'mensal';
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function getBillingPeriodMonths(billingPeriod: BillingPeriod): number {
|
|
39
|
+
if (billingPeriod === 'semiannual') return 6;
|
|
40
|
+
if (billingPeriod === 'annual') return 12;
|
|
41
|
+
return 1;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function getPriceFromCalculatedData(
|
|
45
|
+
data: CalculateSubscriptionResponse,
|
|
46
|
+
periodicity: number | string | null | undefined
|
|
47
|
+
): number {
|
|
48
|
+
const period = periodicityToBillingPeriod(periodicity);
|
|
49
|
+
if (period === 'annual') return data.year;
|
|
50
|
+
if (period === 'semiannual') return data.semmester;
|
|
51
|
+
return data.month;
|
|
52
|
+
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import 'server-only';
|
|
2
|
-
|
|
3
|
-
import type { SubscriptionItem } from '../types/subscription.type';
|
|
4
|
-
|
|
5
|
-
interface PlanExtraInput {
|
|
6
|
-
id_addon: number;
|
|
7
|
-
value?: number;
|
|
8
|
-
quantity: number;
|
|
9
|
-
[key: string]: unknown;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export function resolvePlanExtrasPrices<T extends PlanExtraInput>(
|
|
13
|
-
extras: T[],
|
|
14
|
-
subscriptionItems: SubscriptionItem[]
|
|
15
|
-
): T[] {
|
|
16
|
-
return extras.map((extra) => {
|
|
17
|
-
const item = subscriptionItems.find((i) => i.id_addon === extra.id_addon);
|
|
18
|
-
if (item) {
|
|
19
|
-
return { ...extra, value: item.value };
|
|
20
|
-
}
|
|
21
|
-
return { ...extra, value: extra.value ?? 0 };
|
|
22
|
-
});
|
|
23
|
-
}
|
|
1
|
+
import 'server-only';
|
|
2
|
+
|
|
3
|
+
import type { SubscriptionItem } from '../types/subscription.type';
|
|
4
|
+
|
|
5
|
+
interface PlanExtraInput {
|
|
6
|
+
id_addon: number;
|
|
7
|
+
value?: number;
|
|
8
|
+
quantity: number;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function resolvePlanExtrasPrices<T extends PlanExtraInput>(
|
|
13
|
+
extras: T[],
|
|
14
|
+
subscriptionItems: SubscriptionItem[]
|
|
15
|
+
): T[] {
|
|
16
|
+
return extras.map((extra) => {
|
|
17
|
+
const item = subscriptionItems.find((i) => i.id_addon === extra.id_addon);
|
|
18
|
+
if (item) {
|
|
19
|
+
return { ...extra, value: item.value };
|
|
20
|
+
}
|
|
21
|
+
return { ...extra, value: extra.value ?? 0 };
|
|
22
|
+
});
|
|
23
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
|
|
3
|
-
import { safeServerAction } from '../../../utils/safeServerAction';
|
|
4
|
-
import { userService } from '../services/user.service';
|
|
5
|
-
|
|
6
|
-
export async function findUserById() {
|
|
7
|
-
return safeServerAction(() => userService.findById());
|
|
8
|
-
}
|
|
1
|
+
'use server';
|
|
2
|
+
|
|
3
|
+
import { safeServerAction } from '../../../utils/safeServerAction';
|
|
4
|
+
import { userService } from '../services/user.service';
|
|
5
|
+
|
|
6
|
+
export async function findUserById() {
|
|
7
|
+
return safeServerAction(() => userService.findById());
|
|
8
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
|
|
3
|
-
import { safeServerAction } from '../../../utils/safeServerAction';
|
|
4
|
-
import { messagesService } from '../services/messages.service';
|
|
5
|
-
import type { FindMessagesParams } from '../schema/messages.schema';
|
|
6
|
-
|
|
7
|
-
export async function listMessagesAction(params?: Partial<FindMessagesParams>) {
|
|
8
|
-
return safeServerAction(async () => {
|
|
9
|
-
const result = await messagesService.listMessages(params);
|
|
10
|
-
return { data: result.data, total: result.total, totalUnread: result.totalUnread };
|
|
11
|
-
});
|
|
12
|
-
}
|
|
1
|
+
'use server';
|
|
2
|
+
|
|
3
|
+
import { safeServerAction } from '../../../utils/safeServerAction';
|
|
4
|
+
import { messagesService } from '../services/messages.service';
|
|
5
|
+
import type { FindMessagesParams } from '../schema/messages.schema';
|
|
6
|
+
|
|
7
|
+
export async function listMessagesAction(params?: Partial<FindMessagesParams>) {
|
|
8
|
+
return safeServerAction(async () => {
|
|
9
|
+
const result = await messagesService.listMessages(params);
|
|
10
|
+
return { data: result.data, total: result.total, totalUnread: result.totalUnread };
|
|
11
|
+
});
|
|
12
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
|
|
3
|
-
import { safeServerAction } from '../../../utils/safeServerAction';
|
|
4
|
-
import { messagesService } from '../services/messages.service';
|
|
5
|
-
|
|
6
|
-
export async function markAllMessagesAsReadAction() {
|
|
7
|
-
return safeServerAction(() => messagesService.markAllAsRead());
|
|
8
|
-
}
|
|
1
|
+
'use server';
|
|
2
|
+
|
|
3
|
+
import { safeServerAction } from '../../../utils/safeServerAction';
|
|
4
|
+
import { messagesService } from '../services/messages.service';
|
|
5
|
+
|
|
6
|
+
export async function markAllMessagesAsReadAction() {
|
|
7
|
+
return safeServerAction(() => messagesService.markAllAsRead());
|
|
8
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
|
|
3
|
-
import { safeServerAction } from '../../../utils/safeServerAction';
|
|
4
|
-
import { messagesService } from '../services/messages.service';
|
|
5
|
-
|
|
6
|
-
export async function markMessageAsReadAction(messageId: string) {
|
|
7
|
-
return safeServerAction(() => messagesService.markAsRead(messageId));
|
|
8
|
-
}
|
|
1
|
+
'use server';
|
|
2
|
+
|
|
3
|
+
import { safeServerAction } from '../../../utils/safeServerAction';
|
|
4
|
+
import { messagesService } from '../services/messages.service';
|
|
5
|
+
|
|
6
|
+
export async function markMessageAsReadAction(messageId: string) {
|
|
7
|
+
return safeServerAction(() => messagesService.markAsRead(messageId));
|
|
8
|
+
}
|
|
@@ -1,60 +1,60 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
4
|
-
import { listMessagesAction } from '../action/list-messages.action';
|
|
5
|
-
import { markMessageAsReadAction } from '../action/mark-message-as-read.action';
|
|
6
|
-
import { markAllMessagesAsReadAction } from '../action/mark-all-messages-as-read.action';
|
|
7
|
-
import { withAction } from '../../../utils/withAction';
|
|
8
|
-
import type { FindMessagesParams } from '../schema/messages.schema';
|
|
9
|
-
|
|
10
|
-
export const MESSAGES_QUERY_KEY = ['messages'];
|
|
11
|
-
|
|
12
|
-
const INFINITE_MESSAGES_PAGE_SIZE = 10;
|
|
13
|
-
|
|
14
|
-
export function useMessages(params?: Partial<FindMessagesParams>) {
|
|
15
|
-
return useQuery({
|
|
16
|
-
queryKey: [...MESSAGES_QUERY_KEY, params],
|
|
17
|
-
queryFn: withAction(() => listMessagesAction(params)),
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function useInfiniteMessages(params?: Partial<Omit<FindMessagesParams, 'page' | 'limit'>>) {
|
|
22
|
-
return useInfiniteQuery({
|
|
23
|
-
queryKey: [...MESSAGES_QUERY_KEY, 'infinite', params],
|
|
24
|
-
queryFn: ({ pageParam }) =>
|
|
25
|
-
withAction(() =>
|
|
26
|
-
listMessagesAction({
|
|
27
|
-
...params,
|
|
28
|
-
page: pageParam as number,
|
|
29
|
-
limit: INFINITE_MESSAGES_PAGE_SIZE,
|
|
30
|
-
})
|
|
31
|
-
)(),
|
|
32
|
-
getNextPageParam: (lastPage, allPages) => {
|
|
33
|
-
const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
|
|
34
|
-
return loaded < lastPage.total ? allPages.length + 1 : undefined;
|
|
35
|
-
},
|
|
36
|
-
initialPageParam: 1,
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export function useMarkMessageAsRead() {
|
|
41
|
-
const queryClient = useQueryClient();
|
|
42
|
-
|
|
43
|
-
return useMutation({
|
|
44
|
-
mutationFn: withAction(markMessageAsReadAction),
|
|
45
|
-
onSuccess: () => {
|
|
46
|
-
queryClient.invalidateQueries({ queryKey: MESSAGES_QUERY_KEY });
|
|
47
|
-
},
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function useMarkAllMessagesAsRead() {
|
|
52
|
-
const queryClient = useQueryClient();
|
|
53
|
-
|
|
54
|
-
return useMutation({
|
|
55
|
-
mutationFn: withAction(markAllMessagesAsReadAction),
|
|
56
|
-
onSuccess: () => {
|
|
57
|
-
queryClient.invalidateQueries({ queryKey: MESSAGES_QUERY_KEY });
|
|
58
|
-
},
|
|
59
|
-
});
|
|
60
|
-
}
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
|
4
|
+
import { listMessagesAction } from '../action/list-messages.action';
|
|
5
|
+
import { markMessageAsReadAction } from '../action/mark-message-as-read.action';
|
|
6
|
+
import { markAllMessagesAsReadAction } from '../action/mark-all-messages-as-read.action';
|
|
7
|
+
import { withAction } from '../../../utils/withAction';
|
|
8
|
+
import type { FindMessagesParams } from '../schema/messages.schema';
|
|
9
|
+
|
|
10
|
+
export const MESSAGES_QUERY_KEY = ['messages'];
|
|
11
|
+
|
|
12
|
+
const INFINITE_MESSAGES_PAGE_SIZE = 10;
|
|
13
|
+
|
|
14
|
+
export function useMessages(params?: Partial<FindMessagesParams>) {
|
|
15
|
+
return useQuery({
|
|
16
|
+
queryKey: [...MESSAGES_QUERY_KEY, params],
|
|
17
|
+
queryFn: withAction(() => listMessagesAction(params)),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function useInfiniteMessages(params?: Partial<Omit<FindMessagesParams, 'page' | 'limit'>>) {
|
|
22
|
+
return useInfiniteQuery({
|
|
23
|
+
queryKey: [...MESSAGES_QUERY_KEY, 'infinite', params],
|
|
24
|
+
queryFn: ({ pageParam }) =>
|
|
25
|
+
withAction(() =>
|
|
26
|
+
listMessagesAction({
|
|
27
|
+
...params,
|
|
28
|
+
page: pageParam as number,
|
|
29
|
+
limit: INFINITE_MESSAGES_PAGE_SIZE,
|
|
30
|
+
})
|
|
31
|
+
)(),
|
|
32
|
+
getNextPageParam: (lastPage, allPages) => {
|
|
33
|
+
const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
|
|
34
|
+
return loaded < lastPage.total ? allPages.length + 1 : undefined;
|
|
35
|
+
},
|
|
36
|
+
initialPageParam: 1,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function useMarkMessageAsRead() {
|
|
41
|
+
const queryClient = useQueryClient();
|
|
42
|
+
|
|
43
|
+
return useMutation({
|
|
44
|
+
mutationFn: withAction(markMessageAsReadAction),
|
|
45
|
+
onSuccess: () => {
|
|
46
|
+
queryClient.invalidateQueries({ queryKey: MESSAGES_QUERY_KEY });
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function useMarkAllMessagesAsRead() {
|
|
52
|
+
const queryClient = useQueryClient();
|
|
53
|
+
|
|
54
|
+
return useMutation({
|
|
55
|
+
mutationFn: withAction(markAllMessagesAsReadAction),
|
|
56
|
+
onSuccess: () => {
|
|
57
|
+
queryClient.invalidateQueries({ queryKey: MESSAGES_QUERY_KEY });
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
'use server';
|
|
2
|
-
|
|
3
|
-
import { cache } from 'react';
|
|
4
|
-
import { whitelabelStylesService } from '../services/whitelabel-styles.service';
|
|
5
|
-
import { WhitelabelStylesData } from '../styles-schema';
|
|
6
|
-
|
|
7
|
-
export const findWhitelabelStyles = cache(async (id_wl: number): Promise<WhitelabelStylesData | null> => {
|
|
8
|
-
try {
|
|
9
|
-
return await whitelabelStylesService.getByWlId(id_wl);
|
|
10
|
-
} catch (error) {
|
|
11
|
-
console.error('[findWhitelabelStyles] Error fetching styles:', error);
|
|
12
|
-
return null;
|
|
13
|
-
}
|
|
14
|
-
});
|
|
1
|
+
'use server';
|
|
2
|
+
|
|
3
|
+
import { cache } from 'react';
|
|
4
|
+
import { whitelabelStylesService } from '../services/whitelabel-styles.service';
|
|
5
|
+
import { WhitelabelStylesData } from '../styles-schema';
|
|
6
|
+
|
|
7
|
+
export const findWhitelabelStyles = cache(async (id_wl: number): Promise<WhitelabelStylesData | null> => {
|
|
8
|
+
try {
|
|
9
|
+
return await whitelabelStylesService.getByWlId(id_wl);
|
|
10
|
+
} catch (error) {
|
|
11
|
+
console.error('[findWhitelabelStyles] Error fetching styles:', error);
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
});
|