@greatapps/common 1.1.85 → 1.1.87
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/hooks/useDebounce.mjs +19 -0
- package/dist/hooks/useDebounce.mjs.map +1 -0
- package/dist/hooks/useDebounceState.mjs +12 -0
- package/dist/hooks/useDebounceState.mjs.map +1 -0
- package/dist/hooks/useDebouncedEffect.mjs +44 -0
- package/dist/hooks/useDebouncedEffect.mjs.map +1 -0
- package/dist/index.mjs +6 -0
- package/dist/index.mjs.map +1 -1
- package/dist/providers/query.provider.mjs +84 -12
- package/dist/providers/query.provider.mjs.map +1 -1
- package/package.json +5 -2
- package/src/hooks/useDebounce.ts +26 -0
- package/src/hooks/useDebounceState.ts +10 -0
- package/src/hooks/useDebouncedEffect.ts +69 -0
- package/src/index.ts +3 -0
- package/src/providers/query.provider.tsx +81 -6
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
function useDebounce(value, delay = 400, onDebounce) {
|
|
4
|
+
const [debouncedValue, setDebouncedValue] = useState(value);
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
const handler = setTimeout(() => {
|
|
7
|
+
setDebouncedValue(value);
|
|
8
|
+
onDebounce?.();
|
|
9
|
+
}, delay);
|
|
10
|
+
return () => {
|
|
11
|
+
clearTimeout(handler);
|
|
12
|
+
};
|
|
13
|
+
}, [value, delay, onDebounce]);
|
|
14
|
+
return debouncedValue;
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
useDebounce
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=useDebounce.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useDebounce.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Hook para aplicar debounce em valores\n * @param value - Valor a ser debounced\n * @param delay - Delay em milissegundos (padrão: 400ms)\n * @returns Valor debounced\n */\nexport function useDebounce<T>(value: T, delay: number = 400, onDebounce?: () => void): T {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n onDebounce?.();\n }, delay);\n\n return () => {\n clearTimeout(handler);\n };\n }, [value, delay, onDebounce]);\n\n return debouncedValue;\n}\n"],"mappings":";AAEA,SAAS,WAAW,gBAAgB;AAQ7B,SAAS,YAAe,OAAU,QAAgB,KAAK,YAA4B;AACxF,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAY,KAAK;AAE7D,YAAU,MAAM;AACd,UAAM,UAAU,WAAW,MAAM;AAC/B,wBAAkB,KAAK;AACvB,mBAAa;AAAA,IACf,GAAG,KAAK;AAER,WAAO,MAAM;AACX,mBAAa,OAAO;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,OAAO,OAAO,UAAU,CAAC;AAE7B,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { useDebounce } from "./useDebounce";
|
|
4
|
+
function useDebounceState(initialValue, delay = 400) {
|
|
5
|
+
const [rawValue, setRawValue] = useState(initialValue);
|
|
6
|
+
const debouncedValue = useDebounce(rawValue, delay);
|
|
7
|
+
return [debouncedValue, setRawValue];
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
useDebounceState
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=useDebounceState.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useDebounceState.ts"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { useDebounce } from './useDebounce';\n\nexport function useDebounceState<T>(initialValue: T, delay: number = 400): [T, (newValue: T) => void] {\n const [rawValue, setRawValue] = useState<T>(initialValue);\n const debouncedValue = useDebounce(rawValue, delay);\n return [debouncedValue, setRawValue];\n}\n"],"mappings":";AAEA,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAErB,SAAS,iBAAoB,cAAiB,QAAgB,KAAiC;AACpG,QAAM,CAAC,UAAU,WAAW,IAAI,SAAY,YAAY;AACxD,QAAM,iBAAiB,YAAY,UAAU,KAAK;AAClD,SAAO,CAAC,gBAAgB,WAAW;AACrC;","names":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useRef, useState, useCallback } from "react";
|
|
3
|
+
function useDebouncedEffect({
|
|
4
|
+
effect,
|
|
5
|
+
debouncedDeps,
|
|
6
|
+
immediateDeps = [],
|
|
7
|
+
delay = 500
|
|
8
|
+
}) {
|
|
9
|
+
const [isDebouncing, setIsDebouncing] = useState(false);
|
|
10
|
+
const timerRef = useRef(null);
|
|
11
|
+
const effectRef = useRef(effect);
|
|
12
|
+
effectRef.current = effect;
|
|
13
|
+
const hasMounted = useRef(false);
|
|
14
|
+
const clearTimer = useCallback(() => {
|
|
15
|
+
if (timerRef.current) {
|
|
16
|
+
clearTimeout(timerRef.current);
|
|
17
|
+
timerRef.current = null;
|
|
18
|
+
}
|
|
19
|
+
}, []);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
clearTimer();
|
|
22
|
+
setIsDebouncing(false);
|
|
23
|
+
effectRef.current();
|
|
24
|
+
}, immediateDeps);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (!hasMounted.current) {
|
|
27
|
+
hasMounted.current = true;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
clearTimer();
|
|
31
|
+
setIsDebouncing(true);
|
|
32
|
+
timerRef.current = setTimeout(() => {
|
|
33
|
+
setIsDebouncing(false);
|
|
34
|
+
effectRef.current();
|
|
35
|
+
}, delay);
|
|
36
|
+
return clearTimer;
|
|
37
|
+
}, [...debouncedDeps, delay]);
|
|
38
|
+
useEffect(() => clearTimer, [clearTimer]);
|
|
39
|
+
return { isDebouncing };
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
useDebouncedEffect
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=useDebouncedEffect.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useDebouncedEffect.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useRef, useState, useCallback } from 'react';\n\ninterface UseDebouncedEffectOptions {\n effect: () => void;\n debouncedDeps: React.DependencyList;\n immediateDeps?: React.DependencyList;\n delay?: number;\n}\n\n/**\n * Executes an effect with two trigger modes:\n * - `debouncedDeps`: triggers the effect after a delay (resets on each change)\n * - `immediateDeps`: triggers the effect immediately (also cancels any pending debounce)\n *\n * On mount, the effect fires once immediately via `immediateDeps`.\n * The effect callback always uses the latest closure values via a ref.\n *\n * @returns `{ isDebouncing }` — true while waiting for a debounced trigger to fire\n */\nexport function useDebouncedEffect({\n effect,\n debouncedDeps,\n immediateDeps = [],\n delay = 500,\n}: UseDebouncedEffectOptions) {\n const [isDebouncing, setIsDebouncing] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const effectRef = useRef(effect);\n effectRef.current = effect;\n const hasMounted = useRef(false);\n\n const clearTimer = useCallback(() => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, []);\n\n useEffect(() => {\n clearTimer();\n setIsDebouncing(false);\n effectRef.current();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, immediateDeps);\n\n useEffect(() => {\n if (!hasMounted.current) {\n hasMounted.current = true;\n return;\n }\n\n clearTimer();\n setIsDebouncing(true);\n\n timerRef.current = setTimeout(() => {\n setIsDebouncing(false);\n effectRef.current();\n }, delay);\n\n return clearTimer;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [...debouncedDeps, delay]);\n\n useEffect(() => clearTimer, [clearTimer]);\n\n return { isDebouncing };\n}\n"],"mappings":";AAEA,SAAS,WAAW,QAAQ,UAAU,mBAAmB;AAmBlD,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA,gBAAgB,CAAC;AAAA,EACjB,QAAQ;AACV,GAA8B;AAC5B,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,WAAW,OAA6C,IAAI;AAClE,QAAM,YAAY,OAAO,MAAM;AAC/B,YAAU,UAAU;AACpB,QAAM,aAAa,OAAO,KAAK;AAE/B,QAAM,aAAa,YAAY,MAAM;AACnC,QAAI,SAAS,SAAS;AACpB,mBAAa,SAAS,OAAO;AAC7B,eAAS,UAAU;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,eAAW;AACX,oBAAgB,KAAK;AACrB,cAAU,QAAQ;AAAA,EAEpB,GAAG,aAAa;AAEhB,YAAU,MAAM;AACd,QAAI,CAAC,WAAW,SAAS;AACvB,iBAAW,UAAU;AACrB;AAAA,IACF;AAEA,eAAW;AACX,oBAAgB,IAAI;AAEpB,aAAS,UAAU,WAAW,MAAM;AAClC,sBAAgB,KAAK;AACrB,gBAAU,QAAQ;AAAA,IACpB,GAAG,KAAK;AAER,WAAO;AAAA,EAET,GAAG,CAAC,GAAG,eAAe,KAAK,CAAC;AAE5B,YAAU,MAAM,YAAY,CAAC,UAAU,CAAC;AAExC,SAAO,EAAE,aAAa;AACxB;","names":[]}
|
package/dist/index.mjs
CHANGED
|
@@ -191,6 +191,9 @@ import { AccountSectionType } from "./enums/AccountSectionType";
|
|
|
191
191
|
import { default as default6 } from "./hooks/usePasswordVisibility";
|
|
192
192
|
import { default as default7 } from "./hooks/useCountdownTimer";
|
|
193
193
|
import { default as default8 } from "./hooks/useIsMobile";
|
|
194
|
+
import { useDebounce } from "./hooks/useDebounce";
|
|
195
|
+
import { useDebouncedEffect } from "./hooks/useDebouncedEffect";
|
|
196
|
+
import { useDebounceState } from "./hooks/useDebounceState";
|
|
194
197
|
import {
|
|
195
198
|
formatPhone,
|
|
196
199
|
formatTimer,
|
|
@@ -414,6 +417,9 @@ export {
|
|
|
414
417
|
useAccountModals,
|
|
415
418
|
useActiveSubscription,
|
|
416
419
|
default7 as useCountdownTimer,
|
|
420
|
+
useDebounce,
|
|
421
|
+
useDebounceState,
|
|
422
|
+
useDebouncedEffect,
|
|
417
423
|
useDeleteAccount,
|
|
418
424
|
useDeleteAccountUser,
|
|
419
425
|
useIaCredits,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Types\nexport * from \"./modules/auth/schema\";\nexport * from \"./modules/users/schema\";\nexport * from \"./modules/whitelabel/schema\";\nexport * from \"./infra/api/types\";\n\n// Contexts\nexport * from \"./providers/query.provider\";\nexport * from \"./providers/auth.provider\";\nexport * from \"./providers/whitelabel.provider\";\n\n// Hooks\nexport {\n useListProjectUsers,\n LIST_PROJECT_USERS_QUERY_KEY,\n LIST_PROJECT_USERS_BASE_KEY,\n} from \"./modules/projects/hooks/list-project-users.hook\";\nexport {\n useListAvailableUsers,\n LIST_AVAILABLE_USERS_QUERY_KEY,\n LIST_AVAILABLE_USERS_BASE_KEY,\n} from \"./modules/projects/hooks/list-available-users.hook\";\nexport type {\n ProjectUser,\n AccountUser,\n AddRemoveProjectUsersParams,\n ListUsersParams,\n UsersPage,\n} from \"./modules/projects/types\";\nexport {\n useUserQuery,\n useUserValidateSession,\n useInvalidateUser,\n useSetUserData,\n useTwoFactorVerify,\n USER_QUERY_KEY,\n} from \"./modules/auth/hooks/useUserQuery\";\nexport {\n useSubscriptions,\n SUBSCRIPTIONS_QUERY_KEY,\n} from \"./modules/subscriptions/hooks/list-subscriptions.hook\";\nexport { useActiveSubscription } from \"./modules/subscriptions/hooks/find-active-subscription.hook\";\nexport { useIaCredits } from \"./modules/ia-credits/hooks/ia-credits.hook\";\nexport type {\n IaCreditsSummary,\n IaCreditOperation,\n} from \"./modules/ia-credits/types\";\nexport type {\n Subscription,\n SubscriptionItem,\n FindSubscriptionsParams,\n} from \"./modules/subscriptions/types\";\nexport {\n SubscriptionSchema,\n SubscriptionItemSchema,\n} from \"./modules/subscriptions/types\";\nexport { ADDON_IDS } from \"./modules/subscriptions/constants/addons.constants\";\nexport type { AddonKindEnum } from \"./modules/subscriptions/constants/addons.constants\";\n\n// Providers\nexport { QueryProvider } from \"./providers/query.provider\";\n\n// Middleware\nexport { createAuthMiddleware } from \"./middlewares/create-auth-middleware\";\nexport { createMiddlewareChain } from \"./middlewares/chain\";\nexport { continueChain, stopChain } from \"./middlewares/types\";\nexport type {\n MiddlewareFunction,\n MiddlewareConfig,\n MiddlewareResult,\n} from \"./middlewares/types\";\n\n// Utils\nexport { cn } from \"./infra/utils/clsx\";\nexport { buildQueryParams } from \"./infra/utils/params\";\nexport { parseSchema, parseResult } from \"./infra/utils/parser\";\n\n// Layout\nexport {\n MainLayout,\n MainLayoutContent,\n MainLayoutSpacer,\n MainLayoutMain,\n} from \"./components/layouts/MainLayout\";\nexport { NavBar } from \"./components/layouts/NavBar\";\nexport type { NavBarProps } from \"./components/layouts/NavBar\";\nexport { AppNavBar } from \"./components/layouts/AppNavBar\";\nexport type { AppNavBarProps } from \"./components/layouts/AppNavBar\";\nexport { AppMobileNavBar } from \"./components/layouts/AppMobileNavBar\";\nexport type { AppMobileNavBarProps } from \"./components/layouts/AppMobileNavBar\";\nexport { SideBarNavigation } from \"./components/layouts/SideBarNavigation\";\nexport { MdSideBarNavigation } from \"./components/layouts/MdSideBarNavigation\";\nexport { default as NotificationCard } from \"./components/widgets/notifications/NotificationCard\";\nexport type { NotificationCardProps } from \"./components/widgets/notifications/NotificationCard\";\nexport { NotificationsPopover } from \"./components/layouts/NotificationsPopover\";\nexport type { NotificationsPopoverProps } from \"./components/layouts/NotificationsPopover\";\nexport { NotificationPageContent } from \"./components/pages/notifications/Notifications\";\nexport { UsersSelectorPopover } from \"./components/layouts/UsersSelectorPopover\";\nexport type { UsersSelectorPopoverProps } from \"./components/layouts/UsersSelectorPopover\";\nexport { ProfilePopover } from \"./components/layouts/ProfilePopover\";\nexport type {\n ProfilePopoverProps,\n ProfileMenuItem,\n} from \"./components/layouts/ProfilePopover\";\nexport { NavBarItem } from \"./components/layouts/NavBarItem\";\nexport type { NavBarItemProps } from \"./components/layouts/NavBarItem\";\n\n// UI - Buttons\nexport { Button, buttonVariants } from \"./components/ui/buttons/Button\";\nexport { CopyButton } from \"./components/ui/buttons/CopyButton\";\nexport { default as CancelButton } from \"./components/ui/buttons/CancelButton\";\n\n// UI - Data Display\nexport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from \"./components/ui/data-display/Accordion\";\nexport { Badge, badgeVariants } from \"./components/ui/data-display/Badge\";\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n} from \"./components/ui/data-display/Card\";\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n} from \"./components/ui/data-display/Pagination\";\nexport { ScrollArea, ScrollBar } from \"./components/ui/data-display/ScrollArea\";\nexport { Separator } from \"./components/ui/data-display/Separator\";\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from \"./components/ui/data-display/Table\";\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n} from \"./components/ui/data-display/Tabs\";\nexport { UserAvatar } from \"./components/ui/data-display/UserAvatar\";\nexport type { UserAvatarProps } from \"./components/ui/data-display/UserAvatar\";\n\n// UI - Feedback\nexport { default as CircularProgress } from \"./components/ui/feedback/CircularProgress\";\nexport { default as DefaultCircularProgress } from \"./components/ui/feedback/DefaultCircularProgress\";\nexport { Progress } from \"./components/ui/feedback/Progress\";\nexport { LoadingOverlay } from \"./components/ui/feedback/LoadingOverlay\";\nexport {\n Toast,\n toastVariants,\n toastIconContainerVariants,\n} from \"./components/ui/feedback/Toast\";\nexport type { ToastProps } from \"./components/ui/feedback/Toast\";\n\n// UI - Form\nexport { Calendar, CalendarDayButton } from \"./components/ui/form/Calendar\";\nexport { Checkbox } from \"./components/ui/form/Checkbox\";\nexport { DatePicker } from \"./components/ui/form/DatePicker\";\nexport { DateRangePicker } from \"./components/ui/form/DateRangePicker\";\nexport { Input } from \"./components/ui/form/Input\";\nexport {\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n InputOTPSeparator,\n} from \"./components/ui/form/InputOtp\";\nexport { RadioGroup, RadioGroupItem } from \"./components/ui/form/RadioGroup\";\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"./components/ui/form/Select\";\nexport { Switch } from \"./components/ui/form/Switch\";\nexport { Textarea } from \"./components/ui/form/Textarea\";\n\n// UI - Overlay\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n} from \"./components/ui/overlay/Command\";\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n} from \"./components/ui/overlay/Dialog\";\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n} from \"./components/ui/overlay/Popover\";\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n} from \"./components/ui/overlay/Sheet\";\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n} from \"./components/ui/overlay/Tooltip\";\n\n// Store\nexport { useMdSidebarStore } from \"./store/useMdSidebarStore\";\nexport { useModalManager } from \"./store/useModalManager\";\nexport type { ModalData } from \"./store/useModalManager\";\n\n// Enums\nexport { AccountSectionType } from \"./enums/AccountSectionType\";\n\n// Hooks\nexport { default as usePasswordVisibility } from \"./hooks/usePasswordVisibility\";\nexport { default as useCountdownTimer } from \"./hooks/useCountdownTimer\";\nexport { default as useIsMobile } from \"./hooks/useIsMobile\";\n\n// Utils\nexport {\n formatPhone,\n formatTimer,\n formatFullName,\n formatCPF,\n formatCardNumber,\n} from \"./utils/format/masks\";\nexport { timezoneService } from \"./modules/accounts/services/timezone.service\";\nexport type { TimezoneOption } from \"./modules/accounts/services/timezone.service\";\nexport {\n buildLocaleOptions,\n LANGUAGE_OPTIONS as LOCALE_LANGUAGE_OPTIONS,\n} from \"./utils/intl/locales\";\nexport type { LocaleOption } from \"./utils/intl/locales\";\nexport { copyToClipboard, readFromClipboard } from \"./utils/browser/clipboard\";\n\n// UI - Form (new widgets)\nexport { FormField } from \"./components/ui/form/FormField\";\nexport { SelectField } from \"./components/ui/form/SelectField\";\nexport { ComboboxField } from \"./components/ui/form/ComboboxField\";\nexport type { ComboboxOption } from \"./components/ui/form/ComboboxField\";\nexport { default as PhoneInput } from \"./components/ui/form/PhoneInput\";\nexport { default as SwitchOptionFieldWithIcon } from \"./components/ui/form/SwitchOptionFieldWithIcon\";\nexport { TextAreaField } from \"./components/ui/form/TextAreaField\";\n\n// Account Module - Hooks\nexport {\n useUpdateAccount,\n useUpdateAccountUser,\n useUpdateAccountUserById,\n useDeleteAccountUser,\n useDeleteAccount,\n} from \"./modules/accounts/hooks/useAccountManagement\";\n\n// Account Types\nexport type {\n UpdateAccountRequest,\n UpdateAccountUserRequest,\n ChangePasswordRequest,\n DeleteAccountActionResult,\n DeleteUserActionResult,\n UpdateAccountActionResult,\n UpdateUserActionResult,\n TwoFactorGenerateResult,\n TwoFactorActionResult,\n ContactResetResult,\n} from \"./modules/accounts/types\";\n\nexport { default as AccountModals } from \"./components/account/AccountModals\";\nexport { useAccountModals } from \"./store/useAccountModals\";\nexport type { AccountModalsConfig } from \"./store/useAccountModals\";\n\nexport { ModalManager } from \"./components/modals/ModalManager\";\nexport { Modals } from \"./components/modals/Modals\";\n\nexport { default as TwoFactorAuthModal } from \"./components/account/TwoFactorAuthModal\";\nexport { default as DisableTwoFactorAuthModal } from \"./components/account/DisableTwoFactorAuthModal\";\nexport { default as ConfirmGlobalPreferencesModal } from \"./components/account/ConfirmGlobalPreferencesModal\";\nexport { MyProfileSection } from \"./components/account/sections/MyProfileSection\";\nexport { PreferencesSection } from \"./components/account/sections/PreferencesSection\";\nexport { SecuritySection } from \"./components/account/sections/SecuritySection\";\nexport { ChangePasswordSection } from \"./components/account/sections/ChangePasswordSection\";\nexport { ChangeEmailModal } from \"./components/account/sections/ChangeEmailModal\";\nexport { ChangePhoneModal } from \"./components/account/sections/ChangePhoneModal\";\n\n// Account Constants\nexport {\n GENDER_OPTIONS,\n CURRENCY_OPTIONS,\n TIME_FORMAT_OPTIONS,\n NOTIFICATION_TYPES,\n LANGUAGE_OPTIONS,\n} from \"./components/account/constants\";\n"],"mappings":"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","names":["default","LANGUAGE_OPTIONS"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Types\nexport * from \"./modules/auth/schema\";\nexport * from \"./modules/users/schema\";\nexport * from \"./modules/whitelabel/schema\";\nexport * from \"./infra/api/types\";\n\n// Contexts\nexport * from \"./providers/query.provider\";\nexport * from \"./providers/auth.provider\";\nexport * from \"./providers/whitelabel.provider\";\n\n// Hooks\nexport {\n useListProjectUsers,\n LIST_PROJECT_USERS_QUERY_KEY,\n LIST_PROJECT_USERS_BASE_KEY,\n} from \"./modules/projects/hooks/list-project-users.hook\";\nexport {\n useListAvailableUsers,\n LIST_AVAILABLE_USERS_QUERY_KEY,\n LIST_AVAILABLE_USERS_BASE_KEY,\n} from \"./modules/projects/hooks/list-available-users.hook\";\nexport type {\n ProjectUser,\n AccountUser,\n AddRemoveProjectUsersParams,\n ListUsersParams,\n UsersPage,\n} from \"./modules/projects/types\";\nexport {\n useUserQuery,\n useUserValidateSession,\n useInvalidateUser,\n useSetUserData,\n useTwoFactorVerify,\n USER_QUERY_KEY,\n} from \"./modules/auth/hooks/useUserQuery\";\nexport {\n useSubscriptions,\n SUBSCRIPTIONS_QUERY_KEY,\n} from \"./modules/subscriptions/hooks/list-subscriptions.hook\";\nexport { useActiveSubscription } from \"./modules/subscriptions/hooks/find-active-subscription.hook\";\nexport { useIaCredits } from \"./modules/ia-credits/hooks/ia-credits.hook\";\nexport type {\n IaCreditsSummary,\n IaCreditOperation,\n} from \"./modules/ia-credits/types\";\nexport type {\n Subscription,\n SubscriptionItem,\n FindSubscriptionsParams,\n} from \"./modules/subscriptions/types\";\nexport {\n SubscriptionSchema,\n SubscriptionItemSchema,\n} from \"./modules/subscriptions/types\";\nexport { ADDON_IDS } from \"./modules/subscriptions/constants/addons.constants\";\nexport type { AddonKindEnum } from \"./modules/subscriptions/constants/addons.constants\";\n\n// Providers\nexport { QueryProvider } from \"./providers/query.provider\";\n\n// Middleware\nexport { createAuthMiddleware } from \"./middlewares/create-auth-middleware\";\nexport { createMiddlewareChain } from \"./middlewares/chain\";\nexport { continueChain, stopChain } from \"./middlewares/types\";\nexport type {\n MiddlewareFunction,\n MiddlewareConfig,\n MiddlewareResult,\n} from \"./middlewares/types\";\n\n// Utils\nexport { cn } from \"./infra/utils/clsx\";\nexport { buildQueryParams } from \"./infra/utils/params\";\nexport { parseSchema, parseResult } from \"./infra/utils/parser\";\n\n// Layout\nexport {\n MainLayout,\n MainLayoutContent,\n MainLayoutSpacer,\n MainLayoutMain,\n} from \"./components/layouts/MainLayout\";\nexport { NavBar } from \"./components/layouts/NavBar\";\nexport type { NavBarProps } from \"./components/layouts/NavBar\";\nexport { AppNavBar } from \"./components/layouts/AppNavBar\";\nexport type { AppNavBarProps } from \"./components/layouts/AppNavBar\";\nexport { AppMobileNavBar } from \"./components/layouts/AppMobileNavBar\";\nexport type { AppMobileNavBarProps } from \"./components/layouts/AppMobileNavBar\";\nexport { SideBarNavigation } from \"./components/layouts/SideBarNavigation\";\nexport { MdSideBarNavigation } from \"./components/layouts/MdSideBarNavigation\";\nexport { default as NotificationCard } from \"./components/widgets/notifications/NotificationCard\";\nexport type { NotificationCardProps } from \"./components/widgets/notifications/NotificationCard\";\nexport { NotificationsPopover } from \"./components/layouts/NotificationsPopover\";\nexport type { NotificationsPopoverProps } from \"./components/layouts/NotificationsPopover\";\nexport { NotificationPageContent } from \"./components/pages/notifications/Notifications\";\nexport { UsersSelectorPopover } from \"./components/layouts/UsersSelectorPopover\";\nexport type { UsersSelectorPopoverProps } from \"./components/layouts/UsersSelectorPopover\";\nexport { ProfilePopover } from \"./components/layouts/ProfilePopover\";\nexport type {\n ProfilePopoverProps,\n ProfileMenuItem,\n} from \"./components/layouts/ProfilePopover\";\nexport { NavBarItem } from \"./components/layouts/NavBarItem\";\nexport type { NavBarItemProps } from \"./components/layouts/NavBarItem\";\n\n// UI - Buttons\nexport { Button, buttonVariants } from \"./components/ui/buttons/Button\";\nexport { CopyButton } from \"./components/ui/buttons/CopyButton\";\nexport { default as CancelButton } from \"./components/ui/buttons/CancelButton\";\n\n// UI - Data Display\nexport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from \"./components/ui/data-display/Accordion\";\nexport { Badge, badgeVariants } from \"./components/ui/data-display/Badge\";\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n} from \"./components/ui/data-display/Card\";\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n} from \"./components/ui/data-display/Pagination\";\nexport { ScrollArea, ScrollBar } from \"./components/ui/data-display/ScrollArea\";\nexport { Separator } from \"./components/ui/data-display/Separator\";\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from \"./components/ui/data-display/Table\";\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n} from \"./components/ui/data-display/Tabs\";\nexport { UserAvatar } from \"./components/ui/data-display/UserAvatar\";\nexport type { UserAvatarProps } from \"./components/ui/data-display/UserAvatar\";\n\n// UI - Feedback\nexport { default as CircularProgress } from \"./components/ui/feedback/CircularProgress\";\nexport { default as DefaultCircularProgress } from \"./components/ui/feedback/DefaultCircularProgress\";\nexport { Progress } from \"./components/ui/feedback/Progress\";\nexport { LoadingOverlay } from \"./components/ui/feedback/LoadingOverlay\";\nexport {\n Toast,\n toastVariants,\n toastIconContainerVariants,\n} from \"./components/ui/feedback/Toast\";\nexport type { ToastProps } from \"./components/ui/feedback/Toast\";\n\n// UI - Form\nexport { Calendar, CalendarDayButton } from \"./components/ui/form/Calendar\";\nexport { Checkbox } from \"./components/ui/form/Checkbox\";\nexport { DatePicker } from \"./components/ui/form/DatePicker\";\nexport { DateRangePicker } from \"./components/ui/form/DateRangePicker\";\nexport { Input } from \"./components/ui/form/Input\";\nexport {\n InputOTP,\n InputOTPGroup,\n InputOTPSlot,\n InputOTPSeparator,\n} from \"./components/ui/form/InputOtp\";\nexport { RadioGroup, RadioGroupItem } from \"./components/ui/form/RadioGroup\";\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n} from \"./components/ui/form/Select\";\nexport { Switch } from \"./components/ui/form/Switch\";\nexport { Textarea } from \"./components/ui/form/Textarea\";\n\n// UI - Overlay\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n} from \"./components/ui/overlay/Command\";\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n} from \"./components/ui/overlay/Dialog\";\nexport {\n Popover,\n PopoverTrigger,\n PopoverContent,\n PopoverAnchor,\n} from \"./components/ui/overlay/Popover\";\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n} from \"./components/ui/overlay/Sheet\";\nexport {\n Tooltip,\n TooltipTrigger,\n TooltipContent,\n TooltipProvider,\n} from \"./components/ui/overlay/Tooltip\";\n\n// Store\nexport { useMdSidebarStore } from \"./store/useMdSidebarStore\";\nexport { useModalManager } from \"./store/useModalManager\";\nexport type { ModalData } from \"./store/useModalManager\";\n\n// Enums\nexport { AccountSectionType } from \"./enums/AccountSectionType\";\n\n// Hooks\nexport { default as usePasswordVisibility } from \"./hooks/usePasswordVisibility\";\nexport { default as useCountdownTimer } from \"./hooks/useCountdownTimer\";\nexport { default as useIsMobile } from \"./hooks/useIsMobile\";\nexport { useDebounce } from \"./hooks/useDebounce\";\nexport { useDebouncedEffect } from \"./hooks/useDebouncedEffect\";\nexport { useDebounceState } from \"./hooks/useDebounceState\";\n\n// Utils\nexport {\n formatPhone,\n formatTimer,\n formatFullName,\n formatCPF,\n formatCardNumber,\n} from \"./utils/format/masks\";\nexport { timezoneService } from \"./modules/accounts/services/timezone.service\";\nexport type { TimezoneOption } from \"./modules/accounts/services/timezone.service\";\nexport {\n buildLocaleOptions,\n LANGUAGE_OPTIONS as LOCALE_LANGUAGE_OPTIONS,\n} from \"./utils/intl/locales\";\nexport type { LocaleOption } from \"./utils/intl/locales\";\nexport { copyToClipboard, readFromClipboard } from \"./utils/browser/clipboard\";\n\n// UI - Form (new widgets)\nexport { FormField } from \"./components/ui/form/FormField\";\nexport { SelectField } from \"./components/ui/form/SelectField\";\nexport { ComboboxField } from \"./components/ui/form/ComboboxField\";\nexport type { ComboboxOption } from \"./components/ui/form/ComboboxField\";\nexport { default as PhoneInput } from \"./components/ui/form/PhoneInput\";\nexport { default as SwitchOptionFieldWithIcon } from \"./components/ui/form/SwitchOptionFieldWithIcon\";\nexport { TextAreaField } from \"./components/ui/form/TextAreaField\";\n\n// Account Module - Hooks\nexport {\n useUpdateAccount,\n useUpdateAccountUser,\n useUpdateAccountUserById,\n useDeleteAccountUser,\n useDeleteAccount,\n} from \"./modules/accounts/hooks/useAccountManagement\";\n\n// Account Types\nexport type {\n UpdateAccountRequest,\n UpdateAccountUserRequest,\n ChangePasswordRequest,\n DeleteAccountActionResult,\n DeleteUserActionResult,\n UpdateAccountActionResult,\n UpdateUserActionResult,\n TwoFactorGenerateResult,\n TwoFactorActionResult,\n ContactResetResult,\n} from \"./modules/accounts/types\";\n\nexport { default as AccountModals } from \"./components/account/AccountModals\";\nexport { useAccountModals } from \"./store/useAccountModals\";\nexport type { AccountModalsConfig } from \"./store/useAccountModals\";\n\nexport { ModalManager } from \"./components/modals/ModalManager\";\nexport { Modals } from \"./components/modals/Modals\";\n\nexport { default as TwoFactorAuthModal } from \"./components/account/TwoFactorAuthModal\";\nexport { default as DisableTwoFactorAuthModal } from \"./components/account/DisableTwoFactorAuthModal\";\nexport { default as ConfirmGlobalPreferencesModal } from \"./components/account/ConfirmGlobalPreferencesModal\";\nexport { MyProfileSection } from \"./components/account/sections/MyProfileSection\";\nexport { PreferencesSection } from \"./components/account/sections/PreferencesSection\";\nexport { SecuritySection } from \"./components/account/sections/SecuritySection\";\nexport { ChangePasswordSection } from \"./components/account/sections/ChangePasswordSection\";\nexport { ChangeEmailModal } from \"./components/account/sections/ChangeEmailModal\";\nexport { ChangePhoneModal } from \"./components/account/sections/ChangePhoneModal\";\n\n// Account Constants\nexport {\n GENDER_OPTIONS,\n CURRENCY_OPTIONS,\n TIME_FORMAT_OPTIONS,\n NOTIFICATION_TYPES,\n LANGUAGE_OPTIONS,\n} from \"./components/account/constants\";\n"],"mappings":"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","names":["default","LANGUAGE_OPTIONS"]}
|
|
@@ -2,40 +2,112 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import {
|
|
4
4
|
QueryCache,
|
|
5
|
-
QueryClient
|
|
6
|
-
QueryClientProvider
|
|
5
|
+
QueryClient
|
|
7
6
|
} from "@tanstack/react-query";
|
|
8
|
-
import { useState } from "react";
|
|
7
|
+
import { useEffect, useState } from "react";
|
|
9
8
|
import dynamic from "next/dynamic";
|
|
10
9
|
import { toast } from "sonner";
|
|
10
|
+
import {
|
|
11
|
+
PersistQueryClientProvider
|
|
12
|
+
} from "@tanstack/react-query-persist-client";
|
|
13
|
+
import { broadcastQueryClient } from "@tanstack/query-broadcast-client-experimental";
|
|
14
|
+
import { set, get, del } from "idb-keyval";
|
|
11
15
|
const ReactQueryDevtools = process.env.NODE_ENV === "development" ? dynamic(
|
|
12
16
|
() => import("@tanstack/react-query-devtools").then((mod) => ({
|
|
13
17
|
default: mod.ReactQueryDevtools
|
|
14
18
|
})),
|
|
15
19
|
{ ssr: false }
|
|
16
20
|
) : () => null;
|
|
17
|
-
|
|
21
|
+
const persister = {
|
|
22
|
+
persistClient: async (client) => {
|
|
23
|
+
try {
|
|
24
|
+
await set("rq-cache", client);
|
|
25
|
+
} catch {
|
|
26
|
+
console.warn("Falha ao persistir cache");
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
restoreClient: async () => {
|
|
30
|
+
try {
|
|
31
|
+
return await get("rq-cache");
|
|
32
|
+
} catch {
|
|
33
|
+
await del("rq-cache").catch(() => {
|
|
34
|
+
});
|
|
35
|
+
return void 0;
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
removeClient: async () => {
|
|
39
|
+
try {
|
|
40
|
+
await del("rq-cache");
|
|
41
|
+
} catch {
|
|
42
|
+
console.warn("Falha ao remover cache");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
function QueryProvider({
|
|
47
|
+
children,
|
|
48
|
+
persisterVersion = "v1"
|
|
49
|
+
}) {
|
|
18
50
|
const [queryClient] = useState(
|
|
19
51
|
() => new QueryClient({
|
|
20
52
|
defaultOptions: {
|
|
21
53
|
queries: {
|
|
22
|
-
staleTime: 60 * 1e3,
|
|
23
|
-
|
|
54
|
+
staleTime: 5 * 60 * 1e3,
|
|
55
|
+
gcTime: 4 * 60 * 60 * 1e3,
|
|
56
|
+
refetchOnWindowFocus: false,
|
|
57
|
+
refetchOnReconnect: true,
|
|
58
|
+
retry: 2,
|
|
59
|
+
retryDelay: (attempt) => Math.min(1e3 * 2 ** attempt, 3e4)
|
|
60
|
+
},
|
|
61
|
+
mutations: {
|
|
62
|
+
retry: 1,
|
|
63
|
+
onError: (error) => {
|
|
64
|
+
toast.error(
|
|
65
|
+
error instanceof Error ? error.message : "Erro inesperado na opera\xE7\xE3o."
|
|
66
|
+
);
|
|
67
|
+
}
|
|
24
68
|
}
|
|
25
69
|
},
|
|
26
70
|
queryCache: new QueryCache({
|
|
27
71
|
onError: (error) => {
|
|
28
|
-
toast.error(
|
|
72
|
+
toast.error(
|
|
73
|
+
error instanceof Error ? error.message : "Ocorreu um erro inesperado. Por favor, tente novamente."
|
|
74
|
+
);
|
|
29
75
|
}
|
|
30
76
|
})
|
|
31
77
|
})
|
|
32
78
|
);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
broadcastQueryClient({
|
|
81
|
+
queryClient,
|
|
82
|
+
broadcastChannel: "react-query"
|
|
83
|
+
});
|
|
84
|
+
}, [queryClient]);
|
|
85
|
+
return /* @__PURE__ */ jsxs(
|
|
86
|
+
PersistQueryClientProvider,
|
|
87
|
+
{
|
|
88
|
+
client: queryClient,
|
|
89
|
+
persistOptions: {
|
|
90
|
+
persister,
|
|
91
|
+
maxAge: 2 * 60 * 60 * 1e3,
|
|
92
|
+
buster: persisterVersion,
|
|
93
|
+
dehydrateOptions: {
|
|
94
|
+
shouldDehydrateQuery: (query) => {
|
|
95
|
+
if (query.state.status === "error") return false;
|
|
96
|
+
if (query.meta?.persist === false) return false;
|
|
97
|
+
if ((query.state.dataUpdateCount ?? 0) > 10) return false;
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
children: [
|
|
103
|
+
children,
|
|
104
|
+
/* @__PURE__ */ jsx(ReactQueryDevtools, { initialIsOpen: false })
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
);
|
|
37
108
|
}
|
|
38
109
|
export {
|
|
39
|
-
QueryProvider
|
|
110
|
+
QueryProvider,
|
|
111
|
+
persister
|
|
40
112
|
};
|
|
41
113
|
//# sourceMappingURL=query.provider.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/providers/query.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n QueryCache,\r\n QueryClient,\r\n QueryClientProvider,\r\n} from \"@tanstack/react-query\";\r\nimport { ReactNode, useState } from \"react\";\r\nimport dynamic from \"next/dynamic\";\r\nimport { toast } from \"sonner\";\r\n\r\n// React Query Devtools só em desenvolvimento - remove do bundle de produção\r\nconst ReactQueryDevtools =\r\n process.env.NODE_ENV === \"development\"\r\n ? dynamic(\r\n () =>\r\n import(\"@tanstack/react-query-devtools\").then((mod) => ({\r\n default: mod.ReactQueryDevtools,\r\n })),\r\n { ssr: false },\r\n )\r\n : () => null;\r\n\r\ninterface QueryProviderProps {\r\n children: ReactNode;\r\n}\r\n\r\nexport function QueryProvider({
|
|
1
|
+
{"version":3,"sources":["../../src/providers/query.provider.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {\r\n QueryCache,\r\n QueryClient,\r\n QueryClientProvider,\r\n} from \"@tanstack/react-query\";\r\nimport { ReactNode, useEffect, useState } from \"react\";\r\nimport dynamic from \"next/dynamic\";\r\nimport { toast } from \"sonner\";\r\nimport {\r\n PersistedClient,\r\n PersistQueryClientProvider,\r\n} from \"@tanstack/react-query-persist-client\";\r\nimport { broadcastQueryClient } from \"@tanstack/query-broadcast-client-experimental\";\r\nimport { set, get, del } from \"idb-keyval\";\r\n\r\n// React Query Devtools só em desenvolvimento - remove do bundle de produção\r\nconst ReactQueryDevtools =\r\n process.env.NODE_ENV === \"development\"\r\n ? dynamic(\r\n () =>\r\n import(\"@tanstack/react-query-devtools\").then((mod) => ({\r\n default: mod.ReactQueryDevtools,\r\n })),\r\n { ssr: false },\r\n )\r\n : () => null;\r\n\r\nexport const persister = {\r\n persistClient: async (client: PersistedClient) => {\r\n try {\r\n await set(\"rq-cache\", client);\r\n } catch {\r\n console.warn(\"Falha ao persistir cache\");\r\n }\r\n },\r\n restoreClient: async (): Promise<PersistedClient | undefined> => {\r\n try {\r\n return await get(\"rq-cache\");\r\n } catch {\r\n await del(\"rq-cache\").catch(() => {});\r\n return undefined;\r\n }\r\n },\r\n removeClient: async () => {\r\n try {\r\n await del(\"rq-cache\");\r\n } catch {\r\n console.warn(\"Falha ao remover cache\");\r\n }\r\n },\r\n};\r\n\r\ninterface QueryProviderProps {\r\n children: ReactNode;\r\n persisterVersion?: string;\r\n}\r\n\r\nexport function QueryProvider({\r\n children,\r\n persisterVersion = \"v1\",\r\n}: QueryProviderProps) {\r\n const [queryClient] = useState(\r\n () =>\r\n new QueryClient({\r\n defaultOptions: {\r\n queries: {\r\n staleTime: 5 * 60 * 1000,\r\n gcTime: 4 * 60 * 60 * 1000,\r\n refetchOnWindowFocus: false,\r\n refetchOnReconnect: true,\r\n retry: 2,\r\n retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30000),\r\n },\r\n mutations: {\r\n retry: 1,\r\n onError: (error) => {\r\n toast.error(\r\n error instanceof Error\r\n ? error.message\r\n : \"Erro inesperado na operação.\",\r\n );\r\n },\r\n },\r\n },\r\n queryCache: new QueryCache({\r\n onError: (error) => {\r\n toast.error(\r\n error instanceof Error\r\n ? error.message\r\n : \"Ocorreu um erro inesperado. Por favor, tente novamente.\",\r\n );\r\n },\r\n }),\r\n }),\r\n );\r\n\r\n useEffect(() => {\r\n broadcastQueryClient({\r\n queryClient,\r\n broadcastChannel: \"react-query\",\r\n });\r\n }, [queryClient]);\r\n\r\n return (\r\n <PersistQueryClientProvider\r\n client={queryClient}\r\n persistOptions={{\r\n persister,\r\n maxAge: 2 * 60 * 60 * 1000,\r\n buster: persisterVersion,\r\n dehydrateOptions: {\r\n shouldDehydrateQuery: (query) => {\r\n if (query.state.status === \"error\") return false;\r\n if (query.meta?.persist === false) return false;\r\n if ((query.state.dataUpdateCount ?? 0) > 10) return false;\r\n return true;\r\n },\r\n },\r\n }}\r\n >\r\n {children}\r\n <ReactQueryDevtools initialIsOpen={false} />\r\n </PersistQueryClientProvider>\r\n );\r\n}\r\n"],"mappings":";AA0GI,SAiBE,KAjBF;AAxGJ;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAoB,WAAW,gBAAgB;AAC/C,OAAO,aAAa;AACpB,SAAS,aAAa;AACtB;AAAA,EAEE;AAAA,OACK;AACP,SAAS,4BAA4B;AACrC,SAAS,KAAK,KAAK,WAAW;AAG9B,MAAM,qBACJ,QAAQ,IAAI,aAAa,gBACrB;AAAA,EACE,MACE,OAAO,gCAAgC,EAAE,KAAK,CAAC,SAAS;AAAA,IACtD,SAAS,IAAI;AAAA,EACf,EAAE;AAAA,EACJ,EAAE,KAAK,MAAM;AACf,IACA,MAAM;AAEL,MAAM,YAAY;AAAA,EACvB,eAAe,OAAO,WAA4B;AAChD,QAAI;AACF,YAAM,IAAI,YAAY,MAAM;AAAA,IAC9B,QAAQ;AACN,cAAQ,KAAK,0BAA0B;AAAA,IACzC;AAAA,EACF;AAAA,EACA,eAAe,YAAkD;AAC/D,QAAI;AACF,aAAO,MAAM,IAAI,UAAU;AAAA,IAC7B,QAAQ;AACN,YAAM,IAAI,UAAU,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AACpC,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,cAAc,YAAY;AACxB,QAAI;AACF,YAAM,IAAI,UAAU;AAAA,IACtB,QAAQ;AACN,cAAQ,KAAK,wBAAwB;AAAA,IACvC;AAAA,EACF;AACF;AAOO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA,mBAAmB;AACrB,GAAuB;AACrB,QAAM,CAAC,WAAW,IAAI;AAAA,IACpB,MACE,IAAI,YAAY;AAAA,MACd,gBAAgB;AAAA,QACd,SAAS;AAAA,UACP,WAAW,IAAI,KAAK;AAAA,UACpB,QAAQ,IAAI,KAAK,KAAK;AAAA,UACtB,sBAAsB;AAAA,UACtB,oBAAoB;AAAA,UACpB,OAAO;AAAA,UACP,YAAY,CAAC,YAAY,KAAK,IAAI,MAAO,KAAK,SAAS,GAAK;AAAA,QAC9D;AAAA,QACA,WAAW;AAAA,UACT,OAAO;AAAA,UACP,SAAS,CAAC,UAAU;AAClB,kBAAM;AAAA,cACJ,iBAAiB,QACb,MAAM,UACN;AAAA,YACN;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,YAAY,IAAI,WAAW;AAAA,QACzB,SAAS,CAAC,UAAU;AAClB,gBAAM;AAAA,YACJ,iBAAiB,QACb,MAAM,UACN;AAAA,UACN;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACL;AAEA,YAAU,MAAM;AACd,yBAAqB;AAAA,MACnB;AAAA,MACA,kBAAkB;AAAA,IACpB,CAAC;AAAA,EACH,GAAG,CAAC,WAAW,CAAC;AAEhB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ;AAAA,MACR,gBAAgB;AAAA,QACd;AAAA,QACA,QAAQ,IAAI,KAAK,KAAK;AAAA,QACtB,QAAQ;AAAA,QACR,kBAAkB;AAAA,UAChB,sBAAsB,CAAC,UAAU;AAC/B,gBAAI,MAAM,MAAM,WAAW,QAAS,QAAO;AAC3C,gBAAI,MAAM,MAAM,YAAY,MAAO,QAAO;AAC1C,iBAAK,MAAM,MAAM,mBAAmB,KAAK,GAAI,QAAO;AACpD,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,MAEC;AAAA;AAAA,QACD,oBAAC,sBAAmB,eAAe,OAAO;AAAA;AAAA;AAAA,EAC5C;AAEJ;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@greatapps/common",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.87",
|
|
4
4
|
"description": "Shared library for GreatApps frontend applications",
|
|
5
5
|
"main": "./dist/index.mjs",
|
|
6
6
|
"types": "./src/index.ts",
|
|
@@ -39,11 +39,14 @@
|
|
|
39
39
|
"@radix-ui/react-switch": "^1.2.6",
|
|
40
40
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
41
41
|
"@radix-ui/react-tooltip": "^1.2.8",
|
|
42
|
+
"@tanstack/query-broadcast-client-experimental": "^5.90.20",
|
|
43
|
+
"@tanstack/react-query-persist-client": "^5.90.24",
|
|
42
44
|
"axios": "^1.13.5",
|
|
43
45
|
"class-variance-authority": "^0.7.1",
|
|
44
46
|
"clsx": "^2.1.1",
|
|
45
47
|
"cmdk": "^1.1.1",
|
|
46
48
|
"date-fns": "^4.1.0",
|
|
49
|
+
"idb-keyval": "^6.2.2",
|
|
47
50
|
"input-otp": "^1.4.2",
|
|
48
51
|
"lucide-react": "^0.575.0",
|
|
49
52
|
"react-day-picker": "^9.14.0",
|
|
@@ -60,7 +63,7 @@
|
|
|
60
63
|
"@types/react": "^19.2.14",
|
|
61
64
|
"@types/react-dom": "^19.2.3",
|
|
62
65
|
"glob": "^13.0.6",
|
|
63
|
-
"next": "15.5.
|
|
66
|
+
"next": "^15.5.12",
|
|
64
67
|
"react": "19.1.4",
|
|
65
68
|
"react-dom": "19.1.4",
|
|
66
69
|
"react-hook-form": "^7.71.2",
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect, useState } from 'react';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Hook para aplicar debounce em valores
|
|
7
|
+
* @param value - Valor a ser debounced
|
|
8
|
+
* @param delay - Delay em milissegundos (padrão: 400ms)
|
|
9
|
+
* @returns Valor debounced
|
|
10
|
+
*/
|
|
11
|
+
export function useDebounce<T>(value: T, delay: number = 400, onDebounce?: () => void): T {
|
|
12
|
+
const [debouncedValue, setDebouncedValue] = useState<T>(value);
|
|
13
|
+
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const handler = setTimeout(() => {
|
|
16
|
+
setDebouncedValue(value);
|
|
17
|
+
onDebounce?.();
|
|
18
|
+
}, delay);
|
|
19
|
+
|
|
20
|
+
return () => {
|
|
21
|
+
clearTimeout(handler);
|
|
22
|
+
};
|
|
23
|
+
}, [value, delay, onDebounce]);
|
|
24
|
+
|
|
25
|
+
return debouncedValue;
|
|
26
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { useDebounce } from './useDebounce';
|
|
5
|
+
|
|
6
|
+
export function useDebounceState<T>(initialValue: T, delay: number = 400): [T, (newValue: T) => void] {
|
|
7
|
+
const [rawValue, setRawValue] = useState<T>(initialValue);
|
|
8
|
+
const debouncedValue = useDebounce(rawValue, delay);
|
|
9
|
+
return [debouncedValue, setRawValue];
|
|
10
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef, useState, useCallback } from 'react';
|
|
4
|
+
|
|
5
|
+
interface UseDebouncedEffectOptions {
|
|
6
|
+
effect: () => void;
|
|
7
|
+
debouncedDeps: React.DependencyList;
|
|
8
|
+
immediateDeps?: React.DependencyList;
|
|
9
|
+
delay?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Executes an effect with two trigger modes:
|
|
14
|
+
* - `debouncedDeps`: triggers the effect after a delay (resets on each change)
|
|
15
|
+
* - `immediateDeps`: triggers the effect immediately (also cancels any pending debounce)
|
|
16
|
+
*
|
|
17
|
+
* On mount, the effect fires once immediately via `immediateDeps`.
|
|
18
|
+
* The effect callback always uses the latest closure values via a ref.
|
|
19
|
+
*
|
|
20
|
+
* @returns `{ isDebouncing }` — true while waiting for a debounced trigger to fire
|
|
21
|
+
*/
|
|
22
|
+
export function useDebouncedEffect({
|
|
23
|
+
effect,
|
|
24
|
+
debouncedDeps,
|
|
25
|
+
immediateDeps = [],
|
|
26
|
+
delay = 500,
|
|
27
|
+
}: UseDebouncedEffectOptions) {
|
|
28
|
+
const [isDebouncing, setIsDebouncing] = useState(false);
|
|
29
|
+
const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
|
|
30
|
+
const effectRef = useRef(effect);
|
|
31
|
+
effectRef.current = effect;
|
|
32
|
+
const hasMounted = useRef(false);
|
|
33
|
+
|
|
34
|
+
const clearTimer = useCallback(() => {
|
|
35
|
+
if (timerRef.current) {
|
|
36
|
+
clearTimeout(timerRef.current);
|
|
37
|
+
timerRef.current = null;
|
|
38
|
+
}
|
|
39
|
+
}, []);
|
|
40
|
+
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
clearTimer();
|
|
43
|
+
setIsDebouncing(false);
|
|
44
|
+
effectRef.current();
|
|
45
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
46
|
+
}, immediateDeps);
|
|
47
|
+
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (!hasMounted.current) {
|
|
50
|
+
hasMounted.current = true;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
clearTimer();
|
|
55
|
+
setIsDebouncing(true);
|
|
56
|
+
|
|
57
|
+
timerRef.current = setTimeout(() => {
|
|
58
|
+
setIsDebouncing(false);
|
|
59
|
+
effectRef.current();
|
|
60
|
+
}, delay);
|
|
61
|
+
|
|
62
|
+
return clearTimer;
|
|
63
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
64
|
+
}, [...debouncedDeps, delay]);
|
|
65
|
+
|
|
66
|
+
useEffect(() => clearTimer, [clearTimer]);
|
|
67
|
+
|
|
68
|
+
return { isDebouncing };
|
|
69
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -256,6 +256,9 @@ export { AccountSectionType } from "./enums/AccountSectionType";
|
|
|
256
256
|
export { default as usePasswordVisibility } from "./hooks/usePasswordVisibility";
|
|
257
257
|
export { default as useCountdownTimer } from "./hooks/useCountdownTimer";
|
|
258
258
|
export { default as useIsMobile } from "./hooks/useIsMobile";
|
|
259
|
+
export { useDebounce } from "./hooks/useDebounce";
|
|
260
|
+
export { useDebouncedEffect } from "./hooks/useDebouncedEffect";
|
|
261
|
+
export { useDebounceState } from "./hooks/useDebounceState";
|
|
259
262
|
|
|
260
263
|
// Utils
|
|
261
264
|
export {
|
|
@@ -5,9 +5,15 @@ import {
|
|
|
5
5
|
QueryClient,
|
|
6
6
|
QueryClientProvider,
|
|
7
7
|
} from "@tanstack/react-query";
|
|
8
|
-
import { ReactNode, useState } from "react";
|
|
8
|
+
import { ReactNode, useEffect, useState } from "react";
|
|
9
9
|
import dynamic from "next/dynamic";
|
|
10
10
|
import { toast } from "sonner";
|
|
11
|
+
import {
|
|
12
|
+
PersistedClient,
|
|
13
|
+
PersistQueryClientProvider,
|
|
14
|
+
} from "@tanstack/react-query-persist-client";
|
|
15
|
+
import { broadcastQueryClient } from "@tanstack/query-broadcast-client-experimental";
|
|
16
|
+
import { set, get, del } from "idb-keyval";
|
|
11
17
|
|
|
12
18
|
// React Query Devtools só em desenvolvimento - remove do bundle de produção
|
|
13
19
|
const ReactQueryDevtools =
|
|
@@ -21,32 +27,101 @@ const ReactQueryDevtools =
|
|
|
21
27
|
)
|
|
22
28
|
: () => null;
|
|
23
29
|
|
|
30
|
+
export const persister = {
|
|
31
|
+
persistClient: async (client: PersistedClient) => {
|
|
32
|
+
try {
|
|
33
|
+
await set("rq-cache", client);
|
|
34
|
+
} catch {
|
|
35
|
+
console.warn("Falha ao persistir cache");
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
restoreClient: async (): Promise<PersistedClient | undefined> => {
|
|
39
|
+
try {
|
|
40
|
+
return await get("rq-cache");
|
|
41
|
+
} catch {
|
|
42
|
+
await del("rq-cache").catch(() => {});
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
removeClient: async () => {
|
|
47
|
+
try {
|
|
48
|
+
await del("rq-cache");
|
|
49
|
+
} catch {
|
|
50
|
+
console.warn("Falha ao remover cache");
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
24
55
|
interface QueryProviderProps {
|
|
25
56
|
children: ReactNode;
|
|
57
|
+
persisterVersion?: string;
|
|
26
58
|
}
|
|
27
59
|
|
|
28
|
-
export function QueryProvider({
|
|
60
|
+
export function QueryProvider({
|
|
61
|
+
children,
|
|
62
|
+
persisterVersion = "v1",
|
|
63
|
+
}: QueryProviderProps) {
|
|
29
64
|
const [queryClient] = useState(
|
|
30
65
|
() =>
|
|
31
66
|
new QueryClient({
|
|
32
67
|
defaultOptions: {
|
|
33
68
|
queries: {
|
|
34
|
-
staleTime: 60 * 1000,
|
|
69
|
+
staleTime: 5 * 60 * 1000,
|
|
70
|
+
gcTime: 4 * 60 * 60 * 1000,
|
|
35
71
|
refetchOnWindowFocus: false,
|
|
72
|
+
refetchOnReconnect: true,
|
|
73
|
+
retry: 2,
|
|
74
|
+
retryDelay: (attempt) => Math.min(1000 * 2 ** attempt, 30000),
|
|
75
|
+
},
|
|
76
|
+
mutations: {
|
|
77
|
+
retry: 1,
|
|
78
|
+
onError: (error) => {
|
|
79
|
+
toast.error(
|
|
80
|
+
error instanceof Error
|
|
81
|
+
? error.message
|
|
82
|
+
: "Erro inesperado na operação.",
|
|
83
|
+
);
|
|
84
|
+
},
|
|
36
85
|
},
|
|
37
86
|
},
|
|
38
87
|
queryCache: new QueryCache({
|
|
39
88
|
onError: (error) => {
|
|
40
|
-
toast.error(
|
|
89
|
+
toast.error(
|
|
90
|
+
error instanceof Error
|
|
91
|
+
? error.message
|
|
92
|
+
: "Ocorreu um erro inesperado. Por favor, tente novamente.",
|
|
93
|
+
);
|
|
41
94
|
},
|
|
42
95
|
}),
|
|
43
96
|
}),
|
|
44
97
|
);
|
|
45
98
|
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
broadcastQueryClient({
|
|
101
|
+
queryClient,
|
|
102
|
+
broadcastChannel: "react-query",
|
|
103
|
+
});
|
|
104
|
+
}, [queryClient]);
|
|
105
|
+
|
|
46
106
|
return (
|
|
47
|
-
<
|
|
107
|
+
<PersistQueryClientProvider
|
|
108
|
+
client={queryClient}
|
|
109
|
+
persistOptions={{
|
|
110
|
+
persister,
|
|
111
|
+
maxAge: 2 * 60 * 60 * 1000,
|
|
112
|
+
buster: persisterVersion,
|
|
113
|
+
dehydrateOptions: {
|
|
114
|
+
shouldDehydrateQuery: (query) => {
|
|
115
|
+
if (query.state.status === "error") return false;
|
|
116
|
+
if (query.meta?.persist === false) return false;
|
|
117
|
+
if ((query.state.dataUpdateCount ?? 0) > 10) return false;
|
|
118
|
+
return true;
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
}}
|
|
122
|
+
>
|
|
48
123
|
{children}
|
|
49
124
|
<ReactQueryDevtools initialIsOpen={false} />
|
|
50
|
-
</
|
|
125
|
+
</PersistQueryClientProvider>
|
|
51
126
|
);
|
|
52
127
|
}
|