@mercurjs/admin 2.3.2-canary.0 → 2.3.2-canary.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 (72) hide show
  1. package/dist/{add-campaign-promotions-S4HKMFU7.js → add-campaign-promotions-DAJLAYTG.js} +3 -3
  2. package/dist/{api-key-management-list-AHXOCLBO.js → api-key-management-list-P4FQQKIV.js} +1 -1
  3. package/dist/{attribute-list-6ELFWDHO.js → attribute-list-PVC4KUYQ.js} +1 -1
  4. package/dist/{campaign-detail-WPTZDDD5.js → campaign-detail-V6RISO2Y.js} +4 -4
  5. package/dist/{campaign-list-7L2DGBHW.js → campaign-list-WFFH3VPJ.js} +1 -1
  6. package/dist/{category-list-3IL2MERS.js → category-list-RBFOTJFJ.js} +1 -1
  7. package/dist/{chunk-CR7TRBEB.js → chunk-2YEBREEY.js} +2 -1
  8. package/dist/chunk-4F6SHS7A.js +83 -0
  9. package/dist/{chunk-EAZ6YM6D.js → chunk-5SDHNLEC.js} +2 -1
  10. package/dist/{chunk-NKZLCOFU.js → chunk-6DBL7KIL.js} +1 -1
  11. package/dist/{chunk-ZBRRK3Y6.js → chunk-AB34V74P.js} +3 -2
  12. package/dist/{chunk-6ZVRNI5K.js → chunk-AMKTWSOZ.js} +1 -1
  13. package/dist/{chunk-7PGZV6DQ.js → chunk-BNYVXSFC.js} +1 -1
  14. package/dist/{chunk-H7HNJFQA.js → chunk-CGT2IRFI.js} +1 -1
  15. package/dist/{chunk-N3ZYLAGA.js → chunk-GQ45JPQR.js} +3 -2
  16. package/dist/{chunk-VKVK5D2F.js → chunk-GVKW5SUK.js} +3 -2
  17. package/dist/{chunk-UGDC6FPU.js → chunk-JIVTFB67.js} +2 -1
  18. package/dist/{chunk-23KZGNNG.js → chunk-KHMHTJZG.js} +2 -1
  19. package/dist/{chunk-NN6PSWE4.js → chunk-MUSHUJHY.js} +56 -1
  20. package/dist/{chunk-LAIT7Y53.js → chunk-NO64DRH4.js} +25 -7
  21. package/dist/{chunk-AJNXQUOR.js → chunk-O56RWFFI.js} +3 -2
  22. package/dist/{chunk-OJQSOFYG.js → chunk-PC5GU4HP.js} +2 -1
  23. package/dist/{chunk-6XJUYY6G.js → chunk-R3E7BMQB.js} +1 -1
  24. package/dist/{chunk-IP5YNQ5R.js → chunk-RQCYGC2H.js} +3 -2
  25. package/dist/{chunk-EF23N7II.js → chunk-S4W3RVQV.js} +3 -2
  26. package/dist/{chunk-HBNQ3R3P.js → chunk-T36KFL5R.js} +2 -1
  27. package/dist/{chunk-CMBHUF6P.js → chunk-T3KB4DCM.js} +4 -1
  28. package/dist/{chunk-N5IUYCUZ.js → chunk-UYQY4B7J.js} +4 -2
  29. package/dist/{chunk-LIMG2EY2.js → chunk-VB4A2G7A.js} +3 -2
  30. package/dist/{chunk-PB24YMA4.js → chunk-VYD6M7TF.js} +2 -1
  31. package/dist/{chunk-73N66XQD.js → chunk-WCA5Z4MT.js} +2 -1
  32. package/dist/{chunk-43SWJ765.js → chunk-XBEI6JKV.js} +2 -1
  33. package/dist/{chunk-7ZY7R6PG.js → chunk-XVBLVV7Y.js} +1 -1
  34. package/dist/{chunk-HFMAEJN2.js → chunk-Y5T5NATQ.js} +2 -1
  35. package/dist/{chunk-WYRUCSGW.js → chunk-YS6DRI7V.js} +2 -1
  36. package/dist/{collection-list-LM5SH67K.js → collection-list-C2EQXJTN.js} +2 -2
  37. package/dist/{commissions-list-X54FEOEZ.js → commissions-list-VBQOQF2D.js} +1 -1
  38. package/dist/{customer-group-list-KBZBSGTQ.js → customer-group-list-NZ3D2ZAR.js} +1 -1
  39. package/dist/{customer-list-IJJEZDOZ.js → customer-list-DFONJE23.js} +1 -1
  40. package/dist/index.css +3 -0
  41. package/dist/index.d.ts +2 -0
  42. package/dist/index.js +1529 -1296
  43. package/dist/{order-edit-billing-address-2BSCXUTK.js → order-edit-billing-address-ZT7HAEXB.js} +1 -1
  44. package/dist/{order-list-GQ5IOA6I.js → order-list-WGQC2X2L.js} +1 -1
  45. package/dist/pages/index.d.ts +22 -22
  46. package/dist/pages/index.js +28 -28
  47. package/dist/{price-list-list-JC5EDBH6.js → price-list-list-UEEYIP5R.js} +1 -1
  48. package/dist/{product-create-A7774JYE.js → product-create-LBKJTFOY.js} +3 -3
  49. package/dist/{product-list-2FOZLWYH.js → product-list-YHJ7DW6D.js} +1 -1
  50. package/dist/{product-media-ROKDXANO.js → product-media-NEAAG6IC.js} +2 -2
  51. package/dist/{product-organization-XS62HARL.js → product-organization-SVOLE5TG.js} +1 -1
  52. package/dist/{product-tag-detail-7P7MI52E.js → product-tag-detail-2YR6TXZI.js} +1 -1
  53. package/dist/{product-tag-list-43NFD36I.js → product-tag-list-GDIVZYEB.js} +2 -2
  54. package/dist/{product-type-list-NNNFCCWS.js → product-type-list-VSCQHI3D.js} +1 -1
  55. package/dist/{promotion-detail-4WNHEOG4.js → promotion-detail-HVQKXMJL.js} +3 -3
  56. package/dist/{promotion-list-AJ5NBDZ2.js → promotion-list-KB2E4AEZ.js} +4 -4
  57. package/dist/{refund-reason-list-R573DHM7.js → refund-reason-list-ODOF3ZLM.js} +1 -1
  58. package/dist/{reservation-list-CRPRHIMT.js → reservation-list-APKRLKOF.js} +1 -1
  59. package/dist/{reset-password-7G75C4RO.js → reset-password-BIAORJOF.js} +1 -1
  60. package/dist/{return-reason-list-A2RABTGP.js → return-reason-list-IQ2JGNEN.js} +2 -2
  61. package/dist/{shipping-option-type-list-R4JPQOAA.js → shipping-option-type-list-VQ5UVOUU.js} +1 -1
  62. package/dist/{shipping-profiles-list-UKD47NUF.js → shipping-profiles-list-AK6KXUGF.js} +1 -1
  63. package/dist/{store-details-GOVF3KFW.js → store-details-KI5D4VSI.js} +1 -1
  64. package/dist/{store-edit-W6NHNE3S.js → store-edit-LXGZTR3G.js} +2 -2
  65. package/dist/{store-list-OKKZA7VO.js → store-list-XXRF6JAZ.js} +2 -2
  66. package/dist/{tax-region-create-P4IKQNTU.js → tax-region-create-SFRD4AJB.js} +1 -1
  67. package/dist/{tax-region-list-JC4QYF5B.js → tax-region-list-TM23Q4HH.js} +1 -1
  68. package/dist/{tax-region-tax-override-create-7O3KDBUJ.js → tax-region-tax-override-create-XZ5BU2FP.js} +1 -1
  69. package/dist/{tax-region-tax-override-edit-SUL5VZ5D.js → tax-region-tax-override-edit-R4EGIUIZ.js} +1 -1
  70. package/dist/{user-invite-WG57KWD3.js → user-invite-A7TBRKWI.js} +127 -27
  71. package/dist/{user-list-P7JCBIOR.js → user-list-ECF647TZ.js} +1 -1
  72. package/package.json +6 -6
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  StoreListPage
3
- } from "./chunk-UGDC6FPU.js";
3
+ } from "./chunk-JIVTFB67.js";
4
4
  import "./chunk-KOURHC2N.js";
