powr-sdk-web 5.6.13 → 5.6.14

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 (2) hide show
  1. package/dist/users/admin.js +162 -25
  2. package/package.json +1 -1
@@ -7,7 +7,12 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports["default"] = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _auth = require("../utils/auth");
10
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t3 in e) "default" !== _t3 && {}.hasOwnProperty.call(e, _t3) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t3)) && (i.get || i.set) ? o(f, _t3, i) : f[_t3] = e[_t3]); return f; })(e, t); }
11
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
12
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
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
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
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); }
11
16
  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 }; })(); }
12
17
  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); }
13
18
  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); }
@@ -18,17 +23,36 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
18
23
  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; }
19
24
  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; } }
20
25
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
26
+ var ROLE_OPTIONS = [{
27
+ value: 1,
28
+ label: 'Student'
29
+ }, {
30
+ value: 300,
31
+ label: 'College admin'
32
+ }, {
33
+ value: 900,
34
+ label: 'Client'
35
+ }, {
36
+ value: 100,
37
+ label: 'Admin'
38
+ }];
39
+ var normalizeAccess = function normalizeAccess(access) {
40
+ if (access === 100 || access === 300 || access === 900) return access;
41
+ return 1;
42
+ };
21
43
  var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
22
44
  var apiUrl = _ref.apiUrl,
23
45
  projectId = _ref.projectId,
24
46
  _ref$theme = _ref.theme,
25
- theme = _ref$theme === void 0 ? "blue" : _ref$theme,
47
+ theme = _ref$theme === void 0 ? 'blue' : _ref$theme,
26
48
  _ref$onUserClick = _ref.onUserClick,
27
49
  onUserClick = _ref$onUserClick === void 0 ? null : _ref$onUserClick,
28
50
  _ref$showActions = _ref.showActions,
29
51
  showActions = _ref$showActions === void 0 ? true : _ref$showActions,
30
52
  _ref$onAddUser = _ref.onAddUser,
31
- onAddUser = _ref$onAddUser === void 0 ? null : _ref$onAddUser;
53
+ onAddUser = _ref$onAddUser === void 0 ? null : _ref$onAddUser,
54
+ _ref$onRoleChange = _ref.onRoleChange,
55
+ onRoleChange = _ref$onRoleChange === void 0 ? null : _ref$onRoleChange;
32
56
  var _useState = (0, _react.useState)([]),
33
57
  _useState2 = _slicedToArray(_useState, 2),
34
58
  users = _useState2[0],
@@ -41,9 +65,23 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
41
65
  _useState6 = _slicedToArray(_useState5, 2),
42
66
  error = _useState6[0],
43
67
  setError = _useState6[1];
68
+ var _useState7 = (0, _react.useState)(''),
69
+ _useState8 = _slicedToArray(_useState7, 2),
70
+ feedback = _useState8[0],
71
+ setFeedback = _useState8[1];
72
+ var _useState9 = (0, _react.useState)(null),
73
+ _useState0 = _slicedToArray(_useState9, 2),
74
+ updatingUserId = _useState0[0],
75
+ setUpdatingUserId = _useState0[1];
44
76
  (0, _react.useEffect)(function () {
45
77
  fetchUsers();
46
78
  }, [projectId]);
79
+ var getUserId = function getUserId(user) {
80
+ if (!user) return null;
81
+ if (user.userId) return String(user.userId);
82
+ if (user._id) return String(user._id);
83
+ return null;
84
+ };
47
85
  var fetchUsers = /*#__PURE__*/function () {
48
86
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
49
87
  var _yield$apiCall, data, ok, _t;
@@ -52,6 +90,7 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
52
90
  case 0:
53
91
  _context.p = 0;
54
92
  setLoading(true);
93
+ setError(null);
55
94
  _context.n = 1;
56
95
  return (0, _auth.apiCall)(apiUrl, "/profiles", projectId);
57
96
  case 1:
@@ -89,16 +128,97 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
89
128
  };
90
129
  }();
91
130
  var getBadgeVariant = function getBadgeVariant(access) {
92
- if (access === 100) return "bg-red-100 text-red-800";
93
- if (access === 900) return "bg-blue-100 text-blue-800";
94
- return "bg-gray-100 text-gray-800";
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';
134
+ return 'bg-gray-100 text-gray-800';
95
135
  };
