@greatapps/common 1.1.212 → 1.1.215

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 (183) hide show
  1. package/dist/components/account/ConfirmDeleteAccountModal.mjs.map +1 -1
  2. package/dist/components/account/DeleteAccountModal.mjs.map +1 -1
  3. package/dist/components/account/IsntPossibleDeleteAccountModal.mjs.map +1 -1
  4. package/dist/components/account/hooks/useChangePhoneForm.mjs.map +1 -1
  5. package/dist/components/account/hooks/useTwoFactorAuthForm.mjs.map +1 -1
  6. package/dist/components/account/sections/ChangePhoneModal.mjs.map +1 -1
  7. package/dist/components/embeds/CrispEmbed.mjs.map +1 -1
  8. package/dist/components/embeds/FrillEmbed.mjs.map +1 -1
  9. package/dist/components/layouts/AppMobileNavBar.mjs.map +1 -1
  10. package/dist/components/layouts/AppNavBar.mjs.map +1 -1
  11. package/dist/components/layouts/NavBar.mjs +2 -2
  12. package/dist/components/layouts/NavBar.mjs.map +1 -1
  13. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  14. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  15. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  16. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  17. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  18. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  19. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  20. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  21. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  22. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  23. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  24. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  25. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  26. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  27. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  28. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  29. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  30. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  31. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  32. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  33. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  34. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  35. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  36. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  37. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  38. package/dist/components/ui/form/Input.mjs.map +1 -1
  39. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  40. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  41. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  42. package/dist/components/ui/form/Select.mjs +1 -1
  43. package/dist/components/ui/form/Select.mjs.map +1 -1
  44. package/dist/components/ui/form/Switch.mjs.map +1 -1
  45. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  46. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  47. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  48. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  49. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  50. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  51. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  52. package/dist/index.mjs.map +1 -1
  53. package/dist/middleware.mjs.map +1 -1
  54. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  55. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  56. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  57. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  58. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  59. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  60. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  61. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  62. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  63. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  64. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  65. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  66. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  67. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  68. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  69. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  70. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  71. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  72. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  73. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  74. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  75. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  76. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  77. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  78. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  79. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  80. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  81. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  82. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  83. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  84. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  85. package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs.map +1 -1
  86. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  87. package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs.map +1 -1
  88. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  89. package/dist/utils/countries.mjs.map +1 -1
  90. package/dist/utils/safeServerAction.mjs.map +1 -1
  91. package/dist/utils/withAction.mjs.map +1 -1
  92. package/package.json +90 -90
  93. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  94. package/src/components/account/DeleteAccountModal.tsx +130 -130
  95. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  96. package/src/components/account/hooks/useChangePhoneForm.tsx +81 -81
  97. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  98. package/src/components/account/sections/ChangePhoneModal.tsx +231 -231
  99. package/src/components/embeds/CrispEmbed.tsx +101 -101
  100. package/src/components/embeds/FrillEmbed.tsx +119 -119
  101. package/src/components/layouts/AppMobileNavBar.tsx +111 -111
  102. package/src/components/layouts/AppNavBar.tsx +57 -57
  103. package/src/components/layouts/NavBar.tsx +120 -122
  104. package/src/components/layouts/UsersSelectorPopover.tsx +238 -238
  105. package/src/components/navigation/CancelledSubscriptionBanner.tsx +69 -69
  106. package/src/components/navigation/NavItemsContext.ts +20 -20
  107. package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
  108. package/src/components/pages/notifications/Notifications.tsx +160 -160
  109. package/src/components/ui/buttons/Button.tsx +57 -57
  110. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  111. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  112. package/src/components/ui/data-display/Accordion.tsx +81 -81
  113. package/src/components/ui/data-display/Badge.tsx +47 -47
  114. package/src/components/ui/data-display/Card.tsx +93 -93
  115. package/src/components/ui/data-display/Pagination.tsx +126 -126
  116. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  117. package/src/components/ui/data-display/Separator.tsx +29 -29
  118. package/src/components/ui/data-display/Table.tsx +117 -117
  119. package/src/components/ui/data-display/Tabs.tsx +67 -67
  120. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  121. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  122. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  123. package/src/components/ui/feedback/Progress.tsx +40 -40
  124. package/src/components/ui/feedback/Toast.tsx +101 -101
  125. package/src/components/ui/form/Calendar.tsx +228 -228
  126. package/src/components/ui/form/Checkbox.tsx +31 -31
  127. package/src/components/ui/form/DatePicker.tsx +97 -97
  128. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  129. package/src/components/ui/form/Input.tsx +20 -20
  130. package/src/components/ui/form/InputOtp.tsx +80 -80
  131. package/src/components/ui/form/PhoneInput.tsx +205 -205
  132. package/src/components/ui/form/RadioGroup.tsx +45 -45
  133. package/src/components/ui/form/Select.tsx +200 -200
  134. package/src/components/ui/form/Switch.tsx +32 -32
  135. package/src/components/ui/form/Textarea.tsx +19 -19
  136. package/src/components/ui/overlay/Command.tsx +185 -185
  137. package/src/components/ui/overlay/Dialog.tsx +151 -151
  138. package/src/components/ui/overlay/Popover.tsx +49 -49
  139. package/src/components/ui/overlay/Sheet.tsx +166 -166
  140. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  141. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  142. package/src/index.ts +355 -355
  143. package/src/middleware.ts +4 -4
  144. package/src/modules/accounts/actions/account-management.action.ts +90 -90
  145. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  146. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  147. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  148. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  149. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  150. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  151. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  152. package/src/modules/accounts/services/account.service.ts +236 -236
  153. package/src/modules/accounts/types.ts +214 -214
  154. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  155. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  156. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  157. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  158. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  159. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  160. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  161. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  162. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  163. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  164. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  165. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  166. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  167. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  168. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  169. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
  170. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +17 -17
  171. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  172. package/src/modules/users/action/list-messages.action.ts +12 -12
  173. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  174. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  175. package/src/modules/users/hooks/messages.hook.ts +60 -60
  176. package/src/modules/whitelabel/actions/find-whitelabel-styles.action.ts +14 -14
  177. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  178. package/src/modules/whitelabel/services/whitelabel-styles.service.ts +98 -98
  179. package/src/modules/whitelabel/styles-schema.ts +37 -37
  180. package/src/providers/whitelabel.provider.tsx +46 -46
  181. package/src/utils/countries.ts +224 -224
  182. package/src/utils/safeServerAction.ts +21 -21
  183. package/src/utils/withAction.ts +13 -13
