@greatapps/common 1.0.0

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.
Files changed (205) hide show
  1. package/dist/components/handlers/SearchParamsHandler.mjs +23 -0
  2. package/dist/components/handlers/SearchParamsHandler.mjs.map +1 -0
  3. package/dist/components/layouts/MainLayout.mjs +60 -0
  4. package/dist/components/layouts/MainLayout.mjs.map +1 -0
  5. package/dist/components/layouts/MdSideBarNavigation.mjs +36 -0
  6. package/dist/components/layouts/MdSideBarNavigation.mjs.map +1 -0
  7. package/dist/components/layouts/NavBar.mjs +45 -0
  8. package/dist/components/layouts/NavBar.mjs.map +1 -0
  9. package/dist/components/layouts/NotificationItem.mjs +7 -0
  10. package/dist/components/layouts/NotificationItem.mjs.map +1 -0
  11. package/dist/components/layouts/SideBarNavigation.mjs +22 -0
  12. package/dist/components/layouts/SideBarNavigation.mjs.map +1 -0
  13. package/dist/components/ui/buttons/Button.mjs +51 -0
  14. package/dist/components/ui/buttons/Button.mjs.map +1 -0
  15. package/dist/components/ui/buttons/CancelButton.mjs +16 -0
  16. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -0
  17. package/dist/components/ui/buttons/CopyButton.mjs +34 -0
  18. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -0
  19. package/dist/components/ui/data-display/Accordion.mjs +73 -0
  20. package/dist/components/ui/data-display/Accordion.mjs.map +1 -0
  21. package/dist/components/ui/data-display/Badge.mjs +41 -0
  22. package/dist/components/ui/data-display/Badge.mjs.map +1 -0
  23. package/dist/components/ui/data-display/Card.mjs +91 -0
  24. package/dist/components/ui/data-display/Card.mjs.map +1 -0
  25. package/dist/components/ui/data-display/Pagination.mjs +115 -0
  26. package/dist/components/ui/data-display/Pagination.mjs.map +1 -0
  27. package/dist/components/ui/data-display/ScrollArea.mjs +60 -0
  28. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -0
  29. package/dist/components/ui/data-display/Separator.mjs +28 -0
  30. package/dist/components/ui/data-display/Separator.mjs.map +1 -0
  31. package/dist/components/ui/data-display/Table.mjs +116 -0
  32. package/dist/components/ui/data-display/Table.mjs.map +1 -0
  33. package/dist/components/ui/data-display/Tabs.mjs +69 -0
  34. package/dist/components/ui/data-display/Tabs.mjs.map +1 -0
  35. package/dist/components/ui/feedback/CircularProgress.mjs +61 -0
  36. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -0
  37. package/dist/components/ui/feedback/DefaultCircularProgress.mjs +49 -0
  38. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -0
  39. package/dist/components/ui/feedback/Progress.mjs +37 -0
  40. package/dist/components/ui/feedback/Progress.mjs.map +1 -0
  41. package/dist/components/ui/feedback/Toast.mjs +73 -0
  42. package/dist/components/ui/feedback/Toast.mjs.map +1 -0
  43. package/dist/components/ui/form/Calendar.mjs +203 -0
  44. package/dist/components/ui/form/Calendar.mjs.map +1 -0
  45. package/dist/components/ui/form/Checkbox.mjs +33 -0
  46. package/dist/components/ui/form/Checkbox.mjs.map +1 -0
  47. package/dist/components/ui/form/DatePicker.mjs +78 -0
  48. package/dist/components/ui/form/DatePicker.mjs.map +1 -0
  49. package/dist/components/ui/form/DateRangePicker.mjs +86 -0
  50. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -0
  51. package/dist/components/ui/form/Input.mjs +20 -0
  52. package/dist/components/ui/form/Input.mjs.map +1 -0
  53. package/dist/components/ui/form/InputOtp.mjs +67 -0
  54. package/dist/components/ui/form/InputOtp.mjs.map +1 -0
  55. package/dist/components/ui/form/RadioGroup.mjs +36 -0
  56. package/dist/components/ui/form/RadioGroup.mjs.map +1 -0
  57. package/dist/components/ui/form/Select.mjs +172 -0
  58. package/dist/components/ui/form/Select.mjs.map +1 -0
  59. package/dist/components/ui/form/Switch.mjs +33 -0
  60. package/dist/components/ui/form/Switch.mjs.map +1 -0
  61. package/dist/components/ui/form/Textarea.mjs +19 -0
  62. package/dist/components/ui/form/Textarea.mjs.map +1 -0
  63. package/dist/components/ui/overlay/Command.mjs +170 -0
  64. package/dist/components/ui/overlay/Command.mjs.map +1 -0
  65. package/dist/components/ui/overlay/Dialog.mjs +131 -0
  66. package/dist/components/ui/overlay/Dialog.mjs.map +1 -0
  67. package/dist/components/ui/overlay/Popover.mjs +46 -0
  68. package/dist/components/ui/overlay/Popover.mjs.map +1 -0
  69. package/dist/components/ui/overlay/Sheet.mjs +129 -0
  70. package/dist/components/ui/overlay/Sheet.mjs.map +1 -0
  71. package/dist/components/ui/overlay/Tooltip.mjs +55 -0
  72. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -0
  73. package/dist/hooks/copy-to-clipboard.hook.mjs +39 -0
  74. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -0
  75. package/dist/index.mjs +57 -0
  76. package/dist/index.mjs.map +1 -0
  77. package/dist/infra/api/client.mjs +115 -0
  78. package/dist/infra/api/client.mjs.map +1 -0
  79. package/dist/infra/api/types.mjs +31 -0
  80. package/dist/infra/api/types.mjs.map +1 -0
  81. package/dist/infra/utils/client-info.mjs +27 -0
  82. package/dist/infra/utils/client-info.mjs.map +1 -0
  83. package/dist/infra/utils/clsx.mjs +9 -0
  84. package/dist/infra/utils/clsx.mjs.map +1 -0
  85. package/dist/infra/utils/params.mjs +21 -0
  86. package/dist/infra/utils/params.mjs.map +1 -0
  87. package/dist/infra/utils/percentage.mjs +20 -0
  88. package/dist/infra/utils/percentage.mjs.map +1 -0
  89. package/dist/middlewares/chain.mjs +37 -0
  90. package/dist/middlewares/chain.mjs.map +1 -0
  91. package/dist/middlewares/create-auth-middleware.mjs +28 -0
  92. package/dist/middlewares/create-auth-middleware.mjs.map +1 -0
  93. package/dist/middlewares/types.mjs +11 -0
  94. package/dist/middlewares/types.mjs.map +1 -0
  95. package/dist/middlewares/validate-session.mjs +92 -0
  96. package/dist/middlewares/validate-session.mjs.map +1 -0
  97. package/dist/modules/auth/actions/login.action.mjs +11 -0
  98. package/dist/modules/auth/actions/login.action.mjs.map +1 -0
  99. package/dist/modules/auth/actions/logout.action.mjs +11 -0
  100. package/dist/modules/auth/actions/logout.action.mjs.map +1 -0
  101. package/dist/modules/auth/actions/register.action.mjs +9 -0
  102. package/dist/modules/auth/actions/register.action.mjs.map +1 -0
  103. package/dist/modules/auth/actions/validate-session.action.mjs +44 -0
  104. package/dist/modules/auth/actions/validate-session.action.mjs.map +1 -0
  105. package/dist/modules/auth/hooks/login.hook.mjs +12 -0
  106. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -0
  107. package/dist/modules/auth/hooks/logout.hook.mjs +12 -0
  108. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -0
  109. package/dist/modules/auth/hooks/register.hook.mjs +12 -0
  110. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -0
  111. package/dist/modules/auth/hooks/useUserQuery.mjs +48 -0
  112. package/dist/modules/auth/hooks/useUserQuery.mjs.map +1 -0
  113. package/dist/modules/auth/schema.mjs +1 -0
  114. package/dist/modules/auth/schema.mjs.map +1 -0
  115. package/dist/modules/auth/services/auth.service.mjs +163 -0
  116. package/dist/modules/auth/services/auth.service.mjs.map +1 -0
  117. package/dist/modules/users/action/find-user-by-id.action.mjs +21 -0
  118. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -0
  119. package/dist/modules/users/schema.mjs +11 -0
  120. package/dist/modules/users/schema.mjs.map +1 -0
  121. package/dist/modules/users/services/user.service.mjs +50 -0
  122. package/dist/modules/users/services/user.service.mjs.map +1 -0
  123. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs +19 -0
  124. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -0
  125. package/dist/modules/whitelabel/schema.mjs +1 -0
  126. package/dist/modules/whitelabel/schema.mjs.map +1 -0
  127. package/dist/modules/whitelabel/services/whitelabel.service.mjs +62 -0
  128. package/dist/modules/whitelabel/services/whitelabel.service.mjs.map +1 -0
  129. package/dist/providers/auth.provider.mjs +84 -0
  130. package/dist/providers/auth.provider.mjs.map +1 -0
  131. package/dist/providers/query.provider.mjs +37 -0
  132. package/dist/providers/query.provider.mjs.map +1 -0
  133. package/dist/providers/whitelabel.provider.mjs +33 -0
  134. package/dist/providers/whitelabel.provider.mjs.map +1 -0
  135. package/dist/store/useMdSidebarStore.mjs +11 -0
  136. package/dist/store/useMdSidebarStore.mjs.map +1 -0
  137. package/package.json +68 -0
  138. package/src/components/handlers/SearchParamsHandler.tsx +61 -0
  139. package/src/components/layouts/MainLayout.tsx +59 -0
  140. package/src/components/layouts/MdSideBarNavigation.tsx +39 -0
  141. package/src/components/layouts/NavBar.tsx +79 -0
  142. package/src/components/layouts/NotificationItem.tsx +26 -0
  143. package/src/components/layouts/SideBarNavigation.tsx +22 -0
  144. package/src/components/ui/buttons/Button.tsx +55 -0
  145. package/src/components/ui/buttons/CancelButton.tsx +12 -0
  146. package/src/components/ui/buttons/CopyButton.tsx +47 -0
  147. package/src/components/ui/data-display/Accordion.tsx +79 -0
  148. package/src/components/ui/data-display/Badge.tsx +45 -0
  149. package/src/components/ui/data-display/Card.tsx +91 -0
  150. package/src/components/ui/data-display/Pagination.tsx +124 -0
  151. package/src/components/ui/data-display/ScrollArea.tsx +57 -0
  152. package/src/components/ui/data-display/Separator.tsx +27 -0
  153. package/src/components/ui/data-display/Table.tsx +115 -0
  154. package/src/components/ui/data-display/Tabs.tsx +65 -0
  155. package/src/components/ui/feedback/CircularProgress.tsx +75 -0
  156. package/src/components/ui/feedback/DefaultCircularProgress.tsx +53 -0
  157. package/src/components/ui/feedback/Progress.tsx +38 -0
  158. package/src/components/ui/feedback/Toast.tsx +99 -0
  159. package/src/components/ui/form/Calendar.tsx +226 -0
  160. package/src/components/ui/form/Checkbox.tsx +31 -0
  161. package/src/components/ui/form/DatePicker.tsx +97 -0
  162. package/src/components/ui/form/DateRangePicker.tsx +108 -0
  163. package/src/components/ui/form/Input.tsx +18 -0
  164. package/src/components/ui/form/InputOtp.tsx +78 -0
  165. package/src/components/ui/form/RadioGroup.tsx +43 -0
  166. package/src/components/ui/form/Select.tsx +195 -0
  167. package/src/components/ui/form/Switch.tsx +30 -0
  168. package/src/components/ui/form/Textarea.tsx +17 -0
  169. package/src/components/ui/overlay/Command.tsx +183 -0
  170. package/src/components/ui/overlay/Dialog.tsx +146 -0
  171. package/src/components/ui/overlay/Popover.tsx +47 -0
  172. package/src/components/ui/overlay/Sheet.tsx +145 -0
  173. package/src/components/ui/overlay/Tooltip.tsx +60 -0
  174. package/src/hooks/copy-to-clipboard.hook.tsx +52 -0
  175. package/src/index.ts +50 -0
  176. package/src/infra/api/client.ts +142 -0
  177. package/src/infra/api/types.ts +79 -0
  178. package/src/infra/utils/client-info.ts +35 -0
  179. package/src/infra/utils/clsx.ts +6 -0
  180. package/src/infra/utils/params.ts +27 -0
  181. package/src/infra/utils/percentage.ts +42 -0
  182. package/src/middlewares/chain.ts +45 -0
  183. package/src/middlewares/create-auth-middleware.ts +38 -0
  184. package/src/middlewares/types.ts +24 -0
  185. package/src/middlewares/validate-session.ts +116 -0
  186. package/src/modules/auth/actions/login.action.ts +11 -0
  187. package/src/modules/auth/actions/logout.action.ts +11 -0
  188. package/src/modules/auth/actions/register.action.ts +8 -0
  189. package/src/modules/auth/actions/validate-session.action.ts +51 -0
  190. package/src/modules/auth/hooks/login.hook.tsx +10 -0
  191. package/src/modules/auth/hooks/logout.hook.tsx +10 -0
  192. package/src/modules/auth/hooks/register.hook.tsx +10 -0
  193. package/src/modules/auth/hooks/useUserQuery.ts +49 -0
  194. package/src/modules/auth/schema.ts +220 -0
  195. package/src/modules/auth/services/auth.service.ts +225 -0
  196. package/src/modules/users/action/find-user-by-id.action.ts +25 -0
  197. package/src/modules/users/schema.ts +79 -0
  198. package/src/modules/users/services/user.service.ts +63 -0
  199. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +20 -0
  200. package/src/modules/whitelabel/schema.ts +49 -0
  201. package/src/modules/whitelabel/services/whitelabel.service.ts +77 -0
  202. package/src/providers/auth.provider.tsx +113 -0
  203. package/src/providers/query.provider.tsx +52 -0
  204. package/src/providers/whitelabel.provider.tsx +44 -0
  205. package/src/store/useMdSidebarStore.ts +15 -0