96
136
  var getBadgeText = function getBadgeText(access) {
97
- if (access === 100) return "Admin";
98
- if (access === 900) return "Client";
99
- return "Employee";
137
+ var option = ROLE_OPTIONS.find(function (role) {
138
+ return role.value === normalizeAccess(access);
139
+ });
140
+ return (option === null || option === void 0 ? void 0 : option.label) || 'Student';
100
141
  };
142
+ var updateUserRole = /*#__PURE__*/function () {
143
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(user, newAccess) {
144
+ var userId, _yield$apiCall2, data, ok, message, _message, _t2;
145
+ return _regenerator().w(function (_context2) {
146
+ while (1) switch (_context2.p = _context2.n) {
147
+ case 0:
148
+ userId = getUserId(user);
149
+ if (userId) {
150
+ _context2.n = 1;
151
+ break;
152
+ }
153
+ setFeedback('Could not resolve user id');
154
+ return _context2.a(2);
155
+ case 1:
156
+ if (!(normalizeAccess(user.access) === newAccess)) {
157
+ _context2.n = 2;
158
+ break;
159
+ }
160
+ return _context2.a(2);
161
+ case 2:
162
+ setUpdatingUserId(userId);
163
+ setFeedback('');
164
+ _context2.p = 3;
165
+ _context2.n = 4;
166
+ return (0, _auth.apiCall)(apiUrl, "/users/".concat(userId), projectId, {
167
+ method: 'PUT',
168
+ body: {
169
+ access: newAccess
170
+ }
171
+ });
172
+ case 4:
173
+ _yield$apiCall2 = _context2.v;
174
+ data = _yield$apiCall2.data;
175
+ ok = _yield$apiCall2.ok;
176
+ if (ok) {
177
+ _context2.n = 5;
178
+ break;
179
+ }
180
+ throw new Error(data.message || 'Failed to update role');
181
+ case 5:
182
+ setUsers(function (prev) {
183
+ return prev.map(function (item) {
184
+ return getUserId(item) === userId ? _objectSpread(_objectSpread({}, item), {}, {
185
+ access: newAccess
186
+ }) : item;
187
+ });
188
+ });
189
+ message = 'Role updated. User must log out and log back in.';
190
+ setFeedback(message);
191
+ if (onRoleChange) {
192
+ onRoleChange('success', message, user, newAccess);
193
+ }
194
+ _context2.n = 7;
195
+ break;
196
+ case 6:
197
+ _context2.p = 6;
198
+ _t2 = _context2.v;
199
+ _message = _t2.message || 'Failed to update role';
200
+ setFeedback(_message);
201
+ if (onRoleChange) {
202
+ onRoleChange('error', _message, user, newAccess);
203
+ }
204
+ case 7:
205
+ _context2.p = 7;
206
+ setUpdatingUserId(null);
207
+ setTimeout(function () {
208
+ return setFeedback('');
209
+ }, 4000);
210
+ return _context2.f(7);
211
+ case 8:
212
+ return _context2.a(2);
213
+ }
214
+ }, _callee2, null, [[3, 6, 7, 8]]);
215
+ }));
216
+ return function updateUserRole(_x, _x2) {
217
+ return _ref3.apply(this, arguments);
218
+ };
219
+ }();
101
220
  var formatDate = function formatDate(dateString) {
221
+ if (!dateString) return '—';
102
222
  return new Date(dateString).toLocaleDateString();
103
223
  };
