@greatapps/common 1.1.218 → 1.1.219
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 +5 -5
- package/dist/components/account/ConfigurationsMyAccountModal.mjs.map +1 -1
- package/dist/components/account/ConfirmDeleteAccountModal.mjs +2 -2
- package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
- package/dist/components/account/ConfirmGlobalPreferencesModal.mjs +2 -2
- package/dist/components/account/ConfirmGlobalPreferencesModal.mjs.map +1 -1
- package/dist/components/account/DeleteAccountModal.mjs +3 -3
- package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
- package/dist/components/account/DisableTwoFactorAuthModal.mjs +2 -2
- package/dist/components/account/DisableTwoFactorAuthModal.mjs.map +1 -1
- package/dist/components/account/IsntPossibleDeleteAccountModal.mjs +2 -2
- package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
- package/dist/components/account/TwoFactorAuthModal.mjs +6 -6
- 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 +6 -6
- package/dist/components/account/sections/ChangeEmailModal.mjs.map +1 -1
- package/dist/components/account/sections/ChangePasswordSection.mjs +4 -4
- package/dist/components/account/sections/ChangePasswordSection.mjs.map +1 -1
- package/dist/components/account/sections/ChangePhoneModal.mjs +5 -5
- package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
- package/dist/components/account/sections/MyProfileSection.mjs +3 -3
- package/dist/components/account/sections/MyProfileSection.mjs.map +1 -1
- package/dist/components/account/sections/PreferencesSection.mjs +6 -6
- package/dist/components/account/sections/PreferencesSection.mjs.map +1 -1
- package/dist/components/account/sections/SecuritySection.mjs +3 -3
- 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.map +1 -1
- package/dist/components/layouts/AppNavBar.mjs.map +1 -1
- package/dist/components/layouts/MdSideBarNavigation.mjs +2 -2
- package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -1
- package/dist/components/layouts/NavBar.mjs +2 -2
- package/dist/components/layouts/NavBar.mjs.map +1 -1
- package/dist/components/layouts/NotificationsPopover.mjs +4 -4
- package/dist/components/layouts/NotificationsPopover.mjs.map +1 -1
- package/dist/components/layouts/ProfilePopover.mjs +2 -2
- package/dist/components/layouts/ProfilePopover.mjs.map +1 -1
- package/dist/components/layouts/UsersSelectorPopover.mjs +5 -5
- package/dist/components/layouts/UsersSelectorPopover.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 +6 -6
- 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 +5 -5
- package/dist/components/navigation/subcomponents/ProjectSelector.mjs.map +1 -1
- package/dist/components/pages/notifications/Notifications.mjs +4 -4
- 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 +2 -2
- package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
- package/dist/components/ui/data-display/Accordion.mjs +2 -2
- 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/Pagination.mjs +7 -7
- package/dist/components/ui/data-display/Pagination.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/Toast.mjs +7 -7
- package/dist/components/ui/feedback/Toast.mjs.map +1 -1
- package/dist/components/ui/form/Calendar.mjs +7 -7
- package/dist/components/ui/form/Calendar.mjs.map +1 -1
- package/dist/components/ui/form/Checkbox.mjs +2 -2
- package/dist/components/ui/form/Checkbox.mjs.map +1 -1
- package/dist/components/ui/form/ComboboxField.mjs +4 -4
- 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 +2 -2
- package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
- package/dist/components/ui/form/FormField.mjs +3 -3
- 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 +2 -2
- 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 +2 -2
- package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
- package/dist/components/ui/form/Select.mjs +6 -6
- 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/SwitchOptionFieldWithIcon.mjs.map +1 -1
- package/dist/components/ui/form/Textarea.mjs.map +1 -1
- package/dist/components/ui/overlay/Command.mjs +2 -2
- package/dist/components/ui/overlay/Command.mjs.map +1 -1
- package/dist/components/ui/overlay/Dialog.mjs +2 -2
- 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 +2 -2
- package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
- package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
- package/dist/components/widgets/notifications/NotificationCard.mjs +2 -2
- package/dist/components/widgets/notifications/NotificationCard.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/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/ia-credits/actions/list-ia-credits.action.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/list-subscriptions.action.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/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/services/whitelabel-styles.service.mjs.map +1 -1
- package/dist/providers/whitelabel.provider.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 -90
- package/src/components/account/ConfigurationsMyAccountModal.tsx +5 -5
- package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
- package/src/components/account/ConfirmGlobalPreferencesModal.tsx +2 -2
- package/src/components/account/DeleteAccountModal.tsx +130 -130
- package/src/components/account/DisableTwoFactorAuthModal.tsx +2 -2
- package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
- package/src/components/account/TwoFactorAuthModal.tsx +6 -6
- 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 +6 -6
- package/src/components/account/sections/ChangePasswordSection.tsx +4 -4
- package/src/components/account/sections/ChangePhoneModal.tsx +231 -231
- package/src/components/account/sections/MyProfileSection.tsx +3 -3
- package/src/components/account/sections/PreferencesSection.tsx +6 -6
- package/src/components/account/sections/SecuritySection.tsx +3 -3
- package/src/components/embeds/CrispEmbed.tsx +101 -101
- package/src/components/embeds/FrillEmbed.tsx +119 -119
- package/src/components/layouts/AppMobileNavBar.tsx +111 -111
- package/src/components/layouts/AppNavBar.tsx +57 -57
- package/src/components/layouts/MdSideBarNavigation.tsx +4 -4
- package/src/components/layouts/NavBar.tsx +120 -120
- package/src/components/layouts/NotificationsPopover.tsx +4 -4
- package/src/components/layouts/ProfilePopover.tsx +2 -2
- package/src/components/layouts/UsersSelectorPopover.tsx +238 -238
- package/src/components/navigation/CancelledSubscriptionBanner.tsx +69 -69
- package/src/components/navigation/NavItemsContext.ts +20 -20
- package/src/components/navigation/ProjectSelectorPopover.tsx +6 -6
- package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
- package/src/components/navigation/subcomponents/ProjectSelector.tsx +5 -5
- 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/Pagination.tsx +126 -126
- 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/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 +4 -4
- 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 +6 -5
- 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/SwitchOptionFieldWithIcon.tsx +2 -2
- 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/components/widgets/notifications/NotificationCard.tsx +68 -68
- package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
- package/src/index.ts +355 -355
- package/src/middleware.ts +4 -4
- package/src/modules/accounts/actions/account-management.action.ts +90 -90
- 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/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/ia-credits/actions/list-ia-credits.action.ts +8 -8
- 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/list-subscriptions.action.ts +9 -9
- package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
- package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +17 -17
- 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/services/whitelabel-styles.service.ts +98 -98
- package/src/modules/whitelabel/styles-schema.ts +37 -37
- package/src/providers/whitelabel.provider.tsx +46 -46
- package/src/utils/countries.ts +224 -224
- package/src/utils/safeServerAction.ts +21 -21
- package/src/utils/withAction.ts +13 -13
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { IconShieldCheck } from '@tabler/icons-react';
|
|
4
4
|
import { Button } from '../ui/buttons/Button';
|
|
5
5
|
import {
|
|
6
6
|
Dialog,
|
|
@@ -38,7 +38,7 @@ export default function DisableTwoFactorAuthModal({
|
|
|
38
38
|
>
|
|
39
39
|
<div className="flex flex-col gap-4 lg:gap-5 p-4 lg:p-5 flex-1 lg:flex-none">
|
|
40
40
|
<div className="flex items-center justify-center w-fit bg-gray-50 rounded-lg p-2">
|
|
41
|
-
<
|
|
41
|
+
<IconShieldCheck size={20} className="text-gray-600" />
|
|
42
42
|
</div>
|
|
43
43
|
<DialogHeader className="p-0 gap-2">
|
|
44
44
|
<DialogTitle className="paragraph-medium-semibold text-gray-950">
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
|
|
5
|
-
import { Button } from '../ui/buttons/Button';
|
|
6
|
-
import { useAccountModals } from '../../store/useAccountModals';
|
|
7
|
-
|
|
8
|
-
export default function IsntPossibleDeleteAccountModal() {
|
|
9
|
-
const { activeModal, close, config } = useAccountModals();
|
|
10
|
-
const { onGoToSubscription } = config;
|
|
11
|
-
const open = activeModal === 'isntPossibleDelete';
|
|
12
|
-
|
|
13
|
-
return (
|
|
14
|
-
<Dialog open={open} onOpenChange={close}>
|
|
15
|
-
<DialogContent className="max-w-[calc(100%-2rem)]! w-full rounded-lg border sm:max-w-[400px]! lg:max-w-[470px]! lg:top-[50%]! lg:left-[50%]! lg:right-auto! lg:bottom-auto! lg:translate-x-[-50%]! lg:translate-y-[-50%]!">
|
|
16
|
-
<div className="flex flex-col gap-5">
|
|
17
|
-
<div className="flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5">
|
|
18
|
-
<
|
|
19
|
-
</div>
|
|
20
|
-
<DialogHeader className="p-0 gap-2">
|
|
21
|
-
<DialogTitle className="paragraph-medium-semibold text-gray-950">
|
|
22
|
-
Não é possível excluir a conta
|
|
23
|
-
</DialogTitle>
|
|
24
|
-
<DialogDescription className="paragraph-small-regular text-gray-600">
|
|
25
|
-
Você tem uma assinatura ativa. Para excluir sua conta,{' '}
|
|
26
|
-
<span className="font-semibold text-gray-950">primeiro cancele a assinatura</span> na
|
|
27
|
-
página Assinatura e depois tente novamente.
|
|
28
|
-
</DialogDescription>
|
|
29
|
-
</DialogHeader>
|
|
30
|
-
</div>
|
|
31
|
-
|
|
32
|
-
<div className="h-px bg-gray-200 -mx-6" />
|
|
33
|
-
|
|
34
|
-
<div className="flex flex-row items-center gap-2">
|
|
35
|
-
<Button className="h-10 flex-1" onClick={close}>
|
|
36
|
-
Ok, entendi
|
|
37
|
-
</Button>
|
|
38
|
-
<Button
|
|
39
|
-
variant="secondary"
|
|
40
|
-
className="h-10 flex-1"
|
|
41
|
-
onClick={onGoToSubscription ?? close}
|
|
42
|
-
>
|
|
43
|
-
Ir para assinatura
|
|
44
|
-
</Button>
|
|
45
|
-
</div>
|
|
46
|
-
</DialogContent>
|
|
47
|
-
</Dialog>
|
|
48
|
-
);
|
|
49
|
-
}
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { IconAlertTriangle } from '@tabler/icons-react';
|
|
4
|
+
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
|
|
5
|
+
import { Button } from '../ui/buttons/Button';
|
|
6
|
+
import { useAccountModals } from '../../store/useAccountModals';
|
|
7
|
+
|
|
8
|
+
export default function IsntPossibleDeleteAccountModal() {
|
|
9
|
+
const { activeModal, close, config } = useAccountModals();
|
|
10
|
+
const { onGoToSubscription } = config;
|
|
11
|
+
const open = activeModal === 'isntPossibleDelete';
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<Dialog open={open} onOpenChange={close}>
|
|
15
|
+
<DialogContent className="max-w-[calc(100%-2rem)]! w-full rounded-lg border sm:max-w-[400px]! lg:max-w-[470px]! lg:top-[50%]! lg:left-[50%]! lg:right-auto! lg:bottom-auto! lg:translate-x-[-50%]! lg:translate-y-[-50%]!">
|
|
16
|
+
<div className="flex flex-col gap-5">
|
|
17
|
+
<div className="flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5">
|
|
18
|
+
<IconAlertTriangle size={20} className="text-red-500" />
|
|
19
|
+
</div>
|
|
20
|
+
<DialogHeader className="p-0 gap-2">
|
|
21
|
+
<DialogTitle className="paragraph-medium-semibold text-gray-950">
|
|
22
|
+
Não é possível excluir a conta
|
|
23
|
+
</DialogTitle>
|
|
24
|
+
<DialogDescription className="paragraph-small-regular text-gray-600">
|
|
25
|
+
Você tem uma assinatura ativa. Para excluir sua conta,{' '}
|
|
26
|
+
<span className="font-semibold text-gray-950">primeiro cancele a assinatura</span> na
|
|
27
|
+
página Assinatura e depois tente novamente.
|
|
28
|
+
</DialogDescription>
|
|
29
|
+
</DialogHeader>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<div className="h-px bg-gray-200 -mx-6" />
|
|
33
|
+
|
|
34
|
+
<div className="flex flex-row items-center gap-2">
|
|
35
|
+
<Button className="h-10 flex-1" onClick={close}>
|
|
36
|
+
Ok, entendi
|
|
37
|
+
</Button>
|
|
38
|
+
<Button
|
|
39
|
+
variant="secondary"
|
|
40
|
+
className="h-10 flex-1"
|
|
41
|
+
onClick={onGoToSubscription ?? close}
|
|
42
|
+
>
|
|
43
|
+
Ir para assinatura
|
|
44
|
+
</Button>
|
|
45
|
+
</div>
|
|
46
|
+
</DialogContent>
|
|
47
|
+
</Dialog>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { IconArrowLeft, IconX, IconCopy, IconRefresh } from '@tabler/icons-react';
|
|
4
4
|
import { Button } from '../ui/buttons/Button';
|
|
5
5
|
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
|
|
6
6
|
import { Separator } from '../ui/data-display/Separator';
|
|
@@ -57,7 +57,7 @@ export default function TwoFactorAuthModal({ open, onClose, onSuccess }: TwoFact
|
|
|
57
57
|
className="size-8! p-0 absolute right-4"
|
|
58
58
|
onClick={handleClose}
|
|
59
59
|
>
|
|
60
|
-
<
|
|
60
|
+
<IconX size={18} />
|
|
61
61
|
</Button>
|
|
62
62
|
</div>
|
|
63
63
|
|
|
@@ -88,7 +88,7 @@ export default function TwoFactorAuthModal({ open, onClose, onSuccess }: TwoFact
|
|
|
88
88
|
className="h-8! w-fit"
|
|
89
89
|
onClick={handleCopyCodes}
|
|
90
90
|
>
|
|
91
|
-
<
|
|
91
|
+
<IconCopy size={16} />
|
|
92
92
|
Copiar códigos
|
|
93
93
|
</Button>
|
|
94
94
|
</div>
|
|
@@ -124,7 +124,7 @@ export default function TwoFactorAuthModal({ open, onClose, onSuccess }: TwoFact
|
|
|
124
124
|
className="size-8! p-0 absolute left-4"
|
|
125
125
|
onClick={handleClose}
|
|
126
126
|
>
|
|
127
|
-
<
|
|
127
|
+
<IconArrowLeft size={20} />
|
|
128
128
|
</Button>
|
|
129
129
|
<span className="paragraph-medium-semibold text-gray-950 text-center">
|
|
130
130
|
Autenticação de dois fatores
|
|
@@ -135,7 +135,7 @@ export default function TwoFactorAuthModal({ open, onClose, onSuccess }: TwoFact
|
|
|
135
135
|
className="size-8! p-0 absolute right-4"
|
|
136
136
|
onClick={handleClose}
|
|
137
137
|
>
|
|
138
|
-
<
|
|
138
|
+
<IconX size={18} />
|
|
139
139
|
</Button>
|
|
140
140
|
</div>
|
|
141
141
|
|
|
@@ -169,7 +169,7 @@ export default function TwoFactorAuthModal({ open, onClose, onSuccess }: TwoFact
|
|
|
169
169
|
onClick={() => retryGenerate()}
|
|
170
170
|
className="flex flex-col items-center gap-1.5 text-center"
|
|
171
171
|
>
|
|
172
|
-
<
|
|
172
|
+
<IconRefresh size={20} className="text-gray-400" />
|
|
173
173
|
<span className="paragraph-xsmall-medium text-gray-500">Tentar novamente</span>
|
|
174
174
|
</button>
|
|
175
175
|
) : isGenerating || !qrcode ? (
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useState, useCallback } from 'react';
|
|
4
|
-
import { toast } from 'sonner';
|
|
5
|
-
import { Toast } from '../../ui/feedback/Toast';
|
|
6
|
-
import { requestPhoneChangeAction } from '../../../modules/accounts/actions/account-management.action';
|
|
7
|
-
|
|
8
|
-
function splitPhoneValue(fullValue: string): { ddi: string; local: string } {
|
|
9
|
-
const trimmed = fullValue.trim();
|
|
10
|
-
const spaceIdx = trimmed.indexOf(' ');
|
|
11
|
-
if (spaceIdx === -1) return { ddi: '+55', local: trimmed };
|
|
12
|
-
return { ddi: trimmed.slice(0, spaceIdx), local: trimmed.slice(spaceIdx + 1) };
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
export default function useChangePhoneForm() {
|
|
16
|
-
const [showVerification, setShowVerification] = useState(false);
|
|
17
|
-
const [phoneValue, setPhoneValue] = useState('');
|
|
18
|
-
const [phoneError, setPhoneError] = useState('');
|
|
19
|
-
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
20
|
-
const [submittedPhone, setSubmittedPhone] = useState({ ddi: '+55', local: '' });
|
|
21
|
-
|
|
22
|
-
const handlePhoneChange = useCallback((value: string) => {
|
|
23
|
-
setPhoneValue(value);
|
|
24
|
-
if (phoneError) setPhoneError('');
|
|
25
|
-
}, [phoneError]);
|
|
26
|
-
|
|
27
|
-
const handleContinue = useCallback(async (e: React.FormEvent) => {
|
|
28
|
-
e.preventDefault();
|
|
29
|
-
|
|
30
|
-
const { ddi, local } = splitPhoneValue(phoneValue);
|
|
31
|
-
|
|
32
|
-
if (!local || local.replace(/\D/g, '').length < 8) {
|
|
33
|
-
setPhoneError('Número de telefone inválido');
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
setIsSubmitting(true);
|
|
38
|
-
try {
|
|
39
|
-
const result = await requestPhoneChangeAction(local, ddi);
|
|
40
|
-
|
|
41
|
-
if (!result.success) {
|
|
42
|
-
toast.custom((t) => (
|
|
43
|
-
<Toast
|
|
44
|
-
variant="error"
|
|
45
|
-
message={result.error ?? 'Número já existente ou ocorreu um erro. Tente novamente mais tarde.'}
|
|
46
|
-
toastId={t}
|
|
47
|
-
/>
|
|
48
|
-
));
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
setSubmittedPhone({ ddi, local });
|
|
53
|
-
setShowVerification(true);
|
|
54
|
-
} finally {
|
|
55
|
-
setIsSubmitting(false);
|
|
56
|
-
}
|
|
57
|
-
}, [phoneValue]);
|
|
58
|
-
|
|
59
|
-
const handleBack = useCallback(() => {
|
|
60
|
-
setShowVerification(false);
|
|
61
|
-
}, []);
|
|
62
|
-
|
|
63
|
-
const resetForm = useCallback(() => {
|
|
64
|
-
setPhoneValue('');
|
|
65
|
-
setPhoneError('');
|
|
66
|
-
setSubmittedPhone({ ddi: '+55', local: '' });
|
|
67
|
-
setShowVerification(false);
|
|
68
|
-
}, []);
|
|
69
|
-
|
|
70
|
-
return {
|
|
71
|
-
showVerification,
|
|
72
|
-
phoneValue,
|
|
73
|
-
phoneError,
|
|
74
|
-
isSubmitting,
|
|
75
|
-
submittedPhone,
|
|
76
|
-
handlePhoneChange,
|
|
77
|
-
handleContinue,
|
|
78
|
-
handleBack,
|
|
79
|
-
resetForm,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState, useCallback } from 'react';
|
|
4
|
+
import { toast } from 'sonner';
|
|
5
|
+
import { Toast } from '../../ui/feedback/Toast';
|
|
6
|
+
import { requestPhoneChangeAction } from '../../../modules/accounts/actions/account-management.action';
|
|
7
|
+
|
|
8
|
+
function splitPhoneValue(fullValue: string): { ddi: string; local: string } {
|
|
9
|
+
const trimmed = fullValue.trim();
|
|
10
|
+
const spaceIdx = trimmed.indexOf(' ');
|
|
11
|
+
if (spaceIdx === -1) return { ddi: '+55', local: trimmed };
|
|
12
|
+
return { ddi: trimmed.slice(0, spaceIdx), local: trimmed.slice(spaceIdx + 1) };
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default function useChangePhoneForm() {
|
|
16
|
+
const [showVerification, setShowVerification] = useState(false);
|
|
17
|
+
const [phoneValue, setPhoneValue] = useState('');
|
|
18
|
+
const [phoneError, setPhoneError] = useState('');
|
|
19
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
20
|
+
const [submittedPhone, setSubmittedPhone] = useState({ ddi: '+55', local: '' });
|
|
21
|
+
|
|
22
|
+
const handlePhoneChange = useCallback((value: string) => {
|
|
23
|
+
setPhoneValue(value);
|
|
24
|
+
if (phoneError) setPhoneError('');
|
|
25
|
+
}, [phoneError]);
|
|
26
|
+
|
|
27
|
+
const handleContinue = useCallback(async (e: React.FormEvent) => {
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
|
|
30
|
+
const { ddi, local } = splitPhoneValue(phoneValue);
|
|
31
|
+
|
|
32
|
+
if (!local || local.replace(/\D/g, '').length < 8) {
|
|
33
|
+
setPhoneError('Número de telefone inválido');
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
setIsSubmitting(true);
|
|
38
|
+
try {
|
|
39
|
+
const result = await requestPhoneChangeAction(local, ddi);
|
|
40
|
+
|
|
41
|
+
if (!result.success) {
|
|
42
|
+
toast.custom((t) => (
|
|
43
|
+
<Toast
|
|
44
|
+
variant="error"
|
|
45
|
+
message={result.error ?? 'Número já existente ou ocorreu um erro. Tente novamente mais tarde.'}
|
|
46
|
+
toastId={t}
|
|
47
|
+
/>
|
|
48
|
+
));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
setSubmittedPhone({ ddi, local });
|
|
53
|
+
setShowVerification(true);
|
|
54
|
+
} finally {
|
|
55
|
+
setIsSubmitting(false);
|
|
56
|
+
}
|
|
57
|
+
}, [phoneValue]);
|
|
58
|
+
|
|
59
|
+
const handleBack = useCallback(() => {
|
|
60
|
+
setShowVerification(false);
|
|
61
|
+
}, []);
|
|
62
|
+
|
|
63
|
+
const resetForm = useCallback(() => {
|
|
64
|
+
setPhoneValue('');
|
|
65
|
+
setPhoneError('');
|
|
66
|
+
setSubmittedPhone({ ddi: '+55', local: '' });
|
|
67
|
+
setShowVerification(false);
|
|
68
|
+
}, []);
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
showVerification,
|
|
72
|
+
phoneValue,
|
|
73
|
+
phoneError,
|
|
74
|
+
isSubmitting,
|
|
75
|
+
submittedPhone,
|
|
76
|
+
handlePhoneChange,
|
|
77
|
+
handleContinue,
|
|
78
|
+
handleBack,
|
|
79
|
+
resetForm,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useState, useCallback, useEffect } from 'react';
|
|
4
|
-
import { useMutation } from '@tanstack/react-query';
|
|
5
|
-
import { toast } from 'sonner';
|
|
6
|
-
import { Toast } from '../../ui/feedback/Toast';
|
|
7
|
-
import { copyToClipboard } from '../../../utils/browser/clipboard';
|
|
8
|
-
import {
|
|
9
|
-
generateTwoFactorAction,
|
|
10
|
-
confirmTwoFactorAction,
|
|
11
|
-
} from '../../../modules/accounts/actions/account-management.action';
|
|
12
|
-
import { withAction } from '../../../utils/withAction';
|
|
13
|
-
|
|
14
|
-
type Step = 'code' | 'recovery';
|
|
15
|
-
|
|
16
|
-
interface UseTwoFactorAuthFormProps {
|
|
17
|
-
onSuccess?: () => void;
|
|
18
|
-
open?: boolean;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export default function useTwoFactorAuthForm({ onSuccess, open }: UseTwoFactorAuthFormProps = {}) {
|
|
22
|
-
const [code, setCode] = useState('');
|
|
23
|
-
const [step, setStep] = useState<Step>('code');
|
|
24
|
-
|
|
25
|
-
const generateMutation = useMutation({
|
|
26
|
-
mutationFn: withAction(generateTwoFactorAction),
|
|
27
|
-
onError: () => {
|
|
28
|
-
toast.custom((t) => (
|
|
29
|
-
<Toast variant="error" message="Erro ao gerar QR Code. Tente novamente." toastId={t} />
|
|
30
|
-
));
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
const confirmMutation = useMutation({
|
|
35
|
-
mutationFn: withAction(confirmTwoFactorAction),
|
|
36
|
-
onSuccess: () => {
|
|
37
|
-
setStep('recovery');
|
|
38
|
-
},
|
|
39
|
-
onError: () => {
|
|
40
|
-
toast.custom((t) => (
|
|
41
|
-
<Toast variant="error" message="Erro ao confirmar código. Tente novamente." toastId={t} />
|
|
42
|
-
));
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
const { mutate: triggerGenerate } = generateMutation;
|
|
47
|
-
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
if (open) {
|
|
50
|
-
triggerGenerate();
|
|
51
|
-
}
|
|
52
|
-
}, [open, triggerGenerate]);
|
|
53
|
-
|
|
54
|
-
const generateFailed = generateMutation.isError;
|
|
55
|
-
|
|
56
|
-
const isCodeComplete = code.length === 6;
|
|
57
|
-
|
|
58
|
-
const handleSubmit = () => {
|
|
59
|
-
if (!isCodeComplete) return;
|
|
60
|
-
confirmMutation.mutate(code);
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const handleFinalize = () => {
|
|
64
|
-
onSuccess?.();
|
|
65
|
-
setTimeout(resetForm, 300);
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const handleCopyCodes = useCallback(async () => {
|
|
69
|
-
const codes = generateMutation.data?.backupCodes ?? [];
|
|
70
|
-
const success = await copyToClipboard(codes.join('\n'));
|
|
71
|
-
if (success) {
|
|
72
|
-
toast.custom((t) => (
|
|
73
|
-
<Toast variant="success" message="Códigos copiados com sucesso" toastId={t} />
|
|
74
|
-
));
|
|
75
|
-
}
|
|
76
|
-
}, [generateMutation.data]);
|
|
77
|
-
|
|
78
|
-
const resetForm = () => {
|
|
79
|
-
setCode('');
|
|
80
|
-
setStep('code');
|
|
81
|
-
generateMutation.reset();
|
|
82
|
-
confirmMutation.reset();
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
return {
|
|
86
|
-
code,
|
|
87
|
-
setCode,
|
|
88
|
-
isCodeComplete,
|
|
89
|
-
isGenerating: generateMutation.isPending,
|
|
90
|
-
isConfirming: confirmMutation.isPending,
|
|
91
|
-
generateFailed,
|
|
92
|
-
retryGenerate: triggerGenerate,
|
|
93
|
-
qrcode: generateMutation.data?.qrcode,
|
|
94
|
-
backupCodes: generateMutation.data?.backupCodes ?? [],
|
|
95
|
-
step,
|
|
96
|
-
handleSubmit,
|
|
97
|
-
handleFinalize,
|
|
98
|
-
handleCopyCodes,
|
|
99
|
-
resetForm,
|
|
100
|
-
};
|
|
101
|
-
}
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
4
|
+
import { useMutation } from '@tanstack/react-query';
|
|
5
|
+
import { toast } from 'sonner';
|
|
6
|
+
import { Toast } from '../../ui/feedback/Toast';
|
|
7
|
+
import { copyToClipboard } from '../../../utils/browser/clipboard';
|
|
8
|
+
import {
|
|
9
|
+
generateTwoFactorAction,
|
|
10
|
+
confirmTwoFactorAction,
|
|
11
|
+
} from '../../../modules/accounts/actions/account-management.action';
|
|
12
|
+
import { withAction } from '../../../utils/withAction';
|
|
13
|
+
|
|
14
|
+
type Step = 'code' | 'recovery';
|
|
15
|
+
|
|
16
|
+
interface UseTwoFactorAuthFormProps {
|
|
17
|
+
onSuccess?: () => void;
|
|
18
|
+
open?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export default function useTwoFactorAuthForm({ onSuccess, open }: UseTwoFactorAuthFormProps = {}) {
|
|
22
|
+
const [code, setCode] = useState('');
|
|
23
|
+
const [step, setStep] = useState<Step>('code');
|
|
24
|
+
|
|
25
|
+
const generateMutation = useMutation({
|
|
26
|
+
mutationFn: withAction(generateTwoFactorAction),
|
|
27
|
+
onError: () => {
|
|
28
|
+
toast.custom((t) => (
|
|
29
|
+
<Toast variant="error" message="Erro ao gerar QR Code. Tente novamente." toastId={t} />
|
|
30
|
+
));
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const confirmMutation = useMutation({
|
|
35
|
+
mutationFn: withAction(confirmTwoFactorAction),
|
|
36
|
+
onSuccess: () => {
|
|
37
|
+
setStep('recovery');
|
|
38
|
+
},
|
|
39
|
+
onError: () => {
|
|
40
|
+
toast.custom((t) => (
|
|
41
|
+
<Toast variant="error" message="Erro ao confirmar código. Tente novamente." toastId={t} />
|
|
42
|
+
));
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
const { mutate: triggerGenerate } = generateMutation;
|
|
47
|
+
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (open) {
|
|
50
|
+
triggerGenerate();
|
|
51
|
+
}
|
|
52
|
+
}, [open, triggerGenerate]);
|
|
53
|
+
|
|
54
|
+
const generateFailed = generateMutation.isError;
|
|
55
|
+
|
|
56
|
+
const isCodeComplete = code.length === 6;
|
|
57
|
+
|
|
58
|
+
const handleSubmit = () => {
|
|
59
|
+
if (!isCodeComplete) return;
|
|
60
|
+
confirmMutation.mutate(code);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const handleFinalize = () => {
|
|
64
|
+
onSuccess?.();
|
|
65
|
+
setTimeout(resetForm, 300);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const handleCopyCodes = useCallback(async () => {
|
|
69
|
+
const codes = generateMutation.data?.backupCodes ?? [];
|
|
70
|
+
const success = await copyToClipboard(codes.join('\n'));
|
|
71
|
+
if (success) {
|
|
72
|
+
toast.custom((t) => (
|
|
73
|
+
<Toast variant="success" message="Códigos copiados com sucesso" toastId={t} />
|
|
74
|
+
));
|
|
75
|
+
}
|
|
76
|
+
}, [generateMutation.data]);
|
|
77
|
+
|
|
78
|
+
const resetForm = () => {
|
|
79
|
+
setCode('');
|
|
80
|
+
setStep('code');
|
|
81
|
+
generateMutation.reset();
|
|
82
|
+
confirmMutation.reset();
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
code,
|
|
87
|
+
setCode,
|
|
88
|
+
isCodeComplete,
|
|
89
|
+
isGenerating: generateMutation.isPending,
|
|
90
|
+
isConfirming: confirmMutation.isPending,
|
|
91
|
+
generateFailed,
|
|
92
|
+
retryGenerate: triggerGenerate,
|
|
93
|
+
qrcode: generateMutation.data?.qrcode,
|
|
94
|
+
backupCodes: generateMutation.data?.backupCodes ?? [],
|
|
95
|
+
step,
|
|
96
|
+
handleSubmit,
|
|
97
|
+
handleFinalize,
|
|
98
|
+
handleCopyCodes,
|
|
99
|
+
resetForm,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { IconChevronLeft, IconX, IconMail } from '@tabler/icons-react';
|
|
4
4
|
import { Button } from '../../ui/buttons/Button';
|
|
5
5
|
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '../../ui/overlay/Dialog';
|
|
6
6
|
import { Separator } from '../../ui/data-display/Separator';
|
|
@@ -88,13 +88,13 @@ export function ChangeEmailModal({ open, onClose }: ChangeEmailModalProps) {
|
|
|
88
88
|
{showVerification ? (
|
|
89
89
|
<DialogHeader className="flex flex-row items-center justify-between px-4 py-3 border-b border-gray-200 lg:border-b-0">
|
|
90
90
|
<Button variant="ghost" className="size-8! p-0" onClick={handleBackFromVerification}>
|
|
91
|
-
<
|
|
91
|
+
<IconChevronLeft size={20} className="text-gray-950" />
|
|
92
92
|
</Button>
|
|
93
93
|
<DialogTitle className="paragraph-medium-semibold text-gray-950 text-center flex-1">
|
|
94
94
|
Alterar e-mail
|
|
95
95
|
</DialogTitle>
|
|
96
96
|
<Button variant="ghost" className="size-8! p-0" onClick={handleClose}>
|
|
97
|
-
<
|
|
97
|
+
<IconX size={18} className="text-gray-500" />
|
|
98
98
|
</Button>
|
|
99
99
|
</DialogHeader>
|
|
100
100
|
) : (
|
|
@@ -111,7 +111,7 @@ export function ChangeEmailModal({ open, onClose }: ChangeEmailModalProps) {
|
|
|
111
111
|
className="absolute right-2 size-8! p-0"
|
|
112
112
|
onClick={handleClose}
|
|
113
113
|
>
|
|
114
|
-
<
|
|
114
|
+
<IconX size={18} className="text-gray-500" />
|
|
115
115
|
</Button>
|
|
116
116
|
</div>
|
|
117
117
|
</>
|
|
@@ -129,7 +129,7 @@ export function ChangeEmailModal({ open, onClose }: ChangeEmailModalProps) {
|
|
|
129
129
|
>
|
|
130
130
|
<div className="px-4 lg:px-5 py-5 lg:py-6 flex flex-col gap-4 flex-1 lg:flex-none">
|
|
131
131
|
<div className="flex items-center justify-center size-12 bg-white rounded-lg shadow-xs border border-gray-200">
|
|
132
|
-
<
|
|
132
|
+
<IconMail size={20} className="text-gray-950" />
|
|
133
133
|
</div>
|
|
134
134
|
|
|
135
135
|
<div className="flex flex-col gap-1">
|
|
@@ -205,7 +205,7 @@ export function ChangeEmailModal({ open, onClose }: ChangeEmailModalProps) {
|
|
|
205
205
|
{...register('email')}
|
|
206
206
|
error={!!errors.email}
|
|
207
207
|
errorMessage={errors.email?.message}
|
|
208
|
-
leftIcon={
|
|
208
|
+
leftIcon={IconMail}
|
|
209
209
|
/>
|
|
210
210
|
</div>
|
|
211
211
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { IconArrowLeft, IconLock } from '@tabler/icons-react';
|
|
4
4
|
import { Button } from '../../ui/buttons/Button';
|
|
5
5
|
import { FormField } from '../../ui/form/FormField';
|
|
6
6
|
import useChangePasswordForm from '../hooks/useChangePasswordForm';
|
|
@@ -24,7 +24,7 @@ export function ChangePasswordSection({ onBack }: ChangePasswordSectionProps) {
|
|
|
24
24
|
>
|
|
25
25
|
<div className="flex items-center gap-3">
|
|
26
26
|
<Button type="button" variant="ghost" className="size-8! p-0" onClick={onBack}>
|
|
27
|
-
<
|
|
27
|
+
<IconArrowLeft size={20} />
|
|
28
28
|
</Button>
|
|
29
29
|
<span className="paragraph-medium-semibold text-gray-950">Alterar senha</span>
|
|
30
30
|
</div>
|
|
@@ -34,7 +34,7 @@ export function ChangePasswordSection({ onBack }: ChangePasswordSectionProps) {
|
|
|
34
34
|
label="Senha atual"
|
|
35
35
|
type="password"
|
|
36
36
|
placeholder="Digite sua senha atual"
|
|
37
|
-
leftIcon={
|
|
37
|
+
leftIcon={IconLock}
|
|
38
38
|
error={!!errors.currentPassword}
|
|
39
39
|
errorMessage={errors.currentPassword?.message}
|
|
40
40
|
classnameContainer="h-10!"
|
|
@@ -46,7 +46,7 @@ export function ChangePasswordSection({ onBack }: ChangePasswordSectionProps) {
|
|
|
46
46
|
label="Nova senha"
|
|
47
47
|
type="password"
|
|
48
48
|
placeholder="Digite sua nova senha"
|
|
49
|
-
leftIcon={
|
|
49
|
+
leftIcon={IconLock}
|
|
50
50
|
error={!!errors.newPassword}
|
|
51
51
|
errorMessage={errors.newPassword?.message}
|
|
52
52
|
classnameContainer="h-10!"
|