@greatapps/common 1.1.212 → 1.1.214

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 (182) 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.map +1 -1
  12. package/dist/components/layouts/UsersSelectorPopover.mjs.map +1 -1
  13. package/dist/components/navigation/CancelledSubscriptionBanner.mjs.map +1 -1
  14. package/dist/components/navigation/NavItemsContext.mjs.map +1 -1
  15. package/dist/components/navigation/shells/TabsMobileShell.mjs.map +1 -1
  16. package/dist/components/pages/notifications/Notifications.mjs.map +1 -1
  17. package/dist/components/ui/buttons/Button.mjs.map +1 -1
  18. package/dist/components/ui/buttons/CancelButton.mjs.map +1 -1
  19. package/dist/components/ui/buttons/CopyButton.mjs.map +1 -1
  20. package/dist/components/ui/data-display/Accordion.mjs.map +1 -1
  21. package/dist/components/ui/data-display/Badge.mjs.map +1 -1
  22. package/dist/components/ui/data-display/Card.mjs.map +1 -1
  23. package/dist/components/ui/data-display/Pagination.mjs.map +1 -1
  24. package/dist/components/ui/data-display/ScrollArea.mjs.map +1 -1
  25. package/dist/components/ui/data-display/Separator.mjs.map +1 -1
  26. package/dist/components/ui/data-display/Table.mjs.map +1 -1
  27. package/dist/components/ui/data-display/Tabs.mjs.map +1 -1
  28. package/dist/components/ui/feedback/CircularProgress.mjs.map +1 -1
  29. package/dist/components/ui/feedback/DefaultCircularProgress.mjs.map +1 -1
  30. package/dist/components/ui/feedback/LoadingOverlay.mjs.map +1 -1
  31. package/dist/components/ui/feedback/Progress.mjs.map +1 -1
  32. package/dist/components/ui/feedback/Toast.mjs.map +1 -1
  33. package/dist/components/ui/form/Calendar.mjs.map +1 -1
  34. package/dist/components/ui/form/Checkbox.mjs.map +1 -1
  35. package/dist/components/ui/form/DatePicker.mjs.map +1 -1
  36. package/dist/components/ui/form/DateRangePicker.mjs.map +1 -1
  37. package/dist/components/ui/form/Input.mjs.map +1 -1
  38. package/dist/components/ui/form/InputOtp.mjs.map +1 -1
  39. package/dist/components/ui/form/PhoneInput.mjs.map +1 -1
  40. package/dist/components/ui/form/RadioGroup.mjs.map +1 -1
  41. package/dist/components/ui/form/Select.mjs +1 -1
  42. package/dist/components/ui/form/Select.mjs.map +1 -1
  43. package/dist/components/ui/form/Switch.mjs.map +1 -1
  44. package/dist/components/ui/form/Textarea.mjs.map +1 -1
  45. package/dist/components/ui/overlay/Command.mjs.map +1 -1
  46. package/dist/components/ui/overlay/Dialog.mjs.map +1 -1
  47. package/dist/components/ui/overlay/Popover.mjs.map +1 -1
  48. package/dist/components/ui/overlay/Sheet.mjs.map +1 -1
  49. package/dist/components/ui/overlay/Tooltip.mjs.map +1 -1
  50. package/dist/hooks/copy-to-clipboard.hook.mjs.map +1 -1
  51. package/dist/index.mjs.map +1 -1
  52. package/dist/middleware.mjs.map +1 -1
  53. package/dist/modules/accounts/actions/account-management.action.mjs.map +1 -1
  54. package/dist/modules/accounts/actions/find-current-account.action.mjs.map +1 -1
  55. package/dist/modules/accounts/actions/list-currencies.action.mjs.map +1 -1
  56. package/dist/modules/accounts/actions/list-timezones.action.mjs.map +1 -1
  57. package/dist/modules/accounts/hooks/current-account.hook.mjs.map +1 -1
  58. package/dist/modules/accounts/hooks/useAccountManagement.mjs.map +1 -1
  59. package/dist/modules/accounts/hooks/useCurrencies.mjs.map +1 -1
  60. package/dist/modules/accounts/hooks/useTimezones.mjs.map +1 -1
  61. package/dist/modules/accounts/services/account.service.mjs.map +1 -1
  62. package/dist/modules/auth/hooks/login.hook.mjs.map +1 -1
  63. package/dist/modules/auth/hooks/logout.hook.mjs.map +1 -1
  64. package/dist/modules/auth/hooks/register.hook.mjs.map +1 -1
  65. package/dist/modules/ia-credits/actions/list-ia-credits.action.mjs.map +1 -1
  66. package/dist/modules/projects/actions/add-project-user.action.mjs.map +1 -1
  67. package/dist/modules/projects/actions/list-all-account-users.action.mjs.map +1 -1
  68. package/dist/modules/projects/actions/list-available-users.action.mjs.map +1 -1
  69. package/dist/modules/projects/actions/list-project-users.action.mjs.map +1 -1
  70. package/dist/modules/projects/actions/remove-project-user.action.mjs.map +1 -1
  71. package/dist/modules/projects/hooks/add-project-user.hook.mjs.map +1 -1
  72. package/dist/modules/projects/hooks/list-all-account-users.hook.mjs.map +1 -1
  73. package/dist/modules/projects/hooks/list-available-users.hook.mjs.map +1 -1
  74. package/dist/modules/projects/hooks/list-project-users.hook.mjs.map +1 -1
  75. package/dist/modules/projects/hooks/remove-project-user.hook.mjs.map +1 -1
  76. package/dist/modules/subscriptions/actions/list-subscriptions.action.mjs.map +1 -1
  77. package/dist/modules/subscriptions/hooks/find-active-subscription.hook.mjs.map +1 -1
  78. package/dist/modules/subscriptions/hooks/list-subscriptions.hook.mjs.map +1 -1
  79. package/dist/modules/users/action/find-user-by-id.action.mjs.map +1 -1
  80. package/dist/modules/users/action/list-messages.action.mjs.map +1 -1
  81. package/dist/modules/users/action/mark-all-messages-as-read.action.mjs.map +1 -1
  82. package/dist/modules/users/action/mark-message-as-read.action.mjs.map +1 -1
  83. package/dist/modules/users/hooks/messages.hook.mjs.map +1 -1
  84. package/dist/modules/whitelabel/actions/find-whitelabel-styles.action.mjs.map +1 -1
  85. package/dist/modules/whitelabel/actions/find-whitelabel.action.mjs.map +1 -1
  86. package/dist/modules/whitelabel/services/whitelabel-styles.service.mjs.map +1 -1
  87. package/dist/providers/whitelabel.provider.mjs.map +1 -1
  88. package/dist/utils/countries.mjs.map +1 -1
  89. package/dist/utils/safeServerAction.mjs.map +1 -1
  90. package/dist/utils/withAction.mjs.map +1 -1
  91. package/package.json +90 -90
  92. package/src/components/account/ConfirmDeleteAccountModal.tsx +55 -55
  93. package/src/components/account/DeleteAccountModal.tsx +130 -130
  94. package/src/components/account/IsntPossibleDeleteAccountModal.tsx +49 -49
  95. package/src/components/account/hooks/useChangePhoneForm.tsx +81 -81
  96. package/src/components/account/hooks/useTwoFactorAuthForm.tsx +101 -101
  97. package/src/components/account/sections/ChangePhoneModal.tsx +231 -231
  98. package/src/components/embeds/CrispEmbed.tsx +101 -101
  99. package/src/components/embeds/FrillEmbed.tsx +119 -119
  100. package/src/components/layouts/AppMobileNavBar.tsx +111 -111
  101. package/src/components/layouts/AppNavBar.tsx +57 -57
  102. package/src/components/layouts/NavBar.tsx +122 -122
  103. package/src/components/layouts/UsersSelectorPopover.tsx +238 -238
  104. package/src/components/navigation/CancelledSubscriptionBanner.tsx +69 -69
  105. package/src/components/navigation/NavItemsContext.ts +20 -20
  106. package/src/components/navigation/shells/TabsMobileShell.tsx +72 -72
  107. package/src/components/pages/notifications/Notifications.tsx +160 -160
  108. package/src/components/ui/buttons/Button.tsx +57 -57
  109. package/src/components/ui/buttons/CancelButton.tsx +14 -14
  110. package/src/components/ui/buttons/CopyButton.tsx +54 -54
  111. package/src/components/ui/data-display/Accordion.tsx +81 -81
  112. package/src/components/ui/data-display/Badge.tsx +47 -47
  113. package/src/components/ui/data-display/Card.tsx +93 -93
  114. package/src/components/ui/data-display/Pagination.tsx +126 -126
  115. package/src/components/ui/data-display/ScrollArea.tsx +59 -59
  116. package/src/components/ui/data-display/Separator.tsx +29 -29
  117. package/src/components/ui/data-display/Table.tsx +117 -117
  118. package/src/components/ui/data-display/Tabs.tsx +67 -67
  119. package/src/components/ui/feedback/CircularProgress.tsx +75 -75
  120. package/src/components/ui/feedback/DefaultCircularProgress.tsx +61 -61
  121. package/src/components/ui/feedback/LoadingOverlay.tsx +31 -31
  122. package/src/components/ui/feedback/Progress.tsx +40 -40
  123. package/src/components/ui/feedback/Toast.tsx +101 -101
  124. package/src/components/ui/form/Calendar.tsx +228 -228
  125. package/src/components/ui/form/Checkbox.tsx +31 -31
  126. package/src/components/ui/form/DatePicker.tsx +97 -97
  127. package/src/components/ui/form/DateRangePicker.tsx +108 -108
  128. package/src/components/ui/form/Input.tsx +20 -20
  129. package/src/components/ui/form/InputOtp.tsx +80 -80
  130. package/src/components/ui/form/PhoneInput.tsx +205 -205
  131. package/src/components/ui/form/RadioGroup.tsx +45 -45
  132. package/src/components/ui/form/Select.tsx +200 -200
  133. package/src/components/ui/form/Switch.tsx +32 -32
  134. package/src/components/ui/form/Textarea.tsx +19 -19
  135. package/src/components/ui/overlay/Command.tsx +185 -185
  136. package/src/components/ui/overlay/Dialog.tsx +151 -151
  137. package/src/components/ui/overlay/Popover.tsx +49 -49
  138. package/src/components/ui/overlay/Sheet.tsx +166 -166
  139. package/src/components/ui/overlay/Tooltip.tsx +62 -62
  140. package/src/hooks/copy-to-clipboard.hook.tsx +67 -67
  141. package/src/index.ts +355 -355
  142. package/src/middleware.ts +4 -4
  143. package/src/modules/accounts/actions/account-management.action.ts +90 -90
  144. package/src/modules/accounts/actions/find-current-account.action.ts +9 -9
  145. package/src/modules/accounts/actions/list-currencies.action.ts +8 -8
  146. package/src/modules/accounts/actions/list-timezones.action.ts +8 -8
  147. package/src/modules/accounts/hooks/current-account.hook.tsx +22 -22
  148. package/src/modules/accounts/hooks/useAccountManagement.ts +85 -85
  149. package/src/modules/accounts/hooks/useCurrencies.ts +15 -15
  150. package/src/modules/accounts/hooks/useTimezones.ts +15 -15
  151. package/src/modules/accounts/services/account.service.ts +236 -236
  152. package/src/modules/accounts/types.ts +214 -214
  153. package/src/modules/auth/hooks/login.hook.tsx +13 -13
  154. package/src/modules/auth/hooks/logout.hook.tsx +11 -11
  155. package/src/modules/auth/hooks/register.hook.tsx +11 -11
  156. package/src/modules/ia-credits/actions/list-ia-credits.action.ts +8 -8
  157. package/src/modules/projects/actions/add-project-user.action.ts +9 -9
  158. package/src/modules/projects/actions/list-all-account-users.action.ts +9 -9
  159. package/src/modules/projects/actions/list-available-users.action.ts +9 -9
  160. package/src/modules/projects/actions/list-project-users.action.ts +9 -9
  161. package/src/modules/projects/actions/remove-project-user.action.ts +9 -9
  162. package/src/modules/projects/hooks/add-project-user.hook.ts +69 -69
  163. package/src/modules/projects/hooks/list-all-account-users.hook.ts +34 -34
  164. package/src/modules/projects/hooks/list-available-users.hook.ts +33 -33
  165. package/src/modules/projects/hooks/list-project-users.hook.ts +33 -33
  166. package/src/modules/projects/hooks/remove-project-user.hook.ts +69 -69
  167. package/src/modules/subscriptions/actions/list-subscriptions.action.ts +9 -9
  168. package/src/modules/subscriptions/hooks/find-active-subscription.hook.ts +19 -19
  169. package/src/modules/subscriptions/hooks/list-subscriptions.hook.ts +17 -17
  170. package/src/modules/users/action/find-user-by-id.action.ts +8 -8
  171. package/src/modules/users/action/list-messages.action.ts +12 -12
  172. package/src/modules/users/action/mark-all-messages-as-read.action.ts +8 -8
  173. package/src/modules/users/action/mark-message-as-read.action.ts +8 -8
  174. package/src/modules/users/hooks/messages.hook.ts +60 -60
  175. package/src/modules/whitelabel/actions/find-whitelabel-styles.action.ts +14 -14
  176. package/src/modules/whitelabel/actions/find-whitelabel.action.ts +23 -23
  177. package/src/modules/whitelabel/services/whitelabel-styles.service.ts +98 -98
  178. package/src/modules/whitelabel/styles-schema.ts +37 -37
  179. package/src/providers/whitelabel.provider.tsx +46 -46
  180. package/src/utils/countries.ts +224 -224
  181. package/src/utils/safeServerAction.ts +21 -21
  182. 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
+ }