5
5
  import "./chunk-2ZFELO2L.js";
6
6
  import "./chunk-26OOAKQ6.js";
@@ -13,7 +13,7 @@ import "./chunk-ANDTD5VV.js";
13
13
  import "./chunk-MG4GKUJW.js";
14
14
  import "./chunk-AYVH6Q5O.js";
15
15
  import "./chunk-VOHEQ7B5.js";
16
- import "./chunk-N5IUYCUZ.js";
16
+ import "./chunk-UYQY4B7J.js";
17
17
  import "./chunk-7SVLKK6Q.js";
18
18
  import "./chunk-GR6JUIRU.js";
19
19
  import "./chunk-GRH7C3QN.js";
@@ -19,7 +19,7 @@ import {
19
19
  } from "./chunk-SR3DYN52.js";
20
20
  import {
21
21
  i18n
22
- } from "./chunk-NN6PSWE4.js";
22
+ } from "./chunk-MUSHUJHY.js";
23
23
  import "./chunk-TKGWSUEI.js";
24
24
  import {
25
25
  KeyboundForm
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  TaxRegionListPage
3
- } from "./chunk-EAZ6YM6D.js";
3
+ } from "./chunk-5SDHNLEC.js";
4
4
  import "./chunk-BA2XHM7M.js";
