@elevasis/ui 2.78.0 → 2.80.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.
- package/dist/{CoreAuthKitInner-PSTKG4B3.js → CoreAuthKitInner-5J7P7ZDL.js} +1 -1
- package/dist/api/index.js +6 -6
- package/dist/app/index.js +18 -18
- package/dist/auth/index.js +10 -10
- package/dist/charts/index.d.ts +4 -4
- package/dist/charts/index.js +10 -10
- package/dist/{chunk-BLXJEIQS.js → chunk-2HXDI4RY.js} +1 -1
- package/dist/{chunk-FI66TKYS.js → chunk-2KXSFLU2.js} +8 -2
- package/dist/{chunk-TVTSASST.js → chunk-34B3ACOZ.js} +9 -1
- package/dist/{chunk-KXNRTJAE.js → chunk-3HMRK3RC.js} +1 -1
- package/dist/{chunk-S3ETKY5C.js → chunk-3UO2CJTR.js} +1 -1
- package/dist/{chunk-YUWR4UX7.js → chunk-52G4B33T.js} +13 -7
- package/dist/{chunk-4A6S4WAT.js → chunk-6IWH757Q.js} +4 -3
- package/dist/{chunk-4TABB2PA.js → chunk-6MWTTBBT.js} +6 -6
- package/dist/{chunk-M3DWVFRT.js → chunk-7A25EJ4A.js} +148 -85
- package/dist/{chunk-SVZR4GYA.js → chunk-A32PJ2DO.js} +1 -1
- package/dist/{chunk-LMAYDNQL.js → chunk-BG7VCCFB.js} +1 -1
- package/dist/{chunk-WGSEITGL.js → chunk-BXFZ676L.js} +222 -191
- package/dist/{chunk-5ZK7K7YP.js → chunk-CIGWHY7C.js} +23 -21
- package/dist/{chunk-FFVZB25A.js → chunk-CSEADI37.js} +3 -3
- package/dist/{chunk-3RK2NNJX.js → chunk-DFGQG32T.js} +1 -1
- package/dist/{chunk-VM2OWOXL.js → chunk-GY7FXTC4.js} +2 -3
- package/dist/{chunk-P6HHXMLJ.js → chunk-HVNDBY42.js} +10 -9
- package/dist/{chunk-VBGXFKZ2.js → chunk-I5SYS6DT.js} +5 -5
- package/dist/{chunk-2GIJBHZT.js → chunk-IIMC4TRH.js} +3 -3
- package/dist/{chunk-JKNIXSJT.js → chunk-JDPPV2XI.js} +21 -14
- package/dist/{chunk-NBG3V52P.js → chunk-JZBMZLD3.js} +1 -1
- package/dist/{chunk-JZQNUQE4.js → chunk-KGUBFIMQ.js} +1 -1
- package/dist/{chunk-GFSOQH3N.js → chunk-MJIDC25O.js} +8 -11
- package/dist/{chunk-IWNVPPWF.js → chunk-MMOR2HQZ.js} +38 -78
- package/dist/{chunk-L42Z3VZM.js → chunk-NGRRAYMO.js} +22 -39
- package/dist/{chunk-TRACEZWZ.js → chunk-NKMBW7WE.js} +26 -21
- package/dist/{chunk-57QSONG5.js → chunk-Q6HRTWA6.js} +1 -1
- package/dist/{chunk-FD3XRRKM.js → chunk-QQKYBGBX.js} +22 -11
- package/dist/{chunk-B74K5EC2.js → chunk-QSN7BWI3.js} +1 -1
- package/dist/{chunk-MWWBHRFO.js → chunk-SPH5WW44.js} +5 -5
- package/dist/{chunk-WJWYTXGQ.js → chunk-T6AOVZAI.js} +14 -10
- package/dist/{chunk-AVGXLMSH.js → chunk-U3GB5PDF.js} +4 -4
- package/dist/{chunk-SU4T5DCZ.js → chunk-VHK5J55Q.js} +8 -8
- package/dist/{chunk-F3YFAATR.js → chunk-VKA4LQ7N.js} +1 -1
- package/dist/{chunk-IYLJ4CBC.js → chunk-W6QOWA3L.js} +11 -10
- package/dist/{chunk-N6K2Q5BM.js → chunk-WDABHUIL.js} +9 -21
- package/dist/{chunk-2LLCOS4V.js → chunk-WOYW24U7.js} +1 -1
- package/dist/{chunk-Y2IHJRHM.js → chunk-XEO2UG4J.js} +15 -9
- package/dist/{chunk-UD657ICS.js → chunk-YJ437RDY.js} +29 -16
- package/dist/{chunk-INCEZAM3.js → chunk-YSFLFD4U.js} +1 -1
- package/dist/{chunk-5OBIZIWW.js → chunk-ZU676PFP.js} +38 -14
- package/dist/components/index.d.ts +18 -6
- package/dist/components/index.js +48 -48
- package/dist/components/navigation/index.js +11 -11
- package/dist/execution/index.js +2 -2
- package/dist/features/auth/index.js +12 -12
- package/dist/features/clients/index.js +14 -15
- package/dist/features/content/index.js +13 -13
- package/dist/features/crm/index.js +16 -16
- package/dist/features/dashboard/index.d.ts +8 -8
- package/dist/features/dashboard/index.js +13 -13
- package/dist/features/delivery/index.js +25 -25
- package/dist/features/knowledge/index.js +10 -10
- package/dist/features/lead-gen/index.d.ts +49 -32
- package/dist/features/lead-gen/index.js +17 -17
- package/dist/features/monitoring/index.d.ts +10 -10
- package/dist/features/monitoring/index.js +15 -15
- package/dist/features/monitoring/requests/index.js +12 -12
- package/dist/features/notes/index.js +1 -1
- package/dist/features/operations/index.d.ts +12 -12
- package/dist/features/operations/index.js +18 -18
- package/dist/features/public-agent-chat/index.js +4 -4
- package/dist/features/seo/index.js +13 -13
- package/dist/features/settings/index.js +13 -13
- package/dist/hooks/access/index.d.ts +60 -1
- package/dist/hooks/access/index.js +10 -10
- package/dist/hooks/delivery/index.js +6 -6
- package/dist/hooks/published.d.ts +332 -99
- package/dist/hooks/published.js +23 -23
- package/dist/hooks/user-notes/index.js +1 -1
- package/dist/initialization/index.d.ts +12 -0
- package/dist/initialization/index.js +1 -1
- package/dist/knowledge/index.js +22 -20
- package/dist/{knowledge-search-index-6GQK55IQ.js → knowledge-search-index-YU6V3FTK.js} +4 -4
- package/dist/layout/index.js +14 -14
- package/dist/organization/index.d.ts +17 -1
- package/dist/organization/index.js +2 -2
- package/dist/profile/index.js +1 -1
- package/dist/provider/ElevasisServiceContext.js +1 -1
- package/dist/provider/index.js +10 -10
- package/dist/provider/published.js +10 -10
- package/dist/sse/index.js +14 -0
- package/dist/test-utils/index.js +6 -6
- package/dist/types/index.d.ts +12 -0
- package/dist/utils/index.d.ts +20 -2
- package/dist/utils/index.js +4 -4
- package/package.json +24 -14
- /package/dist/{chunk-Y6I3IC45.js → chunk-6XBZPKMI.js} +0 -0
- /package/dist/{chunk-6SSQGWK7.js → chunk-7ZUXA2NW.js} +0 -0
|
@@ -1,13 +1,24 @@
|
|
|
1
|
-
import { useNotificationAdapter } from './chunk-
|
|
2
|
-
import { showApiErrorNotification } from './chunk-
|
|
1
|
+
import { useNotificationAdapter } from './chunk-7A25EJ4A.js';
|
|
2
|
+
import { showApiErrorNotification } from './chunk-3HMRK3RC.js';
|
|
3
3
|
import { OrganizationContext } from './chunk-DD3CCMCZ.js';
|
|
4
|
-
import { GC_TIME_MEDIUM, STALE_TIME_DEFAULT, GC_TIME_SHORT, STALE_TIME_MONITORING } from './chunk-
|
|
4
|
+
import { GC_TIME_MEDIUM, STALE_TIME_DEFAULT, GC_TIME_SHORT, STALE_TIME_MONITORING } from './chunk-CIGWHY7C.js';
|
|
5
5
|
import { useElevasisServices } from './chunk-BI5VDO2K.js';
|
|
6
|
-
import {
|
|
7
|
-
import { z } from 'zod';
|
|
6
|
+
import { PageLimitSchema } from './chunk-34B3ACOZ.js';
|
|
8
7
|
import { useContext } from 'react';
|
|
8
|
+
import { useQueryClient, useMutation, useQuery } from '@tanstack/react-query';
|
|
9
|
+
import { z } from 'zod';
|
|
9
10
|
import { notifications } from '@mantine/notifications';
|
|
10
11
|
|
|
12
|
+
// src/hooks/settings/roles/queryKeys.ts
|
|
13
|
+
var orgRolesKeys = {
|
|
14
|
+
all: ["org-roles"],
|
|
15
|
+
list: (organizationId) => [...orgRolesKeys.all, organizationId]
|
|
16
|
+
};
|
|
17
|
+
var memberRolesKeys = {
|
|
18
|
+
all: ["member-roles"],
|
|
19
|
+
detail: (organizationId, membershipId) => [...memberRolesKeys.all, organizationId, membershipId]
|
|
20
|
+
};
|
|
21
|
+
|
|
11
22
|
// ../core/src/auth/multi-tenancy/memberships/membership.ts
|
|
12
23
|
function transformMembershipToTableRow(membership) {
|
|
13
24
|
return {
|
|
@@ -74,7 +85,7 @@ var ListMembershipsQuerySchema = z.object({
|
|
|
74
85
|
// arrives as a bare string. Normalize both shapes to an array.
|
|
75
86
|
statuses: z.union([MembershipStatusSchema, z.array(MembershipStatusSchema)]).transform((value) => Array.isArray(value) ? value : [value]).optional(),
|
|
76
87
|
order: z.enum(["asc", "desc"]).optional(),
|
|
77
|
-
limit:
|
|
88
|
+
limit: PageLimitSchema.optional(),
|
|
78
89
|
before: z.string().optional(),
|
|
79
90
|
// WorkOS pagination cursor
|
|
80
91
|
after: z.string().optional()
|
|
@@ -83,7 +94,22 @@ var ListMembershipsQuerySchema = z.object({
|
|
|
83
94
|
message: "Either userId or organizationId must be provided"
|
|
84
95
|
});
|
|
85
96
|
|
|
86
|
-
// src/hooks/settings/roles/
|
|
97
|
+
// src/hooks/settings/roles/useCreateOrgRole.ts
|
|
98
|
+
function useCreateOrgRole() {
|
|
99
|
+
const { apiRequest } = useElevasisServices();
|
|
100
|
+
const organization = useContext(OrganizationContext);
|
|
101
|
+
const orgId = organization?.currentSupabaseOrganizationId ?? null;
|
|
102
|
+
const queryClient = useQueryClient();
|
|
103
|
+
return useMutation({
|
|
104
|
+
mutationFn: (input) => apiRequest(`/organizations/${orgId}/roles`, {
|
|
105
|
+
method: "POST",
|
|
106
|
+
body: JSON.stringify(input)
|
|
107
|
+
}),
|
|
108
|
+
onSettled: () => {
|
|
109
|
+
queryClient.invalidateQueries({ queryKey: orgRolesKeys.list(orgId) });
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
87
113
|
var STALE_TIME_CATALOG = 60 * 60 * 1e3;
|
|
88
114
|
function usePermissionCatalog() {
|
|
89
115
|
const { apiRequest, isReady } = useElevasisServices();
|
|
@@ -96,185 +122,149 @@ function usePermissionCatalog() {
|
|
|
96
122
|
}
|
|
97
123
|
|
|
98
124
|
// src/hooks/settings/organization/organizationMembershipService.ts
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
125
|
+
async function getUserMemberships(apiRequest, userId) {
|
|
126
|
+
const searchParams = new URLSearchParams();
|
|
127
|
+
searchParams.append("userId", userId);
|
|
128
|
+
const url = `/memberships?${searchParams.toString()}`;
|
|
129
|
+
const response = await apiRequest(url);
|
|
130
|
+
return response.data.map((membership) => ({
|
|
131
|
+
...membership,
|
|
132
|
+
createdAt: membership.createdAt,
|
|
133
|
+
updatedAt: membership.updatedAt
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
async function getOrganizationMembers(apiRequest, organizationId) {
|
|
137
|
+
const searchParams = new URLSearchParams();
|
|
138
|
+
searchParams.append("organizationId", organizationId);
|
|
139
|
+
const url = `/memberships?${searchParams.toString()}`;
|
|
140
|
+
const response = await apiRequest(url);
|
|
141
|
+
return response.data.map((membership) => ({
|
|
142
|
+
...membership,
|
|
143
|
+
createdAt: membership.createdAt,
|
|
144
|
+
updatedAt: membership.updatedAt
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
async function listMemberships(apiRequest, params) {
|
|
148
|
+
if (params) {
|
|
149
|
+
ListMembershipsQuerySchema.parse(params);
|
|
102
150
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
async getUserMemberships(userId) {
|
|
107
|
-
const searchParams = new URLSearchParams();
|
|
108
|
-
searchParams.append("userId", userId);
|
|
109
|
-
const url = `/memberships?${searchParams.toString()}`;
|
|
110
|
-
const response = await this.apiRequest(url);
|
|
111
|
-
return response.data.map((membership) => ({
|
|
112
|
-
...membership,
|
|
113
|
-
createdAt: membership.createdAt,
|
|
114
|
-
updatedAt: membership.updatedAt
|
|
115
|
-
}));
|
|
151
|
+
const searchParams = new URLSearchParams();
|
|
152
|
+
if (params?.userId) {
|
|
153
|
+
searchParams.append("userId", params.userId);
|
|
116
154
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
*/
|
|
120
|
-
async getOrganizationMembers(organizationId) {
|
|
121
|
-
const searchParams = new URLSearchParams();
|
|
122
|
-
searchParams.append("organizationId", organizationId);
|
|
123
|
-
const url = `/memberships?${searchParams.toString()}`;
|
|
124
|
-
const response = await this.apiRequest(url);
|
|
125
|
-
return response.data.map((membership) => ({
|
|
126
|
-
...membership,
|
|
127
|
-
createdAt: membership.createdAt,
|
|
128
|
-
updatedAt: membership.updatedAt
|
|
129
|
-
}));
|
|
155
|
+
if (params?.organizationId) {
|
|
156
|
+
searchParams.append("organizationId", params.organizationId);
|
|
130
157
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
*/
|
|
134
|
-
async listMemberships(params) {
|
|
135
|
-
if (params) {
|
|
136
|
-
ListMembershipsQuerySchema.parse(params);
|
|
137
|
-
}
|
|
138
|
-
const searchParams = new URLSearchParams();
|
|
139
|
-
if (params?.userId) {
|
|
140
|
-
searchParams.append("userId", params.userId);
|
|
141
|
-
}
|
|
142
|
-
if (params?.organizationId) {
|
|
143
|
-
searchParams.append("organizationId", params.organizationId);
|
|
144
|
-
}
|
|
145
|
-
if (params?.statuses) {
|
|
146
|
-
params.statuses.forEach((status) => searchParams.append("statuses", status));
|
|
147
|
-
}
|
|
148
|
-
if (params?.limit) {
|
|
149
|
-
searchParams.append("limit", params.limit.toString());
|
|
150
|
-
}
|
|
151
|
-
if (params?.before) {
|
|
152
|
-
searchParams.append("before", params.before);
|
|
153
|
-
}
|
|
154
|
-
if (params?.after) {
|
|
155
|
-
searchParams.append("after", params.after);
|
|
156
|
-
}
|
|
157
|
-
if (params?.order) {
|
|
158
|
-
searchParams.append("order", params.order);
|
|
159
|
-
}
|
|
160
|
-
const url = `/memberships${searchParams.toString() ? `?${searchParams.toString()}` : ""}`;
|
|
161
|
-
const response = await this.apiRequest(url);
|
|
162
|
-
return {
|
|
163
|
-
...response,
|
|
164
|
-
data: response.data.map((membership) => ({
|
|
165
|
-
...membership,
|
|
166
|
-
createdAt: membership.createdAt,
|
|
167
|
-
updatedAt: membership.updatedAt
|
|
168
|
-
}))
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Get a single membership by ID
|
|
173
|
-
*/
|
|
174
|
-
async getMembership(membershipId) {
|
|
175
|
-
MembershipIdParamSchema.parse({ id: membershipId });
|
|
176
|
-
const membership = await this.apiRequest(`/memberships/${membershipId}`);
|
|
177
|
-
return {
|
|
178
|
-
...membership,
|
|
179
|
-
createdAt: membership.createdAt,
|
|
180
|
-
updatedAt: membership.updatedAt
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Create a new organization membership
|
|
185
|
-
*/
|
|
186
|
-
async createMembership(data) {
|
|
187
|
-
const validated = CreateMembershipSchema.parse(data);
|
|
188
|
-
const membership = await this.apiRequest("/memberships", {
|
|
189
|
-
method: "POST",
|
|
190
|
-
body: JSON.stringify(validated)
|
|
191
|
-
});
|
|
192
|
-
return {
|
|
193
|
-
...membership,
|
|
194
|
-
createdAt: membership.createdAt,
|
|
195
|
-
updatedAt: membership.updatedAt
|
|
196
|
-
};
|
|
158
|
+
if (params?.statuses) {
|
|
159
|
+
params.statuses.forEach((status) => searchParams.append("statuses", status));
|
|
197
160
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
*/
|
|
201
|
-
async updateMembership(membershipId, data) {
|
|
202
|
-
MembershipIdParamSchema.parse({ id: membershipId });
|
|
203
|
-
const validated = UpdateMembershipSchema.parse(data);
|
|
204
|
-
const membership = await this.apiRequest(`/memberships/${membershipId}`, {
|
|
205
|
-
method: "PUT",
|
|
206
|
-
body: JSON.stringify(validated)
|
|
207
|
-
});
|
|
208
|
-
return {
|
|
209
|
-
...membership,
|
|
210
|
-
createdAt: membership.createdAt,
|
|
211
|
-
updatedAt: membership.updatedAt
|
|
212
|
-
};
|
|
161
|
+
if (params?.limit) {
|
|
162
|
+
searchParams.append("limit", params.limit.toString());
|
|
213
163
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
*/
|
|
217
|
-
async deleteMembership(membershipId) {
|
|
218
|
-
MembershipIdParamSchema.parse({ id: membershipId });
|
|
219
|
-
await this.apiRequest(`/memberships/${membershipId}`, {
|
|
220
|
-
method: "DELETE"
|
|
221
|
-
});
|
|
164
|
+
if (params?.before) {
|
|
165
|
+
searchParams.append("before", params.before);
|
|
222
166
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
*/
|
|
226
|
-
async deactivateMembership(membershipId) {
|
|
227
|
-
MembershipIdParamSchema.parse({ id: membershipId });
|
|
228
|
-
const membership = await this.apiRequest(`/memberships/${membershipId}/deactivate`, {
|
|
229
|
-
method: "POST"
|
|
230
|
-
});
|
|
231
|
-
return {
|
|
232
|
-
...membership,
|
|
233
|
-
createdAt: membership.createdAt,
|
|
234
|
-
updatedAt: membership.updatedAt
|
|
235
|
-
};
|
|
167
|
+
if (params?.after) {
|
|
168
|
+
searchParams.append("after", params.after);
|
|
236
169
|
}
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
*/
|
|
240
|
-
async reactivateMembership(membershipId) {
|
|
241
|
-
MembershipIdParamSchema.parse({ id: membershipId });
|
|
242
|
-
const membership = await this.apiRequest(`/memberships/${membershipId}/reactivate`, {
|
|
243
|
-
method: "POST"
|
|
244
|
-
});
|
|
245
|
-
return {
|
|
246
|
-
...membership,
|
|
247
|
-
createdAt: membership.createdAt,
|
|
248
|
-
updatedAt: membership.updatedAt
|
|
249
|
-
};
|
|
170
|
+
if (params?.order) {
|
|
171
|
+
searchParams.append("order", params.order);
|
|
250
172
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
* any other state is refused with a 409 rather than guessed at.
|
|
257
|
-
*/
|
|
258
|
-
async repairMembershipLink(membershipId) {
|
|
259
|
-
MembershipIdParamSchema.parse({ id: membershipId });
|
|
260
|
-
const membership = await this.apiRequest(`/memberships/${membershipId}/repair-link`, {
|
|
261
|
-
method: "POST"
|
|
262
|
-
});
|
|
263
|
-
return {
|
|
173
|
+
const url = `/memberships${searchParams.toString() ? `?${searchParams.toString()}` : ""}`;
|
|
174
|
+
const response = await apiRequest(url);
|
|
175
|
+
return {
|
|
176
|
+
...response,
|
|
177
|
+
data: response.data.map((membership) => ({
|
|
264
178
|
...membership,
|
|
265
179
|
createdAt: membership.createdAt,
|
|
266
180
|
updatedAt: membership.updatedAt
|
|
267
|
-
}
|
|
268
|
-
}
|
|
181
|
+
}))
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
async function getMembership(apiRequest, membershipId) {
|
|
185
|
+
MembershipIdParamSchema.parse({ id: membershipId });
|
|
186
|
+
const membership = await apiRequest(`/memberships/${membershipId}`);
|
|
187
|
+
return {
|
|
188
|
+
...membership,
|
|
189
|
+
createdAt: membership.createdAt,
|
|
190
|
+
updatedAt: membership.updatedAt
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
async function createMembership(apiRequest, data) {
|
|
194
|
+
const validated = CreateMembershipSchema.parse(data);
|
|
195
|
+
const membership = await apiRequest("/memberships", {
|
|
196
|
+
method: "POST",
|
|
197
|
+
body: JSON.stringify(validated)
|
|
198
|
+
});
|
|
199
|
+
return {
|
|
200
|
+
...membership,
|
|
201
|
+
createdAt: membership.createdAt,
|
|
202
|
+
updatedAt: membership.updatedAt
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
async function updateMembership(apiRequest, membershipId, data) {
|
|
206
|
+
MembershipIdParamSchema.parse({ id: membershipId });
|
|
207
|
+
const validated = UpdateMembershipSchema.parse(data);
|
|
208
|
+
const membership = await apiRequest(`/memberships/${membershipId}`, {
|
|
209
|
+
method: "PUT",
|
|
210
|
+
body: JSON.stringify(validated)
|
|
211
|
+
});
|
|
212
|
+
return {
|
|
213
|
+
...membership,
|
|
214
|
+
createdAt: membership.createdAt,
|
|
215
|
+
updatedAt: membership.updatedAt
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
async function deleteMembership(apiRequest, membershipId) {
|
|
219
|
+
MembershipIdParamSchema.parse({ id: membershipId });
|
|
220
|
+
await apiRequest(`/memberships/${membershipId}`, {
|
|
221
|
+
method: "DELETE"
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
async function deactivateMembership(apiRequest, membershipId) {
|
|
225
|
+
MembershipIdParamSchema.parse({ id: membershipId });
|
|
226
|
+
const membership = await apiRequest(`/memberships/${membershipId}/deactivate`, {
|
|
227
|
+
method: "POST"
|
|
228
|
+
});
|
|
229
|
+
return {
|
|
230
|
+
...membership,
|
|
231
|
+
createdAt: membership.createdAt,
|
|
232
|
+
updatedAt: membership.updatedAt
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
async function reactivateMembership(apiRequest, membershipId) {
|
|
236
|
+
MembershipIdParamSchema.parse({ id: membershipId });
|
|
237
|
+
const membership = await apiRequest(`/memberships/${membershipId}/reactivate`, {
|
|
238
|
+
method: "POST"
|
|
239
|
+
});
|
|
240
|
+
return {
|
|
241
|
+
...membership,
|
|
242
|
+
createdAt: membership.createdAt,
|
|
243
|
+
updatedAt: membership.updatedAt
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
async function repairMembershipLink(apiRequest, membershipId) {
|
|
247
|
+
MembershipIdParamSchema.parse({ id: membershipId });
|
|
248
|
+
const membership = await apiRequest(`/memberships/${membershipId}/repair-link`, {
|
|
249
|
+
method: "POST"
|
|
250
|
+
});
|
|
251
|
+
return {
|
|
252
|
+
...membership,
|
|
253
|
+
createdAt: membership.createdAt,
|
|
254
|
+
updatedAt: membership.updatedAt
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// src/hooks/settings/organization/queryKeys.ts
|
|
259
|
+
var membershipsKeys = {
|
|
260
|
+
all: ["memberships"],
|
|
261
|
+
user: (userId, params) => [...membershipsKeys.all, "user", userId, params]
|
|
269
262
|
};
|
|
270
263
|
function useUserMemberships(userId, params) {
|
|
271
264
|
const { apiRequest, isReady } = useElevasisServices();
|
|
272
265
|
return useQuery({
|
|
273
|
-
queryKey:
|
|
274
|
-
queryFn:
|
|
275
|
-
const membershipService = new OrganizationMembershipService(apiRequest);
|
|
276
|
-
return await membershipService.getUserMemberships(userId);
|
|
277
|
-
},
|
|
266
|
+
queryKey: membershipsKeys.user(userId, params),
|
|
267
|
+
queryFn: () => getUserMemberships(apiRequest, userId),
|
|
278
268
|
enabled: isReady && !!userId,
|
|
279
269
|
refetchOnWindowFocus: false,
|
|
280
270
|
staleTime: STALE_TIME_DEFAULT,
|
|
@@ -286,17 +276,14 @@ function useDeactivateMembership() {
|
|
|
286
276
|
const adapter = useNotificationAdapter();
|
|
287
277
|
const queryClient = useQueryClient();
|
|
288
278
|
return useMutation({
|
|
289
|
-
mutationFn:
|
|
290
|
-
const membershipService = new OrganizationMembershipService(apiRequest);
|
|
291
|
-
return await membershipService.deactivateMembership(membershipId);
|
|
292
|
-
},
|
|
279
|
+
mutationFn: ({ membershipId }) => deactivateMembership(apiRequest, membershipId),
|
|
293
280
|
onError: (error) => {
|
|
294
281
|
adapter.apiError(error);
|
|
295
282
|
},
|
|
296
283
|
// Fires on both success and failure. A prior `onSuccess` invalidated the
|
|
297
284
|
// same key redundantly.
|
|
298
285
|
onSettled: () => {
|
|
299
|
-
queryClient.invalidateQueries({ queryKey:
|
|
286
|
+
queryClient.invalidateQueries({ queryKey: membershipsKeys.all });
|
|
300
287
|
}
|
|
301
288
|
});
|
|
302
289
|
}
|
|
@@ -305,15 +292,12 @@ function useReactivateMembership() {
|
|
|
305
292
|
const adapter = useNotificationAdapter();
|
|
306
293
|
const queryClient = useQueryClient();
|
|
307
294
|
return useMutation({
|
|
308
|
-
mutationFn:
|
|
309
|
-
const membershipService = new OrganizationMembershipService(apiRequest);
|
|
310
|
-
return await membershipService.reactivateMembership(membershipId);
|
|
311
|
-
},
|
|
295
|
+
mutationFn: ({ membershipId }) => reactivateMembership(apiRequest, membershipId),
|
|
312
296
|
onError: (error) => {
|
|
313
297
|
adapter.apiError(error);
|
|
314
298
|
},
|
|
315
299
|
onSettled: () => {
|
|
316
|
-
queryClient.invalidateQueries({ queryKey:
|
|
300
|
+
queryClient.invalidateQueries({ queryKey: membershipsKeys.all });
|
|
317
301
|
}
|
|
318
302
|
});
|
|
319
303
|
}
|
|
@@ -322,12 +306,42 @@ function useOrgRoles(orgId) {
|
|
|
322
306
|
const organization = useContext(OrganizationContext);
|
|
323
307
|
const targetOrgId = orgId ?? organization?.currentSupabaseOrganizationId ?? void 0;
|
|
324
308
|
return useQuery({
|
|
325
|
-
queryKey:
|
|
309
|
+
queryKey: orgRolesKeys.list(targetOrgId),
|
|
326
310
|
queryFn: () => apiRequest(`/organizations/${targetOrgId}/roles`),
|
|
327
311
|
enabled: isReady && !!targetOrgId,
|
|
328
312
|
staleTime: STALE_TIME_DEFAULT
|
|
329
313
|
});
|
|
330
314
|
}
|
|
315
|
+
function useUpdateOrgRole() {
|
|
316
|
+
const { apiRequest } = useElevasisServices();
|
|
317
|
+
const organization = useContext(OrganizationContext);
|
|
318
|
+
const orgId = organization?.currentSupabaseOrganizationId ?? null;
|
|
319
|
+
const queryClient = useQueryClient();
|
|
320
|
+
return useMutation({
|
|
321
|
+
mutationFn: ({ roleId, input }) => apiRequest(`/organizations/${orgId}/roles/${roleId}`, {
|
|
322
|
+
method: "PATCH",
|
|
323
|
+
body: JSON.stringify(input)
|
|
324
|
+
}),
|
|
325
|
+
onSettled: (_data, _error, { roleId }) => {
|
|
326
|
+
queryClient.invalidateQueries({ queryKey: orgRolesKeys.list(orgId) });
|
|
327
|
+
queryClient.invalidateQueries({ queryKey: ["org-role", orgId, roleId] });
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
function useDeleteOrgRole() {
|
|
332
|
+
const { apiRequest } = useElevasisServices();
|
|
333
|
+
const organization = useContext(OrganizationContext);
|
|
334
|
+
const orgId = organization?.currentSupabaseOrganizationId ?? null;
|
|
335
|
+
const queryClient = useQueryClient();
|
|
336
|
+
return useMutation({
|
|
337
|
+
mutationFn: (roleId) => apiRequest(`/organizations/${orgId}/roles/${roleId}`, {
|
|
338
|
+
method: "DELETE"
|
|
339
|
+
}),
|
|
340
|
+
onSettled: () => {
|
|
341
|
+
queryClient.invalidateQueries({ queryKey: orgRolesKeys.list(orgId) });
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
}
|
|
331
345
|
function useAssignRole() {
|
|
332
346
|
const { apiRequest } = useElevasisServices();
|
|
333
347
|
const organization = useContext(OrganizationContext);
|
|
@@ -339,9 +353,9 @@ function useAssignRole() {
|
|
|
339
353
|
body: JSON.stringify({ roleId })
|
|
340
354
|
}),
|
|
341
355
|
onSettled: (_data, _error, { membershipId }) => {
|
|
342
|
-
queryClient.invalidateQueries({ queryKey:
|
|
356
|
+
queryClient.invalidateQueries({ queryKey: memberRolesKeys.detail(orgId, membershipId) });
|
|
343
357
|
queryClient.invalidateQueries({ queryKey: ["organization-permissions", orgId] });
|
|
344
|
-
queryClient.invalidateQueries({ queryKey:
|
|
358
|
+
queryClient.invalidateQueries({ queryKey: orgRolesKeys.list(orgId) });
|
|
345
359
|
}
|
|
346
360
|
});
|
|
347
361
|
}
|
|
@@ -355,12 +369,23 @@ function useRevokeRole() {
|
|
|
355
369
|
method: "DELETE"
|
|
356
370
|
}),
|
|
357
371
|
onSettled: (_data, _error, { membershipId }) => {
|
|
358
|
-
queryClient.invalidateQueries({ queryKey:
|
|
372
|
+
queryClient.invalidateQueries({ queryKey: memberRolesKeys.detail(orgId, membershipId) });
|
|
359
373
|
queryClient.invalidateQueries({ queryKey: ["organization-permissions", orgId] });
|
|
360
|
-
queryClient.invalidateQueries({ queryKey:
|
|
374
|
+
queryClient.invalidateQueries({ queryKey: orgRolesKeys.list(orgId) });
|
|
361
375
|
}
|
|
362
376
|
});
|
|
363
377
|
}
|
|
378
|
+
function useEffectivePermissions(membershipId) {
|
|
379
|
+
const { apiRequest, isReady } = useElevasisServices();
|
|
380
|
+
const organization = useContext(OrganizationContext);
|
|
381
|
+
const orgId = organization?.currentSupabaseOrganizationId ?? null;
|
|
382
|
+
return useQuery({
|
|
383
|
+
queryKey: memberRolesKeys.detail(orgId, membershipId),
|
|
384
|
+
queryFn: () => apiRequest(`/memberships/${membershipId}/effective-permissions`),
|
|
385
|
+
enabled: isReady && !!membershipId,
|
|
386
|
+
staleTime: STALE_TIME_DEFAULT
|
|
387
|
+
});
|
|
388
|
+
}
|
|
364
389
|
|
|
365
390
|
// src/hooks/settings/webhooks/webhookEndpointService.ts
|
|
366
391
|
var WebhookEndpointService = class {
|
|
@@ -401,10 +426,16 @@ var WebhookEndpointService = class {
|
|
|
401
426
|
});
|
|
402
427
|
}
|
|
403
428
|
};
|
|
429
|
+
|
|
430
|
+
// src/hooks/settings/webhooks/queryKeys.ts
|
|
431
|
+
var webhookEndpointsKeys = {
|
|
432
|
+
all: ["webhook-endpoints"],
|
|
433
|
+
list: (organizationId) => [...webhookEndpointsKeys.all, organizationId]
|
|
434
|
+
};
|
|
404
435
|
function useListWebhookEndpoints() {
|
|
405
436
|
const { apiRequest, workOSOrganizationId, isReady } = useElevasisServices();
|
|
406
437
|
return useQuery({
|
|
407
|
-
queryKey:
|
|
438
|
+
queryKey: webhookEndpointsKeys.list(workOSOrganizationId),
|
|
408
439
|
queryFn: async () => {
|
|
409
440
|
const service = new WebhookEndpointService(apiRequest);
|
|
410
441
|
return await service.listEndpoints();
|
|
@@ -421,7 +452,7 @@ function useCreateWebhookEndpoint() {
|
|
|
421
452
|
return await service.createEndpoint(data);
|
|
422
453
|
},
|
|
423
454
|
onSuccess: () => {
|
|
424
|
-
queryClient.invalidateQueries({ queryKey:
|
|
455
|
+
queryClient.invalidateQueries({ queryKey: webhookEndpointsKeys.all });
|
|
425
456
|
},
|
|
426
457
|
onError: (error) => {
|
|
427
458
|
console.error("Failed to create webhook endpoint:", error);
|
|
@@ -438,7 +469,7 @@ function useDeleteWebhookEndpoint() {
|
|
|
438
469
|
return await service.deleteEndpoint(endpointId);
|
|
439
470
|
},
|
|
440
471
|
onSuccess: () => {
|
|
441
|
-
queryClient.invalidateQueries({ queryKey:
|
|
472
|
+
queryClient.invalidateQueries({ queryKey: webhookEndpointsKeys.all });
|
|
442
473
|
notifications.show({
|
|
443
474
|
title: "Success",
|
|
444
475
|
message: "Webhook endpoint deleted",
|
|
@@ -460,7 +491,7 @@ function useUpdateWebhookEndpoint() {
|
|
|
460
491
|
return await service.updateEndpoint(endpointId, data);
|
|
461
492
|
},
|
|
462
493
|
onSuccess: () => {
|
|
463
|
-
queryClient.invalidateQueries({ queryKey:
|
|
494
|
+
queryClient.invalidateQueries({ queryKey: webhookEndpointsKeys.all });
|
|
464
495
|
notifications.show({
|
|
465
496
|
title: "Success",
|
|
466
497
|
message: "Webhook endpoint updated",
|
|
@@ -512,4 +543,4 @@ function useOrganizationMembers(organizationId, params) {
|
|
|
512
543
|
});
|
|
513
544
|
}
|
|
514
545
|
|
|
515
|
-
export { MEMBERSHIP_STATUS_COLORS,
|
|
546
|
+
export { MEMBERSHIP_STATUS_COLORS, PROVISIONING_STATE_DISPLAY, WebhookEndpointService, createMembership, deactivateMembership, deleteMembership, getMembership, getOrganizationMembers, getUserMemberships, listMemberships, memberRolesKeys, membershipsKeys, orgRolesKeys, reactivateMembership, repairMembershipLink, transformMembershipToTableRow, updateMembership, useAssignRole, useCreateOrgRole, useCreateWebhookEndpoint, useDeactivateMembership, useDeleteOrgRole, useDeleteWebhookEndpoint, useEffectivePermissions, useListWebhookEndpoints, useOrgRoles, useOrganizationMembers, usePermissionCatalog, useReactivateMembership, useRevokeRole, useUpdateOrgRole, useUpdateWebhookEndpoint, useUserMemberships, webhookEndpointsKeys };
|
|
@@ -116,28 +116,19 @@ function getErrorInfo(error) {
|
|
|
116
116
|
message: String(error)
|
|
117
117
|
};
|
|
118
118
|
}
|
|
119
|
+
var ERROR_TITLES = {
|
|
120
|
+
VALIDATION_ERROR: "Validation Error",
|
|
121
|
+
AUTHENTICATION_FAILED: "Authentication Required",
|
|
122
|
+
FORBIDDEN: "Access Denied",
|
|
123
|
+
NOT_FOUND: "Not Found",
|
|
124
|
+
CONFLICT: "Conflict",
|
|
125
|
+
RATE_LIMIT_EXCEEDED: "Rate Limit Exceeded",
|
|
126
|
+
INTERNAL_SERVER_ERROR: "Server Error",
|
|
127
|
+
SERVICE_UNAVAILABLE: "Service Temporarily Unavailable"
|
|
128
|
+
};
|
|
119
129
|
function getErrorTitle(code) {
|
|
120
130
|
if (!code) return "Error";
|
|
121
|
-
|
|
122
|
-
case "VALIDATION_ERROR":
|
|
123
|
-
return "Validation Error";
|
|
124
|
-
case "AUTHENTICATION_FAILED":
|
|
125
|
-
return "Authentication Required";
|
|
126
|
-
case "FORBIDDEN":
|
|
127
|
-
return "Access Denied";
|
|
128
|
-
case "NOT_FOUND":
|
|
129
|
-
return "Not Found";
|
|
130
|
-
case "CONFLICT":
|
|
131
|
-
return "Conflict";
|
|
132
|
-
case "RATE_LIMIT_EXCEEDED":
|
|
133
|
-
return "Rate Limit Exceeded";
|
|
134
|
-
case "INTERNAL_SERVER_ERROR":
|
|
135
|
-
return "Server Error";
|
|
136
|
-
case "SERVICE_UNAVAILABLE":
|
|
137
|
-
return "Service Temporarily Unavailable";
|
|
138
|
-
default:
|
|
139
|
-
return "Error";
|
|
140
|
-
}
|
|
131
|
+
return ERROR_TITLES[code] ?? "Error";
|
|
141
132
|
}
|
|
142
133
|
function formatErrorMessage(message, requestId, fields, retryAfter) {
|
|
143
134
|
let formatted = message;
|
|
@@ -165,6 +156,17 @@ Request ID: ${requestId}`;
|
|
|
165
156
|
}
|
|
166
157
|
return formatted;
|
|
167
158
|
}
|
|
159
|
+
|
|
160
|
+
// src/utils/queryString.ts
|
|
161
|
+
function buildQueryString(params) {
|
|
162
|
+
const searchParams = new URLSearchParams();
|
|
163
|
+
for (const [key, value] of Object.entries(params)) {
|
|
164
|
+
if (value === void 0) continue;
|
|
165
|
+
searchParams.set(key, String(value));
|
|
166
|
+
}
|
|
167
|
+
const queryString = searchParams.toString();
|
|
168
|
+
return queryString ? `?${queryString}` : "";
|
|
169
|
+
}
|
|
168
170
|
var ORGANIZATION_MODEL_ICON_TOKENS = [
|
|
169
171
|
// Navigation / app areas
|
|
170
172
|
"dashboard",
|
|
@@ -1528,4 +1530,4 @@ function setupBrowserMocks() {
|
|
|
1528
1530
|
setupResizeObserver();
|
|
1529
1531
|
}
|
|
1530
1532
|
|
|
1531
|
-
export { APIClientError, API_URL, ActionInvocationSchema, ActionSchema, ActionsDomainSchema, DEBOUNCE_FILTER, DEBOUNCE_SLIDER, DEFAULT_ONTOLOGY_SCOPE, DEFAULT_ORGANIZATION_MODEL_ACTIONS, DEFAULT_ORGANIZATION_MODEL_SYSTEMS, DescriptionSchema, EntitiesDomainSchema, EntitySchema, GC_TIME_LONG, GC_TIME_MEDIUM, GC_TIME_SHORT, IconNameSchema, JsonValueSchema, LIMIT_ACTIVITY_FEED, LabelSchema, ModelIdSchema, NodeIdStringSchema, OAUTH_FLOW_TIMEOUT, OntologyIdSchema, OntologyScopeSchema, PAGE_SIZE_DEFAULT, PathSchema, STALE_TIME_ADMIN, STALE_TIME_DEFAULT, STALE_TIME_MONITORING, SYSTEM_INTERFACE_PROFILES, SystemEntrySchema, SystemIdSchema, SystemInterfaceRefSchema, SystemLifecycleSchema, SystemPathSchema, SystemsDomainSchema, addReadinessIssue, ancestorsOf, childrenOf, compileOrganizationOntology, computeInterfaceReadiness, defaultPathFor, devOnlyFor, findById, findByPath, formatChartAxisDate, formatDate, formatDateTime, formatErrorMessage, formatInterfaceIdentity, formatOntologyId, formatRelativeTime, formatTimeAgo, getErrorInfo, getErrorTitle, getResourceColor, getResourceIcon, getResourcesForSystem, getSystem, getSystemAncestors, getSystemReadinessServerErrorDetails, isAPIClientError, isSystemLifecycleVisible, listAllSystems, listResolvedOntologyRecords, ontologyGraphNodeId, parentOf, parseOntologyId, registerBuiltInReadinessProfile, registerReadinessInterfaceMarker, requireCatalogReadiness, requireContractReadiness, requireScopedBinding, resolveReadinessRemedy, resolveSystemConfig, resourceBindingIds, restoreConsole, setupBrowserMocks, suppressKnownWarnings, systemLifecycleAllowsAccess, topLevel, validateEmail };
|
|
1533
|
+
export { APIClientError, API_URL, ActionInvocationSchema, ActionSchema, ActionsDomainSchema, DEBOUNCE_FILTER, DEBOUNCE_SLIDER, DEFAULT_ONTOLOGY_SCOPE, DEFAULT_ORGANIZATION_MODEL_ACTIONS, DEFAULT_ORGANIZATION_MODEL_SYSTEMS, DescriptionSchema, EntitiesDomainSchema, EntitySchema, GC_TIME_LONG, GC_TIME_MEDIUM, GC_TIME_SHORT, IconNameSchema, JsonValueSchema, LIMIT_ACTIVITY_FEED, LabelSchema, ModelIdSchema, NodeIdStringSchema, OAUTH_FLOW_TIMEOUT, OntologyIdSchema, OntologyScopeSchema, PAGE_SIZE_DEFAULT, PathSchema, STALE_TIME_ADMIN, STALE_TIME_DEFAULT, STALE_TIME_MONITORING, SYSTEM_INTERFACE_PROFILES, SystemEntrySchema, SystemIdSchema, SystemInterfaceRefSchema, SystemLifecycleSchema, SystemPathSchema, SystemsDomainSchema, addReadinessIssue, ancestorsOf, buildQueryString, childrenOf, compileOrganizationOntology, computeInterfaceReadiness, defaultPathFor, devOnlyFor, findById, findByPath, formatChartAxisDate, formatDate, formatDateTime, formatErrorMessage, formatInterfaceIdentity, formatOntologyId, formatRelativeTime, formatTimeAgo, getErrorInfo, getErrorTitle, getResourceColor, getResourceIcon, getResourcesForSystem, getSystem, getSystemAncestors, getSystemReadinessServerErrorDetails, isAPIClientError, isSystemLifecycleVisible, listAllSystems, listResolvedOntologyRecords, ontologyGraphNodeId, parentOf, parseOntologyId, registerBuiltInReadinessProfile, registerReadinessInterfaceMarker, requireCatalogReadiness, requireContractReadiness, requireScopedBinding, resolveReadinessRemedy, resolveSystemConfig, resourceBindingIds, restoreConsole, setupBrowserMocks, suppressKnownWarnings, systemLifecycleAllowsAccess, topLevel, validateEmail };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { dealKeys } from './chunk-
|
|
2
|
-
import { showApiErrorNotification } from './chunk-
|
|
3
|
-
import { APIClientError } from './chunk-
|
|
1
|
+
import { dealKeys } from './chunk-7A25EJ4A.js';
|
|
2
|
+
import { showApiErrorNotification } from './chunk-3HMRK3RC.js';
|
|
3
|
+
import { APIClientError } from './chunk-CIGWHY7C.js';
|
|
4
4
|
import { useElevasisServices } from './chunk-BI5VDO2K.js';
|
|
5
5
|
import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
|
|
6
6
|
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { UuidSchema } from './chunk-
|
|
1
|
+
import { PaginationQuerySchema, UuidSchema } from './chunk-34B3ACOZ.js';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
var NotificationCategorySchema = z.enum(["info", "queue", "alert", "error", "system"]);
|
|
5
5
|
var GetNotificationsQuerySchema = z.object({
|
|
6
|
-
|
|
7
|
-
offset: z.coerce.number().int().min(0).default(0)
|
|
6
|
+
...PaginationQuerySchema.shape
|
|
8
7
|
});
|
|
9
8
|
var MarkAsReadParamsSchema = z.object({
|
|
10
9
|
id: UuidSchema
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { showApiErrorNotification } from './chunk-
|
|
1
|
+
import { showApiErrorNotification } from './chunk-3HMRK3RC.js';
|
|
2
|
+
import { buildQueryString } from './chunk-CIGWHY7C.js';
|
|
2
3
|
import { useElevasisServices } from './chunk-BI5VDO2K.js';
|
|
3
4
|
import { useQuery, useQueryClient, useMutation } from '@tanstack/react-query';
|
|
4
5
|
|
|
@@ -18,14 +19,14 @@ function useClients(filters = {}) {
|
|
|
18
19
|
queryKey: clientsKeys.list(workOSOrganizationId ?? void 0, filters),
|
|
19
20
|
queryFn: async () => {
|
|
20
21
|
const { status, source, search, limit, offset } = filters;
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return apiRequest(`/clients${query
|
|
22
|
+
const query = buildQueryString({
|
|
23
|
+
status: status || void 0,
|
|
24
|
+
source: source || void 0,
|
|
25
|
+
search: search || void 0,
|
|
26
|
+
limit,
|
|
27
|
+
offset
|
|
28
|
+
});
|
|
29
|
+
return apiRequest(`/clients${query}`);
|
|
29
30
|
},
|
|
30
31
|
enabled: isReady
|
|
31
32
|
});
|