@@ -0,0 +1,49 @@
1
+ export interface WhitelabelData {
2
+ id: number;
3
+ deleted: number;
4
+ datetime_alt: string;
5
+ datetime_del: string | null;
6
+ datetime_add: string;
7
+ id_account: number;
8
+ active: boolean;
9
+ name: string;
10
+ email: string;
11
+ email_financial: string;
12
+ email_transactional: string;
13
+ domain: string;
14
+ domain_free: string;
15
+ url_api: string;
16
+ url_cname: string;
17
+ url_help: string;
18
+ url_login: string;
19
+ url_site: string;
20
+ url_signup: string;
21
+ url_use_terms: string;
22
+ url_cookies_policies: string;
23
+ url_privacy_policies: string;
24
+ url_video_link: string;
25
+ favicon: string;
26
+ logo: string;
27
+ cor_pri: string;
28
+ cor_sec: string;
29
+ codes: string;
30
+ external_contracting: boolean;
31
+ external_contracting_link_contracting: string;
32
+ external_contracting_link_plans: string;
33
+ }
34
+
35
+ export interface WhitelabelApiResponse {
36
+ status: number;
37
+ total: number;
38
+ data: WhitelabelData[];
39
+ }
40
+
41
+ export interface WhitelabelTokenData extends WhitelabelData {
42
+ token: string;
43
+ }
44
+
45
+ export interface WhitelabelTokenApiResponse {
46
+ status: number;
47
+ total: number;
48
+ data: WhitelabelTokenData[];
49
+ }
@@ -0,0 +1,77 @@
1
+ import 'server-only';
2
+
3
+ import greatCache from '@greatapps/cache';
4
+ import { ApiError } from '../../../infra/api/types';
5
+ import { WhitelabelTokenApiResponse, WhitelabelTokenData } from '../schema';
6
+
7
+ class WhitelabelService {
8
+ private getApiUrl(): string {
9
+ const apiUrl = process.env.R3_API_URL;
10
+ if (!apiUrl) {
11
+ throw new ApiError('R3_API_URL not configured', 'CONFIG_ERROR', 500);
12
+ }
13
+ return apiUrl;
14
+ }
15
+
16
+ private getToken(): string {
17
+ const token = process.env.WHITELABEL_TOKEN_MASTER;
18
+ if (!token) {
19
+ throw new ApiError('WHITELABEL_TOKEN_MASTER not configured', 'CONFIG_ERROR', 500);
20
+ }
21
+ return token;
22
+ }
23
+
24
+ async getTokenByDomain(hostname: string): Promise<WhitelabelTokenData> {
25
+ hostname = 'greatapps.com.br';
26
+
27
+ const apiUrl = this.getApiUrl();
28
+ const whitelabelMasterToken = this.getToken();
29
+
30
+ const url = `${apiUrl}/v1/pt-br/1/whitelabel/${hostname}/token`;
31
+
32
+ console.log('[WhitelabelService] Fetching token for domain', { url });
33
+
34
+ const cache = new greatCache({
35
+ service: 'whitelabel-service',
36
+ version: '1.0',
37
+ domain: 'whitelabel-cache.greatapps.com.br',
38
+ ambient: process.env.NODE_ENV || 'development',
39
+ });
40
+
41
+ const cachedData = await cache.select(`whitelabel-token-${hostname}`);
42
+
43
+ if (cachedData.status == 1 && 'data' in cachedData && cachedData.data) {
44
+ console.log('[WhitelabelService] Cache hit for domain', { hostname });
45
+
46
+ return JSON.parse(cachedData.data) as WhitelabelTokenData;
47
+ }
48
+
49
+ const response = await fetch(url, {
50
+ method: 'GET',
51
+ headers: {
52
+ authorization: whitelabelMasterToken,
53
+ },
54
+ });
55
+
56
+ if (!response.ok) {
57
+ console.error('[WhitelabelService] Failed to fetch whitelabel token', { response });
58
+ throw new ApiError(
59
+ `Failed to fetch whitelabel token: ${response.status}`,
60
+ 'FETCH_ERROR',
61
+ response.status
62
+ );
63
+ }
64
+
65
+ const result: WhitelabelTokenApiResponse = await response.json();
66
+
67
+ if (result.status !== 1 || !result.data?.length) {
68
+ throw new ApiError('Whitelabel token not found', 'TOKEN_NOT_FOUND', 404);
69
+ }
70
+
71
+ await cache.insert(`whitelabel-token-${hostname}`, JSON.stringify(result.data[0]), 604800);
72
+
73
+ return result.data[0];
74
+ }
75
+ }
76
+
77
+ export const whitelabelService = new WhitelabelService();
@@ -0,0 +1,113 @@
1
+ "use client";
2
+
3
+ import {
4
+ createContext,
5
+ ReactNode,
6
+ useCallback,
7
+ useContext,
8
+ useMemo,
9
+ } from "react";
10
+ import {
11
+ useUserQuery,
12
+ useSetUserData,
13
+ useInvalidateUser,
14
+ useUserValidateSession,
15
+ } from "../modules/auth/hooks/useUserQuery";
16
+ import { useLogin } from "../modules/auth/hooks/login.hook";
17
+ import { useRegister } from "../modules/auth/hooks/register.hook";
18
+ import { useLogout } from "../modules/auth/hooks/logout.hook";
19
+ import {
20
+ AuthState,
21
+ LoginRequest,
22
+ RegisterRequest,
23
+ } from "../modules/auth/schema";
24
+
25
+ interface AuthContextProps extends AuthState {
26
+ login: (credentials: LoginRequest) => Promise<void>;
27
+ register: (data: RegisterRequest) => Promise<void>;
28
+ logout: () => Promise<void>;
29
+ }
30
+
31
+ export const AuthContext = createContext<AuthContextProps | undefined>(
32
+ undefined,
33
+ );
34
+
35
+ interface AuthProviderProps {
36
+ children: ReactNode;
37
+ }
38
+
39
+ export function AuthProvider({ children }: AuthProviderProps) {
40
+ const { data: user, isLoading: isQueryLoading } = useUserQuery();
41
+ const { isLoading: isSessionLoading } = useUserValidateSession();
42
+ const setUserData = useSetUserData();
43
+ const invalidateUser = useInvalidateUser();
44
+
45
+ const { mutateAsync: loginMutate, isPending: isLogging } = useLogin();
46
+ const { mutateAsync: registerMutate, isPending: isRegistering } =
47
+ useRegister();
48
+ const { mutateAsync: logoutMutate, isPending: isLoggingOut } = useLogout();
49
+
50
+ const isAuthenticated = !!user;
51
+ const isLoading =
52
+ isLogging ||
53
+ isRegistering ||
54
+ isLoggingOut ||
55
+ isQueryLoading ||
56
+ isSessionLoading;
57
+
58
+ const login = useCallback(
59
+ async (credentials: LoginRequest): Promise<void> => {
60
+ await loginMutate(credentials, {
61
+ onSuccess: (data) => {
62
+ invalidateUser();
63
+ setUserData(data.user);
64
+ },
65
+ });
66
+ },
67
+ [invalidateUser],
68
+ );
69
+
70
+ const register = useCallback(
71
+ async (data: RegisterRequest): Promise<void> => {
72
+ await registerMutate(data, {
73
+ onSuccess: (data) => {
74
+ invalidateUser();
75
+ setUserData(data.user);
76
+ },
77
+ });
78
+ },
79
+ [setUserData],
80
+ );
81
+
82
+ const logout = useCallback(async (): Promise<void> => {
83
+ await logoutMutate(undefined, {
84
+ onSuccess: () => {
85
+ invalidateUser();
86
+ },
87
+ });
88
+ }, [setUserData]);
89
+
90
+ const value: AuthContextProps = useMemo(
91
+ () => ({
92
+ user: user ?? null,
93
+ isAuthenticated,
94
+ isLoading,
95
+ login,
96
+ register,
97
+ logout,
98
+ }),
99
+ [user, isAuthenticated, isLoading, login, register, logout],
100
+ );
101
+
102
+ return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
103
+ }
104
+
105
+ export function useAuth(): AuthContextProps {
106
+ const context = useContext(AuthContext);
107
+
108
+ if (context === undefined) {
109
+ throw new Error("useAuth deve ser usado dentro de um AuthProvider");
110
+ }
111
+
112
+ return context;
113
+ }
@@ -0,0 +1,52 @@
1
+ "use client";
2
+
3
+ import {
4
+ QueryCache,
5
+ QueryClient,
6
+ QueryClientProvider,
7
+ } from "@tanstack/react-query";
8
+ import { ReactNode, useState } from "react";
9
+ import dynamic from "next/dynamic";
10
+ import { toast } from "sonner";
11
+
12
+ // React Query Devtools só em desenvolvimento - remove do bundle de produção
13
+ const ReactQueryDevtools =
14
+ process.env.NODE_ENV === "development"
15
+ ? dynamic(
16
+ () =>
17
+ import("@tanstack/react-query-devtools").then((mod) => ({
18
+ default: mod.ReactQueryDevtools,
19
+ })),
20
+ { ssr: false },
21
+ )
22
+ : () => null;
23
+
24
+ interface QueryProviderProps {
25
+ children: ReactNode;
26
+ }
27
+
28
+ export function QueryProvider({ children }: QueryProviderProps) {
29
+ const [queryClient] = useState(
30
+ () =>
31
+ new QueryClient({
32
+ defaultOptions: {
33
+ queries: {
34
+ staleTime: 60 * 1000,
35
+ refetchOnWindowFocus: false,
36
+ },
37
+ },
38
+ queryCache: new QueryCache({
39
+ onError: (error) => {
40
+ toast.error(error.message);
41
+ },
42
+ }),
43
+ }),
44
+ );
45
+
46
+ return (
47
+ <QueryClientProvider client={queryClient}>
48
+ {children}
49
+ <ReactQueryDevtools initialIsOpen={false} />
50
+ </QueryClientProvider>
51
+ );
52
+ }
@@ -0,0 +1,44 @@
1
+ "use client";
2
+
3
+ import { createContext, ReactNode, useContext } from "react";
4
+ import { WhitelabelData } from "../modules/whitelabel/schema";
5
+
6
+ interface WhitelabelContextProps {
7
+ whitelabel: WhitelabelData | null;
8
+ }
9
+
10
+ const WhitelabelContext = createContext<WhitelabelContextProps | undefined>(
11
+ undefined,
12
+ );
13
+
14
+ interface WhitelabelProviderProps {
15
+ children: ReactNode;
16
+ whitelabel: WhitelabelData | null;
17
+ }
18
+
19
+ export function WhitelabelProvider({
20
+ children,
21
+ whitelabel,
22
+ }: WhitelabelProviderProps) {
23
+ return (
24
+ <WhitelabelContext.Provider
25
+ value={{
26
+ whitelabel,
27
+ }}
28
+ >
29
+ {children}
30
+ </WhitelabelContext.Provider>
31
+ );
32
+ }
33
+
34
+ export function useWhitelabel(): WhitelabelContextProps {
35
+ const context = useContext(WhitelabelContext);
36
+
37
+ if (context === undefined) {
38
+ throw new Error(
39
+ "useWhitelabel deve ser usado dentro de um WhitelabelProvider",
40
+ );
41
+ }
42
+
43
+ return context;
44
+ }
@@ -0,0 +1,15 @@
1
+ import { create } from "zustand";
2
+
3
+ type MdSidebarStore = {
4
+ isExpanded: boolean;
5
+ toggle: () => void;
6
+ expand: () => void;
7
+ collapse: () => void;
8
+ };
9
+
10
+ export const useMdSidebarStore = create<MdSidebarStore>((set) => ({
11
+ isExpanded: false,
12
+ toggle: () => set((state) => ({ isExpanded: !state.isExpanded })),
13
+ expand: () => set({ isExpanded: true }),
14
+ collapse: () => set({ isExpanded: false }),
15
+ }));