5
5
  import "./chunk-LXW3L56Z.js";
6
6
  import "./chunk-N2TQXB44.js";
@@ -36,7 +36,7 @@ import "./chunk-ANDTD5VV.js";
36
36
  import "./chunk-MG4GKUJW.js";
37
37
  import "./chunk-AYVH6Q5O.js";
38
38
  import "./chunk-VOHEQ7B5.js";
39
- import "./chunk-N5IUYCUZ.js";
39
+ import "./chunk-UYQY4B7J.js";
40
40
  import "./chunk-7SVLKK6Q.js";
41
41
  import "./chunk-GR6JUIRU.js";
42
42
  import "./chunk-GRH7C3QN.js";
@@ -36,7 +36,7 @@ import "./chunk-ANDTD5VV.js";
36
36
  import "./chunk-MG4GKUJW.js";
37
37
  import "./chunk-AYVH6Q5O.js";
38
38
  import "./chunk-VOHEQ7B5.js";
39
- import "./chunk-N5IUYCUZ.js";
39
+ import "./chunk-UYQY4B7J.js";
40
40
  import "./chunk-7SVLKK6Q.js";
41
41
  import "./chunk-GR6JUIRU.js";
42
42
  import "./chunk-GRH7C3QN.js";
@@ -1,9 +1,19 @@
1
+ import {
2
+ useFeatureFlag,
3
+ useRbacAssignableRoles
4
+ } from "./chunk-4F6SHS7A.js";
1
5
  import {
2
6
  isFetchError
3
7
  } from "./chunk-C6SUTRP2.js";
8
+ import {
9
+ ListSummary
10
+ } from "./chunk-4F5GP7J7.js";
4
11
  import {
5
12
  useUserInviteTableQuery
6
- } from "./chunk-N5IUYCUZ.js";
13
+ } from "./chunk-UYQY4B7J.js";
14
+ import {
15
+ Combobox
16
+ } from "./chunk-SR3DYN52.js";
7
17
  import {
8
18
  KeyboundForm
9
19
  } from "./chunk-SITRHMZZ.js";
@@ -62,9 +72,11 @@ import { useMemo } from "react";
62
72
  import { useForm } from "react-hook-form";
63
73
  import { Trans, useTranslation } from "react-i18next";
64
74
  import * as zod from "zod";
75
+ import { usePermissions } from "@mercurjs/dashboard-shared";
65
76
  import { jsx, jsxs } from "react/jsx-runtime";
66
77
  var InviteUserSchema = zod.object({
67
- email: zod.string().email()
78
+ email: zod.string().email(),
79
+ roles: zod.array(zod.string()).optional()
68
80
  });
69
81
  var PAGE_SIZE = 10;
70
82
  var PREFIX = "usr_invite";