@@ -1,69 +1,69 @@
1
- 'use client';
2
-
3
- import { useQueryClient, useMutation, InfiniteData } from '@tanstack/react-query';
4
- import { addProjectUserAction } from '../actions/add-project-user.action';
5
- import { LIST_PROJECT_USERS_BASE_KEY } from './list-project-users.hook';
6
- import { LIST_ALL_ACCOUNT_USERS_BASE_KEY } from './list-all-account-users.hook';
7
- import type { UsersPage, AccountUser, ProjectUser } from '../types';
8
-
9
- export function useAddProjectUser(projectId: number) {
10
- const queryClient = useQueryClient();
11
-
12
- return useMutation({
13
- mutationFn: (userId: number) =>
14
- addProjectUserAction({ projectId, users: [userId] }),
15
-
16
- onMutate: async (userId) => {
17
- await queryClient.cancelQueries({ queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY() });
18
- await queryClient.cancelQueries({ queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId) });
19
-
20
- const prevAccountUsers = queryClient.getQueriesData<InfiniteData<UsersPage<AccountUser>>>({
21
- queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY(),
22
- });
23
- const prevProjectUsers = queryClient.getQueriesData<InfiniteData<UsersPage<ProjectUser>>>({
24
- queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId),
25
- });
26
-
27
- queryClient.setQueriesData<InfiniteData<UsersPage<AccountUser>>>(
28
- { queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY(), exact: false },
29
- (old) => {
30
- if (!old) return old;
31
- return {
32
- ...old,
33
- pages: old.pages.map((page) => ({
34
- ...page,
35
- data: page.data.map((u) =>
36
- u.id === userId ? { ...u, in_project: true } : u
37
- ),
38
- })),
39
- };
40
- }
41
- );
42
-
43
- queryClient.setQueriesData<InfiniteData<UsersPage<ProjectUser>>>(
44
- { queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId), exact: false },
45
- (old) => {
46
- if (!old?.pages.length) return old;
47
- return {
48
- ...old,
49
- pages: old.pages.map((page, i) =>
50
- i === 0 ? { ...page, total: page.total + 1 } : page
51
- ),
52
- };
53
- }
54
- );
55
-
56
- return { prevAccountUsers, prevProjectUsers };
57
- },
58
-
59
- onError: (_err, _userId, ctx) => {
60
- ctx?.prevAccountUsers.forEach(([key, data]) => queryClient.setQueryData(key, data));
61
- ctx?.prevProjectUsers.forEach(([key, data]) => queryClient.setQueryData(key, data));
62
- },
63
-
64
- onSettled: () => {
65
- queryClient.invalidateQueries({ queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId) });
66
- queryClient.invalidateQueries({ queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY() });
67
- },
68
- });
69
- }
1
+ 'use client';
2
+
3
+ import { useQueryClient, useMutation, InfiniteData } from '@tanstack/react-query';
4
+ import { addProjectUserAction } from '../actions/add-project-user.action';
5
+ import { LIST_PROJECT_USERS_BASE_KEY } from './list-project-users.hook';
6
+ import { LIST_ALL_ACCOUNT_USERS_BASE_KEY } from './list-all-account-users.hook';
7
+ import type { UsersPage, AccountUser, ProjectUser } from '../types';
8
+
9
+ export function useAddProjectUser(projectId: number) {
10
+ const queryClient = useQueryClient();
11
+
12
+ return useMutation({
13
+ mutationFn: (userId: number) =>
14
+ addProjectUserAction({ projectId, users: [userId] }),
15
+
16
+ onMutate: async (userId) => {
17
+ await queryClient.cancelQueries({ queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY() });
18
+ await queryClient.cancelQueries({ queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId) });
19
+
20
+ const prevAccountUsers = queryClient.getQueriesData<InfiniteData<UsersPage<AccountUser>>>({
21
+ queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY(),
22
+ });
23
+ const prevProjectUsers = queryClient.getQueriesData<InfiniteData<UsersPage<ProjectUser>>>({
24
+ queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId),
25
+ });
26
+
27
+ queryClient.setQueriesData<InfiniteData<UsersPage<AccountUser>>>(
28
+ { queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY(), exact: false },
29
+ (old) => {
30
+ if (!old) return old;
31
+ return {
32
+ ...old,
33
+ pages: old.pages.map((page) => ({
34
+ ...page,
35
+ data: page.data.map((u) =>
36
+ u.id === userId ? { ...u, in_project: true } : u
37
+ ),
38
+ })),
39
+ };
40
+ }
41
+ );
42
+
43
+ queryClient.setQueriesData<InfiniteData<UsersPage<ProjectUser>>>(
44
+ { queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId), exact: false },
45
+ (old) => {
46
+ if (!old?.pages.length) return old;
47
+ return {
48
+ ...old,
49
+ pages: old.pages.map((page, i) =>
50
+ i === 0 ? { ...page, total: page.total + 1 } : page
51
+ ),
52
+ };
53
+ }
54
+ );
55
+
56
+ return { prevAccountUsers, prevProjectUsers };
57
+ },
58
+
59
+ onError: (_err, _userId, ctx) => {
60
+ ctx?.prevAccountUsers.forEach(([key, data]) => queryClient.setQueryData(key, data));
61
+ ctx?.prevProjectUsers.forEach(([key, data]) => queryClient.setQueryData(key, data));
62
+ },
63
+
64
+ onSettled: () => {
65
+ queryClient.invalidateQueries({ queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId) });
66
+ queryClient.invalidateQueries({ queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY() });
67
+ },
68
+ });
69
+ }
@@ -1,34 +1,34 @@
1
- 'use client';
2
-
3
- import { useInfiniteQuery } from '@tanstack/react-query';
4
- import { listAllAccountUsersAction } from '../actions/list-all-account-users.action';
5
- import { withAction } from '../../../utils/withAction';
6
-
7
- const PAGE_SIZE = 20;
8
-
9
- export const LIST_ALL_ACCOUNT_USERS_BASE_KEY = () => ['account-users', 'all'];
10
- export const LIST_ALL_ACCOUNT_USERS_QUERY_KEY = (search: string = '', projectId?: number) => [
11
- ...LIST_ALL_ACCOUNT_USERS_BASE_KEY(),
12
- search,
13
- projectId,
14
- ];
15
-
16
- export function useListAllAccountUsers(search: string = '', projectId?: number) {
17
- return useInfiniteQuery({
18
- queryKey: LIST_ALL_ACCOUNT_USERS_QUERY_KEY(search, projectId),
19
- queryFn: ({ pageParam }) =>
20
- withAction(() =>
21
- listAllAccountUsersAction({
22
- search: search || undefined,
23
- page: pageParam as number,
24
- limit: PAGE_SIZE,
25
- inProject: projectId,
26
- })
27
- )(),
28
- getNextPageParam: (lastPage, allPages) => {
29
- const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
30
- return loaded < lastPage.total ? allPages.length + 1 : undefined;
31
- },
32
- initialPageParam: 1,
33
- });
34
- }
1
+ 'use client';
2
+
3
+ import { useInfiniteQuery } from '@tanstack/react-query';
4
+ import { listAllAccountUsersAction } from '../actions/list-all-account-users.action';
5
+ import { withAction } from '../../../utils/withAction';
6
+
7
+ const PAGE_SIZE = 20;
8
+
9
+ export const LIST_ALL_ACCOUNT_USERS_BASE_KEY = () => ['account-users', 'all'];
10
+ export const LIST_ALL_ACCOUNT_USERS_QUERY_KEY = (search: string = '', projectId?: number) => [
11
+ ...LIST_ALL_ACCOUNT_USERS_BASE_KEY(),
12
+ search,
13
+ projectId,
14
+ ];
15
+
16
+ export function useListAllAccountUsers(search: string = '', projectId?: number) {
17
+ return useInfiniteQuery({
18
+ queryKey: LIST_ALL_ACCOUNT_USERS_QUERY_KEY(search, projectId),
19
+ queryFn: ({ pageParam }) =>
20
+ withAction(() =>
21
+ listAllAccountUsersAction({
22
+ search: search || undefined,
23
+ page: pageParam as number,
24
+ limit: PAGE_SIZE,
25
+ inProject: projectId,
26
+ })
27
+ )(),
28
+ getNextPageParam: (lastPage, allPages) => {
29
+ const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
30
+ return loaded < lastPage.total ? allPages.length + 1 : undefined;
31
+ },
32
+ initialPageParam: 1,
33
+ });
34
+ }
@@ -1,33 +1,33 @@
1
- 'use client';
2
-
3
- import { useInfiniteQuery } from '@tanstack/react-query';
4
- import { listAvailableUsersAction } from '../actions/list-available-users.action';
5
- import { withAction } from '../../../utils/withAction';
6
-
7
- const PAGE_SIZE = 20;
8
-
9
- export const LIST_AVAILABLE_USERS_BASE_KEY = (projectId: number) => ['project-users', projectId, 'out'];
10
- export const LIST_AVAILABLE_USERS_QUERY_KEY = (projectId: number, search: string = '') => [
11
- ...LIST_AVAILABLE_USERS_BASE_KEY(projectId),
12
- search,
13
- ];
14
-
15
- export function useListAvailableUsers(projectId: number, search: string = '') {
16
- return useInfiniteQuery({
17
- queryKey: LIST_AVAILABLE_USERS_QUERY_KEY(projectId, search),
18
- queryFn: ({ pageParam }) =>
19
- withAction(() =>
20
- listAvailableUsersAction(projectId, {
21
- search: search || undefined,
22
- page: pageParam as number,
23
- limit: PAGE_SIZE,
24
- })
25
- )(),
26
- getNextPageParam: (lastPage, allPages) => {
27
- const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
28
- return loaded < lastPage.total ? allPages.length + 1 : undefined;
29
- },
30
- initialPageParam: 1,
31
- enabled: !!projectId,
32
- });
33
- }
1
+ 'use client';
2
+
3
+ import { useInfiniteQuery } from '@tanstack/react-query';
4
+ import { listAvailableUsersAction } from '../actions/list-available-users.action';
5
+ import { withAction } from '../../../utils/withAction';
6
+
7
+ const PAGE_SIZE = 20;
8
+
9
+ export const LIST_AVAILABLE_USERS_BASE_KEY = (projectId: number) => ['project-users', projectId, 'out'];
10
+ export const LIST_AVAILABLE_USERS_QUERY_KEY = (projectId: number, search: string = '') => [
11
+ ...LIST_AVAILABLE_USERS_BASE_KEY(projectId),
12
+ search,
13
+ ];
14
+
15
+ export function useListAvailableUsers(projectId: number, search: string = '') {
16
+ return useInfiniteQuery({
17
+ queryKey: LIST_AVAILABLE_USERS_QUERY_KEY(projectId, search),
18
+ queryFn: ({ pageParam }) =>
19
+ withAction(() =>
20
+ listAvailableUsersAction(projectId, {
21
+ search: search || undefined,
22
+ page: pageParam as number,
23
+ limit: PAGE_SIZE,
24
+ })
25
+ )(),
26
+ getNextPageParam: (lastPage, allPages) => {
27
+ const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
28
+ return loaded < lastPage.total ? allPages.length + 1 : undefined;
29
+ },
30
+ initialPageParam: 1,
31
+ enabled: !!projectId,
32
+ });
33
+ }
@@ -1,33 +1,33 @@
1
- 'use client';
2
-
3
- import { useInfiniteQuery } from '@tanstack/react-query';
4
- import { listProjectUsersAction } from '../actions/list-project-users.action';
5
- import { withAction } from '../../../utils/withAction';
6
-
7
- const PAGE_SIZE = 20;
8
-
9
- export const LIST_PROJECT_USERS_BASE_KEY = (projectId: number) => ['project-users', projectId, 'in'];
10
- export const LIST_PROJECT_USERS_QUERY_KEY = (projectId: number, search: string = '') => [
11
- ...LIST_PROJECT_USERS_BASE_KEY(projectId),
12
- search,
13
- ];
14
-
15
- export function useListProjectUsers(projectId: number, search: string = '') {
16
- return useInfiniteQuery({
17
- queryKey: LIST_PROJECT_USERS_QUERY_KEY(projectId, search),
18
- queryFn: ({ pageParam }) =>
19
- withAction(() =>
20
- listProjectUsersAction(projectId, {
21
- search: search || undefined,
22
- page: pageParam as number,
23
- limit: PAGE_SIZE,
24
- })
25
- )(),
26
- getNextPageParam: (lastPage, allPages) => {
27
- const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
28
- return loaded < lastPage.total ? allPages.length + 1 : undefined;
29
- },
30
- initialPageParam: 1,
31
- enabled: !!projectId,
32
- });
33
- }
1
+ 'use client';
2
+
3
+ import { useInfiniteQuery } from '@tanstack/react-query';
4
+ import { listProjectUsersAction } from '../actions/list-project-users.action';
5
+ import { withAction } from '../../../utils/withAction';
6
+
7
+ const PAGE_SIZE = 20;
8
+
9
+ export const LIST_PROJECT_USERS_BASE_KEY = (projectId: number) => ['project-users', projectId, 'in'];
10
+ export const LIST_PROJECT_USERS_QUERY_KEY = (projectId: number, search: string = '') => [
11
+ ...LIST_PROJECT_USERS_BASE_KEY(projectId),
12
+ search,
13
+ ];
14
+
15
+ export function useListProjectUsers(projectId: number, search: string = '') {
16
+ return useInfiniteQuery({
17
+ queryKey: LIST_PROJECT_USERS_QUERY_KEY(projectId, search),
18
+ queryFn: ({ pageParam }) =>
19
+ withAction(() =>
20
+ listProjectUsersAction(projectId, {
21
+ search: search || undefined,
22
+ page: pageParam as number,
23
+ limit: PAGE_SIZE,
24
+ })
25
+ )(),
26
+ getNextPageParam: (lastPage, allPages) => {
27
+ const loaded = allPages.reduce((sum, p) => sum + p.data.length, 0);
28
+ return loaded < lastPage.total ? allPages.length + 1 : undefined;
29
+ },
30
+ initialPageParam: 1,
31
+ enabled: !!projectId,
32
+ });
33
+ }
@@ -1,69 +1,69 @@
1
- 'use client';
2
-
3
- import { useQueryClient, useMutation, InfiniteData } from '@tanstack/react-query';
4
- import { removeProjectUserAction } from '../actions/remove-project-user.action';
5
- import { LIST_PROJECT_USERS_BASE_KEY } from './list-project-users.hook';
6
- import { LIST_ALL_ACCOUNT_USERS_BASE_KEY } from './list-all-account-users.hook';
7
- import type { UsersPage, AccountUser, ProjectUser } from '../types';
8
-
9
- export function useRemoveProjectUser(projectId: number) {
10
- const queryClient = useQueryClient();
11
-
12
- return useMutation({
13
- mutationFn: (userId: number) =>
14
- removeProjectUserAction({ projectId, users: [userId] }),
15
-
16
- onMutate: async (userId) => {
17
- await queryClient.cancelQueries({ queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY() });
18
- await queryClient.cancelQueries({ queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId) });
19
-
20
- const prevAccountUsers = queryClient.getQueriesData<InfiniteData<UsersPage<AccountUser>>>({
21
- queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY(),
22
- });
23
- const prevProjectUsers = queryClient.getQueriesData<InfiniteData<UsersPage<ProjectUser>>>({
24
- queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId),
25
- });
26
-
27
- queryClient.setQueriesData<InfiniteData<UsersPage<AccountUser>>>(
28
- { queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY(), exact: false },
29
- (old) => {
30
- if (!old) return old;
31
- return {
32
- ...old,
33
- pages: old.pages.map((page) => ({
34
- ...page,
35
- data: page.data.map((u) =>
36
- u.id === userId ? { ...u, in_project: false } : u
37
- ),
38
- })),
39
- };
40
- }
41
- );
42
-
43
- queryClient.setQueriesData<InfiniteData<UsersPage<ProjectUser>>>(
44
- { queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId), exact: false },
45
- (old) => {
46
- if (!old?.pages.length) return old;
47
- return {
48
- ...old,
49
- pages: old.pages.map((page, i) =>
50
- i === 0 ? { ...page, total: page.total - 1 } : page
51
- ),
52
- };
53
- }
54
- );
55
-
56
- return { prevAccountUsers, prevProjectUsers };
57
- },
58
-
59
- onError: (_err, _userId, ctx) => {
60
- ctx?.prevAccountUsers.forEach(([key, data]) => queryClient.setQueryData(key, data));
61
- ctx?.prevProjectUsers.forEach(([key, data]) => queryClient.setQueryData(key, data));
62
- },
63
-
64
- onSettled: () => {
65
- queryClient.invalidateQueries({ queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId) });
66
- queryClient.invalidateQueries({ queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY() });
67
- },
68
- });
69
- }
1
+ 'use client';
2
+
3
+ import { useQueryClient, useMutation, InfiniteData } from '@tanstack/react-query';
4
+ import { removeProjectUserAction } from '../actions/remove-project-user.action';
5
+ import { LIST_PROJECT_USERS_BASE_KEY } from './list-project-users.hook';
6
+ import { LIST_ALL_ACCOUNT_USERS_BASE_KEY } from './list-all-account-users.hook';
7
+ import type { UsersPage, AccountUser, ProjectUser } from '../types';
8
+
9
+ export function useRemoveProjectUser(projectId: number) {
10
+ const queryClient = useQueryClient();
11
+
12
+ return useMutation({
13
+ mutationFn: (userId: number) =>
14
+ removeProjectUserAction({ projectId, users: [userId] }),
15
+
16
+ onMutate: async (userId) => {
17
+ await queryClient.cancelQueries({ queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY() });
18
+ await queryClient.cancelQueries({ queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId) });
19
+
20
+ const prevAccountUsers = queryClient.getQueriesData<InfiniteData<UsersPage<AccountUser>>>({
21
+ queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY(),
22
+ });
23
+ const prevProjectUsers = queryClient.getQueriesData<InfiniteData<UsersPage<ProjectUser>>>({
24
+ queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId),
25
+ });
26
+
27
+ queryClient.setQueriesData<InfiniteData<UsersPage<AccountUser>>>(
28
+ { queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY(), exact: false },
29
+ (old) => {
30
+ if (!old) return old;
31
+ return {
32
+ ...old,
33
+ pages: old.pages.map((page) => ({
34
+ ...page,
35
+ data: page.data.map((u) =>
36
+ u.id === userId ? { ...u, in_project: false } : u
37
+ ),
38
+ })),
39
+ };
40
+ }
41
+ );
42
+
43
+ queryClient.setQueriesData<InfiniteData<UsersPage<ProjectUser>>>(
44
+ { queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId), exact: false },
45
+ (old) => {
46
+ if (!old?.pages.length) return old;
47
+ return {
48
+ ...old,
49
+ pages: old.pages.map((page, i) =>
50
+ i === 0 ? { ...page, total: page.total - 1 } : page
51
+ ),
52
+ };
53
+ }
54
+ );
55
+
56
+ return { prevAccountUsers, prevProjectUsers };
57
+ },
58
+
59
+ onError: (_err, _userId, ctx) => {
60
+ ctx?.prevAccountUsers.forEach(([key, data]) => queryClient.setQueryData(key, data));
61
+ ctx?.prevProjectUsers.forEach(([key, data]) => queryClient.setQueryData(key, data));
62
+ },
63
+
64
+ onSettled: () => {
65
+ queryClient.invalidateQueries({ queryKey: LIST_PROJECT_USERS_BASE_KEY(projectId) });
66
+ queryClient.invalidateQueries({ queryKey: LIST_ALL_ACCOUNT_USERS_BASE_KEY() });
67
+ },
68
+ });
69
+ }
@@ -1,9 +1,9 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import type { FindSubscriptionsParams } from '../types';
5
- import { subscriptionsService } from '../services/subscriptions.service';
6
-
7
- export async function listSubscriptionsAction(params?: Partial<FindSubscriptionsParams>) {
8
- return safeServerAction(() => subscriptionsService.listSubscriptions(params));
9
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import type { FindSubscriptionsParams } from '../types';
5
+ import { subscriptionsService } from '../services/subscriptions.service';
6
+
7
+ export async function listSubscriptionsAction(params?: Partial<FindSubscriptionsParams>) {
8
+ return safeServerAction(() => subscriptionsService.listSubscriptions(params));
9
+ }
@@ -1,19 +1,19 @@
1
- 'use client';
2
-
3
- import { useQuery } from '@tanstack/react-query';
4
- import { listSubscriptionsAction } from '../actions/list-subscriptions.action';
5
- import { parseResult } from '../../../infra/utils/parser';
6
- import { SubscriptionSchema } from '../types';
7
- import { SUBSCRIPTIONS_QUERY_KEY } from './list-subscriptions.hook';
8
- import { withAction } from '../../../utils/withAction';
9
-
10
- export function useActiveSubscription() {
11
- return useQuery({
12
- queryKey: [...SUBSCRIPTIONS_QUERY_KEY, 'active'],
13
- queryFn: async () =>
14
- parseResult(
15
- SubscriptionSchema,
16
- await withAction(() => listSubscriptionsAction({ active: true }))()
17
- ),
18
- });
19
- }
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import { listSubscriptionsAction } from '../actions/list-subscriptions.action';
5
+ import { parseResult } from '../../../infra/utils/parser';
6
+ import { SubscriptionSchema } from '../types';
7
+ import { SUBSCRIPTIONS_QUERY_KEY } from './list-subscriptions.hook';
8
+ import { withAction } from '../../../utils/withAction';
9
+
10
+ export function useActiveSubscription() {
11
+ return useQuery({
12
+ queryKey: [...SUBSCRIPTIONS_QUERY_KEY, 'active'],
13
+ queryFn: async () =>
14
+ parseResult(
15
+ SubscriptionSchema,
16
+ await withAction(() => listSubscriptionsAction({ active: true }))()
17
+ ),
18
+ });
19
+ }
@@ -1,17 +1,17 @@
1
- 'use client';
2
-
3
- import { useQuery } from '@tanstack/react-query';
4
- import { listSubscriptionsAction } from '../actions/list-subscriptions.action';
5
- import { parseResult } from '../../../infra/utils/parser';
6
- import { SubscriptionSchema, type FindSubscriptionsParams } from '../types';
7
- import { withAction } from '../../../utils/withAction';
8
-
9
- export const SUBSCRIPTIONS_QUERY_KEY = ['subscriptions'];
10
-
11
- export function useSubscriptions(params?: Partial<FindSubscriptionsParams>) {
12
- return useQuery({
13
- queryKey: [...SUBSCRIPTIONS_QUERY_KEY, params],
14
- queryFn: async () =>
15
- parseResult(SubscriptionSchema, await withAction(() => listSubscriptionsAction(params))()),
16
- });
17
- }
1
+ 'use client';
2
+
3
+ import { useQuery } from '@tanstack/react-query';
4
+ import { listSubscriptionsAction } from '../actions/list-subscriptions.action';
5
+ import { parseResult } from '../../../infra/utils/parser';
6
+ import { SubscriptionSchema, type FindSubscriptionsParams } from '../types';
7
+ import { withAction } from '../../../utils/withAction';
8
+
9
+ export const SUBSCRIPTIONS_QUERY_KEY = ['subscriptions'];
10
+
11
+ export function useSubscriptions(params?: Partial<FindSubscriptionsParams>) {
12
+ return useQuery({
13
+ queryKey: [...SUBSCRIPTIONS_QUERY_KEY, params],
14
+ queryFn: async () =>
15
+ parseResult(SubscriptionSchema, await withAction(() => listSubscriptionsAction(params))()),
16
+ });
17
+ }
@@ -1,8 +1,8 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import { userService } from '../services/user.service';
5
-
6
- export async function findUserById() {
7
- return safeServerAction(() => userService.findById());
8
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import { userService } from '../services/user.service';
5
+
6
+ export async function findUserById() {
7
+ return safeServerAction(() => userService.findById());
8
+ }
@@ -1,12 +1,12 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import { messagesService } from '../services/messages.service';
5
- import type { FindMessagesParams } from '../schema/messages.schema';
6
-
7
- export async function listMessagesAction(params?: Partial<FindMessagesParams>) {
8
- return safeServerAction(async () => {
9
- const result = await messagesService.listMessages(params);
10
- return { data: result.data, total: result.total, totalUnread: result.totalUnread };
11
- });
12
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import { messagesService } from '../services/messages.service';
5
+ import type { FindMessagesParams } from '../schema/messages.schema';
6
+
7
+ export async function listMessagesAction(params?: Partial<FindMessagesParams>) {
8
+ return safeServerAction(async () => {
9
+ const result = await messagesService.listMessages(params);
10
+ return { data: result.data, total: result.total, totalUnread: result.totalUnread };
11
+ });
12
+ }
@@ -1,8 +1,8 @@
1
- 'use server';
2
-
3
- import { safeServerAction } from '../../../utils/safeServerAction';
4
- import { messagesService } from '../services/messages.service';
5
-
6
- export async function markAllMessagesAsReadAction() {
7
- return safeServerAction(() => messagesService.markAllAsRead());
8
- }
1
+ 'use server';
2
+
3
+ import { safeServerAction } from '../../../utils/safeServerAction';
4
+ import { messagesService } from '../services/messages.service';
5
+
6
+ export async function markAllMessagesAsReadAction() {
7
+ return safeServerAction(() => messagesService.markAllAsRead());
8
+ }