@workos-inc/widgets 0.0.0-pre.0 → 0.0.0-pre.2

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 (170) hide show
  1. package/dist/cjs/lib/api/role.d.ts.map +1 -1
  2. package/dist/cjs/lib/api/role.js +35 -14
  3. package/dist/cjs/lib/api/role.js.map +1 -1
  4. package/dist/cjs/lib/api/user.d.ts.map +1 -1
  5. package/dist/cjs/lib/api/user.js +105 -67
  6. package/dist/cjs/lib/api/user.js.map +1 -1
  7. package/dist/cjs/lib/constants.d.ts +2 -1
  8. package/dist/cjs/lib/constants.d.ts.map +1 -1
  9. package/dist/cjs/lib/constants.js +3 -2
  10. package/dist/cjs/lib/constants.js.map +1 -1
  11. package/dist/cjs/lib/delete-user-dialog.d.ts.map +1 -1
  12. package/dist/cjs/lib/delete-user-dialog.js +1 -1
  13. package/dist/cjs/lib/delete-user-dialog.js.map +1 -1
  14. package/dist/cjs/lib/edit-user-details-dialog.d.ts.map +1 -1
  15. package/dist/cjs/lib/edit-user-details-dialog.js +3 -5
  16. package/dist/cjs/lib/edit-user-details-dialog.js.map +1 -1
  17. package/dist/cjs/lib/elements.d.ts +21 -12
  18. package/dist/cjs/lib/elements.d.ts.map +1 -1
  19. package/dist/cjs/lib/elements.js +118 -30
  20. package/dist/cjs/lib/elements.js.map +1 -1
  21. package/dist/cjs/lib/error-boundary.d.ts +58 -0
  22. package/dist/cjs/lib/error-boundary.d.ts.map +1 -0
  23. package/dist/cjs/lib/error-boundary.js +113 -0
  24. package/dist/cjs/lib/error-boundary.js.map +1 -0
  25. package/dist/cjs/lib/errors.d.ts +34 -0
  26. package/dist/cjs/lib/errors.d.ts.map +1 -0
  27. package/dist/cjs/lib/errors.js +40 -0
  28. package/dist/cjs/lib/errors.js.map +1 -0
  29. package/dist/cjs/lib/invite-user-dialog.d.ts.map +1 -1
  30. package/dist/cjs/lib/invite-user-dialog.js +2 -2
  31. package/dist/cjs/lib/invite-user-dialog.js.map +1 -1
  32. package/dist/cjs/lib/resend-invite-dialog.d.ts.map +1 -1
  33. package/dist/cjs/lib/resend-invite-dialog.js +2 -2
  34. package/dist/cjs/lib/resend-invite-dialog.js.map +1 -1
  35. package/dist/cjs/lib/revoke-invite-dialog.d.ts.map +1 -1
  36. package/dist/cjs/lib/revoke-invite-dialog.js +1 -1
  37. package/dist/cjs/lib/revoke-invite-dialog.js.map +1 -1
  38. package/dist/cjs/lib/use-layout-effect.d.ts +4 -0
  39. package/dist/cjs/lib/use-layout-effect.d.ts.map +1 -0
  40. package/dist/cjs/lib/use-layout-effect.js +8 -0
  41. package/dist/cjs/lib/use-layout-effect.js.map +1 -0
  42. package/dist/cjs/lib/user-actions-dropdown.d.ts.map +1 -1
  43. package/dist/cjs/lib/user-actions-dropdown.js +2 -9
  44. package/dist/cjs/lib/user-actions-dropdown.js.map +1 -1
  45. package/dist/cjs/lib/users-filter.d.ts +1 -0
  46. package/dist/cjs/lib/users-filter.d.ts.map +1 -1
  47. package/dist/cjs/lib/users-filter.js +2 -9
  48. package/dist/cjs/lib/users-filter.js.map +1 -1
  49. package/dist/cjs/lib/users-management-context.d.ts +2 -2
  50. package/dist/cjs/lib/users-management-context.d.ts.map +1 -1
  51. package/dist/cjs/lib/users-management.d.ts +9 -6
  52. package/dist/cjs/lib/users-management.d.ts.map +1 -1
  53. package/dist/cjs/lib/users-management.js +77 -20
  54. package/dist/cjs/lib/users-management.js.map +1 -1
  55. package/dist/cjs/lib/users-search.d.ts.map +1 -1
  56. package/dist/cjs/lib/users-search.js +3 -9
  57. package/dist/cjs/lib/users-search.js.map +1 -1
  58. package/dist/cjs/lib/utils.d.ts +2 -0
  59. package/dist/cjs/lib/utils.d.ts.map +1 -1
  60. package/dist/cjs/lib/utils.js +18 -0
  61. package/dist/cjs/lib/utils.js.map +1 -1
  62. package/dist/cjs/users-management.client.d.ts +1 -1
  63. package/dist/cjs/users-management.client.d.ts.map +1 -1
  64. package/dist/cjs/users-management.client.js +15 -5
  65. package/dist/cjs/users-management.client.js.map +1 -1
  66. package/dist/cjs/workos-widgets.client.d.ts.map +1 -1
  67. package/dist/cjs/workos-widgets.client.js +2 -1
  68. package/dist/cjs/workos-widgets.client.js.map +1 -1
  69. package/dist/esm/lib/api/role.d.ts.map +1 -1
  70. package/dist/esm/lib/api/role.js +35 -14
  71. package/dist/esm/lib/api/role.js.map +1 -1
  72. package/dist/esm/lib/api/user.d.ts.map +1 -1
  73. package/dist/esm/lib/api/user.js +105 -67
  74. package/dist/esm/lib/api/user.js.map +1 -1
  75. package/dist/esm/lib/constants.d.ts +2 -1
  76. package/dist/esm/lib/constants.d.ts.map +1 -1
  77. package/dist/esm/lib/constants.js +2 -1
  78. package/dist/esm/lib/constants.js.map +1 -1
  79. package/dist/esm/lib/delete-user-dialog.d.ts.map +1 -1
  80. package/dist/esm/lib/delete-user-dialog.js +2 -2
  81. package/dist/esm/lib/delete-user-dialog.js.map +1 -1
  82. package/dist/esm/lib/edit-user-details-dialog.d.ts.map +1 -1
  83. package/dist/esm/lib/edit-user-details-dialog.js +4 -6
  84. package/dist/esm/lib/edit-user-details-dialog.js.map +1 -1
  85. package/dist/esm/lib/elements.d.ts +21 -12
  86. package/dist/esm/lib/elements.d.ts.map +1 -1
  87. package/dist/esm/lib/elements.js +95 -30
  88. package/dist/esm/lib/elements.js.map +1 -1
  89. package/dist/esm/lib/error-boundary.d.ts +58 -0
  90. package/dist/esm/lib/error-boundary.d.ts.map +1 -0
  91. package/dist/esm/lib/error-boundary.js +86 -0
  92. package/dist/esm/lib/error-boundary.js.map +1 -0
  93. package/dist/esm/lib/errors.d.ts +34 -0
  94. package/dist/esm/lib/errors.d.ts.map +1 -0
  95. package/dist/esm/lib/errors.js +34 -0
  96. package/dist/esm/lib/errors.js.map +1 -0
  97. package/dist/esm/lib/invite-user-dialog.d.ts.map +1 -1
  98. package/dist/esm/lib/invite-user-dialog.js +3 -3
  99. package/dist/esm/lib/invite-user-dialog.js.map +1 -1
  100. package/dist/esm/lib/resend-invite-dialog.d.ts.map +1 -1
  101. package/dist/esm/lib/resend-invite-dialog.js +3 -3
  102. package/dist/esm/lib/resend-invite-dialog.js.map +1 -1
  103. package/dist/esm/lib/revoke-invite-dialog.d.ts.map +1 -1
  104. package/dist/esm/lib/revoke-invite-dialog.js +2 -2
  105. package/dist/esm/lib/revoke-invite-dialog.js.map +1 -1
  106. package/dist/esm/lib/use-layout-effect.d.ts +4 -0
  107. package/dist/esm/lib/use-layout-effect.d.ts.map +1 -0
  108. package/dist/esm/lib/use-layout-effect.js +5 -0
  109. package/dist/esm/lib/use-layout-effect.js.map +1 -0
  110. package/dist/esm/lib/user-actions-dropdown.d.ts.map +1 -1
  111. package/dist/esm/lib/user-actions-dropdown.js +3 -10
  112. package/dist/esm/lib/user-actions-dropdown.js.map +1 -1
  113. package/dist/esm/lib/users-filter.d.ts +1 -0
  114. package/dist/esm/lib/users-filter.d.ts.map +1 -1
  115. package/dist/esm/lib/users-filter.js +4 -11
  116. package/dist/esm/lib/users-filter.js.map +1 -1
  117. package/dist/esm/lib/users-management-context.d.ts +2 -2
  118. package/dist/esm/lib/users-management-context.d.ts.map +1 -1
  119. package/dist/esm/lib/users-management.d.ts +9 -6
  120. package/dist/esm/lib/users-management.d.ts.map +1 -1
  121. package/dist/esm/lib/users-management.js +74 -22
  122. package/dist/esm/lib/users-management.js.map +1 -1
  123. package/dist/esm/lib/users-search.d.ts.map +1 -1
  124. package/dist/esm/lib/users-search.js +5 -11
  125. package/dist/esm/lib/users-search.js.map +1 -1
  126. package/dist/esm/lib/utils.d.ts +2 -0
  127. package/dist/esm/lib/utils.d.ts.map +1 -1
  128. package/dist/esm/lib/utils.js +13 -0
  129. package/dist/esm/lib/utils.js.map +1 -1
  130. package/dist/esm/users-management.client.d.ts +1 -1
  131. package/dist/esm/users-management.client.d.ts.map +1 -1
  132. package/dist/esm/users-management.client.js +16 -6
  133. package/dist/esm/users-management.client.js.map +1 -1
  134. package/dist/esm/workos-widgets.client.d.ts.map +1 -1
  135. package/dist/esm/workos-widgets.client.js +2 -1
  136. package/dist/esm/workos-widgets.client.js.map +1 -1
  137. package/dist/tsconfig.cjs.tsbuildinfo +1 -1
  138. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  139. package/package.json +9 -4
  140. package/src/base.css +111 -0
  141. package/src/lib/api/role.ts +39 -16
  142. package/src/lib/api/user.ts +119 -75
  143. package/src/lib/constants.ts +2 -1
  144. package/src/lib/delete-user-dialog.tsx +7 -3
  145. package/src/lib/edit-user-details-dialog.tsx +15 -10
  146. package/src/lib/elements.tsx +242 -61
  147. package/src/lib/error-boundary.tsx +166 -0
  148. package/src/lib/errors.ts +49 -0
  149. package/src/lib/invite-user-dialog.tsx +21 -12
  150. package/src/lib/resend-invite-dialog.tsx +11 -5
  151. package/src/lib/revoke-invite-dialog.tsx +7 -3
  152. package/src/lib/use-layout-effect.ts +6 -0
  153. package/src/lib/user-actions-dropdown.tsx +8 -16
  154. package/src/lib/users-filter.tsx +13 -73
  155. package/src/lib/users-management-context.tsx +1 -1
  156. package/src/lib/users-management.tsx +345 -184
  157. package/src/lib/users-search.tsx +5 -63
  158. package/src/lib/utils.ts +21 -0
  159. package/src/users-management.client.tsx +39 -16
  160. package/src/users-management.css +4 -0
  161. package/src/workos-widgets.client.tsx +2 -1
  162. package/dist/cjs/lib/pagination.d.ts +0 -8
  163. package/dist/cjs/lib/pagination.d.ts.map +0 -1
  164. package/dist/cjs/lib/pagination.js +0 -67
  165. package/dist/cjs/lib/pagination.js.map +0 -1
  166. package/dist/esm/lib/pagination.d.ts +0 -8
  167. package/dist/esm/lib/pagination.d.ts.map +0 -1
  168. package/dist/esm/lib/pagination.js +0 -40
  169. package/dist/esm/lib/pagination.js.map +0 -1
  170. package/src/lib/pagination.tsx +0 -69
