@greatapps/common 1.1.690 → 1.1.692

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.
@@ -21,7 +21,9 @@ import { useTranslations } from "next-intl";
21
21
  function DeleteCardModal() {
22
22
  const translate = useTranslations();
23
23
  const { activeModal, modalData, closeModal } = useModalManager();
24
- const { form, isValidConfirmation, resetConfirmation } = useDeleteConfirmation();
24
+ const { form, isValidConfirmation, resetConfirmation } = useDeleteConfirmation({
25
+ confirmWord: translate("common.cards.delete.confirmPlaceholder")
26
+ });
25
27
  const deleteCard = useDeleteCard();
26
28
  const { data: cardsData } = useCards();
27
29
  const isOpen = activeModal === "deleteCardModal";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/modals/cards/DeleteCardModal.tsx"],"sourcesContent":["'use client';\n\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from '../../ui/overlay/Dialog';\nimport { Button } from '../../ui/buttons/Button';\nimport { Separator } from '../../ui/data-display/Separator';\nimport { Toast } from '../../ui/feedback/Toast';\nimport { FormField } from '../../ui/form/FormField';\nimport { IconTrash } from '@tabler/icons-react';\nimport { toast } from 'sonner';\nimport { useModalManager } from '../../../store/useModalManager';\nimport { useDeleteConfirmation } from '../../../modules/cards/hooks/delete-confirmation.hook';\nimport { useDeleteCard } from '../../../modules/cards/hooks/delete-card.hook';\nimport { useCards } from '../../../modules/cards/hooks/cards.hook';\nimport { useTranslations } from 'next-intl';\n\nexport function DeleteCardModal() {\n const translate = useTranslations();\n const { activeModal, modalData, closeModal } = useModalManager();\n const { form, isValidConfirmation, resetConfirmation } = useDeleteConfirmation();\n const deleteCard = useDeleteCard();\n const { data: cardsData } = useCards();\n\n const isOpen = activeModal === 'deleteCardModal';\n const cardId = modalData.cardId as string | undefined;\n const onSuccess = modalData.onSuccess as (() => void) | undefined;\n\n const card = cardsData?.data?.find((c) => c.id.toString() === cardId);\n const cardLastDigits = (card?.number ?? '').replaceAll(/\\D/g, '').slice(-4);\n\n const handleClose = () => {\n resetConfirmation();\n closeModal();\n };\n\n const onSubmit = async () => {\n if (!cardId) return;\n\n try {\n await deleteCard.mutateAsync(cardId);\n } catch (error) {\n toast.custom(\n (t) => (\n <Toast\n toastId={t}\n variant=\"error\"\n message={\n error instanceof Error\n ? error.message\n : translate('common.cards.delete.errorToast')\n }\n />\n ),\n { duration: 5000 },\n );\n return;\n }\n\n onSuccess?.();\n resetConfirmation();\n closeModal();\n\n toast.custom(\n (t) => (\n <Toast\n variant=\"success\"\n message={translate('common.cards.delete.successToast', { digits: cardLastDigits })}\n toastId={t}\n />\n ),\n { duration: 5000 },\n );\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && handleClose()}>\n <DialogContent className=\"flex flex-col p-0! gap-0! max-w-[calc(100%-2rem)]! w-full sm:max-w-[400px]! lg:max-w-[410px]! rounded-lg border\">\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"flex flex-col\">\n <DialogHeader className=\"gap-4 text-left p-4 lg:p-5 pb-0 lg:pb-0\">\n <div className=\"flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5\">\n <IconTrash size={20} className=\"text-red-500\" />\n </div>\n <div className=\"flex flex-col gap-2\">\n <DialogTitle className=\"paragraph-medium-semibold text-zinc-950\">\n {translate('common.cards.delete.title')}\n </DialogTitle>\n <DialogDescription className=\"paragraph-small-regular text-zinc-600\">\n {translate('common.cards.delete.description')}{' '}\n <span className=\"font-semibold text-zinc-950\">\n •••• {cardLastDigits}\n </span>\n ?\n </DialogDescription>\n </div>\n </DialogHeader>\n\n <div className=\"px-4 lg:px-5 py-5\">\n <FormField\n label={translate('common.cards.delete.confirmLabel')}\n required\n placeholder={translate('common.cards.delete.confirmPlaceholder')}\n {...form.register('confirmText')}\n />\n </div>\n <Separator />\n <div className=\"flex flex-row items-center gap-2 p-4 lg:p-5\">\n <Button\n type=\"submit\"\n disabled={!isValidConfirmation}\n loading={form.formState.isSubmitting}\n className=\"h-10!\"\n >\n {form.formState.isSubmitting ? translate('common.cards.delete.deleting') : translate('common.actions.delete')}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"h-10!\"\n onClick={handleClose}\n disabled={form.formState.isSubmitting}\n >\n {translate('common.actions.cancel')}\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/modals/cards/DeleteCardModal.tsx"],"sourcesContent":["'use client';\n\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n} from '../../ui/overlay/Dialog';\nimport { Button } from '../../ui/buttons/Button';\nimport { Separator } from '../../ui/data-display/Separator';\nimport { Toast } from '../../ui/feedback/Toast';\nimport { FormField } from '../../ui/form/FormField';\nimport { IconTrash } from '@tabler/icons-react';\nimport { toast } from 'sonner';\nimport { useModalManager } from '../../../store/useModalManager';\nimport { useDeleteConfirmation } from '../../../modules/cards/hooks/delete-confirmation.hook';\nimport { useDeleteCard } from '../../../modules/cards/hooks/delete-card.hook';\nimport { useCards } from '../../../modules/cards/hooks/cards.hook';\nimport { useTranslations } from 'next-intl';\n\nexport function DeleteCardModal() {\n const translate = useTranslations();\n const { activeModal, modalData, closeModal } = useModalManager();\n const { form, isValidConfirmation, resetConfirmation } = useDeleteConfirmation({\n confirmWord: translate('common.cards.delete.confirmPlaceholder'),\n });\n const deleteCard = useDeleteCard();\n const { data: cardsData } = useCards();\n\n const isOpen = activeModal === 'deleteCardModal';\n const cardId = modalData.cardId as string | undefined;\n const onSuccess = modalData.onSuccess as (() => void) | undefined;\n\n const card = cardsData?.data?.find((c) => c.id.toString() === cardId);\n const cardLastDigits = (card?.number ?? '').replaceAll(/\\D/g, '').slice(-4);\n\n const handleClose = () => {\n resetConfirmation();\n closeModal();\n };\n\n const onSubmit = async () => {\n if (!cardId) return;\n\n try {\n await deleteCard.mutateAsync(cardId);\n } catch (error) {\n toast.custom(\n (t) => (\n <Toast\n toastId={t}\n variant=\"error\"\n message={\n error instanceof Error\n ? error.message\n : translate('common.cards.delete.errorToast')\n }\n />\n ),\n { duration: 5000 },\n );\n return;\n }\n\n onSuccess?.();\n resetConfirmation();\n closeModal();\n\n toast.custom(\n (t) => (\n <Toast\n variant=\"success\"\n message={translate('common.cards.delete.successToast', { digits: cardLastDigits })}\n toastId={t}\n />\n ),\n { duration: 5000 },\n );\n };\n\n return (\n <Dialog open={isOpen} onOpenChange={(open) => !open && handleClose()}>\n <DialogContent className=\"flex flex-col p-0! gap-0! max-w-[calc(100%-2rem)]! w-full sm:max-w-[400px]! lg:max-w-[410px]! rounded-lg border\">\n <form onSubmit={form.handleSubmit(onSubmit)} className=\"flex flex-col\">\n <DialogHeader className=\"gap-4 text-left p-4 lg:p-5 pb-0 lg:pb-0\">\n <div className=\"flex items-center justify-center w-fit bg-red-50 rounded-lg p-2.5\">\n <IconTrash size={20} className=\"text-red-500\" />\n </div>\n <div className=\"flex flex-col gap-2\">\n <DialogTitle className=\"paragraph-medium-semibold text-zinc-950\">\n {translate('common.cards.delete.title')}\n </DialogTitle>\n <DialogDescription className=\"paragraph-small-regular text-zinc-600\">\n {translate('common.cards.delete.description')}{' '}\n <span className=\"font-semibold text-zinc-950\">\n •••• {cardLastDigits}\n </span>\n ?\n </DialogDescription>\n </div>\n </DialogHeader>\n\n <div className=\"px-4 lg:px-5 py-5\">\n <FormField\n label={translate('common.cards.delete.confirmLabel')}\n required\n placeholder={translate('common.cards.delete.confirmPlaceholder')}\n {...form.register('confirmText')}\n />\n </div>\n <Separator />\n <div className=\"flex flex-row items-center gap-2 p-4 lg:p-5\">\n <Button\n type=\"submit\"\n disabled={!isValidConfirmation}\n loading={form.formState.isSubmitting}\n className=\"h-10!\"\n >\n {form.formState.isSubmitting ? translate('common.cards.delete.deleting') : translate('common.actions.delete')}\n </Button>\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"h-10!\"\n onClick={handleClose}\n disabled={form.formState.isSubmitting}\n >\n {translate('common.actions.cancel')}\n </Button>\n </div>\n </form>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":"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","names":[]}
@@ -23,7 +23,9 @@ function useUserQuery() {
23
23
  retry: false
24
24
  });
25
25
  }
26
- function useUserValidateSession(publicRoutes = [], options) {
26
+ function useUserValidateSession(publicRoutesOrOptions = [], maybeOptions) {
27
+ const publicRoutes = Array.isArray(publicRoutesOrOptions) ? publicRoutesOrOptions : [];
28
+ const options = Array.isArray(publicRoutesOrOptions) ? maybeOptions : publicRoutesOrOptions;
27
29
  const queryKey = useWlQueryKey([...USER_VALIDATE_SESSION_KEY]);
28
30
  return useQuery({
29
31
  queryKey,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/auth/hooks/useUserQuery.ts"],"sourcesContent":["'use client';\n\nimport { useMutation, useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query';\nimport { User } from '../../users/schema';\nimport { withAction } from '../../../utils/withAction';\nimport { useWlQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport const USER_QUERY_KEY = ['user'] as const;\nexport const USER_VALIDATE_SESSION_KEY = ['user-validate-session'] as const;\n\nasync function fetchUser(): Promise<User | null> {\n const { findUserById: getUserDataAction } = await import('../../users/action/find-user-by-id.action');\n const result = await getUserDataAction();\n return result.success && result.data ? result.data : null;\n}\n\nasync function validateUserSession(publicRoutes: string[] = []): Promise<boolean> {\n const { validateSessionAction } = await import('../actions/validate-session.action');\n return await validateSessionAction(publicRoutes);\n}\n\nexport function useUserQuery() {\n const queryKey = useWlQueryKey([...USER_QUERY_KEY]);\n\n return useQuery({\n queryKey,\n queryFn: fetchUser,\n staleTime: 60 * 1000,\n gcTime: 10 * 60 * 1000,\n retry: false,\n });\n}\n\nexport function useUserValidateSession(publicRoutes: string[] = [], options?: UseQueryOptions) {\n const queryKey = useWlQueryKey([...USER_VALIDATE_SESSION_KEY]);\n\n return useQuery({\n queryKey,\n queryFn: () => validateUserSession(publicRoutes),\n retry: false,\n staleTime: 5 * 60 * 1000,\n ...options,\n refetchOnMount: 'always',\n refetchOnWindowFocus: true,\n });\n}\n\nexport function useTwoFactorVerify() {\n const queryClient = useQueryClient();\n const userKey = useWlQueryKey([...USER_QUERY_KEY]);\n const twoFactorKey = useWlQueryKey(['two-factor-pending']);\n\n return useMutation({\n mutationFn: async ({\n cookie,\n code,\n window,\n setCookie,\n }: {\n cookie: string;\n code: string;\n window?: number;\n /**\n * Quando `false`, o verify não grava o cookie de sessão e devolve o\n * `accessToken` no resultado. Usado em fluxos como SSO em que o token\n * vai pra outro destino (callback de app) e não pode derrubar a\n * sessão atual do Great no navegador.\n */\n setCookie?: boolean;\n }) => {\n const { verifyTwoFactorAction } = await import('../actions/verify-two-factor.action');\n return withAction(() => verifyTwoFactorAction(cookie, code, { window, setCookie }))();\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: userKey });\n queryClient.invalidateQueries({ queryKey: twoFactorKey });\n },\n });\n}\n\nexport function useInvalidateUser() {\n const queryClient = useQueryClient();\n const userKey = useWlQueryKey([...USER_QUERY_KEY]);\n return () => queryClient.invalidateQueries({ queryKey: userKey });\n}\n\nexport function useSetUserData() {\n const queryClient = useQueryClient();\n const userKey = useWlQueryKey([...USER_QUERY_KEY]);\n return (user: User | null) => queryClient.setQueryData(userKey, user);\n}\n"],"mappings":";AAEA,SAAS,aAAa,UAAU,sBAAuC;AAEvE,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAEvB,MAAM,iBAAiB,CAAC,MAAM;AAC9B,MAAM,4BAA4B,CAAC,uBAAuB;AAEjE,eAAe,YAAkC;AAC/C,QAAM,EAAE,cAAc,kBAAkB,IAAI,MAAM,OAAO,2CAA2C;AACpG,QAAM,SAAS,MAAM,kBAAkB;AACvC,SAAO,OAAO,WAAW,OAAO,OAAO,OAAO,OAAO;AACvD;AAEA,eAAe,oBAAoB,eAAyB,CAAC,GAAqB;AAChF,QAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,oCAAoC;AACnF,SAAO,MAAM,sBAAsB,YAAY;AACjD;AAEO,SAAS,eAAe;AAC7B,QAAM,WAAW,cAAc,CAAC,GAAG,cAAc,CAAC;AAElD,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS;AAAA,IACT,WAAW,KAAK;AAAA,IAChB,QAAQ,KAAK,KAAK;AAAA,IAClB,OAAO;AAAA,EACT,CAAC;AACH;AAEO,SAAS,uBAAuB,eAAyB,CAAC,GAAG,SAA2B;AAC7F,QAAM,WAAW,cAAc,CAAC,GAAG,yBAAyB,CAAC;AAE7D,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,MAAM,oBAAoB,YAAY;AAAA,IAC/C,OAAO;AAAA,IACP,WAAW,IAAI,KAAK;AAAA,IACpB,GAAG;AAAA,IACH,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,EACxB,CAAC;AACH;AAEO,SAAS,qBAAqB;AACnC,QAAM,cAAc,eAAe;AACnC,QAAM,UAAU,cAAc,CAAC,GAAG,cAAc,CAAC;AACjD,QAAM,eAAe,cAAc,CAAC,oBAAoB,CAAC;AAEzD,SAAO,YAAY;AAAA,IACjB,YAAY,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAWM;AACJ,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,qCAAqC;AACpF,aAAO,WAAW,MAAM,sBAAsB,QAAQ,MAAM,EAAE,QAAQ,UAAU,CAAC,CAAC,EAAE;AAAA,IACtF;AAAA,IACA,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,QAAQ,CAAC;AACnD,kBAAY,kBAAkB,EAAE,UAAU,aAAa,CAAC;AAAA,IAC1D;AAAA,EACF,CAAC;AACH;AAEO,SAAS,oBAAoB;AAClC,QAAM,cAAc,eAAe;AACnC,QAAM,UAAU,cAAc,CAAC,GAAG,cAAc,CAAC;AACjD,SAAO,MAAM,YAAY,kBAAkB,EAAE,UAAU,QAAQ,CAAC;AAClE;AAEO,SAAS,iBAAiB;AAC/B,QAAM,cAAc,eAAe;AACnC,QAAM,UAAU,cAAc,CAAC,GAAG,cAAc,CAAC;AACjD,SAAO,CAAC,SAAsB,YAAY,aAAa,SAAS,IAAI;AACtE;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/auth/hooks/useUserQuery.ts"],"sourcesContent":["'use client';\n\nimport { useMutation, useQuery, useQueryClient, UseQueryOptions } from '@tanstack/react-query';\nimport { User } from '../../users/schema';\nimport { withAction } from '../../../utils/withAction';\nimport { useWlQueryKey } from '../../../hooks/useAuthQueryKey';\n\nexport const USER_QUERY_KEY = ['user'] as const;\nexport const USER_VALIDATE_SESSION_KEY = ['user-validate-session'] as const;\n\nasync function fetchUser(): Promise<User | null> {\n const { findUserById: getUserDataAction } = await import('../../users/action/find-user-by-id.action');\n const result = await getUserDataAction();\n return result.success && result.data ? result.data : null;\n}\n\nasync function validateUserSession(publicRoutes: string[] = []): Promise<boolean> {\n const { validateSessionAction } = await import('../actions/validate-session.action');\n return await validateSessionAction(publicRoutes);\n}\n\nexport function useUserQuery() {\n const queryKey = useWlQueryKey([...USER_QUERY_KEY]);\n\n return useQuery({\n queryKey,\n queryFn: fetchUser,\n staleTime: 60 * 1000,\n gcTime: 10 * 60 * 1000,\n retry: false,\n });\n}\n\n// Overloads preservam o contrato antigo `useUserValidateSession(options?)` enquanto\n// adicionam a forma nova `useUserValidateSession(publicRoutes, options?)`.\nexport function useUserValidateSession(options?: UseQueryOptions): ReturnType<typeof useQuery>;\nexport function useUserValidateSession(\n publicRoutes: string[],\n options?: UseQueryOptions,\n): ReturnType<typeof useQuery>;\nexport function useUserValidateSession(\n publicRoutesOrOptions: string[] | UseQueryOptions = [],\n maybeOptions?: UseQueryOptions,\n) {\n const publicRoutes = Array.isArray(publicRoutesOrOptions) ? publicRoutesOrOptions : [];\n const options = Array.isArray(publicRoutesOrOptions) ? maybeOptions : publicRoutesOrOptions;\n const queryKey = useWlQueryKey([...USER_VALIDATE_SESSION_KEY]);\n\n return useQuery({\n queryKey,\n queryFn: () => validateUserSession(publicRoutes),\n retry: false,\n staleTime: 5 * 60 * 1000,\n ...options,\n refetchOnMount: 'always',\n refetchOnWindowFocus: true,\n });\n}\n\nexport function useTwoFactorVerify() {\n const queryClient = useQueryClient();\n const userKey = useWlQueryKey([...USER_QUERY_KEY]);\n const twoFactorKey = useWlQueryKey(['two-factor-pending']);\n\n return useMutation({\n mutationFn: async ({\n cookie,\n code,\n window,\n setCookie,\n }: {\n cookie: string;\n code: string;\n window?: number;\n /**\n * Quando `false`, o verify não grava o cookie de sessão e devolve o\n * `accessToken` no resultado. Usado em fluxos como SSO em que o token\n * vai pra outro destino (callback de app) e não pode derrubar a\n * sessão atual do Great no navegador.\n */\n setCookie?: boolean;\n }) => {\n const { verifyTwoFactorAction } = await import('../actions/verify-two-factor.action');\n return withAction(() => verifyTwoFactorAction(cookie, code, { window, setCookie }))();\n },\n onSuccess: () => {\n queryClient.invalidateQueries({ queryKey: userKey });\n queryClient.invalidateQueries({ queryKey: twoFactorKey });\n },\n });\n}\n\nexport function useInvalidateUser() {\n const queryClient = useQueryClient();\n const userKey = useWlQueryKey([...USER_QUERY_KEY]);\n return () => queryClient.invalidateQueries({ queryKey: userKey });\n}\n\nexport function useSetUserData() {\n const queryClient = useQueryClient();\n const userKey = useWlQueryKey([...USER_QUERY_KEY]);\n return (user: User | null) => queryClient.setQueryData(userKey, user);\n}\n"],"mappings":";AAEA,SAAS,aAAa,UAAU,sBAAuC;AAEvE,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;AAEvB,MAAM,iBAAiB,CAAC,MAAM;AAC9B,MAAM,4BAA4B,CAAC,uBAAuB;AAEjE,eAAe,YAAkC;AAC/C,QAAM,EAAE,cAAc,kBAAkB,IAAI,MAAM,OAAO,2CAA2C;AACpG,QAAM,SAAS,MAAM,kBAAkB;AACvC,SAAO,OAAO,WAAW,OAAO,OAAO,OAAO,OAAO;AACvD;AAEA,eAAe,oBAAoB,eAAyB,CAAC,GAAqB;AAChF,QAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,oCAAoC;AACnF,SAAO,MAAM,sBAAsB,YAAY;AACjD;AAEO,SAAS,eAAe;AAC7B,QAAM,WAAW,cAAc,CAAC,GAAG,cAAc,CAAC;AAElD,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS;AAAA,IACT,WAAW,KAAK;AAAA,IAChB,QAAQ,KAAK,KAAK;AAAA,IAClB,OAAO;AAAA,EACT,CAAC;AACH;AASO,SAAS,uBACd,wBAAoD,CAAC,GACrD,cACA;AACA,QAAM,eAAe,MAAM,QAAQ,qBAAqB,IAAI,wBAAwB,CAAC;AACrF,QAAM,UAAU,MAAM,QAAQ,qBAAqB,IAAI,eAAe;AACtE,QAAM,WAAW,cAAc,CAAC,GAAG,yBAAyB,CAAC;AAE7D,SAAO,SAAS;AAAA,IACd;AAAA,IACA,SAAS,MAAM,oBAAoB,YAAY;AAAA,IAC/C,OAAO;AAAA,IACP,WAAW,IAAI,KAAK;AAAA,IACpB,GAAG;AAAA,IACH,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,EACxB,CAAC;AACH;AAEO,SAAS,qBAAqB;AACnC,QAAM,cAAc,eAAe;AACnC,QAAM,UAAU,cAAc,CAAC,GAAG,cAAc,CAAC;AACjD,QAAM,eAAe,cAAc,CAAC,oBAAoB,CAAC;AAEzD,SAAO,YAAY;AAAA,IACjB,YAAY,OAAO;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAWM;AACJ,YAAM,EAAE,sBAAsB,IAAI,MAAM,OAAO,qCAAqC;AACpF,aAAO,WAAW,MAAM,sBAAsB,QAAQ,MAAM,EAAE,QAAQ,UAAU,CAAC,CAAC,EAAE;AAAA,IACtF;AAAA,IACA,WAAW,MAAM;AACf,kBAAY,kBAAkB,EAAE,UAAU,QAAQ,CAAC;AACnD,kBAAY,kBAAkB,EAAE,UAAU,aAAa,CAAC;AAAA,IAC1D;AAAA,EACF,CAAC;AACH;AAEO,SAAS,oBAAoB;AAClC,QAAM,cAAc,eAAe;AACnC,QAAM,UAAU,cAAc,CAAC,GAAG,cAAc,CAAC;AACjD,SAAO,MAAM,YAAY,kBAAkB,EAAE,UAAU,QAAQ,CAAC;AAClE;AAEO,SAAS,iBAAiB;AAC/B,QAAM,cAAc,eAAe;AACnC,QAAM,UAAU,cAAc,CAAC,GAAG,cAAc,CAAC;AACjD,SAAO,CAAC,SAAsB,YAAY,aAAa,SAAS,IAAI;AACtE;","names":[]}
@@ -10,9 +10,7 @@ function createDeleteConfirmationSchema(confirmWord) {
10
10
  })
11
11
  });
12
12
  }
13
- function useDeleteConfirmation({
14
- confirmWord = "EXCLUIR"
15
- } = {}) {
13
+ function useDeleteConfirmation({ confirmWord }) {
16
14
  const schema = createDeleteConfirmationSchema(confirmWord);
17
15
  const form = useForm({
18
16
  resolver: zodResolver(schema),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/modules/cards/hooks/delete-confirmation.hook.ts"],"sourcesContent":["'use client';\n\nimport { useCallback } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport z from 'zod';\n\ntype UseDeleteConfirmationProps = {\n confirmWord?: string;\n};\n\nfunction createDeleteConfirmationSchema(confirmWord: string) {\n return z.object({\n confirmText: z.string().refine((val) => val === confirmWord, {\n message: `Digite ${confirmWord} para confirmar`,\n }),\n });\n}\n\nexport type DeleteConfirmationFormData = z.infer<\n ReturnType<typeof createDeleteConfirmationSchema>\n>;\n\nexport function useDeleteConfirmation({\n confirmWord = 'EXCLUIR',\n}: UseDeleteConfirmationProps = {}) {\n const schema = createDeleteConfirmationSchema(confirmWord);\n\n const form = useForm<DeleteConfirmationFormData>({\n resolver: zodResolver(schema),\n defaultValues: { confirmText: '' },\n });\n\n const confirmText = form.watch('confirmText');\n const isValidConfirmation = confirmText === confirmWord;\n\n const resetConfirmation = useCallback(() => {\n form.reset({ confirmText: '' });\n }, [form]);\n\n return { form, confirmText, isValidConfirmation, resetConfirmation };\n}\n"],"mappings":";AAEA,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,OAAO,OAAO;AAMd,SAAS,+BAA+B,aAAqB;AAC3D,SAAO,EAAE,OAAO;AAAA,IACd,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,QAAQ,aAAa;AAAA,MAC3D,SAAS,UAAU,WAAW;AAAA,IAChC,CAAC;AAAA,EACH,CAAC;AACH;AAMO,SAAS,sBAAsB;AAAA,EACpC,cAAc;AAChB,IAAgC,CAAC,GAAG;AAClC,QAAM,SAAS,+BAA+B,WAAW;AAEzD,QAAM,OAAO,QAAoC;AAAA,IAC/C,UAAU,YAAY,MAAM;AAAA,IAC5B,eAAe,EAAE,aAAa,GAAG;AAAA,EACnC,CAAC;AAED,QAAM,cAAc,KAAK,MAAM,aAAa;AAC5C,QAAM,sBAAsB,gBAAgB;AAE5C,QAAM,oBAAoB,YAAY,MAAM;AAC1C,SAAK,MAAM,EAAE,aAAa,GAAG,CAAC;AAAA,EAChC,GAAG,CAAC,IAAI,CAAC;AAET,SAAO,EAAE,MAAM,aAAa,qBAAqB,kBAAkB;AACrE;","names":[]}
1
+ {"version":3,"sources":["../../../../src/modules/cards/hooks/delete-confirmation.hook.ts"],"sourcesContent":["'use client';\n\nimport { useCallback } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport z from 'zod';\n\ntype UseDeleteConfirmationProps = {\n confirmWord: string;\n};\n\nfunction createDeleteConfirmationSchema(confirmWord: string) {\n return z.object({\n confirmText: z.string().refine((val) => val === confirmWord, {\n message: `Digite ${confirmWord} para confirmar`,\n }),\n });\n}\n\nexport type DeleteConfirmationFormData = z.infer<\n ReturnType<typeof createDeleteConfirmationSchema>\n>;\n\nexport function useDeleteConfirmation({ confirmWord }: UseDeleteConfirmationProps) {\n const schema = createDeleteConfirmationSchema(confirmWord);\n\n const form = useForm<DeleteConfirmationFormData>({\n resolver: zodResolver(schema),\n defaultValues: { confirmText: '' },\n });\n\n const confirmText = form.watch('confirmText');\n const isValidConfirmation = confirmText === confirmWord;\n\n const resetConfirmation = useCallback(() => {\n form.reset({ confirmText: '' });\n }, [form]);\n\n return { form, confirmText, isValidConfirmation, resetConfirmation };\n}\n"],"mappings":";AAEA,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAC5B,OAAO,OAAO;AAMd,SAAS,+BAA+B,aAAqB;AAC3D,SAAO,EAAE,OAAO;AAAA,IACd,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,QAAQ,aAAa;AAAA,MAC3D,SAAS,UAAU,WAAW;AAAA,IAChC,CAAC;AAAA,EACH,CAAC;AACH;AAMO,SAAS,sBAAsB,EAAE,YAAY,GAA+B;AACjF,QAAM,SAAS,+BAA+B,WAAW;AAEzD,QAAM,OAAO,QAAoC;AAAA,IAC/C,UAAU,YAAY,MAAM;AAAA,IAC5B,eAAe,EAAE,aAAa,GAAG;AAAA,EACnC,CAAC;AAED,QAAM,cAAc,KAAK,MAAM,aAAa;AAC5C,QAAM,sBAAsB,gBAAgB;AAE5C,QAAM,oBAAoB,YAAY,MAAM;AAC1C,SAAK,MAAM,EAAE,aAAa,GAAG,CAAC;AAAA,EAChC,GAAG,CAAC,IAAI,CAAC;AAET,SAAO,EAAE,MAAM,aAAa,qBAAqB,kBAAkB;AACrE;","names":[]}
@@ -29,7 +29,7 @@ import { setLocaleCookie } from "../utils/intl/locale-cookie";
29
29
  const AuthContext = createContext(
30
30
  void 0
31
31
  );
32
- function AuthProvider({ children, publicRoutes }) {
32
+ function AuthProvider({ children, publicRoutes = [] }) {
33
33
  const { data: user, isLoading: isQueryLoading } = useUserQuery();
34
34
  const { data: account, isLoading: isAccountLoading } = useCurrentAccount();
35
35
  const { isLoading: isSessionLoading } = useUserValidateSession(publicRoutes);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/auth.provider.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n} from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n useUserQuery,\n useSetUserData,\n useUserValidateSession,\n} from \"../modules/auth/hooks/useUserQuery\";\nimport { useLogin } from \"../modules/auth/hooks/login.hook\";\nimport { useRegister } from \"../modules/auth/hooks/register.hook\";\nimport { useLogout } from \"../modules/auth/hooks/logout.hook\";\nimport { useSocialGoogleLogin } from \"../modules/auth/hooks/social-google-login.hook\";\nimport { useSocialGoogleOnboarding } from \"../modules/auth/hooks/social-google-onboarding.hook\";\nimport {\n AuthState,\n LoginRequest,\n RegisterRequest,\n SocialGooglePartial,\n SocialOnboardingRequest,\n} from \"../modules/auth/schema\";\n\nexport type LoginResult =\n | { result: \"success\" }\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\n | { result: \"error\"; message: string };\n\nexport type GoogleLoginResult =\n | { result: \"success\" }\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\n | { result: \"needs_onboarding\"; onboardingToken: string; partial: SocialGooglePartial }\n | { result: \"link_requires_password\"; message: string }\n | { result: \"error\"; message: string };\nimport {\n useCurrentAccount,\n ACCOUNT_QUERY_KEY,\n} from \"../modules/accounts/hooks/current-account.hook\";\nimport { useWhitelabelUrls, useWhitelabel } from \"./whitelabel.provider\";\nimport { useWlQueryKey } from \"../hooks/useAuthQueryKey\";\nimport { normalizeLocale } from \"../i18n/normalize\";\nimport { setLocaleCookie } from \"../utils/intl/locale-cookie\";\n\ninterface AuthContextProps extends AuthState {\n login: (credentials: LoginRequest) => Promise<LoginResult>;\n register: (data: RegisterRequest) => Promise<void>;\n logout: () => Promise<void>;\n loginWithGoogle: (code: string) => Promise<GoogleLoginResult>;\n completeGoogleOnboarding: (data: SocialOnboardingRequest) => Promise<void>;\n}\n\nexport const AuthContext = createContext<AuthContextProps | undefined>(\n undefined,\n);\n\ninterface AuthProviderProps {\n children: ReactNode;\n /**\n * Rotas públicas (sources de RegExp) que NÃO devem redirecionar para o login mesmo\n * sem sessão. Informadas pelo consumer app — a lib não conhece rotas específicas.\n */\n publicRoutes?: string[];\n}\n\nexport function AuthProvider({ children, publicRoutes }: AuthProviderProps) {\n const { data: user, isLoading: isQueryLoading } = useUserQuery();\n const { data: account, isLoading: isAccountLoading } = useCurrentAccount();\n const { isLoading: isSessionLoading } = useUserValidateSession(publicRoutes);\n\n const queryClient = useQueryClient();\n const setUserData = useSetUserData();\n const { accountsUrl, pagesUrl } = useWhitelabelUrls();\n const { whitelabel } = useWhitelabel();\n const accountKey = useWlQueryKey([...ACCOUNT_QUERY_KEY]);\n\n // Mantém o cookie NEXT_LOCALE alinhado à preferência da conta (login, sessão existente,\n // atualização). Compartilhado entre subdomínios via domínio do whitelabel. A próxima\n // navegação/requisição passa a resolver o locale pela preferência do usuário.\n useEffect(() => {\n const locale = normalizeLocale(user?.language);\n if (locale) setLocaleCookie(locale, whitelabel?.domain);\n }, [user?.language, whitelabel?.domain]);\n\n const { mutateAsync: loginMutate, isPending: isLogging } = useLogin();\n const { mutateAsync: registerMutate, isPending: isRegistering } =\n useRegister();\n const { mutateAsync: logoutMutate, isPending: isLoggingOut } = useLogout();\n const { mutateAsync: googleLoginMutate, isPending: isGoogleLogging } =\n useSocialGoogleLogin();\n const { mutateAsync: googleOnboardingMutate, isPending: isGoogleOnboarding } =\n useSocialGoogleOnboarding();\n\n const isAuthenticated = !!user;\n const isLoading =\n isLogging ||\n isRegistering ||\n isLoggingOut ||\n isGoogleLogging ||\n isGoogleOnboarding ||\n isQueryLoading ||\n isAccountLoading ||\n isSessionLoading;\n\n const login = useCallback(\n async (credentials: LoginRequest): Promise<LoginResult> => {\n try {\n const data = await loginMutate(credentials);\n\n if (data.result === \"two_factor_required\") {\n return { result: \"two_factor_required\", cookie: data.cookie, twoFactorMode: data.twoFactorMode };\n }\n\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n\n return { result: \"success\" };\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : \"Ocorreu um erro ao fazer login. Tente novamente.\";\n return { result: \"error\", message };\n }\n },\n [queryClient, setUserData, accountKey],\n );\n\n const register = useCallback(\n async (data: RegisterRequest): Promise<void> => {\n await registerMutate(data, {\n onSuccess: (data) => {\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n },\n });\n },\n [queryClient, setUserData, accountKey],\n );\n\n const loginWithGoogle = useCallback(\n async (code: string): Promise<GoogleLoginResult> => {\n try {\n const data = await googleLoginMutate(code);\n\n if (data.result === \"two_factor_required\") {\n return {\n result: \"two_factor_required\",\n cookie: data.cookie,\n twoFactorMode: data.twoFactorMode,\n };\n }\n\n if (data.result === \"needs_onboarding\") {\n return {\n result: \"needs_onboarding\",\n onboardingToken: data.onboardingToken,\n partial: data.partial,\n };\n }\n\n if (data.result === \"link_requires_password\") {\n return { result: \"link_requires_password\", message: data.message };\n }\n\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n\n return { result: \"success\" };\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : \"Ocorreu um erro ao fazer login com Google. Tente novamente.\";\n return { result: \"error\", message };\n }\n },\n [googleLoginMutate, queryClient, setUserData, accountKey],\n );\n\n const completeGoogleOnboarding = useCallback(\n async (data: SocialOnboardingRequest): Promise<void> => {\n await googleOnboardingMutate(data, {\n onSuccess: (data) => {\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n },\n });\n },\n [googleOnboardingMutate, queryClient, setUserData, accountKey],\n );\n\n const resolveLogoutRedirect = useCallback(() => {\n try {\n const currentOrigin = window.location.origin;\n const pagesOrigin = pagesUrl ? new URL(pagesUrl).origin : \"\";\n\n if (pagesOrigin && currentOrigin === pagesOrigin) {\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl)}`;\n }\n } catch {\n // fallback below\n }\n\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl || \"/\")}`;\n }, [accountsUrl, pagesUrl]);\n\n const logout = useCallback(async (): Promise<void> => {\n try {\n await logoutMutate(undefined);\n } catch {\n // cookie já removido no servidor mesmo se a API falhou\n } finally {\n queryClient.clear();\n window.location.assign(resolveLogoutRedirect());\n }\n }, [queryClient, logoutMutate, resolveLogoutRedirect]);\n\n const value: AuthContextProps = useMemo(\n () => ({\n user: user ?? null,\n account: account ?? null,\n isAuthenticated,\n isLoading,\n login,\n register,\n logout,\n loginWithGoogle,\n completeGoogleOnboarding,\n }),\n [\n user,\n account,\n isAuthenticated,\n isLoading,\n login,\n register,\n logout,\n loginWithGoogle,\n completeGoogleOnboarding,\n ],\n );\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\nexport function useAuth(): AuthContextProps {\n const context = useContext(AuthContext);\n\n if (context === undefined) {\n throw new Error(\"useAuth deve ser usado dentro de um AuthProvider\");\n }\n\n return context;\n}\n"],"mappings":";AA4PS;AA1PT;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,sBAAsB;AAC/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AACrC,SAAS,iCAAiC;AAoB1C;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP,SAAS,mBAAmB,qBAAqB;AACjD,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAUzB,MAAM,cAAc;AAAA,EACzB;AACF;AAWO,SAAS,aAAa,EAAE,UAAU,aAAa,GAAsB;AAC1E,QAAM,EAAE,MAAM,MAAM,WAAW,eAAe,IAAI,aAAa;AAC/D,QAAM,EAAE,MAAM,SAAS,WAAW,iBAAiB,IAAI,kBAAkB;AACzE,QAAM,EAAE,WAAW,iBAAiB,IAAI,uBAAuB,YAAY;AAE3E,QAAM,cAAc,eAAe;AACnC,QAAM,cAAc,eAAe;AACnC,QAAM,EAAE,aAAa,SAAS,IAAI,kBAAkB;AACpD,QAAM,EAAE,WAAW,IAAI,cAAc;AACrC,QAAM,aAAa,cAAc,CAAC,GAAG,iBAAiB,CAAC;AAKvD,YAAU,MAAM;AACd,UAAM,SAAS,gBAAgB,MAAM,QAAQ;AAC7C,QAAI,OAAQ,iBAAgB,QAAQ,YAAY,MAAM;AAAA,EACxD,GAAG,CAAC,MAAM,UAAU,YAAY,MAAM,CAAC;AAEvC,QAAM,EAAE,aAAa,aAAa,WAAW,UAAU,IAAI,SAAS;AACpE,QAAM,EAAE,aAAa,gBAAgB,WAAW,cAAc,IAC5D,YAAY;AACd,QAAM,EAAE,aAAa,cAAc,WAAW,aAAa,IAAI,UAAU;AACzE,QAAM,EAAE,aAAa,mBAAmB,WAAW,gBAAgB,IACjE,qBAAqB;AACvB,QAAM,EAAE,aAAa,wBAAwB,WAAW,mBAAmB,IACzE,0BAA0B;AAE5B,QAAM,kBAAkB,CAAC,CAAC;AAC1B,QAAM,YACJ,aACA,iBACA,gBACA,mBACA,sBACA,kBACA,oBACA;AAEF,QAAM,QAAQ;AAAA,IACZ,OAAO,gBAAoD;AACzD,UAAI;AACF,cAAM,OAAO,MAAM,YAAY,WAAW;AAE1C,YAAI,KAAK,WAAW,uBAAuB;AACzC,iBAAO,EAAE,QAAQ,uBAAuB,QAAQ,KAAK,QAAQ,eAAe,KAAK,cAAc;AAAA,QACjG;AAEA,oBAAY,MAAM;AAClB,oBAAY,KAAK,IAAI;AACrB,oBAAY,aAAa,YAAY,KAAK,OAAO;AAEjD,eAAO,EAAE,QAAQ,UAAU;AAAA,MAC7B,SAAS,OAAO;AACd,cAAM,UACJ,iBAAiB,QACb,MAAM,UACN;AACN,eAAO,EAAE,QAAQ,SAAS,QAAQ;AAAA,MACpC;AAAA,IACF;AAAA,IACA,CAAC,aAAa,aAAa,UAAU;AAAA,EACvC;AAEA,QAAM,WAAW;AAAA,IACf,OAAO,SAAyC;AAC9C,YAAM,eAAe,MAAM;AAAA,QACzB,WAAW,CAACA,UAAS;AACnB,sBAAY,MAAM;AAClB,sBAAYA,MAAK,IAAI;AACrB,sBAAY,aAAa,YAAYA,MAAK,OAAO;AAAA,QACnD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,CAAC,aAAa,aAAa,UAAU;AAAA,EACvC;AAEA,QAAM,kBAAkB;AAAA,IACtB,OAAO,SAA6C;AAClD,UAAI;AACF,cAAM,OAAO,MAAM,kBAAkB,IAAI;AAEzC,YAAI,KAAK,WAAW,uBAAuB;AACzC,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,QAAQ,KAAK;AAAA,YACb,eAAe,KAAK;AAAA,UACtB;AAAA,QACF;AAEA,YAAI,KAAK,WAAW,oBAAoB;AACtC,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,iBAAiB,KAAK;AAAA,YACtB,SAAS,KAAK;AAAA,UAChB;AAAA,QACF;AAEA,YAAI,KAAK,WAAW,0BAA0B;AAC5C,iBAAO,EAAE,QAAQ,0BAA0B,SAAS,KAAK,QAAQ;AAAA,QACnE;AAEA,oBAAY,MAAM;AAClB,oBAAY,KAAK,IAAI;AACrB,oBAAY,aAAa,YAAY,KAAK,OAAO;AAEjD,eAAO,EAAE,QAAQ,UAAU;AAAA,MAC7B,SAAS,OAAO;AACd,cAAM,UACJ,iBAAiB,QACb,MAAM,UACN;AACN,eAAO,EAAE,QAAQ,SAAS,QAAQ;AAAA,MACpC;AAAA,IACF;AAAA,IACA,CAAC,mBAAmB,aAAa,aAAa,UAAU;AAAA,EAC1D;AAEA,QAAM,2BAA2B;AAAA,IAC/B,OAAO,SAAiD;AACtD,YAAM,uBAAuB,MAAM;AAAA,QACjC,WAAW,CAACA,UAAS;AACnB,sBAAY,MAAM;AAClB,sBAAYA,MAAK,IAAI;AACrB,sBAAY,aAAa,YAAYA,MAAK,OAAO;AAAA,QACnD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,CAAC,wBAAwB,aAAa,aAAa,UAAU;AAAA,EAC/D;AAEA,QAAM,wBAAwB,YAAY,MAAM;AAC9C,QAAI;AACF,YAAM,gBAAgB,OAAO,SAAS;AACtC,YAAM,cAAc,WAAW,IAAI,IAAI,QAAQ,EAAE,SAAS;AAE1D,UAAI,eAAe,kBAAkB,aAAa;AAChD,eAAO,GAAG,WAAW,mBAAmB,mBAAmB,QAAQ,CAAC;AAAA,MACtE;AAAA,IACF,QAAQ;AAAA,IAER;AAEA,WAAO,GAAG,WAAW,mBAAmB,mBAAmB,YAAY,GAAG,CAAC;AAAA,EAC7E,GAAG,CAAC,aAAa,QAAQ,CAAC;AAE1B,QAAM,SAAS,YAAY,YAA2B;AACpD,QAAI;AACF,YAAM,aAAa,MAAS;AAAA,IAC9B,QAAQ;AAAA,IAER,UAAE;AACA,kBAAY,MAAM;AAClB,aAAO,SAAS,OAAO,sBAAsB,CAAC;AAAA,IAChD;AAAA,EACF,GAAG,CAAC,aAAa,cAAc,qBAAqB,CAAC;AAErD,QAAM,QAA0B;AAAA,IAC9B,OAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,SAAS,WAAW;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,oBAAC,YAAY,UAAZ,EAAqB,OAAe,UAAS;AACvD;AAEO,SAAS,UAA4B;AAC1C,QAAM,UAAU,WAAW,WAAW;AAEtC,MAAI,YAAY,QAAW;AACzB,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AAEA,SAAO;AACT;","names":["data"]}
1
+ {"version":3,"sources":["../../src/providers/auth.provider.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n} from \"react\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport {\n useUserQuery,\n useSetUserData,\n useUserValidateSession,\n} from \"../modules/auth/hooks/useUserQuery\";\nimport { useLogin } from \"../modules/auth/hooks/login.hook\";\nimport { useRegister } from \"../modules/auth/hooks/register.hook\";\nimport { useLogout } from \"../modules/auth/hooks/logout.hook\";\nimport { useSocialGoogleLogin } from \"../modules/auth/hooks/social-google-login.hook\";\nimport { useSocialGoogleOnboarding } from \"../modules/auth/hooks/social-google-onboarding.hook\";\nimport {\n AuthState,\n LoginRequest,\n RegisterRequest,\n SocialGooglePartial,\n SocialOnboardingRequest,\n} from \"../modules/auth/schema\";\n\nexport type LoginResult =\n | { result: \"success\" }\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\n | { result: \"error\"; message: string };\n\nexport type GoogleLoginResult =\n | { result: \"success\" }\n | { result: \"two_factor_required\"; cookie: string; twoFactorMode: \"verify\" | \"setup\" }\n | { result: \"needs_onboarding\"; onboardingToken: string; partial: SocialGooglePartial }\n | { result: \"link_requires_password\"; message: string }\n | { result: \"error\"; message: string };\nimport {\n useCurrentAccount,\n ACCOUNT_QUERY_KEY,\n} from \"../modules/accounts/hooks/current-account.hook\";\nimport { useWhitelabelUrls, useWhitelabel } from \"./whitelabel.provider\";\nimport { useWlQueryKey } from \"../hooks/useAuthQueryKey\";\nimport { normalizeLocale } from \"../i18n/normalize\";\nimport { setLocaleCookie } from \"../utils/intl/locale-cookie\";\n\ninterface AuthContextProps extends AuthState {\n login: (credentials: LoginRequest) => Promise<LoginResult>;\n register: (data: RegisterRequest) => Promise<void>;\n logout: () => Promise<void>;\n loginWithGoogle: (code: string) => Promise<GoogleLoginResult>;\n completeGoogleOnboarding: (data: SocialOnboardingRequest) => Promise<void>;\n}\n\nexport const AuthContext = createContext<AuthContextProps | undefined>(\n undefined,\n);\n\ninterface AuthProviderProps {\n children: ReactNode;\n /**\n * Rotas públicas (sources de RegExp) que NÃO devem redirecionar para o login mesmo\n * sem sessão. Informadas pelo consumer app — a lib não conhece rotas específicas.\n */\n publicRoutes?: string[];\n}\n\nexport function AuthProvider({ children, publicRoutes = [] }: AuthProviderProps) {\n const { data: user, isLoading: isQueryLoading } = useUserQuery();\n const { data: account, isLoading: isAccountLoading } = useCurrentAccount();\n const { isLoading: isSessionLoading } = useUserValidateSession(publicRoutes);\n\n const queryClient = useQueryClient();\n const setUserData = useSetUserData();\n const { accountsUrl, pagesUrl } = useWhitelabelUrls();\n const { whitelabel } = useWhitelabel();\n const accountKey = useWlQueryKey([...ACCOUNT_QUERY_KEY]);\n\n // Mantém o cookie NEXT_LOCALE alinhado à preferência da conta (login, sessão existente,\n // atualização). Compartilhado entre subdomínios via domínio do whitelabel. A próxima\n // navegação/requisição passa a resolver o locale pela preferência do usuário.\n useEffect(() => {\n const locale = normalizeLocale(user?.language);\n if (locale) setLocaleCookie(locale, whitelabel?.domain);\n }, [user?.language, whitelabel?.domain]);\n\n const { mutateAsync: loginMutate, isPending: isLogging } = useLogin();\n const { mutateAsync: registerMutate, isPending: isRegistering } =\n useRegister();\n const { mutateAsync: logoutMutate, isPending: isLoggingOut } = useLogout();\n const { mutateAsync: googleLoginMutate, isPending: isGoogleLogging } =\n useSocialGoogleLogin();\n const { mutateAsync: googleOnboardingMutate, isPending: isGoogleOnboarding } =\n useSocialGoogleOnboarding();\n\n const isAuthenticated = !!user;\n const isLoading =\n isLogging ||\n isRegistering ||\n isLoggingOut ||\n isGoogleLogging ||\n isGoogleOnboarding ||\n isQueryLoading ||\n isAccountLoading ||\n isSessionLoading;\n\n const login = useCallback(\n async (credentials: LoginRequest): Promise<LoginResult> => {\n try {\n const data = await loginMutate(credentials);\n\n if (data.result === \"two_factor_required\") {\n return { result: \"two_factor_required\", cookie: data.cookie, twoFactorMode: data.twoFactorMode };\n }\n\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n\n return { result: \"success\" };\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : \"Ocorreu um erro ao fazer login. Tente novamente.\";\n return { result: \"error\", message };\n }\n },\n [queryClient, setUserData, accountKey],\n );\n\n const register = useCallback(\n async (data: RegisterRequest): Promise<void> => {\n await registerMutate(data, {\n onSuccess: (data) => {\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n },\n });\n },\n [queryClient, setUserData, accountKey],\n );\n\n const loginWithGoogle = useCallback(\n async (code: string): Promise<GoogleLoginResult> => {\n try {\n const data = await googleLoginMutate(code);\n\n if (data.result === \"two_factor_required\") {\n return {\n result: \"two_factor_required\",\n cookie: data.cookie,\n twoFactorMode: data.twoFactorMode,\n };\n }\n\n if (data.result === \"needs_onboarding\") {\n return {\n result: \"needs_onboarding\",\n onboardingToken: data.onboardingToken,\n partial: data.partial,\n };\n }\n\n if (data.result === \"link_requires_password\") {\n return { result: \"link_requires_password\", message: data.message };\n }\n\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n\n return { result: \"success\" };\n } catch (error) {\n const message =\n error instanceof Error\n ? error.message\n : \"Ocorreu um erro ao fazer login com Google. Tente novamente.\";\n return { result: \"error\", message };\n }\n },\n [googleLoginMutate, queryClient, setUserData, accountKey],\n );\n\n const completeGoogleOnboarding = useCallback(\n async (data: SocialOnboardingRequest): Promise<void> => {\n await googleOnboardingMutate(data, {\n onSuccess: (data) => {\n queryClient.clear();\n setUserData(data.user);\n queryClient.setQueryData(accountKey, data.account);\n },\n });\n },\n [googleOnboardingMutate, queryClient, setUserData, accountKey],\n );\n\n const resolveLogoutRedirect = useCallback(() => {\n try {\n const currentOrigin = window.location.origin;\n const pagesOrigin = pagesUrl ? new URL(pagesUrl).origin : \"\";\n\n if (pagesOrigin && currentOrigin === pagesOrigin) {\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl)}`;\n }\n } catch {\n // fallback below\n }\n\n return `${accountsUrl}/login?redirect=${encodeURIComponent(pagesUrl || \"/\")}`;\n }, [accountsUrl, pagesUrl]);\n\n const logout = useCallback(async (): Promise<void> => {\n try {\n await logoutMutate(undefined);\n } catch {\n // cookie já removido no servidor mesmo se a API falhou\n } finally {\n queryClient.clear();\n window.location.assign(resolveLogoutRedirect());\n }\n }, [queryClient, logoutMutate, resolveLogoutRedirect]);\n\n const value: AuthContextProps = useMemo(\n () => ({\n user: user ?? null,\n account: account ?? null,\n isAuthenticated,\n isLoading,\n login,\n register,\n logout,\n loginWithGoogle,\n completeGoogleOnboarding,\n }),\n [\n user,\n account,\n isAuthenticated,\n isLoading,\n login,\n register,\n logout,\n loginWithGoogle,\n completeGoogleOnboarding,\n ],\n );\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\nexport function useAuth(): AuthContextProps {\n const context = useContext(AuthContext);\n\n if (context === undefined) {\n throw new Error(\"useAuth deve ser usado dentro de um AuthProvider\");\n }\n\n return context;\n}\n"],"mappings":"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","names":["data"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@greatapps/common",
3
- "version": "1.1.690",
3
+ "version": "1.1.692",
4
4
  "description": "Shared library for GreatApps frontend applications",
5
5
  "main": "./dist/index.mjs",
6
6
  "types": "./src/index.ts",
@@ -22,7 +22,9 @@ import { useTranslations } from 'next-intl';
22
22
  export function DeleteCardModal() {
23
23
  const translate = useTranslations();
24
24
  const { activeModal, modalData, closeModal } = useModalManager();
25
- const { form, isValidConfirmation, resetConfirmation } = useDeleteConfirmation();
25
+ const { form, isValidConfirmation, resetConfirmation } = useDeleteConfirmation({
26
+ confirmWord: translate('common.cards.delete.confirmPlaceholder'),
27
+ });
26
28
  const deleteCard = useDeleteCard();
27
29
  const { data: cardsData } = useCards();
28
30
 
@@ -31,7 +31,19 @@ export function useUserQuery() {
31
31
  });
32
32
  }
33
33
 
34
- export function useUserValidateSession(publicRoutes: string[] = [], options?: UseQueryOptions) {
34
+ // Overloads preservam o contrato antigo `useUserValidateSession(options?)` enquanto
35
+ // adicionam a forma nova `useUserValidateSession(publicRoutes, options?)`.
36
+ export function useUserValidateSession(options?: UseQueryOptions): ReturnType<typeof useQuery>;
37
+ export function useUserValidateSession(
38
+ publicRoutes: string[],
39
+ options?: UseQueryOptions,
40
+ ): ReturnType<typeof useQuery>;
41
+ export function useUserValidateSession(
42
+ publicRoutesOrOptions: string[] | UseQueryOptions = [],
43
+ maybeOptions?: UseQueryOptions,
44
+ ) {
45
+ const publicRoutes = Array.isArray(publicRoutesOrOptions) ? publicRoutesOrOptions : [];
46
+ const options = Array.isArray(publicRoutesOrOptions) ? maybeOptions : publicRoutesOrOptions;
35
47
  const queryKey = useWlQueryKey([...USER_VALIDATE_SESSION_KEY]);
36
48
 
37
49
  return useQuery({
@@ -6,7 +6,7 @@ import { zodResolver } from '@hookform/resolvers/zod';
6
6
  import z from 'zod';
7
7
 
8
8
  type UseDeleteConfirmationProps = {
9
- confirmWord?: string;
9
+ confirmWord: string;
10
10
  };
11
11
 
12
12
  function createDeleteConfirmationSchema(confirmWord: string) {
@@ -21,9 +21,7 @@ export type DeleteConfirmationFormData = z.infer<
21
21
  ReturnType<typeof createDeleteConfirmationSchema>
22
22
  >;
23
23
 
24
- export function useDeleteConfirmation({
25
- confirmWord = 'EXCLUIR',
26
- }: UseDeleteConfirmationProps = {}) {
24
+ export function useDeleteConfirmation({ confirmWord }: UseDeleteConfirmationProps) {
27
25
  const schema = createDeleteConfirmationSchema(confirmWord);
28
26
 
29
27
  const form = useForm<DeleteConfirmationFormData>({
@@ -68,7 +68,7 @@ interface AuthProviderProps {
68
68
  publicRoutes?: string[];
69
69
  }
70
70
 
71
- export function AuthProvider({ children, publicRoutes }: AuthProviderProps) {
71
+ export function AuthProvider({ children, publicRoutes = [] }: AuthProviderProps) {
72
72
  const { data: user, isLoading: isQueryLoading } = useUserQuery();
73
73
  const { data: account, isLoading: isAccountLoading } = useCurrentAccount();
74
74
  const { isLoading: isSessionLoading } = useUserValidateSession(publicRoutes);