powr-sdk-web 5.9.0 → 5.9.1

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.
@@ -66,7 +66,11 @@ var AdminDashboard = function AdminDashboard(_ref2) {
66
66
  _ref2$theme = _ref2.theme,
67
67
  theme = _ref2$theme === void 0 ? 'default' : _ref2$theme,
68
68
  _ref2$sectionLoaders = _ref2.sectionLoaders,
69
- sectionLoaders = _ref2$sectionLoaders === void 0 ? {} : _ref2$sectionLoaders;
69
+ sectionLoaders = _ref2$sectionLoaders === void 0 ? {} : _ref2$sectionLoaders,
70
+ _ref2$roleOptions = _ref2.roleOptions,
71
+ roleOptions = _ref2$roleOptions === void 0 ? null : _ref2$roleOptions,
72
+ _ref2$usersProps = _ref2.usersProps,
73
+ usersProps = _ref2$usersProps === void 0 ? null : _ref2$usersProps;
70
74
  var _useState = (0, _react.useState)(null),
71
75
  _useState2 = _slicedToArray(_useState, 2),
72
76
  currentSection = _useState2[0],
@@ -275,9 +279,11 @@ var AdminDashboard = function AdminDashboard(_ref2) {
275
279
  formPublicBaseUrl: formPublicBaseUrl,
276
280
  theme: theme === 'dark' ? 'dark' : 'blue'
277
281
  };
278
- var extraProps = currentSection === 'users' ? {
282
+ var extraProps = currentSection === 'users' ? _objectSpread(_objectSpread({
279
283
  showActions: true
280
- } : currentSection === 'tasks' ? {
284
+ }, roleOptions ? {
285
+ roleOptions: roleOptions
286
+ } : {}), usersProps || {}) : currentSection === 'tasks' ? {
281
287
  onError: function onError(message) {
282
288
  return alert(message);
283
289
  }
@@ -342,6 +348,11 @@ AdminDashboard.propTypes = {
342
348
  sections: _propTypes["default"].arrayOf(_propTypes["default"].string),
343
349
  formPublicBaseUrl: _propTypes["default"].string,
344
350
  theme: _propTypes["default"].oneOf(['default', 'dark']),
345
- sectionLoaders: _propTypes["default"].objectOf(_propTypes["default"].func)
351
+ sectionLoaders: _propTypes["default"].objectOf(_propTypes["default"].func),
352
+ roleOptions: _propTypes["default"].arrayOf(_propTypes["default"].shape({
353
+ value: _propTypes["default"].number.isRequired,
354
+ label: _propTypes["default"].string.isRequired
355
+ })),
356
+ usersProps: _propTypes["default"].object
346
357
  };
347
358
  var _default2 = exports["default"] = AdminDashboard;
@@ -13,6 +13,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
13
13
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
14
14
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
15
15
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
16
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
17
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
18
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
19
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
16
20
  function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
17
21
  function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
18
22
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
@@ -23,23 +27,14 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
23
27
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
24
28
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
25
29
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
26
- var ROLE_OPTIONS = [{
30
+ /** Generic Powr defaults — apps pass `roleOptions` for product-specific roles. */
31
+ var DEFAULT_ROLE_OPTIONS = [{
27
32
  value: 1,
28
- label: 'Student'
29
- }, {
30
- value: 300,
31
- label: 'College admin'
32
- }, {
33
- value: 900,
34
- label: 'Client'
33
+ label: 'User'
35
34
  }, {
36
35
  value: 100,
37
36
  label: 'Admin'
38
37
  }];
39
- var normalizeAccess = function normalizeAccess(access) {
40
- if (access === 100 || access === 300 || access === 900) return access;
41
- return 1;
42
- };
43
38
  var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
44
39
  var apiUrl = _ref.apiUrl,
45
40
  projectId = _ref.projectId,
@@ -52,7 +47,9 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
52
47
  _ref$onAddUser = _ref.onAddUser,
53
48
  onAddUser = _ref$onAddUser === void 0 ? null : _ref$onAddUser,
54
49
  _ref$onRoleChange = _ref.onRoleChange,
55
- onRoleChange = _ref$onRoleChange === void 0 ? null : _ref$onRoleChange;
50
+ onRoleChange = _ref$onRoleChange === void 0 ? null : _ref$onRoleChange,
51
+ _ref$roleOptions = _ref.roleOptions,
52
+ roleOptions = _ref$roleOptions === void 0 ? null : _ref$roleOptions;
56
53
  var _useState = (0, _react.useState)([]),
57
54
  _useState2 = _slicedToArray(_useState, 2),
58
55
  users = _useState2[0],
@@ -73,6 +70,15 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
73
70
  _useState0 = _slicedToArray(_useState9, 2),
74
71
  updatingUserId = _useState0[0],
75
72
  setUpdatingUserId = _useState0[1];
73
+ var resolvedRoleOptions = (0, _react.useMemo)(function () {
74
+ if (Array.isArray(roleOptions) && roleOptions.length > 0) return roleOptions;
75
+ return DEFAULT_ROLE_OPTIONS;
76
+ }, [roleOptions]);
77
+ var knownAccessValues = (0, _react.useMemo)(function () {
78
+ return new Set(resolvedRoleOptions.map(function (role) {
79
+ return Number(role.value);
80
+ }));
81
+ }, [resolvedRoleOptions]);
76
82
  (0, _react.useEffect)(function () {
77
83
  fetchUsers();
78
84
  }, [projectId]);
@@ -127,17 +133,38 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
127
133
  return _ref2.apply(this, arguments);
128
134
  };
129
135
  }();
136
+ var normalizeAccess = function normalizeAccess(access) {
137
+ var _resolvedRoleOptions$;
138
+ var n = Number(access);
139
+ if (knownAccessValues.has(n)) return n;
140
+ return Number((_resolvedRoleOptions$ = resolvedRoleOptions[0]) === null || _resolvedRoleOptions$ === void 0 ? void 0 : _resolvedRoleOptions$.value) || 1;
141
+ };
142
+ var optionsForUser = function optionsForUser(access) {
143
+ var n = Number(access);
144
+ if (Number.isFinite(n) && !knownAccessValues.has(n)) {
145
+ return [].concat(_toConsumableArray(resolvedRoleOptions), [{
146
+ value: n,
147
+ label: "Access ".concat(n)
148
+ }]);
149
+ }
150
+ return resolvedRoleOptions;
151
+ };
130
152
  var getBadgeVariant = function getBadgeVariant(access) {
131
- if (access === 100) return 'bg-red-100 text-red-800';
132
- if (access === 300) return 'bg-purple-100 text-purple-800';
133
- if (access === 900) return 'bg-blue-100 text-blue-800';
153
+ var n = Number(access);
154
+ if (n === 100) return 'bg-red-100 text-red-800';
155
+ if (n === 300) return 'bg-purple-100 text-purple-800';
156
+ if (n === 500) return 'bg-teal-100 text-teal-800';
157
+ if (n === 900) return 'bg-blue-100 text-blue-800';
134
158
  return 'bg-gray-100 text-gray-800';
135
159
  };
136
160
  var getBadgeText = function getBadgeText(access) {
137
- var option = ROLE_OPTIONS.find(function (role) {
138
- return role.value === normalizeAccess(access);
161
+ var n = Number(access);
162
+ var option = resolvedRoleOptions.find(function (role) {
163
+ return Number(role.value) === n;
139
164
  });
140
- return (option === null || option === void 0 ? void 0 : option.label) || 'Student';
165
+ if (option) return option.label;
166
+ if (Number.isFinite(n)) return "Access ".concat(n);
167
+ return 'User';
141
168
  };
142
169
  var updateUserRole = /*#__PURE__*/function () {
143
170
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(user, newAccess) {
@@ -153,7 +180,7 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
153
180
  setFeedback('Could not resolve user id');
154
181
  return _context2.a(2);
155
182
  case 1:
156
- if (!(normalizeAccess(user.access) === newAccess)) {
183
+ if (!(Number(user.access) === newAccess)) {
157
184
  _context2.n = 2;
158
185
  break;
159
186
  }
@@ -266,6 +293,8 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
266
293
  var _user$fullName;
267
294
  var userId = getUserId(user);
268
295
  var isUpdating = updatingUserId === userId;
296
+ var selectOptions = optionsForUser(user.access);
297
+ var selectValue = Number.isFinite(Number(user.access)) ? Number(user.access) : normalizeAccess(user.access);
269
298
  return /*#__PURE__*/_react["default"].createElement("tr", {
270
299
  key: userId || user._id,
271
300
  className: onUserClick ? 'cursor-pointer hover:bg-gray-50' : '',
@@ -296,13 +325,13 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
296
325
  }, showActions ? /*#__PURE__*/_react["default"].createElement("div", {
297
326
  className: "flex items-center gap-2"
298
327
  }, /*#__PURE__*/_react["default"].createElement("select", {
299
- value: normalizeAccess(user.access),
328
+ value: selectValue,
300
329
  disabled: isUpdating,
301
330
  onChange: function onChange(e) {
302
331
  return updateUserRole(user, Number(e.target.value));
303
332
  },
304
333
  className: "text-sm border border-gray-300 rounded-md px-2 py-1.5 bg-white focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:opacity-50"
305
- }, ROLE_OPTIONS.map(function (role) {
334
+ }, selectOptions.map(function (role) {
306
335
  return /*#__PURE__*/_react["default"].createElement("option", {
307
336
  key: role.value,
308
337
  value: role.value
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "powr-sdk-web",
3
- "version": "5.9.0",
3
+ "version": "5.9.1",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "build": "babel src -d dist --copy-files",