@@ -79,15 +91,47 @@ var getBaseUrl = () => {
79
91
  var INVITE_URL = `${window.location.origin}${getBaseUrl()}/invite?token=`;
80
92
  var InviteUserForm = () => {
81
93
  const { t } = useTranslation();
94
+ const isRbacEnabled = useFeatureFlag("rbac");
95
+ const { hasPermission } = usePermissions();
96
+ const canReadRbacRoles = hasPermission("rbac_role:read");
97
+ const showRbacRolesField = isRbacEnabled && canReadRbacRoles;
82
98
  const form = useForm({
83
99
  defaultValues: {
84
- email: ""
100
+ email: "",
101
+ roles: []
85
102
  },
86
103
  resolver: zodResolver(InviteUserSchema)
87
104
  });
105
+ const { data: assignableData, isPending: isRolesLoading } = useRbacAssignableRoles(
106
+ { limit: 200, order: "name" },
107
+ { enabled: showRbacRolesField }
108
+ );
109
+ const roleOptions = useMemo(() => {
110
+ return (assignableData?.roles ?? []).map((role) => ({
111
+ label: role.name,
112
+ value: role.id
113
+ }));
114
+ }, [assignableData?.roles]);
115
+ const inviteFields = useMemo(() => {
116
+ if (!showRbacRolesField) {
117
+ return void 0;
118
+ }
119
+ return [
120
+ "id",
121
+ "email",
122
+ "accepted",
123
+ "token",
124
+ "expires_at",
125
+ "created_at",
126
+ "updated_at",
127
+ "rbac_roles.id",
128
+ "rbac_roles.name"
129
+ ].join(",");
130
+ }, [showRbacRolesField]);
88
131
  const { raw, searchParams } = useUserInviteTableQuery({
89
132
  prefix: PREFIX,
90
- pageSize: PAGE_SIZE
133
+ pageSize: PAGE_SIZE,
134
+ fields: inviteFields
91
135
  });
92
136
  const {
93
137
  invites,
@@ -96,7 +140,7 @@ var InviteUserForm = () => {
96
140
  isError,
97
141
  error
98
142
  } = useInvites(searchParams);
99
- const columns = useColumns();
143
+ const columns = useColumns({ isRbacEnabled: showRbacRolesField });
100
144
  const { table } = useDataTable({
101
145
  data: invites ?? [],
102
146
  columns,
@@ -109,7 +153,13 @@ var InviteUserForm = () => {
109
153
  const { mutateAsync, isPending } = useCreateInvite();
110
154
  const handleSubmit = form.handleSubmit(async (values) => {
111
155
  try {
112
- await mutateAsync({ email: values.email });
156
+ const payload = {
157
+ email: values.email
158
+ };
159
+ if (showRbacRolesField && values.roles?.length) {
160
+ payload.roles = values.roles;
161
+ }
162
+ await mutateAsync(payload);
113
163
  form.reset();
114
164
  } catch (error2) {
115
165
  if (isFetchError(error2) && error2.status === 400) {
@@ -165,26 +215,63 @@ var InviteUserForm = () => {
165
215
  className: "flex flex-col gap-y-4",
166
216
  "data-testid": "user-invite-form-email-section",
167
217
  children: [
168
- /* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 gap-4", children: /* @__PURE__ */ jsx(
169
- Form.Field,
170
- {
171
- control: form.control,
172
- name: "email",
173
- render: ({ field }) => {
174
- return /* @__PURE__ */ jsxs(Form.Item, { "data-testid": "user-invite-form-email-item", children: [
175
- /* @__PURE__ */ jsx(Form.Label, { "data-testid": "user-invite-form-email-label", children: t("fields.email") }),
176
- /* @__PURE__ */ jsx(Form.Control, { "data-testid": "user-invite-form-email-control", children: /* @__PURE__ */ jsx(
177
- Input,
178
- {
179
- ...field,
180
- "data-testid": "user-invite-form-email-input"
181
- }
182
- ) }),
183
- /* @__PURE__ */ jsx(Form.ErrorMessage, { "data-testid": "user-invite-form-email-error" })
184
- ] });
218
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [
219
+ /* @__PURE__ */ jsx(
220
+ Form.Field,
221
+ {
222
+ control: form.control,
223
+ name: "email",
224
+ render: ({ field }) => {
225
+ return /* @__PURE__ */ jsxs(Form.Item, { "data-testid": "user-invite-form-email-item", children: [
226
+ /* @__PURE__ */ jsx(Form.Label, { "data-testid": "user-invite-form-email-label", children: t("fields.email") }),
227
+ /* @__PURE__ */ jsx(Form.Control, { "data-testid": "user-invite-form-email-control", children: /* @__PURE__ */ jsx(
228
+ Input,
229
+ {
230
+ ...field,
231
+ "data-testid": "user-invite-form-email-input"
232
+ }
233
+ ) }),
234
+ /* @__PURE__ */ jsx(Form.ErrorMessage, { "data-testid": "user-invite-form-email-error" })
235
+ ] });
236
+ }
185
237
  }
186
- }
187
- ) }),
238
+ ),
239
+ showRbacRolesField && /* @__PURE__ */ jsx(
240
+ Form.Field,
241
+ {
242
+ control: form.control,
243
+ name: "roles",
244
+ render: ({ field }) => {
245
+ return /* @__PURE__ */ jsxs(Form.Item, { "data-testid": "user-invite-form-roles-item", children: [
246
+ /* @__PURE__ */ jsx(
247
+ Form.Label,
248
+ {
249
+ optional: true,
250
+ tooltip: t("users.inviteRolesTooltip"),
251
+ "data-testid": "user-invite-form-roles-label",
252
+ children: t("roles.domain")
253
+ }
254
+ ),
255
+ /* @__PURE__ */ jsx(Form.Control, { "data-testid": "user-invite-form-roles-control", children: /* @__PURE__ */ jsx(
256
+ Combobox,
257
+ {
258
+ ...field,
259
+ value: field.value ?? [],
260
+ onChange: (value) => {
261
+ field.onChange(value ?? []);
262
+ },
263
+ options: roleOptions,
264
+ placeholder: t("labels.selectValues"),
265
+ disabled: isRolesLoading,
266
+ "data-testid": "user-invite-form-roles-input"
267
+ }
268
+ ) }),
269
+ /* @__PURE__ */ jsx(Form.ErrorMessage, { "data-testid": "user-invite-form-roles-error" })
270
+ ] });
271
+ }
272
+ }
273
+ )
274
+ ] }),
188
275
  /* @__PURE__ */ jsx("div", { className: "flex items-center justify-end", children: /* @__PURE__ */ jsx(
189
276
  Button,
190
277
  {
@@ -306,7 +393,7 @@ var InviteActions = ({ invite }) => {
306
393
  );
307
394
  };
308
395
  var columnHelper = createColumnHelper();
309
- var useColumns = () => {
396
+ var useColumns = ({ isRbacEnabled }) => {
310
397
  const { t } = useTranslation();
311
398
  return useMemo(
312
399
  () => [
@@ -316,6 +403,19 @@ var useColumns = () => {
316
403
  return getValue();
317
404
  }
318
405
  }),
406
+ ...isRbacEnabled ? [
407
+ columnHelper.display({
408
+ id: "roles",
409
+ header: t("roles.domain"),
410
+ cell: ({ row }) => {
411
+ const roleNames = row.original.rbac_roles?.map((role) => role.name) ?? [];
412
+ if (!roleNames.length) {
413
+ return /* @__PURE__ */ jsx(Text, { size: "small", className: "text-ui-fg-subtle", children: "-" });
414
+ }
415
+ return /* @__PURE__ */ jsx("div", { className: "flex items-center", children: /* @__PURE__ */ jsx(ListSummary, { inline: true, n: 1, list: roleNames }) });
416
+ }
417
+ })
418
+ ] : [],
319
419
  columnHelper.accessor("accepted", {
320
420
  header: t("fields.status"),
321
421
  cell: ({ getValue, row }) => {
@@ -382,7 +482,7 @@ var useColumns = () => {
382
482
  cell: ({ row }) => /* @__PURE__ */ jsx(InviteActions, { invite: row.original })
383
483
  })
384
484
  ],
385
- [t]
485
+ [t, isRbacEnabled]
386
486
  );
387
487
  };
388
488
 
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  UserListPage
3
- } from "./chunk-LAIT7Y53.js";
3
+ } from "./chunk-NO64DRH4.js";
4
4
  import "./chunk-25LYVP3C.js";
5
5
  import "./chunk-PHOCVOZ5.js";
6
6
  import "./chunk-E74OUNA3.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mercurjs/admin",
3
- "version": "2.3.2-canary.0",
3
+ "version": "2.3.2-canary.2",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/mercurjs/mercur",
@@ -34,8 +34,8 @@
34
34
  "lint": "oxlint --max-warnings 0"
35
35
  },
36
36
  "dependencies": {
37
- "@mercurjs/dashboard-shared": "2.3.2-canary.0",
38
- "@mercurjs/client": "2.3.2-canary.0",
37
+ "@mercurjs/dashboard-shared": "2.3.2-canary.2",
38
+ "@mercurjs/client": "2.3.2-canary.2",
39
39
  "@ariakit/react": "^0.4.15",
40
40
  "@babel/runtime": "^8.0.0",
41
41
  "@dnd-kit/core": "^6.1.0",
@@ -88,8 +88,8 @@
88
88
  "tsup": "^8.0.2",
89
89
  "typescript": "5.9.3",
90
90
  "@medusajs/types": "2.18.0",
91
- "@mercurjs/core": "2.3.2-canary.0",
92
- "@mercurjs/dashboard-sdk": "2.3.2-canary.0",
93
- "@mercurjs/types": "2.3.2-canary.0"
91
+ "@mercurjs/core": "2.3.2-canary.2",
92
+ "@mercurjs/dashboard-sdk": "2.3.2-canary.2",
93
+ "@mercurjs/types": "2.3.2-canary.2"
94
94
  }
95
95
  }