@greatapps/common 1.1.668 → 1.1.669

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.
@@ -60,7 +60,7 @@ function ConfirmDeleteAccountModal() {
60
60
  /* @__PURE__ */ jsxs("div", { className: "bg-red-50 p-4 lg:p-5 rounded-lg flex items-center gap-4", children: [
61
61
  /* @__PURE__ */ jsx(IconAlertTriangle, { size: 20, className: "text-red-500 shrink-0", strokeWidth: 2 }),
62
62
  /* @__PURE__ */ jsx("p", { className: "paragraph-small-regular text-gray-600", children: translate.rich("common.account.confirmDelete.warning", {
63
- count: pagesCount,
63
+ count: String(pagesCount),
64
64
  b: (chunks) => /* @__PURE__ */ jsx("span", { className: "font-semibold text-gray-950", children: chunks })
65
65
  }) })
66
66
  ] })
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/account/ConfirmDeleteAccountModal.tsx"],"sourcesContent":["'use client';\n\nimport { useTranslations } from 'next-intl';\nimport { IconAlertTriangle } from '@tabler/icons-react';\nimport { toast } from 'sonner';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';\nimport { Button } from '../ui/buttons/Button';\nimport { Toast } from '../ui/feedback/Toast';\nimport { useAccountModals } from '../../store/useAccountModals';\nimport { useCountPages } from '../../modules/pages/hooks/count-pages.hook';\nimport {\n useDeleteAccount,\n useDeleteAccountUser,\n} from '../../modules/accounts/hooks/useAccountManagement';\nimport { useAuth } from '../../providers/auth.provider';\nimport { UserProfile } from '../../modules/users/schema';\n\nexport default function ConfirmDeleteAccountModal() {\n const translate = useTranslations();\n const { activeModal, deleteAccountPayload, openDeleteAccount, close } = useAccountModals();\n const open = activeModal === 'confirmDelete';\n\n const { data: pagesCount = 0 } = useCountPages();\n\n const { user, logout } = useAuth();\n const isOwner = user?.profile === UserProfile.owner;\n\n const deleteAccount = useDeleteAccount();\n const deleteAccountUser = useDeleteAccountUser();\n const isDeleting = deleteAccount.isPending || deleteAccountUser.isPending;\n\n const handleConfirm = async () => {\n try {\n if (isOwner) {\n if (!deleteAccountPayload) {\n // Fluxo quebrado (usuário pulou o primeiro modal ou refresh) — manda\n // de volta pro modal inicial pra re-coletar a senha.\n openDeleteAccount(translate('common.account.confirmDelete.sessionExpired'));\n return;\n }\n await deleteAccount.mutateAsync({ password: deleteAccountPayload.password });\n } else {\n await deleteAccountUser.mutateAsync(user!.id);\n }\n close();\n toast.custom((toastId) => (\n <Toast\n variant=\"success\"\n message={translate('common.account.confirmDelete.success')}\n toastId={toastId}\n />\n ));\n await logout();\n } catch (error) {\n const message =\n error instanceof Error ? error.message : translate('common.account.confirmDelete.error');\n if (isOwner) {\n // Falha no delete do owner (ex.: senha inválida) — volta pro primeiro\n // modal com a mensagem do backend pra o usuário corrigir e tentar de novo.\n openDeleteAccount(message);\n return;\n }\n toast.custom((toastId) => (\n <Toast variant=\"error\" message={message} toastId={toastId} />\n ));\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={isDeleting ? undefined : close}>\n <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%]!\">\n <div className=\"flex flex-col gap-5 p-4 lg:p-5\">\n <DialogHeader className=\"p-0\">\n <DialogTitle className=\"paragraph-medium-semibold text-gray-950\">\n {translate('common.account.confirmDelete.title')}\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"bg-red-50 p-4 lg:p-5 rounded-lg flex items-center gap-4\">\n <IconAlertTriangle size={20} className=\"text-red-500 shrink-0\" strokeWidth={2} />\n <p className=\"paragraph-small-regular text-gray-600\">\n {translate.rich('common.account.confirmDelete.warning', {\n count: pagesCount,\n b: (chunks) => <span className=\"font-semibold text-gray-950\">{chunks}</span>,\n })}\n </p>\n </div>\n </div>\n\n <div className=\"h-px bg-gray-200\" />\n\n <div className=\"flex items-center gap-2 p-4 lg:p-5\">\n <Button className=\"h-10 flex-1\" onClick={close} disabled={isDeleting}>\n {translate('common.account.confirmDelete.keepAccount')}\n </Button>\n <Button\n variant=\"secondary\"\n className=\"h-10! flex-1\"\n onClick={handleConfirm}\n disabled={isDeleting}\n >\n {isDeleting\n ? translate('common.account.confirmDelete.deleting')\n : translate('common.account.confirmDelete.deleteAnyway')}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";AA8CQ,cAgCE,YAhCF;AA5CR,SAAS,uBAAuB;AAChC,SAAS,yBAAyB;AAClC,SAAS,aAAa;AACtB,SAAS,QAAQ,eAAe,cAAc,mBAAmB;AACjE,SAAS,cAAc;AACvB,SAAS,aAAa;AACtB,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAEb,SAAR,4BAA6C;AAClD,QAAM,YAAY,gBAAgB;AAClC,QAAM,EAAE,aAAa,sBAAsB,mBAAmB,MAAM,IAAI,iBAAiB;AACzF,QAAM,OAAO,gBAAgB;AAE7B,QAAM,EAAE,MAAM,aAAa,EAAE,IAAI,cAAc;AAE/C,QAAM,EAAE,MAAM,OAAO,IAAI,QAAQ;AACjC,QAAM,UAAU,MAAM,YAAY,YAAY;AAE9C,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,oBAAoB,qBAAqB;AAC/C,QAAM,aAAa,cAAc,aAAa,kBAAkB;AAEhE,QAAM,gBAAgB,YAAY;AAChC,QAAI;AACF,UAAI,SAAS;AACX,YAAI,CAAC,sBAAsB;AAGzB,4BAAkB,UAAU,6CAA6C,CAAC;AAC1E;AAAA,QACF;AACA,cAAM,cAAc,YAAY,EAAE,UAAU,qBAAqB,SAAS,CAAC;AAAA,MAC7E,OAAO;AACL,cAAM,kBAAkB,YAAY,KAAM,EAAE;AAAA,MAC9C;AACA,YAAM;AACN,YAAM,OAAO,CAAC,YACZ;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,UAAU,sCAAsC;AAAA,UACzD;AAAA;AAAA,MACF,CACD;AACD,YAAM,OAAO;AAAA,IACf,SAAS,OAAO;AACd,YAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU,UAAU,oCAAoC;AACzF,UAAI,SAAS;AAGX,0BAAkB,OAAO;AACzB;AAAA,MACF;AACA,YAAM,OAAO,CAAC,YACZ,oBAAC,SAAM,SAAQ,SAAQ,SAAkB,SAAkB,CAC5D;AAAA,IACH;AAAA,EACF;AAEA,SACE,oBAAC,UAAO,MAAY,cAAc,aAAa,SAAY,OACzD,+BAAC,iBAAc,WAAU,2NACvB;AAAA,yBAAC,SAAI,WAAU,kCACb;AAAA,0BAAC,gBAAa,WAAU,OACtB,8BAAC,eAAY,WAAU,2CACpB,oBAAU,oCAAoC,GACjD,GACF;AAAA,MAEA,qBAAC,SAAI,WAAU,2DACb;AAAA,4BAAC,qBAAkB,MAAM,IAAI,WAAU,yBAAwB,aAAa,GAAG;AAAA,QAC/E,oBAAC,OAAE,WAAU,yCACV,oBAAU,KAAK,wCAAwC;AAAA,UACtD,OAAO;AAAA,UACP,GAAG,CAAC,WAAW,oBAAC,UAAK,WAAU,+BAA+B,kBAAO;AAAA,QACvE,CAAC,GACH;AAAA,SACF;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAU,oBAAmB;AAAA,IAElC,qBAAC,SAAI,WAAU,sCACb;AAAA,0BAAC,UAAO,WAAU,eAAc,SAAS,OAAO,UAAU,YACvD,oBAAU,0CAA0C,GACvD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAU;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UAET,uBACG,UAAU,uCAAuC,IACjD,UAAU,2CAA2C;AAAA;AAAA,MAC3D;AAAA,OACF;AAAA,KACF,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/account/ConfirmDeleteAccountModal.tsx"],"sourcesContent":["'use client';\n\nimport { useTranslations } from 'next-intl';\nimport { IconAlertTriangle } from '@tabler/icons-react';\nimport { toast } from 'sonner';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';\nimport { Button } from '../ui/buttons/Button';\nimport { Toast } from '../ui/feedback/Toast';\nimport { useAccountModals } from '../../store/useAccountModals';\nimport { useCountPages } from '../../modules/pages/hooks/count-pages.hook';\nimport {\n useDeleteAccount,\n useDeleteAccountUser,\n} from '../../modules/accounts/hooks/useAccountManagement';\nimport { useAuth } from '../../providers/auth.provider';\nimport { UserProfile } from '../../modules/users/schema';\n\nexport default function ConfirmDeleteAccountModal() {\n const translate = useTranslations();\n const { activeModal, deleteAccountPayload, openDeleteAccount, close } = useAccountModals();\n const open = activeModal === 'confirmDelete';\n\n const { data: pagesCount = 0 } = useCountPages();\n\n const { user, logout } = useAuth();\n const isOwner = user?.profile === UserProfile.owner;\n\n const deleteAccount = useDeleteAccount();\n const deleteAccountUser = useDeleteAccountUser();\n const isDeleting = deleteAccount.isPending || deleteAccountUser.isPending;\n\n const handleConfirm = async () => {\n try {\n if (isOwner) {\n if (!deleteAccountPayload) {\n // Fluxo quebrado (usuário pulou o primeiro modal ou refresh) — manda\n // de volta pro modal inicial pra re-coletar a senha.\n openDeleteAccount(translate('common.account.confirmDelete.sessionExpired'));\n return;\n }\n await deleteAccount.mutateAsync({ password: deleteAccountPayload.password });\n } else {\n await deleteAccountUser.mutateAsync(user!.id);\n }\n close();\n toast.custom((toastId) => (\n <Toast\n variant=\"success\"\n message={translate('common.account.confirmDelete.success')}\n toastId={toastId}\n />\n ));\n await logout();\n } catch (error) {\n const message =\n error instanceof Error ? error.message : translate('common.account.confirmDelete.error');\n if (isOwner) {\n // Falha no delete do owner (ex.: senha inválida) — volta pro primeiro\n // modal com a mensagem do backend pra o usuário corrigir e tentar de novo.\n openDeleteAccount(message);\n return;\n }\n toast.custom((toastId) => (\n <Toast variant=\"error\" message={message} toastId={toastId} />\n ));\n }\n };\n\n return (\n <Dialog open={open} onOpenChange={isDeleting ? undefined : close}>\n <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%]!\">\n <div className=\"flex flex-col gap-5 p-4 lg:p-5\">\n <DialogHeader className=\"p-0\">\n <DialogTitle className=\"paragraph-medium-semibold text-gray-950\">\n {translate('common.account.confirmDelete.title')}\n </DialogTitle>\n </DialogHeader>\n\n <div className=\"bg-red-50 p-4 lg:p-5 rounded-lg flex items-center gap-4\">\n <IconAlertTriangle size={20} className=\"text-red-500 shrink-0\" strokeWidth={2} />\n <p className=\"paragraph-small-regular text-gray-600\">\n {translate.rich('common.account.confirmDelete.warning', {\n count: String(pagesCount),\n b: (chunks) => <span className=\"font-semibold text-gray-950\">{chunks}</span>,\n })}\n </p>\n </div>\n </div>\n\n <div className=\"h-px bg-gray-200\" />\n\n <div className=\"flex items-center gap-2 p-4 lg:p-5\">\n <Button className=\"h-10 flex-1\" onClick={close} disabled={isDeleting}>\n {translate('common.account.confirmDelete.keepAccount')}\n </Button>\n <Button\n variant=\"secondary\"\n className=\"h-10! flex-1\"\n onClick={handleConfirm}\n disabled={isDeleting}\n >\n {isDeleting\n ? translate('common.account.confirmDelete.deleting')\n : translate('common.account.confirmDelete.deleteAnyway')}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";AA8CQ,cAgCE,YAhCF;AA5CR,SAAS,uBAAuB;AAChC,SAAS,yBAAyB;AAClC,SAAS,aAAa;AACtB,SAAS,QAAQ,eAAe,cAAc,mBAAmB;AACjE,SAAS,cAAc;AACvB,SAAS,aAAa;AACtB,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAEb,SAAR,4BAA6C;AAClD,QAAM,YAAY,gBAAgB;AAClC,QAAM,EAAE,aAAa,sBAAsB,mBAAmB,MAAM,IAAI,iBAAiB;AACzF,QAAM,OAAO,gBAAgB;AAE7B,QAAM,EAAE,MAAM,aAAa,EAAE,IAAI,cAAc;AAE/C,QAAM,EAAE,MAAM,OAAO,IAAI,QAAQ;AACjC,QAAM,UAAU,MAAM,YAAY,YAAY;AAE9C,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,oBAAoB,qBAAqB;AAC/C,QAAM,aAAa,cAAc,aAAa,kBAAkB;AAEhE,QAAM,gBAAgB,YAAY;AAChC,QAAI;AACF,UAAI,SAAS;AACX,YAAI,CAAC,sBAAsB;AAGzB,4BAAkB,UAAU,6CAA6C,CAAC;AAC1E;AAAA,QACF;AACA,cAAM,cAAc,YAAY,EAAE,UAAU,qBAAqB,SAAS,CAAC;AAAA,MAC7E,OAAO;AACL,cAAM,kBAAkB,YAAY,KAAM,EAAE;AAAA,MAC9C;AACA,YAAM;AACN,YAAM,OAAO,CAAC,YACZ;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,UAAU,sCAAsC;AAAA,UACzD;AAAA;AAAA,MACF,CACD;AACD,YAAM,OAAO;AAAA,IACf,SAAS,OAAO;AACd,YAAM,UACJ,iBAAiB,QAAQ,MAAM,UAAU,UAAU,oCAAoC;AACzF,UAAI,SAAS;AAGX,0BAAkB,OAAO;AACzB;AAAA,MACF;AACA,YAAM,OAAO,CAAC,YACZ,oBAAC,SAAM,SAAQ,SAAQ,SAAkB,SAAkB,CAC5D;AAAA,IACH;AAAA,EACF;AAEA,SACE,oBAAC,UAAO,MAAY,cAAc,aAAa,SAAY,OACzD,+BAAC,iBAAc,WAAU,2NACvB;AAAA,yBAAC,SAAI,WAAU,kCACb;AAAA,0BAAC,gBAAa,WAAU,OACtB,8BAAC,eAAY,WAAU,2CACpB,oBAAU,oCAAoC,GACjD,GACF;AAAA,MAEA,qBAAC,SAAI,WAAU,2DACb;AAAA,4BAAC,qBAAkB,MAAM,IAAI,WAAU,yBAAwB,aAAa,GAAG;AAAA,QAC/E,oBAAC,OAAE,WAAU,yCACV,oBAAU,KAAK,wCAAwC;AAAA,UACtD,OAAO,OAAO,UAAU;AAAA,UACxB,GAAG,CAAC,WAAW,oBAAC,UAAK,WAAU,+BAA+B,kBAAO;AAAA,QACvE,CAAC,GACH;AAAA,SACF;AAAA,OACF;AAAA,IAEA,oBAAC,SAAI,WAAU,oBAAmB;AAAA,IAElC,qBAAC,SAAI,WAAU,sCACb;AAAA,0BAAC,UAAO,WAAU,eAAc,SAAS,OAAO,UAAU,YACvD,oBAAU,0CAA0C,GACvD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAU;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UAET,uBACG,UAAU,uCAAuC,IACjD,UAAU,2CAA2C;AAAA;AAAA,MAC3D;AAAA,OACF;AAAA,KACF,GACF;AAEJ;","names":[]}
@@ -101,7 +101,7 @@ function DeleteAccountModal() {
101
101
  }
102
102
  ),
103
103
  /* @__PURE__ */ jsx("span", { className: "paragraph-xsmall-medium text-gray-600 text-left mt-1 block", children: translate("common.account.deleteAccount.charactersCount", {
104
- count: description.length
104
+ count: String(description.length)
105
105
  }) })
106
106
  ] }),
107
107
  /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/account/DeleteAccountModal.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useTranslations } from 'next-intl';\nimport { IconLock, IconAlertTriangle } from '@tabler/icons-react';\nimport { toast } from 'sonner';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';\nimport { Button } from '../ui/buttons/Button';\nimport { FormField } from '../ui/form/FormField';\nimport { SelectField } from '../ui/form/SelectField';\nimport { TextAreaField } from '../ui/form/TextAreaField';\nimport { Toast } from '../ui/feedback/Toast';\nimport usePasswordVisibility from '../../hooks/usePasswordVisibility';\nimport { useAccountModals } from '../../store/useAccountModals';\nimport { AccountSectionType } from '../../enums/AccountSectionType';\n\nexport default function DeleteAccountModal() {\n const translate = useTranslations();\n const reasonOptions = [\n { value: 'sem-funcao', label: translate('common.account.deleteAccount.reasons.noFeature') },\n { value: 'problemas', label: translate('common.account.deleteAccount.reasons.technical') },\n { value: 'suporte', label: translate('common.account.deleteAccount.reasons.support') },\n { value: 'demora', label: translate('common.account.deleteAccount.reasons.updates') },\n { value: 'temporario', label: translate('common.account.deleteAccount.reasons.temporary') },\n { value: 'outro', label: translate('common.account.deleteAccount.reasons.other') },\n ];\n const {\n activeModal,\n deleteAccountError,\n openConfigurations,\n openConfirmDelete,\n clearDeleteAccountError,\n } = useAccountModals();\n const open = activeModal === 'deleteAccount';\n\n const [reason, setReason] = useState('');\n const [description, setDescription] = useState('');\n const [password, setPassword] = useState('');\n const { showPassword, togglePassword } = usePasswordVisibility();\n\n const isFormValid = Boolean(reason && description && password);\n\n const resetForm = useCallback(() => {\n setReason('');\n setDescription('');\n setPassword('');\n }, []);\n\n // Quando o modal deixa de estar aberto, limpa o erro residual do store\n // pra não aparecer numa próxima abertura vinda de fluxo limpo.\n useEffect(() => {\n if (!open) {\n clearDeleteAccountError();\n }\n }, [open, clearDeleteAccountError]);\n\n const handleClose = () => {\n resetForm();\n openConfigurations(AccountSectionType.SECURITY);\n };\n\n const handleDelete = (e: React.FormEvent) => {\n e.preventDefault();\n if (!isFormValid) {\n toast.custom((toastId) => (\n <Toast\n variant=\"error\"\n message={translate('common.account.deleteAccount.requiredFields')}\n toastId={toastId}\n />\n ));\n return;\n }\n openConfirmDelete({ password });\n // Campos locais podem ser limpos — o payload já está no store.\n resetForm();\n };\n\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent className=\"flex flex-col p-0 gap-0 max-w-full sm: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\">\n <form onSubmit={handleDelete} className=\"flex flex-col flex-1 lg:flex-none\">\n <div className=\"flex flex-col gap-6 p-4 lg:p-6 flex-1 lg:flex-none\">\n <DialogHeader className=\"p-0\">\n <div className=\"flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5 mb-5\">\n <IconAlertTriangle size={20} className=\"text-red-500\" />\n </div>\n <DialogTitle>{translate('common.account.deleteAccount.title')}</DialogTitle>\n <DialogDescription className=\"paragraph-small-regular\">\n {translate.rich('common.account.deleteAccount.description', {\n b: (chunks) => (\n <span className=\"font-semibold text-gray-950\">{chunks}</span>\n ),\n })}\n </DialogDescription>\n </DialogHeader>\n\n <SelectField\n label={translate('common.account.deleteAccount.reasonLabel')}\n required\n placeholder={translate('common.account.deleteAccount.reasonPlaceholder')}\n options={reasonOptions}\n value={reason}\n onChange={(value) => setReason(value as string)}\n className=\"h-10!\"\n />\n\n <div>\n <TextAreaField\n label={translate('common.account.deleteAccount.descriptionLabel')}\n required\n placeholder={translate('common.account.deleteAccount.descriptionPlaceholder')}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n rows={4}\n maxLength={400}\n />\n <span className=\"paragraph-xsmall-medium text-gray-600 text-left mt-1 block\">\n {translate('common.account.deleteAccount.charactersCount', {\n count: description.length,\n })}\n </span>\n </div>\n\n <FormField\n className=\"text-gray-600\"\n label={translate('common.account.deleteAccount.passwordLabel')}\n type=\"password\"\n placeholder={translate('common.account.deleteAccount.passwordPlaceholder')}\n leftIcon={IconLock}\n value={password}\n onChange={(e) => {\n setPassword(e.target.value);\n if (deleteAccountError) clearDeleteAccountError();\n }}\n classnameContainer=\"h-10!\"\n showPassword={showPassword}\n onTogglePassword={togglePassword}\n error={!!deleteAccountError}\n errorMessage={deleteAccountError ?? undefined}\n />\n </div>\n\n <div className=\"flex flex-row items-center justify-start gap-2 p-4 lg:p-6 border-t border-gray-200 bg-white mt-auto lg:mt-0\">\n <Button\n variant=\"default\"\n className=\"h-10\"\n type=\"submit\"\n >\n {translate('common.account.deleteAccount.submit')}\n </Button>\n <Button variant=\"secondary\" className=\"h-10\" type=\"button\" onClick={handleClose}>\n {translate('common.actions.close')}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/account/DeleteAccountModal.tsx"],"sourcesContent":["'use client';\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useTranslations } from 'next-intl';\nimport { IconLock, IconAlertTriangle } from '@tabler/icons-react';\nimport { toast } from 'sonner';\nimport { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '../ui/overlay/Dialog';\nimport { Button } from '../ui/buttons/Button';\nimport { FormField } from '../ui/form/FormField';\nimport { SelectField } from '../ui/form/SelectField';\nimport { TextAreaField } from '../ui/form/TextAreaField';\nimport { Toast } from '../ui/feedback/Toast';\nimport usePasswordVisibility from '../../hooks/usePasswordVisibility';\nimport { useAccountModals } from '../../store/useAccountModals';\nimport { AccountSectionType } from '../../enums/AccountSectionType';\n\nexport default function DeleteAccountModal() {\n const translate = useTranslations();\n const reasonOptions = [\n { value: 'sem-funcao', label: translate('common.account.deleteAccount.reasons.noFeature') },\n { value: 'problemas', label: translate('common.account.deleteAccount.reasons.technical') },\n { value: 'suporte', label: translate('common.account.deleteAccount.reasons.support') },\n { value: 'demora', label: translate('common.account.deleteAccount.reasons.updates') },\n { value: 'temporario', label: translate('common.account.deleteAccount.reasons.temporary') },\n { value: 'outro', label: translate('common.account.deleteAccount.reasons.other') },\n ];\n const {\n activeModal,\n deleteAccountError,\n openConfigurations,\n openConfirmDelete,\n clearDeleteAccountError,\n } = useAccountModals();\n const open = activeModal === 'deleteAccount';\n\n const [reason, setReason] = useState('');\n const [description, setDescription] = useState('');\n const [password, setPassword] = useState('');\n const { showPassword, togglePassword } = usePasswordVisibility();\n\n const isFormValid = Boolean(reason && description && password);\n\n const resetForm = useCallback(() => {\n setReason('');\n setDescription('');\n setPassword('');\n }, []);\n\n // Quando o modal deixa de estar aberto, limpa o erro residual do store\n // pra não aparecer numa próxima abertura vinda de fluxo limpo.\n useEffect(() => {\n if (!open) {\n clearDeleteAccountError();\n }\n }, [open, clearDeleteAccountError]);\n\n const handleClose = () => {\n resetForm();\n openConfigurations(AccountSectionType.SECURITY);\n };\n\n const handleDelete = (e: React.FormEvent) => {\n e.preventDefault();\n if (!isFormValid) {\n toast.custom((toastId) => (\n <Toast\n variant=\"error\"\n message={translate('common.account.deleteAccount.requiredFields')}\n toastId={toastId}\n />\n ));\n return;\n }\n openConfirmDelete({ password });\n // Campos locais podem ser limpos — o payload já está no store.\n resetForm();\n };\n\n return (\n <Dialog open={open} onOpenChange={handleClose}>\n <DialogContent className=\"flex flex-col p-0 gap-0 max-w-full sm: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\">\n <form onSubmit={handleDelete} className=\"flex flex-col flex-1 lg:flex-none\">\n <div className=\"flex flex-col gap-6 p-4 lg:p-6 flex-1 lg:flex-none\">\n <DialogHeader className=\"p-0\">\n <div className=\"flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5 mb-5\">\n <IconAlertTriangle size={20} className=\"text-red-500\" />\n </div>\n <DialogTitle>{translate('common.account.deleteAccount.title')}</DialogTitle>\n <DialogDescription className=\"paragraph-small-regular\">\n {translate.rich('common.account.deleteAccount.description', {\n b: (chunks) => (\n <span className=\"font-semibold text-gray-950\">{chunks}</span>\n ),\n })}\n </DialogDescription>\n </DialogHeader>\n\n <SelectField\n label={translate('common.account.deleteAccount.reasonLabel')}\n required\n placeholder={translate('common.account.deleteAccount.reasonPlaceholder')}\n options={reasonOptions}\n value={reason}\n onChange={(value) => setReason(value as string)}\n className=\"h-10!\"\n />\n\n <div>\n <TextAreaField\n label={translate('common.account.deleteAccount.descriptionLabel')}\n required\n placeholder={translate('common.account.deleteAccount.descriptionPlaceholder')}\n value={description}\n onChange={(e) => setDescription(e.target.value)}\n rows={4}\n maxLength={400}\n />\n <span className=\"paragraph-xsmall-medium text-gray-600 text-left mt-1 block\">\n {translate('common.account.deleteAccount.charactersCount', {\n count: String(description.length),\n })}\n </span>\n </div>\n\n <FormField\n className=\"text-gray-600\"\n label={translate('common.account.deleteAccount.passwordLabel')}\n type=\"password\"\n placeholder={translate('common.account.deleteAccount.passwordPlaceholder')}\n leftIcon={IconLock}\n value={password}\n onChange={(e) => {\n setPassword(e.target.value);\n if (deleteAccountError) clearDeleteAccountError();\n }}\n classnameContainer=\"h-10!\"\n showPassword={showPassword}\n onTogglePassword={togglePassword}\n error={!!deleteAccountError}\n errorMessage={deleteAccountError ?? undefined}\n />\n </div>\n\n <div className=\"flex flex-row items-center justify-start gap-2 p-4 lg:p-6 border-t border-gray-200 bg-white mt-auto lg:mt-0\">\n <Button\n variant=\"default\"\n className=\"h-10\"\n type=\"submit\"\n >\n {translate('common.account.deleteAccount.submit')}\n </Button>\n <Button variant=\"secondary\" className=\"h-10\" type=\"button\" onClick={handleClose}>\n {translate('common.actions.close')}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@greatapps/common",
3
- "version": "1.1.668",
3
+ "version": "1.1.669",
4
4
  "description": "Shared library for GreatApps frontend applications",
5
5
  "main": "./dist/index.mjs",
6
6
  "types": "./src/index.ts",
@@ -80,7 +80,7 @@ export default function ConfirmDeleteAccountModal() {
80
80
  <IconAlertTriangle size={20} className="text-red-500 shrink-0" strokeWidth={2} />
81
81
  <p className="paragraph-small-regular text-gray-600">
82
82
  {translate.rich('common.account.confirmDelete.warning', {
83
- count: pagesCount,
83
+ count: String(pagesCount),
84
84
  b: (chunks) => <span className="font-semibold text-gray-950">{chunks}</span>,
85
85
  })}
86
86
  </p>
@@ -117,7 +117,7 @@ export default function DeleteAccountModal() {
117
117
  />
118
118
  <span className="paragraph-xsmall-medium text-gray-600 text-left mt-1 block">
119
119
  {translate('common.account.deleteAccount.charactersCount', {
120
- count: description.length,
120
+ count: String(description.length),
121
121
  })}
122
122
  </span>
123
123
  </div>