104
224
  if (loading) {
@@ -119,12 +239,16 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
119
239
  className: "bg-white rounded-lg shadow"
120
240
  }, /*#__PURE__*/_react["default"].createElement("div", {
121
241
  className: "px-6 py-4 border-b border-gray-200 flex justify-between items-center"
122
- }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", {
242
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("h2", {
243
+ className: "text-lg font-semibold text-gray-900"
244
+ }, "Users"), /*#__PURE__*/_react["default"].createElement("p", {
123
245
  className: "mt-1 text-sm text-gray-500"
124
246
  }, users.length, " user", users.length !== 1 ? 's' : '', " found")), showActions && onAddUser && /*#__PURE__*/_react["default"].createElement("button", {
125
247
  onClick: onAddUser,
126
248
  className: "bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-md text-sm font-medium"
127
- }, "Add User")), /*#__PURE__*/_react["default"].createElement("div", {
249
+ }, "Add User")), feedback && /*#__PURE__*/_react["default"].createElement("div", {
250
+ className: "mx-6 mt-4 rounded-lg border border-blue-200 bg-blue-50 px-4 py-3 text-sm text-blue-800"
251
+ }, feedback), /*#__PURE__*/_react["default"].createElement("div", {
128
252
  className: "overflow-x-auto"
129
253
  }, /*#__PURE__*/_react["default"].createElement("table", {
130
254
  className: "min-w-full divide-y divide-gray-200"
@@ -136,15 +260,15 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
136
260
  className: "px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"
137
261
  }, "Role"), /*#__PURE__*/_react["default"].createElement("th", {
138
262
  className: "px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"
139
- }, "Joined"), showActions && /*#__PURE__*/_react["default"].createElement("th", {
140
- className: "px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider"
141
- }, "Actions"))), /*#__PURE__*/_react["default"].createElement("tbody", {
263
+ }, "Joined"))), /*#__PURE__*/_react["default"].createElement("tbody", {
142
264
  className: "bg-white divide-y divide-gray-200"
143
265
  }, users.map(function (user) {
144
266
  var _user$fullName;
267
+ var userId = getUserId(user);
268
+ var isUpdating = updatingUserId === userId;
145
269
  return /*#__PURE__*/_react["default"].createElement("tr", {
146
- key: user._id,
147
- className: onUserClick ? "cursor-pointer hover:bg-gray-50" : "",
270
+ key: userId || user._id,
271
+ className: onUserClick ? 'cursor-pointer hover:bg-gray-50' : '',
148
272
  onClick: function onClick() {
149
273
  return onUserClick && onUserClick(user);
150
274
  }
@@ -165,18 +289,31 @@ var PowrBaseUsersAdmin = function PowrBaseUsersAdmin(_ref) {
165
289
  }, user.fullName || 'Unknown User'), /*#__PURE__*/_react["default"].createElement("div", {
166
290
  className: "text-sm text-gray-500"
167
291
  }, user.email || user.phoneNumber || 'No contact info')))), /*#__PURE__*/_react["default"].createElement("td", {
168
- className: "px-6 py-4 whitespace-nowrap"
169
- }, /*#__PURE__*/_react["default"].createElement("span", {
292
+ className: "px-6 py-4 whitespace-nowrap",
293
+ onClick: function onClick(e) {
294
+ return e.stopPropagation();
295
+ }
296
+ }, showActions ? /*#__PURE__*/_react["default"].createElement("div", {
297
+ className: "flex items-center gap-2"
298
+ }, /*#__PURE__*/_react["default"].createElement("select", {
299
+ value: normalizeAccess(user.access),
300
+ disabled: isUpdating,
301
+ onChange: function onChange(e) {
302
+ return updateUserRole(user, Number(e.target.value));
303
+ },
304
+ 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) {
306
+ return /*#__PURE__*/_react["default"].createElement("option", {
307
+ key: role.value,
308
+ value: role.value
309
+ }, role.label);
310
+ })), isUpdating && /*#__PURE__*/_react["default"].createElement("span", {
311
+ className: "text-xs text-gray-500"
312
+ }, "Saving...")) : /*#__PURE__*/_react["default"].createElement("span", {
170
313
  className: "inline-flex px-2 py-1 text-xs font-semibold rounded-full ".concat(getBadgeVariant(user.access))
171
314
  }, getBadgeText(user.access))), /*#__PURE__*/_react["default"].createElement("td", {
172
315
  className: "px-6 py-4 whitespace-nowrap text-sm text-gray-500"
173
- }, formatDate(user.createdAt)), showActions && /*#__PURE__*/_react["default"].createElement("td", {
174
- className: "px-6 py-4 whitespace-nowrap text-sm font-medium"
175
- }, /*#__PURE__*/_react["default"].createElement("button", {
176
- className: "text-indigo-600 hover:text-indigo-900 mr-3"
177
- }, "Edit"), /*#__PURE__*/_react["default"].createElement("button", {
178
- className: "text-red-600 hover:text-red-900"
179
- }, "Remove")));
316
+ }, formatDate(user.createdAt)));
180
317
  })))), users.length === 0 && /*#__PURE__*/_react["default"].createElement("div", {
181
318
  className: "text-center py-8"
182
319
  }, /*#__PURE__*/_react["default"].createElement("div", {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "powr-sdk-web",
3
- "version": "5.6.13",
3
+ "version": "5.6.14",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "build": "babel src -d dist --copy-files",