powr-sdk-web 5.6.12 → 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.
- package/dist/forms/admin.js +51 -3
- package/dist/users/admin.js +162 -25
- package/package.json +1 -1
package/dist/forms/admin.js
CHANGED
|
@@ -70,6 +70,7 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
70
70
|
formName: '',
|
|
71
71
|
formId: '',
|
|
72
72
|
description: '',
|
|
73
|
+
imageUrl: '',
|
|
73
74
|
fields: []
|
|
74
75
|
}),
|
|
75
76
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
@@ -84,6 +85,7 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
84
85
|
formName: '',
|
|
85
86
|
formId: '',
|
|
86
87
|
description: '',
|
|
88
|
+
imageUrl: '',
|
|
87
89
|
fields: []
|
|
88
90
|
}),
|
|
89
91
|
_useState20 = _slicedToArray(_useState19, 2),
|
|
@@ -306,6 +308,7 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
306
308
|
formName: '',
|
|
307
309
|
formId: '',
|
|
308
310
|
description: '',
|
|
311
|
+
imageUrl: '',
|
|
309
312
|
fields: []
|
|
310
313
|
});
|
|
311
314
|
};
|
|
@@ -315,6 +318,7 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
315
318
|
formName: form.formName || '',
|
|
316
319
|
formId: form.formId || '',
|
|
317
320
|
description: form.description || '',
|
|
321
|
+
imageUrl: form.imageUrl || '',
|
|
318
322
|
fields: (form.fields || []).map(function (field, index) {
|
|
319
323
|
return _objectSpread({
|
|
320
324
|
id: "".concat(field.name || 'field', "-").concat(index),
|
|
@@ -529,6 +533,7 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
529
533
|
formName: validation.trimmedName,
|
|
530
534
|
formId: validation.trimmedId,
|
|
531
535
|
description: formDraft.description.trim(),
|
|
536
|
+
imageUrl: formDraft.imageUrl.trim(),
|
|
532
537
|
fields: validation.normalizedFields
|
|
533
538
|
};
|
|
534
539
|
_context4.n = 4;
|
|
@@ -601,6 +606,7 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
601
606
|
formTitle: validation.trimmedTitle,
|
|
602
607
|
formId: validation.trimmedId,
|
|
603
608
|
description: editDraft.description.trim(),
|
|
609
|
+
imageUrl: editDraft.imageUrl.trim(),
|
|
604
610
|
fields: validation.normalizedFields
|
|
605
611
|
};
|
|
606
612
|
_context5.n = 4;
|
|
@@ -949,7 +955,25 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
949
955
|
placeholder: "Instructions or context shown at the top of the public form",
|
|
950
956
|
rows: 3,
|
|
951
957
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
952
|
-
})),
|
|
958
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
959
|
+
htmlFor: "formImageUrl",
|
|
960
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
961
|
+
}, "Banner / share image URL (optional)"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
962
|
+
id: "formImageUrl",
|
|
963
|
+
type: "url",
|
|
964
|
+
value: formDraft.imageUrl,
|
|
965
|
+
onChange: function onChange(e) {
|
|
966
|
+
return setFormDraft(function (prev) {
|
|
967
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
968
|
+
imageUrl: e.target.value
|
|
969
|
+
});
|
|
970
|
+
});
|
|
971
|
+
},
|
|
972
|
+
placeholder: "https://www.excelrs.dev/bannar1.jpg",
|
|
973
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
974
|
+
}), /*#__PURE__*/_react["default"].createElement("p", {
|
|
975
|
+
className: "text-xs text-gray-500 mt-1"
|
|
976
|
+
}, "Used for the form banner and link previews (Open Graph / Twitter).")), renderFieldBuilder(formDraft, {
|
|
953
977
|
addFieldFn: addField,
|
|
954
978
|
updateFieldFn: updateField,
|
|
955
979
|
removeFieldFn: removeField
|
|
@@ -1047,7 +1071,13 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
1047
1071
|
className: "font-medium text-gray-700"
|
|
1048
1072
|
}, "Description:"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
1049
1073
|
className: "text-gray-900 whitespace-pre-wrap"
|
|
1050
|
-
}, selectedForm.description))
|
|
1074
|
+
}, selectedForm.description)), selectedForm.imageUrl && /*#__PURE__*/_react["default"].createElement("div", {
|
|
1075
|
+
className: "md:col-span-2"
|
|
1076
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
1077
|
+
className: "font-medium text-gray-700"
|
|
1078
|
+
}, "Banner / share image:"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
1079
|
+
className: "text-gray-900 break-all"
|
|
1080
|
+
}, selectedForm.imageUrl))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", {
|
|
1051
1081
|
className: "font-medium text-gray-700 mb-2"
|
|
1052
1082
|
}, "Form Fields:"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
1053
1083
|
className: "bg-gray-50 p-4 rounded-lg"
|
|
@@ -1201,7 +1231,25 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
1201
1231
|
placeholder: "Instructions or context shown at the top of the public form",
|
|
1202
1232
|
rows: 3,
|
|
1203
1233
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
1204
|
-
})),
|
|
1234
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
1235
|
+
htmlFor: "editFormImageUrl",
|
|
1236
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
1237
|
+
}, "Banner / share image URL (optional)"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
1238
|
+
id: "editFormImageUrl",
|
|
1239
|
+
type: "url",
|
|
1240
|
+
value: editDraft.imageUrl,
|
|
1241
|
+
onChange: function onChange(e) {
|
|
1242
|
+
return setEditDraft(function (prev) {
|
|
1243
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
1244
|
+
imageUrl: e.target.value
|
|
1245
|
+
});
|
|
1246
|
+
});
|
|
1247
|
+
},
|
|
1248
|
+
placeholder: "https://www.excelrs.dev/bannar1.jpg",
|
|
1249
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
1250
|
+
}), /*#__PURE__*/_react["default"].createElement("p", {
|
|
1251
|
+
className: "text-xs text-gray-500 mt-1"
|
|
1252
|
+
}, "Used for the form banner and link previews (Open Graph / Twitter).")), renderFieldBuilder(editDraft, {
|
|
1205
1253
|
addFieldFn: addEditField,
|
|
1206
1254
|
updateFieldFn: updateEditField,
|
|
1207
1255
|
removeFieldFn: removeEditField
|
package/dist/users/admin.js
CHANGED
|
@@ -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
|
|
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 ?
|
|
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
|
|
93
|
-
if (access ===
|
|
94
|
-
return
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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("
|
|
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"),
|
|
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 ?
|
|
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
|
-
|
|
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))
|
|
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", {
|