@@ -12,6 +12,7 @@ import { parseErrorResponse } from "../utils";
12
12
  import { useWorkOsApiUrl } from "../widgets-context";
13
13
  import { API_ENDPOINTS } from "./config";
14
14
  import { USER_ROW_LIMIT, WIDGETS_API_VERSION } from "../constants";
15
+ import { ApiError, FetchError, NoAuthTokenError } from "../errors";
15
16
 
16
17
  export interface PaginationData {
17
18
  before?: string;
@@ -54,15 +55,6 @@ export type Paginated<T> = { data: T; pagination: PaginationData };
54
55
 
55
56
  type PaginatedUsers = Paginated<User[]>;
56
57
 
57
- class InviteUserError extends Error {
58
- status: number;
59
- constructor(args: { message: string; status: number }) {
60
- super(args.message);
61
- this.name = "InviteUserError";
62
- this.status = args.status;
63
- }
64
- }
65
-
66
58
  export const useUsers = (context?: UsersManagementContextType) => {
67
59
  const {
68
60
  authToken,
@@ -206,6 +198,8 @@ export const useResendUserInvite = (args?: {
206
198
  });
207
199
  };
208
200
 
201
+ type AuthToken = () => Promise<string>;
202
+
209
203
  /**
210
204
  * Fetch functions
211
205
  */
@@ -219,7 +213,7 @@ async function fetchUsers({
219
213
  searchQuery,
220
214
  }: {
221
215
  baseUrl: string;
222
- authToken: string | null;
216
+ authToken: AuthToken | null;
223
217
  limit: number;
224
218
  before: string | undefined;
225
219
  after: string | undefined;
@@ -227,7 +221,7 @@ async function fetchUsers({
227
221
  role: string | null;
228
222
  }) {
229
223
  if (!authToken) {
230
- throw new Error("No auth token provided");
224
+ throw new NoAuthTokenError();
231
225
  }
232
226
  const url = new URL(`${baseUrl}/${API_ENDPOINTS.USERS}`);
233
227
  url.searchParams.set("limit", limit.toString());
@@ -245,16 +239,24 @@ async function fetchUsers({
245
239
  }
246
240
  const response = await fetch(url, {
247
241
  cache: "no-store",
248
- headers: getAuthHeaders(authToken),
242
+ headers: getAuthHeaders(await authToken()),
249
243
  }).catch((error) => {
250
- console.error(error);
251
- // TODO: handle fetch errors
252
- throw new Error("Failed to fetch users");
244
+ throw new FetchError({
245
+ message: "Failed to fetch users",
246
+ queryType: "query",
247
+ recordType: "users",
248
+ context: { error },
249
+ });
253
250
  });
254
251
 
255
252
  if (!response.ok) {
256
- // TODO: handle this case
257
- throw new Error("Failed to fetch users");
253
+ const { message, status } = await parseErrorResponse(response);
254
+ throw new ApiError({
255
+ message,
256
+ status,
257
+ queryType: "query",
258
+ recordType: "users",
259
+ });
258
260
  }
259
261
  // TODO validate the response
260
262
  const json = await response.json();
@@ -267,23 +269,31 @@ async function fetchUsers({
267
269
 
268
270
  const fetchUser = async (
269
271
  userId: string,
270
- { authToken, baseUrl }: { authToken: string | null; baseUrl: string },
272
+ { authToken, baseUrl }: { authToken: AuthToken | null; baseUrl: string },
271
273
  ) => {
272
274
  if (!authToken) {
273
- throw new Error("No auth token provided");
275
+ throw new NoAuthTokenError();
274
276
  }
275
277
  const response = await fetch(`${baseUrl}/${API_ENDPOINTS.USERS}/${userId}`, {
276
- headers: getAuthHeaders(authToken),
278
+ headers: getAuthHeaders(await authToken()),
277
279
  cache: "no-store",
278
280
  }).catch((error) => {
279
- console.error(error);
280
- // TODO: handle fetch errors
281
- throw new Error("Failed to fetch user");
281
+ throw new FetchError({
282
+ message: "Failed to fetch user",
283
+ queryType: "query",
284
+ recordType: "users",
285
+ context: { error },
286
+ });
282
287
  });
283
288
 
284
289
  if (!response.ok) {
285
- // TODO: handle this case
286
- throw new Error("Failed to fetch user");
290
+ const { message, status } = await parseErrorResponse(response);
291
+ throw new ApiError({
292
+ message,
293
+ status,
294
+ queryType: "query",
295
+ recordType: "users",
296
+ });
287
297
  }
288
298
  // TODO validate the response
289
299
  const json = await response.json();
@@ -296,28 +306,40 @@ const updateUserRole = async (
296
306
  authToken,
297
307
  baseUrl,
298
308
  data,
299
- }: { authToken: string | null; baseUrl: string; data: { roles: string[] } },
309
+ }: {
310
+ authToken: AuthToken | null;
311
+ baseUrl: string;
312
+ data: { roles: string[] };
313
+ },
300
314
  ) => {
301
315
  if (!authToken) {
302
- // TODO handle this case
303
- throw new Error("No auth token");
316
+ throw new NoAuthTokenError();
304
317
  }
305
318
 
306
319
  const response = await fetch(`${baseUrl}/${API_ENDPOINTS.USERS}/${userId}`, {
307
320
  method: "POST",
308
321
  headers: {
309
322
  "Content-Type": "application/json",
310
- ...getAuthHeaders(authToken),
323
+ ...getAuthHeaders(await authToken()),
311
324
  },
312
325
  body: JSON.stringify(data),
313
326
  }).catch((error) => {
314
- console.error(error);
315
- // TODO: handle fetch errors
316
- throw new Error("Failed to update user");
327
+ throw new FetchError({
328
+ message: "Failed to update user",
329
+ queryType: "mutation",
330
+ recordType: "users",
331
+ context: { error },
332
+ });
317
333
  });
318
334
 
319
335
  if (!response.ok) {
320
- throw new Error("Failed to update user");
336
+ const { message, status } = await parseErrorResponse(response);
337
+ throw new ApiError({
338
+ message,
339
+ status,
340
+ queryType: "mutation",
341
+ recordType: "users",
342
+ });
321
343
  }
322
344
  // TODO validate the response
323
345
  const json = await response.json();
@@ -327,36 +349,38 @@ const updateUserRole = async (
327
349
  const inviteUser = async ({
328
350
  authToken,
329
351
  baseUrl,
330
- ...data
331
- }: InviteUserPayload & { authToken: string | null; baseUrl: string }) => {
352
+ email,
353
+ role,
354
+ }: InviteUserPayload & { authToken: AuthToken | null; baseUrl: string }) => {
332
355
  if (!authToken) {
333
- // TODO handle this case
334
- throw new Error("No auth token");
335
- }
336
- if (!data.role) {
337
- throw new Error("Role required to invite user");
356
+ throw new NoAuthTokenError();
338
357
  }
339
358
  const response = await fetch(`${baseUrl}/${API_ENDPOINTS.USER_INVITE}`, {
340
359
  method: "POST",
341
360
  headers: {
342
361
  "Content-Type": "application/json",
343
- ...getAuthHeaders(authToken),
362
+ ...getAuthHeaders(await authToken()),
344
363
  },
345
364
  body: JSON.stringify({
346
- email: data.email,
347
- roles: [data.role],
365
+ email,
366
+ roles: [role],
348
367
  }),
349
368
  }).catch((error) => {
350
- console.error(error);
351
- // TODO: handle fetch errors
352
- throw new Error("Failed to invite user");
369
+ throw new FetchError({
370
+ message: "Failed to invite user",
371
+ queryType: "mutation",
372
+ recordType: "users",
373
+ context: { error },
374
+ });
353
375
  });
354
376
 
355
377
  if (!response.ok) {
356
378
  const { message, status } = await parseErrorResponse(response);
357
- throw new InviteUserError({
379
+ throw new ApiError({
358
380
  message,
359
381
  status,
382
+ queryType: "mutation",
383
+ recordType: "users",
360
384
  });
361
385
  }
362
386
  // TODO validate the response
@@ -366,26 +390,32 @@ const inviteUser = async ({
366
390
 
367
391
  const deleteUser = async (
368
392
  userId: string,
369
- { authToken, baseUrl }: { authToken: string | null; baseUrl: string },
393
+ { authToken, baseUrl }: { authToken: AuthToken | null; baseUrl: string },
370
394
  ) => {
371
395
  if (!authToken) {
372
- // TODO handle this case
373
- throw new Error("No auth token");
396
+ throw new NoAuthTokenError();
374
397
  }
375
398
 
376
399
  const response = await fetch(`${baseUrl}/${API_ENDPOINTS.USERS}/${userId}`, {
377
400
  method: "DELETE",
378
- headers: getAuthHeaders(authToken),
401
+ headers: getAuthHeaders(await authToken()),
379
402
  }).catch((error) => {
380
- console.error(error);
381
- // TODO: handle fetch errors
382
- throw new Error("Failed to delete user. Please try again.");
403
+ throw new FetchError({
404
+ message: "Failed to delete user. Please try again.",
405
+ queryType: "mutation",
406
+ recordType: "users",
407
+ context: { error },
408
+ });
383
409
  });
384
410
 
385
411
  if (!response.ok) {
386
- console.error(response);
387
- // TODO: handle server errors
388
- throw new Error("Failed to delete user. Please try again.");
412
+ const { message, status } = await parseErrorResponse(response);
413
+ throw new ApiError({
414
+ message,
415
+ status,
416
+ queryType: "mutation",
417
+ recordType: "users",
418
+ });
389
419
  }
390
420
  // TODO validate the response
391
421
  const json = await response.json();
@@ -394,27 +424,34 @@ const deleteUser = async (
394
424
 
395
425
  const revokeUserInvite = async (
396
426
  userId: string,
397
- { authToken, baseUrl }: { authToken: string | null; baseUrl: string },
427
+ { authToken, baseUrl }: { authToken: AuthToken | null; baseUrl: string },
398
428
  ) => {
399
429
  if (!authToken) {
400
- // TODO handle this case
401
- throw new Error("No auth token");
430
+ throw new NoAuthTokenError();
402
431
  }
403
432
  const response = await fetch(
404
433
  `${baseUrl}/${API_ENDPOINTS.USER_INVITES}/${userId}`,
405
434
  {
406
435
  method: "DELETE",
407
- headers: getAuthHeaders(authToken),
436
+ headers: getAuthHeaders(await authToken()),
408
437
  },
409
438
  ).catch((error) => {
410
- console.error(error);
411
- // TODO: handle fetch errors
412
- throw new Error("Failed to resend user invite. Please try again.");
439
+ throw new FetchError({
440
+ message: "Failed to resend user invite. Please try again.",
441
+ queryType: "mutation",
442
+ recordType: "users",
443
+ context: { error },
444
+ });
413
445
  });
414
446
 
415
447
  if (!response.ok) {
416
- // TODO: handle server errors
417
- throw new Error("Failed to resend user invite. Please try again.");
448
+ const { message, status } = await parseErrorResponse(response);
449
+ throw new ApiError({
450
+ message,
451
+ status,
452
+ queryType: "mutation",
453
+ recordType: "users",
454
+ });
418
455
  }
419
456
  // TODO validate the response
420
457
  const json = await response.json();
@@ -423,27 +460,34 @@ const revokeUserInvite = async (
423
460
 
424
461
  const resendUserInvite = async (
425
462
  userId: string,
426
- { authToken, baseUrl }: { authToken: string | null; baseUrl: string },
463
+ { authToken, baseUrl }: { authToken: AuthToken | null; baseUrl: string },
427
464
  ) => {
428
465
  if (!authToken) {
429
- // TODO handle this case
430
- throw new Error("No auth token");
466
+ throw new NoAuthTokenError();
431
467
  }
432
468
  const response = await fetch(
433
469
  `${baseUrl}/${API_ENDPOINTS.USER_INVITES_RESEND(userId)}`,
434
470
  {
435
471
  method: "POST",
436
- headers: getAuthHeaders(authToken),
472
+ headers: getAuthHeaders(await authToken()),
437
473
  },
438
474
  ).catch((error) => {
439
- console.error(error);
440
- // TODO: handle fetch errors
441
- throw new Error("Failed to resend user invite. Please try again.");
475
+ throw new FetchError({
476
+ message: "Failed to resend user invite. Please try again.",
477
+ queryType: "mutation",
478
+ recordType: "users",
479
+ context: { error },
480
+ });
442
481
  });
443
482
 
444
483
  if (!response.ok) {
445
- // TODO: handle server errors
446
- throw new Error("Failed to resend user invite. Please try again.");
484
+ const { message, status } = await parseErrorResponse(response);
485
+ throw new ApiError({
486
+ message,
487
+ status,
488
+ queryType: "mutation",
489
+ recordType: "users",
490
+ });
447
491
  }
448
492
  // TODO validate the response
449
493
  const json = await response.json();
@@ -1,2 +1,3 @@
1
1
  export const USER_ROW_LIMIT = 10;
2
- export const WIDGETS_API_VERSION = "v1";
2
+ export const WIDGETS_API_VERSION = "1";
3
+ export const WIDGETS_CLASS_NAMESPACE = "woswidgets";
@@ -11,7 +11,11 @@ import {
11
11
  import { type ReactNode, useRef } from "react";
12
12
  import { useDeleteUser } from "./api/user";
13
13
  import type { User } from "./api/user";
14
- import { DestructiveButton, SecondaryButton } from "./elements";
14
+ import {
15
+ AlertDialogContent,
16
+ DestructiveButton,
17
+ SecondaryButton,
18
+ } from "./elements";
15
19
 
16
20
  interface DeleteUserDialogProps extends AlertDialog.RootProps {
17
21
  open: boolean;
@@ -40,7 +44,7 @@ export const DeleteUserDialog = ({
40
44
  <AlertDialog.Root {...props}>
41
45
  {children && <AlertDialog.Trigger>{children}</AlertDialog.Trigger>}
42
46
 
43
- <AlertDialog.Content
47
+ <AlertDialogContent
44
48
  maxWidth="480px"
45
49
  onOpenAutoFocus={() => {
46
50
  requestAnimationFrame(() => {
@@ -89,7 +93,7 @@ export const DeleteUserDialog = ({
89
93
  {getMutationErrorMessage(deleteUser.error)}
90
94
  </section>
91
95
  </VisuallyHidden>
92
- </AlertDialog.Content>
96
+ </AlertDialogContent>
93
97
  </AlertDialog.Root>
94
98
  );
95
99
  };
@@ -13,10 +13,16 @@ import {
13
13
  import { type ReactNode, useState } from "react";
14
14
  import { useUpdateUserRole } from "./api/user";
15
15
  import type { User } from "./api/user";
16
- import { PrimaryButton, SecondaryButton } from "./elements";
16
+ import {
17
+ DialogContent,
18
+ PrimaryButton,
19
+ SecondaryButton,
20
+ SelectContent,
21
+ SelectItem,
22
+ SelectTrigger,
23
+ } from "./elements";
17
24
  import { getBestName } from "./utils";
18
25
  import { useRoles } from "./api/role";
19
- import { useElement } from "./widgets-context";
20
26
 
21
27
  interface EditUserDialogProps extends Dialog.RootProps {
22
28
  open: boolean;
@@ -34,7 +40,6 @@ export const EditUserDetailsDialog = ({
34
40
  const rolesQuery = useRoles();
35
41
  const { data: roles } = rolesQuery;
36
42
  const updateUser = useUpdateUserRole();
37
- const dropdownProps = useElement("dropdown");
38
43
  const [selectedRole, setSelectedRole] = useState(
39
44
  user.roles[0]?.slug || "Unknown",
40
45
  );
@@ -62,7 +67,7 @@ export const EditUserDetailsDialog = ({
62
67
  return (
63
68
  <Dialog.Root {...props}>
64
69
  {children && <Dialog.Trigger>{children}</Dialog.Trigger>}
65
- <Dialog.Content maxWidth="480px">
70
+ <DialogContent maxWidth="480px">
66
71
  <Dialog.Title>Edit role</Dialog.Title>
67
72
  <Dialog.Description>
68
73
  Select the role to assign to <Text weight="bold">{displayName}</Text>
@@ -82,7 +87,7 @@ export const EditUserDetailsDialog = ({
82
87
  disabled={rolesQuery.isLoading || showSingleRoleInfo}
83
88
  >
84
89
  <Skeleton loading={rolesQuery.isLoading}>
85
- <Select.Trigger
90
+ <SelectTrigger
86
91
  id={selectId}
87
92
  placeholder="Assign a role"
88
93
  aria-labelledby={selectLabelId}
@@ -95,13 +100,13 @@ export const EditUserDetailsDialog = ({
95
100
  />
96
101
  </Skeleton>
97
102
 
98
- <Select.Content {...dropdownProps}>
103
+ <SelectContent>
99
104
  {roles.map((role) => (
100
- <Select.Item key={role.slug} value={role.slug}>
105
+ <SelectItem key={role.slug} value={role.slug}>
101
106
  {role.name}
102
- </Select.Item>
107
+ </SelectItem>
103
108
  ))}
104
- </Select.Content>
109
+ </SelectContent>
105
110
  </Select.Root>
106
111
 
107
112
  {showErrorMessage ? (
@@ -148,7 +153,7 @@ export const EditUserDetailsDialog = ({
148
153
  {getMutationErrorMessage(updateUser.error)}
149
154
  </section>
150
155
  </VisuallyHidden>
151
- </Dialog.Content>
156
+ </DialogContent>
152
157
  </Dialog.Root>
153
158
  );
154
159
  };