@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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/safeServerAction.ts"],"sourcesContent":["import { isRedirectError } from 'next/dist/client/components/redirect-error';\nimport { ApiError } from '../infra/api/types';\nimport type { ActionResult } from '../infra/api/types';\n\nexport async function safeServerAction<T>(\n fn: () => Promise<T>\n): Promise<ActionResult<T>> {\n try {\n const data = await fn();\n return { success: true, data };\n } catch (error) {\n if (isRedirectError(error)) throw error;\n const message =\n error instanceof ApiError\n ? error.message\n : error instanceof Error\n ? error.message\n : 'Erro desconhecido';\n return { success: false, error: message };\n }\n}\n"],"mappings":"AAAA,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AAGzB,eAAsB,iBACpB,IAC0B;AAC1B,MAAI;AACF,UAAM,OAAO,MAAM,GAAG;AACtB,WAAO,EAAE,SAAS,MAAM,KAAK;AAAA,EAC/B,SAAS,OAAO;AACd,QAAI,gBAAgB,KAAK,EAAG,OAAM;AAClC,UAAM,UACJ,iBAAiB,WACb,MAAM,UACN,iBAAiB,QACf,MAAM,UACN;AACR,WAAO,EAAE,SAAS,OAAO,OAAO,QAAQ;AAAA,EAC1C;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/safeServerAction.ts"],"sourcesContent":["import { isRedirectError } from 'next/dist/client/components/redirect-error';\r\nimport { ApiError } from '../infra/api/types';\r\nimport type { ActionResult } from '../infra/api/types';\r\n\r\nexport async function safeServerAction<T>(\r\n fn: () => Promise<T>\r\n): Promise<ActionResult<T>> {\r\n try {\r\n const data = await fn();\r\n return { success: true, data };\r\n } catch (error) {\r\n if (isRedirectError(error)) throw error;\r\n const message =\r\n error instanceof ApiError\r\n ? error.message\r\n : error instanceof Error\r\n ? error.message\r\n : 'Erro desconhecido';\r\n return { success: false, error: message };\r\n }\r\n}\r\n"],"mappings":"AAAA,SAAS,uBAAuB;AAChC,SAAS,gBAAgB;AAGzB,eAAsB,iBACpB,IAC0B;AAC1B,MAAI;AACF,UAAM,OAAO,MAAM,GAAG;AACtB,WAAO,EAAE,SAAS,MAAM,KAAK;AAAA,EAC/B,SAAS,OAAO;AACd,QAAI,gBAAgB,KAAK,EAAG,OAAM;AAClC,UAAM,UACJ,iBAAiB,WACb,MAAM,UACN,iBAAiB,QACf,MAAM,UACN;AACR,WAAO,EAAE,SAAS,OAAO,OAAO,QAAQ;AAAA,EAC1C;AACF;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/withAction.ts"],"sourcesContent":["import type { ActionResult } from '../infra/api/types';\n\nexport function withAction<TArgs extends any[], TData>(\n action: (...args: TArgs) => Promise<ActionResult<TData>>\n): (...args: TArgs) => Promise<TData> {\n return async (...args) => {\n const result = await action(...args);\n if (!result.success) {\n throw new Error(result.error ?? 'Erro desconhecido');\n }\n return result.data as TData;\n };\n}\n"],"mappings":"AAEO,SAAS,WACd,QACoC;AACpC,SAAO,UAAU,SAAS;AACxB,UAAM,SAAS,MAAM,OAAO,GAAG,IAAI;AACnC,QAAI,CAAC,OAAO,SAAS;AACnB,YAAM,IAAI,MAAM,OAAO,SAAS,mBAAmB;AAAA,IACrD;AACA,WAAO,OAAO;AAAA,EAChB;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/withAction.ts"],"sourcesContent":["import type { ActionResult } from '../infra/api/types';\r\n\r\nexport function withAction<TArgs extends any[], TData>(\r\n action: (...args: TArgs) => Promise<ActionResult<TData>>\r\n): (...args: TArgs) => Promise<TData> {\r\n return async (...args) => {\r\n const result = await action(...args);\r\n if (!result.success) {\r\n throw new Error(result.error ?? 'Erro desconhecido');\r\n }\r\n return result.data as TData;\r\n };\r\n}\r\n"],"mappings":"AAEO,SAAS,WACd,QACoC;AACpC,SAAO,UAAU,SAAS;AACxB,UAAM,SAAS,MAAM,OAAO,GAAG,IAAI;AACnC,QAAI,CAAC,OAAO,SAAS;AACnB,YAAM,IAAI,MAAM,OAAO,SAAS,mBAAmB;AAAA,IACrD;AACA,WAAO,OAAO;AAAA,EAChB;AACF;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,90 +1,89 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@greatapps/common",
|
|
3
|
-
"version": "1.1.
|
|
4
|
-
"description": "Shared library for GreatApps frontend applications",
|
|
5
|
-
"main": "./dist/index.mjs",
|
|
6
|
-
"types": "./src/index.ts",
|
|
7
|
-
"exports": {
|
|
8
|
-
".": {
|
|
9
|
-
"import": "./dist/index.mjs",
|
|
10
|
-
"types": "./src/index.ts"
|
|
11
|
-
},
|
|
12
|
-
"./server": {
|
|
13
|
-
"import": "./dist/server.mjs",
|
|
14
|
-
"types": "./src/server.ts"
|
|
15
|
-
},
|
|
16
|
-
"./middleware": {
|
|
17
|
-
"import": "./dist/middleware.mjs",
|
|
18
|
-
"types": "./src/middleware.ts"
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"files": [
|
|
22
|
-
"dist",
|
|
23
|
-
"src"
|
|
24
|
-
],
|
|
25
|
-
"scripts": {
|
|
26
|
-
"build": "tsup",
|
|
27
|
-
"dev": "tsup --watch",
|
|
28
|
-
"typecheck": "tsc --noEmit"
|
|
29
|
-
},
|
|
30
|
-
"keywords": [],
|
|
31
|
-
"author": "",
|
|
32
|
-
"license": "ISC",
|
|
33
|
-
"dependencies": {
|
|
34
|
-
"@greatapps/cache": "^2.0.1",
|
|
35
|
-
"@radix-ui/react-accordion": "^1.2.12",
|
|
36
|
-
"@radix-ui/react-checkbox": "^1.3.3",
|
|
37
|
-
"@radix-ui/react-popover": "^1.1.15",
|
|
38
|
-
"@radix-ui/react-progress": "^1.1.8",
|
|
39
|
-
"@radix-ui/react-radio-group": "^1.3.8",
|
|
40
|
-
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
41
|
-
"@radix-ui/react-select": "^2.2.6",
|
|
42
|
-
"@radix-ui/react-separator": "^1.1.8",
|
|
43
|
-
"@radix-ui/react-switch": "^1.2.6",
|
|
44
|
-
"@radix-ui/react-tabs": "^1.1.13",
|
|
45
|
-
"@radix-ui/react-tooltip": "^1.2.8",
|
|
46
|
-
"@tabler/icons-react": "^3.40.0",
|
|
47
|
-
"@tanstack/query-broadcast-client-experimental": "^5.95.2",
|
|
48
|
-
"@tanstack/react-query-persist-client": "^5.95.2",
|
|
49
|
-
"axios": "^1.13.6",
|
|
50
|
-
"class-variance-authority": "^0.7.1",
|
|
51
|
-
"clsx": "^2.1.1",
|
|
52
|
-
"cmdk": "^1.1.1",
|
|
53
|
-
"date-fns": "^4.1.0",
|
|
54
|
-
"idb-keyval": "^6.2.2",
|
|
55
|
-
"input-otp": "^1.4.2",
|
|
56
|
-
"libphonenumber-js": "^1.12.40",
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
"@
|
|
66
|
-
"@tanstack/react-query": "^5.95.2",
|
|
67
|
-
"@
|
|
68
|
-
"@types/
|
|
69
|
-
"@types/react": "^19.2.
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"react": "19.1.4",
|
|
74
|
-
"react-
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
"@
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"react": ">=19.0.0",
|
|
85
|
-
"react-
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@greatapps/common",
|
|
3
|
+
"version": "1.1.219",
|
|
4
|
+
"description": "Shared library for GreatApps frontend applications",
|
|
5
|
+
"main": "./dist/index.mjs",
|
|
6
|
+
"types": "./src/index.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./dist/index.mjs",
|
|
10
|
+
"types": "./src/index.ts"
|
|
11
|
+
},
|
|
12
|
+
"./server": {
|
|
13
|
+
"import": "./dist/server.mjs",
|
|
14
|
+
"types": "./src/server.ts"
|
|
15
|
+
},
|
|
16
|
+
"./middleware": {
|
|
17
|
+
"import": "./dist/middleware.mjs",
|
|
18
|
+
"types": "./src/middleware.ts"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"src"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsup",
|
|
27
|
+
"dev": "tsup --watch",
|
|
28
|
+
"typecheck": "tsc --noEmit"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [],
|
|
31
|
+
"author": "",
|
|
32
|
+
"license": "ISC",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@greatapps/cache": "^2.0.1",
|
|
35
|
+
"@radix-ui/react-accordion": "^1.2.12",
|
|
36
|
+
"@radix-ui/react-checkbox": "^1.3.3",
|
|
37
|
+
"@radix-ui/react-popover": "^1.1.15",
|
|
38
|
+
"@radix-ui/react-progress": "^1.1.8",
|
|
39
|
+
"@radix-ui/react-radio-group": "^1.3.8",
|
|
40
|
+
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
41
|
+
"@radix-ui/react-select": "^2.2.6",
|
|
42
|
+
"@radix-ui/react-separator": "^1.1.8",
|
|
43
|
+
"@radix-ui/react-switch": "^1.2.6",
|
|
44
|
+
"@radix-ui/react-tabs": "^1.1.13",
|
|
45
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
46
|
+
"@tabler/icons-react": "^3.40.0",
|
|
47
|
+
"@tanstack/query-broadcast-client-experimental": "^5.95.2",
|
|
48
|
+
"@tanstack/react-query-persist-client": "^5.95.2",
|
|
49
|
+
"axios": "^1.13.6",
|
|
50
|
+
"class-variance-authority": "^0.7.1",
|
|
51
|
+
"clsx": "^2.1.1",
|
|
52
|
+
"cmdk": "^1.1.1",
|
|
53
|
+
"date-fns": "^4.1.0",
|
|
54
|
+
"idb-keyval": "^6.2.2",
|
|
55
|
+
"input-otp": "^1.4.2",
|
|
56
|
+
"libphonenumber-js": "^1.12.40",
|
|
57
|
+
"react-day-picker": "^9.14.0",
|
|
58
|
+
"server-only": "^0.0.1",
|
|
59
|
+
"sonner": ">=2.0.0",
|
|
60
|
+
"tailwind-merge": "^3.5.0",
|
|
61
|
+
"zod": "^4.3.6"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@hookform/resolvers": "^5.2.2",
|
|
65
|
+
"@tanstack/react-query": "^5.95.2",
|
|
66
|
+
"@tanstack/react-query-devtools": "^5.95.2",
|
|
67
|
+
"@types/node": "^25.5.0",
|
|
68
|
+
"@types/react": "^19.2.14",
|
|
69
|
+
"@types/react-dom": "^19.2.3",
|
|
70
|
+
"glob": "^13.0.6",
|
|
71
|
+
"next": "16.2.1",
|
|
72
|
+
"react": "19.1.4",
|
|
73
|
+
"react-dom": "19.1.4",
|
|
74
|
+
"react-hook-form": "^7.72.0",
|
|
75
|
+
"tsup": "^8.5.1",
|
|
76
|
+
"typescript": "^5.9.3",
|
|
77
|
+
"zustand": "^5.0.12"
|
|
78
|
+
},
|
|
79
|
+
"peerDependencies": {
|
|
80
|
+
"@hookform/resolvers": ">=3.0.0",
|
|
81
|
+
"@tanstack/react-query": ">=5.0.0",
|
|
82
|
+
"next": ">=16.0.0",
|
|
83
|
+
"react": ">=19.0.0",
|
|
84
|
+
"react-dom": ">=19.0.0",
|
|
85
|
+
"react-hook-form": ">=7.0.0",
|
|
86
|
+
"sonner": ">=2.0.0",
|
|
87
|
+
"zustand": ">=4.0.0"
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { IconLock, IconSettings2, IconUser, IconX } from '@tabler/icons-react';
|
|
4
4
|
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
|
|
5
5
|
import { Tabs, TabsList, TabsTrigger, TabsContent } from '../ui/data-display/Tabs';
|
|
6
6
|
import { Button } from '../ui/buttons/Button';
|
|
@@ -78,7 +78,7 @@ export default function ConfigurationsMyAccountModal() {
|
|
|
78
78
|
className="size-8 flex items-center justify-center text-gray-500 cursor-pointer"
|
|
79
79
|
onClick={close}
|
|
80
80
|
>
|
|
81
|
-
<
|
|
81
|
+
<IconX size={18} />
|
|
82
82
|
</button>
|
|
83
83
|
</div>
|
|
84
84
|
<Tabs
|
|
@@ -105,17 +105,17 @@ export default function ConfigurationsMyAccountModal() {
|
|
|
105
105
|
|
|
106
106
|
<div className="lg:flex lg:flex-col flex flex-row lg:gap-0 gap-0 lg:w-full">
|
|
107
107
|
<TabsTrigger value={AccountSectionType.MY_PROFILE} className={tabTriggerClasses}>
|
|
108
|
-
<
|
|
108
|
+
<IconUser size={20} className="shrink-0" />
|
|
109
109
|
<span className="paragraph-small-medium">Meu perfil</span>
|
|
110
110
|
</TabsTrigger>
|
|
111
111
|
|
|
112
112
|
<TabsTrigger value={AccountSectionType.PREFERENCES} className={tabTriggerClasses}>
|
|
113
|
-
<
|
|
113
|
+
<IconSettings2 size={20} className="shrink-0" />
|
|
114
114
|
<span className="paragraph-small-medium">Preferências</span>
|
|
115
115
|
</TabsTrigger>
|
|
116
116
|
|
|
117
117
|
<TabsTrigger value={AccountSectionType.SECURITY} className={tabTriggerClasses}>
|
|
118
|
-
<
|
|
118
|
+
<IconLock size={20} className="shrink-0" />
|
|
119
119
|
<span className="paragraph-small-medium">Segurança</span>
|
|
120
120
|
</TabsTrigger>
|
|
121
121
|
</div>
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import { toast } from 'sonner';
|
|
5
|
-
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
|
|
6
|
-
import { Button } from '../ui/buttons/Button';
|
|
7
|
-
import { Toast } from '../ui/feedback/Toast';
|
|
8
|
-
import { useAccountModals } from '../../store/useAccountModals';
|
|
9
|
-
|
|
10
|
-
export default function ConfirmDeleteAccountModal() {
|
|
11
|
-
const { activeModal, pagesCount, close } = useAccountModals();
|
|
12
|
-
const open = activeModal === 'confirmDelete';
|
|
13
|
-
|
|
14
|
-
const handleConfirm = () => {
|
|
15
|
-
toast.custom((t) => (
|
|
16
|
-
<Toast variant="success" message="Conta excluída com sucesso" toastId={t} />
|
|
17
|
-
));
|
|
18
|
-
close();
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
return (
|
|
22
|
-
<Dialog open={open} onOpenChange={close}>
|
|
23
|
-
<DialogContent className="flex flex-col p-0 gap-0 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%]!">
|
|
24
|
-
<div className="flex flex-col gap-5 p-4 lg:p-5">
|
|
25
|
-
<DialogHeader className="p-0">
|
|
26
|
-
<DialogTitle className="paragraph-medium-semibold text-gray-950">
|
|
27
|
-
Uma pena te ver ir!
|
|
28
|
-
</DialogTitle>
|
|
29
|
-
</DialogHeader>
|
|
30
|
-
|
|
31
|
-
<div className="bg-red-50 p-4 lg:p-5 rounded-lg flex items-center gap-4">
|
|
32
|
-
<
|
|
33
|
-
<p className="paragraph-small-regular text-gray-600">
|
|
34
|
-
Todas suas{' '}
|
|
35
|
-
<span className="font-semibold text-gray-950">{pagesCount} páginas</span>{' '}
|
|
36
|
-
serão deletadas permanentemente. Essa ação é{' '}
|
|
37
|
-
<span className="font-semibold text-gray-950">irreversível!</span>
|
|
38
|
-
</p>
|
|
39
|
-
</div>
|
|
40
|
-
</div>
|
|
41
|
-
|
|
42
|
-
<div className="h-px bg-gray-200" />
|
|
43
|
-
|
|
44
|
-
<div className="flex items-center gap-2 p-4 lg:p-5">
|
|
45
|
-
<Button className="h-10 flex-1" onClick={close}>
|
|
46
|
-
Manter minha conta
|
|
47
|
-
</Button>
|
|
48
|
-
<Button variant="secondary" className="h-10! flex-1" onClick={handleConfirm}>
|
|
49
|
-
Excluir mesmo assim
|
|
50
|
-
</Button>
|
|
51
|
-
</div>
|
|
52
|
-
</DialogContent>
|
|
53
|
-
</Dialog>
|
|
54
|
-
);
|
|
55
|
-
}
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { IconAlertTriangle } from '@tabler/icons-react';
|
|
4
|
+
import { toast } from 'sonner';
|
|
5
|
+
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
|
|
6
|
+
import { Button } from '../ui/buttons/Button';
|
|
7
|
+
import { Toast } from '../ui/feedback/Toast';
|
|
8
|
+
import { useAccountModals } from '../../store/useAccountModals';
|
|
9
|
+
|
|
10
|
+
export default function ConfirmDeleteAccountModal() {
|
|
11
|
+
const { activeModal, pagesCount, close } = useAccountModals();
|
|
12
|
+
const open = activeModal === 'confirmDelete';
|
|
13
|
+
|
|
14
|
+
const handleConfirm = () => {
|
|
15
|
+
toast.custom((t) => (
|
|
16
|
+
<Toast variant="success" message="Conta excluída com sucesso" toastId={t} />
|
|
17
|
+
));
|
|
18
|
+
close();
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<Dialog open={open} onOpenChange={close}>
|
|
23
|
+
<DialogContent className="flex flex-col p-0 gap-0 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%]!">
|
|
24
|
+
<div className="flex flex-col gap-5 p-4 lg:p-5">
|
|
25
|
+
<DialogHeader className="p-0">
|
|
26
|
+
<DialogTitle className="paragraph-medium-semibold text-gray-950">
|
|
27
|
+
Uma pena te ver ir!
|
|
28
|
+
</DialogTitle>
|
|
29
|
+
</DialogHeader>
|
|
30
|
+
|
|
31
|
+
<div className="bg-red-50 p-4 lg:p-5 rounded-lg flex items-center gap-4">
|
|
32
|
+
<IconAlertTriangle size={20} className="text-red-500 shrink-0" strokeWidth={2} />
|
|
33
|
+
<p className="paragraph-small-regular text-gray-600">
|
|
34
|
+
Todas suas{' '}
|
|
35
|
+
<span className="font-semibold text-gray-950">{pagesCount} páginas</span>{' '}
|
|
36
|
+
serão deletadas permanentemente. Essa ação é{' '}
|
|
37
|
+
<span className="font-semibold text-gray-950">irreversível!</span>
|
|
38
|
+
</p>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<div className="h-px bg-gray-200" />
|
|
43
|
+
|
|
44
|
+
<div className="flex items-center gap-2 p-4 lg:p-5">
|
|
45
|
+
<Button className="h-10 flex-1" onClick={close}>
|
|
46
|
+
Manter minha conta
|
|
47
|
+
</Button>
|
|
48
|
+
<Button variant="secondary" className="h-10! flex-1" onClick={handleConfirm}>
|
|
49
|
+
Excluir mesmo assim
|
|
50
|
+
</Button>
|
|
51
|
+
</div>
|
|
52
|
+
</DialogContent>
|
|
53
|
+
</Dialog>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { IconAlertTriangle } from '@tabler/icons-react';
|
|
4
4
|
import { Button } from '../ui/buttons/Button';
|
|
5
5
|
import {
|
|
6
6
|
Dialog,
|
|
@@ -34,7 +34,7 @@ export default function ConfirmGlobalPreferencesModal({
|
|
|
34
34
|
|
|
35
35
|
<div className="flex flex-col gap-3 p-5">
|
|
36
36
|
<div className="flex items-center justify-center bg-gray-50 rounded-lg size-10">
|
|
37
|
-
<
|
|
37
|
+
<IconAlertTriangle size={24} className="text-gray-950" />
|
|
38
38
|
</div>
|
|
39
39
|
<div className="flex flex-col gap-2">
|
|
40
40
|
<span className="paragraph-medium-semibold text-gray-950">
|
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { useState, useCallback } from 'react';
|
|
4
|
-
import {
|
|
5
|
-
import { toast } from 'sonner';
|
|
6
|
-
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
|
|
7
|
-
import { Button } from '../ui/buttons/Button';
|
|
8
|
-
import { FormField } from '../ui/form/FormField';
|
|
9
|
-
import { SelectField } from '../ui/form/SelectField';
|
|
10
|
-
import { TextAreaField } from '../ui/form/TextAreaField';
|
|
11
|
-
import { Toast } from '../ui/feedback/Toast';
|
|
12
|
-
import usePasswordVisibility from '../../hooks/usePasswordVisibility';
|
|
13
|
-
import { useAccountModals } from '../../store/useAccountModals';
|
|
14
|
-
import { AccountSectionType } from '../../enums/AccountSectionType';
|
|
15
|
-
|
|
16
|
-
const REASON_OPTIONS = [
|
|
17
|
-
{ value: 'sem-funcao', label: 'A ferramenta não possui uma função que eu preciso' },
|
|
18
|
-
{ value: 'problemas', label: 'Encontrei problemas técnicos ou erros no sistema' },
|
|
19
|
-
{ value: 'suporte', label: 'Tive problemas com o suporte ou atendimento' },
|
|
20
|
-
{ value: 'demora', label: 'As atualizações demoram mais do que o esperado' },
|
|
21
|
-
{ value: 'temporario', label: 'O cancelamento é temporário' },
|
|
22
|
-
{ value: 'outro', label: 'Outro motivo' },
|
|
23
|
-
];
|
|
24
|
-
|
|
25
|
-
export default function DeleteAccountModal() {
|
|
26
|
-
const { activeModal, pagesCount, openConfigurations, openConfirmDelete, close } = useAccountModals();
|
|
27
|
-
const open = activeModal === 'deleteAccount';
|
|
28
|
-
|
|
29
|
-
const [reason, setReason] = useState('');
|
|
30
|
-
const [description, setDescription] = useState('');
|
|
31
|
-
const [password, setPassword] = useState('');
|
|
32
|
-
const { showPassword, togglePassword } = usePasswordVisibility();
|
|
33
|
-
|
|
34
|
-
const isFormValid = Boolean(reason && description && password);
|
|
35
|
-
|
|
36
|
-
const resetForm = useCallback(() => {
|
|
37
|
-
setReason('');
|
|
38
|
-
setDescription('');
|
|
39
|
-
setPassword('');
|
|
40
|
-
}, []);
|
|
41
|
-
|
|
42
|
-
const handleClose = () => {
|
|
43
|
-
resetForm();
|
|
44
|
-
openConfigurations(AccountSectionType.SECURITY);
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const handleDelete = (e: React.FormEvent) => {
|
|
48
|
-
e.preventDefault();
|
|
49
|
-
if (!isFormValid) {
|
|
50
|
-
toast.custom((t) => (
|
|
51
|
-
<Toast variant="error" message="Preencha todos os campos obrigatórios" toastId={t} />
|
|
52
|
-
));
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
resetForm();
|
|
56
|
-
openConfirmDelete(pagesCount);
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
return (
|
|
60
|
-
<Dialog open={open} onOpenChange={handleClose}>
|
|
61
|
-
<DialogContent className="flex flex-col p-0 gap-0 max-w-full! border-0 rounded-t-2xl rounded-b-none h-[100dvh] top-0! bottom-0! left-0! right-0! translate-x-0! translate-y-0! lg:max-w-lg! lg:h-auto! lg:max-h-[90vh] lg:rounded-lg lg:border lg:top-[50%]! lg:left-[50%]! lg:right-auto! lg:bottom-auto! lg:translate-x-[-50%]! lg:translate-y-[-50%]! overflow-y-auto">
|
|
62
|
-
<form onSubmit={handleDelete} className="flex flex-col flex-1 lg:flex-none">
|
|
63
|
-
<div className="flex flex-col gap-6 p-4 lg:p-6 flex-1 lg:flex-none">
|
|
64
|
-
<DialogHeader className="p-0">
|
|
65
|
-
<div className="flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5 mb-5">
|
|
66
|
-
<
|
|
67
|
-
</div>
|
|
68
|
-
<DialogTitle>Excluir conta</DialogTitle>
|
|
69
|
-
<DialogDescription className="paragraph-small-regular">
|
|
70
|
-
Esta ação é <span className="font-semibold text-gray-950">irreversível</span>. Ao
|
|
71
|
-
confirmar, sua conta e todos os seus dados serão excluídos.
|
|
72
|
-
</DialogDescription>
|
|
73
|
-
</DialogHeader>
|
|
74
|
-
|
|
75
|
-
<SelectField
|
|
76
|
-
label="Motivo do cancelamento"
|
|
77
|
-
required
|
|
78
|
-
placeholder="Selecione"
|
|
79
|
-
options={REASON_OPTIONS}
|
|
80
|
-
value={reason}
|
|
81
|
-
onChange={(value) => setReason(value as string)}
|
|
82
|
-
className="h-10!"
|
|
83
|
-
/>
|
|
84
|
-
|
|
85
|
-
<div>
|
|
86
|
-
<TextAreaField
|
|
87
|
-
label="Descreva o que levou a tomar essa decisão"
|
|
88
|
-
required
|
|
89
|
-
placeholder="Explique sua decisão..."
|
|
90
|
-
value={description}
|
|
91
|
-
onChange={(e) => setDescription(e.target.value)}
|
|
92
|
-
rows={4}
|
|
93
|
-
maxLength={400}
|
|
94
|
-
/>
|
|
95
|
-
<span className="paragraph-xsmall-medium text-gray-600 text-left mt-1 block">
|
|
96
|
-
{description.length}/400 caracteres
|
|
97
|
-
</span>
|
|
98
|
-
</div>
|
|
99
|
-
|
|
100
|
-
<FormField
|
|
101
|
-
className="text-gray-600"
|
|
102
|
-
label="Senha"
|
|
103
|
-
type="password"
|
|
104
|
-
placeholder="Informe sua senha"
|
|
105
|
-
leftIcon={
|
|
106
|
-
value={password}
|
|
107
|
-
onChange={(e) => setPassword(e.target.value)}
|
|
108
|
-
classnameContainer="h-10!"
|
|
109
|
-
showPassword={showPassword}
|
|
110
|
-
onTogglePassword={togglePassword}
|
|
111
|
-
/>
|
|
112
|
-
</div>
|
|
113
|
-
|
|
114
|
-
<div className="flex flex-row items-center gap-2 p-4 lg:p-6 border-t border-gray-200 bg-white mt-auto lg:mt-0">
|
|
115
|
-
<Button
|
|
116
|
-
variant="default"
|
|
117
|
-
className="h-10 flex-1 bg-gray-950 text-white hover:bg-gray-800"
|
|
118
|
-
type="submit"
|
|
119
|
-
>
|
|
120
|
-
Excluir conta
|
|
121
|
-
</Button>
|
|
122
|
-
<Button variant="secondary" className="h-10 flex-1" type="button" onClick={handleClose}>
|
|
123
|
-
Fechar
|
|
124
|
-
</Button>
|
|
125
|
-
</div>
|
|
126
|
-
</form>
|
|
127
|
-
</DialogContent>
|
|
128
|
-
</Dialog>
|
|
129
|
-
);
|
|
130
|
-
}
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState, useCallback } from 'react';
|
|
4
|
+
import { IconLock, IconAlertTriangle } from '@tabler/icons-react';
|
|
5
|
+
import { toast } from 'sonner';
|
|
6
|
+
import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';
|
|
7
|
+
import { Button } from '../ui/buttons/Button';
|
|
8
|
+
import { FormField } from '../ui/form/FormField';
|
|
9
|
+
import { SelectField } from '../ui/form/SelectField';
|
|
10
|
+
import { TextAreaField } from '../ui/form/TextAreaField';
|
|
11
|
+
import { Toast } from '../ui/feedback/Toast';
|
|
12
|
+
import usePasswordVisibility from '../../hooks/usePasswordVisibility';
|
|
13
|
+
import { useAccountModals } from '../../store/useAccountModals';
|
|
14
|
+
import { AccountSectionType } from '../../enums/AccountSectionType';
|
|
15
|
+
|
|
16
|
+
const REASON_OPTIONS = [
|
|
17
|
+
{ value: 'sem-funcao', label: 'A ferramenta não possui uma função que eu preciso' },
|
|
18
|
+
{ value: 'problemas', label: 'Encontrei problemas técnicos ou erros no sistema' },
|
|
19
|
+
{ value: 'suporte', label: 'Tive problemas com o suporte ou atendimento' },
|
|
20
|
+
{ value: 'demora', label: 'As atualizações demoram mais do que o esperado' },
|
|
21
|
+
{ value: 'temporario', label: 'O cancelamento é temporário' },
|
|
22
|
+
{ value: 'outro', label: 'Outro motivo' },
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
export default function DeleteAccountModal() {
|
|
26
|
+
const { activeModal, pagesCount, openConfigurations, openConfirmDelete, close } = useAccountModals();
|
|
27
|
+
const open = activeModal === 'deleteAccount';
|
|
28
|
+
|
|
29
|
+
const [reason, setReason] = useState('');
|
|
30
|
+
const [description, setDescription] = useState('');
|
|
31
|
+
const [password, setPassword] = useState('');
|
|
32
|
+
const { showPassword, togglePassword } = usePasswordVisibility();
|
|
33
|
+
|
|
34
|
+
const isFormValid = Boolean(reason && description && password);
|
|
35
|
+
|
|
36
|
+
const resetForm = useCallback(() => {
|
|
37
|
+
setReason('');
|
|
38
|
+
setDescription('');
|
|
39
|
+
setPassword('');
|
|
40
|
+
}, []);
|
|
41
|
+
|
|
42
|
+
const handleClose = () => {
|
|
43
|
+
resetForm();
|
|
44
|
+
openConfigurations(AccountSectionType.SECURITY);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const handleDelete = (e: React.FormEvent) => {
|
|
48
|
+
e.preventDefault();
|
|
49
|
+
if (!isFormValid) {
|
|
50
|
+
toast.custom((t) => (
|
|
51
|
+
<Toast variant="error" message="Preencha todos os campos obrigatórios" toastId={t} />
|
|
52
|
+
));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
resetForm();
|
|
56
|
+
openConfirmDelete(pagesCount);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<Dialog open={open} onOpenChange={handleClose}>
|
|
61
|
+
<DialogContent className="flex flex-col p-0 gap-0 max-w-full! border-0 rounded-t-2xl rounded-b-none h-[100dvh] top-0! bottom-0! left-0! right-0! translate-x-0! translate-y-0! lg:max-w-lg! lg:h-auto! lg:max-h-[90vh] lg:rounded-lg lg:border lg:top-[50%]! lg:left-[50%]! lg:right-auto! lg:bottom-auto! lg:translate-x-[-50%]! lg:translate-y-[-50%]! overflow-y-auto">
|
|
62
|
+
<form onSubmit={handleDelete} className="flex flex-col flex-1 lg:flex-none">
|
|
63
|
+
<div className="flex flex-col gap-6 p-4 lg:p-6 flex-1 lg:flex-none">
|
|
64
|
+
<DialogHeader className="p-0">
|
|
65
|
+
<div className="flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5 mb-5">
|
|
66
|
+
<IconAlertTriangle size={20} className="text-red-500" />
|
|
67
|
+
</div>
|
|
68
|
+
<DialogTitle>Excluir conta</DialogTitle>
|
|
69
|
+
<DialogDescription className="paragraph-small-regular">
|
|
70
|
+
Esta ação é <span className="font-semibold text-gray-950">irreversível</span>. Ao
|
|
71
|
+
confirmar, sua conta e todos os seus dados serão excluídos.
|
|
72
|
+
</DialogDescription>
|
|
73
|
+
</DialogHeader>
|
|
74
|
+
|
|
75
|
+
<SelectField
|
|
76
|
+
label="Motivo do cancelamento"
|
|
77
|
+
required
|
|
78
|
+
placeholder="Selecione"
|
|
79
|
+
options={REASON_OPTIONS}
|
|
80
|
+
value={reason}
|
|
81
|
+
onChange={(value) => setReason(value as string)}
|
|
82
|
+
className="h-10!"
|
|
83
|
+
/>
|
|
84
|
+
|
|
85
|
+
<div>
|
|
86
|
+
<TextAreaField
|
|
87
|
+
label="Descreva o que levou a tomar essa decisão"
|
|
88
|
+
required
|
|
89
|
+
placeholder="Explique sua decisão..."
|
|
90
|
+
value={description}
|
|
91
|
+
onChange={(e) => setDescription(e.target.value)}
|
|
92
|
+
rows={4}
|
|
93
|
+
maxLength={400}
|
|
94
|
+
/>
|
|
95
|
+
<span className="paragraph-xsmall-medium text-gray-600 text-left mt-1 block">
|
|
96
|
+
{description.length}/400 caracteres
|
|
97
|
+
</span>
|
|
98
|
+
</div>
|
|
99
|
+
|
|
100
|
+
<FormField
|
|
101
|
+
className="text-gray-600"
|
|
102
|
+
label="Senha"
|
|
103
|
+
type="password"
|
|
104
|
+
placeholder="Informe sua senha"
|
|
105
|
+
leftIcon={IconLock}
|
|
106
|
+
value={password}
|
|
107
|
+
onChange={(e) => setPassword(e.target.value)}
|
|
108
|
+
classnameContainer="h-10!"
|
|
109
|
+
showPassword={showPassword}
|
|
110
|
+
onTogglePassword={togglePassword}
|
|
111
|
+
/>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<div className="flex flex-row items-center gap-2 p-4 lg:p-6 border-t border-gray-200 bg-white mt-auto lg:mt-0">
|
|
115
|
+
<Button
|
|
116
|
+
variant="default"
|
|
117
|
+
className="h-10 flex-1 bg-gray-950 text-white hover:bg-gray-800"
|
|
118
|
+
type="submit"
|
|
119
|
+
>
|
|
120
|
+
Excluir conta
|
|
121
|
+
</Button>
|
|
122
|
+
<Button variant="secondary" className="h-10 flex-1" type="button" onClick={handleClose}>
|
|
123
|
+
Fechar
|
|
124
|
+
</Button>
|
|
125
|
+
</div>
|
|
126
|
+
</form>
|
|
127
|
+
</DialogContent>
|
|
128
|
+
</Dialog>
|
|
129
|
+
);
|
|
130
|
+
}
|