powr-sdk-web 2.0.2 → 2.0.4
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/management.js +494 -0
- package/dist/index.js +8 -1
- package/dist/waitlists/display.js +276 -80
- package/package.json +1 -1
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
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 _t4 in e) "default" !== _t4 && {}.hasOwnProperty.call(e, _t4) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t4)) && (i.get || i.set) ? o(f, _t4, i) : f[_t4] = e[_t4]); return f; })(e, t); }
|
|
10
|
+
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 }; })(); }
|
|
11
|
+
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); }
|
|
12
|
+
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); }
|
|
13
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
14
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
15
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
16
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
17
|
+
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; }
|
|
18
|
+
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; } }
|
|
19
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
20
|
+
var FormsManagement = function FormsManagement(_ref) {
|
|
21
|
+
var projectId = _ref.projectId,
|
|
22
|
+
_ref$apiUrl = _ref.apiUrl,
|
|
23
|
+
apiUrl = _ref$apiUrl === void 0 ? 'https://api.powrbase.cloud/forms' : _ref$apiUrl,
|
|
24
|
+
onFormAction = _ref.onFormAction,
|
|
25
|
+
onRefresh = _ref.onRefresh;
|
|
26
|
+
var _useState = (0, _react.useState)([]),
|
|
27
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
28
|
+
forms = _useState2[0],
|
|
29
|
+
setForms = _useState2[1];
|
|
30
|
+
var _useState3 = (0, _react.useState)(true),
|
|
31
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
32
|
+
loading = _useState4[0],
|
|
33
|
+
setLoading = _useState4[1];
|
|
34
|
+
var _useState5 = (0, _react.useState)(''),
|
|
35
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
36
|
+
error = _useState6[0],
|
|
37
|
+
setError = _useState6[1];
|
|
38
|
+
var _useState7 = (0, _react.useState)(false),
|
|
39
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
40
|
+
showCreateModal = _useState8[0],
|
|
41
|
+
setShowCreateModal = _useState8[1];
|
|
42
|
+
var _useState9 = (0, _react.useState)(null),
|
|
43
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
44
|
+
selectedFile = _useState0[0],
|
|
45
|
+
setSelectedFile = _useState0[1];
|
|
46
|
+
var _useState1 = (0, _react.useState)(false),
|
|
47
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
48
|
+
isUploading = _useState10[0],
|
|
49
|
+
setIsUploading = _useState10[1];
|
|
50
|
+
var _useState11 = (0, _react.useState)(null),
|
|
51
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
52
|
+
selectedForm = _useState12[0],
|
|
53
|
+
setSelectedForm = _useState12[1];
|
|
54
|
+
var _useState13 = (0, _react.useState)(false),
|
|
55
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
56
|
+
showDetailModal = _useState14[0],
|
|
57
|
+
setShowDetailModal = _useState14[1];
|
|
58
|
+
var _useState15 = (0, _react.useState)('structure'),
|
|
59
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
60
|
+
activeTab = _useState16[0],
|
|
61
|
+
setActiveTab = _useState16[1];
|
|
62
|
+
var _useState17 = (0, _react.useState)([]),
|
|
63
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
64
|
+
formResponses = _useState18[0],
|
|
65
|
+
setFormResponses = _useState18[1];
|
|
66
|
+
var _useState19 = (0, _react.useState)(0),
|
|
67
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
68
|
+
responseCount = _useState20[0],
|
|
69
|
+
setResponseCount = _useState20[1];
|
|
70
|
+
var _useState21 = (0, _react.useState)(false),
|
|
71
|
+
_useState22 = _slicedToArray(_useState21, 2),
|
|
72
|
+
loadingResponses = _useState22[0],
|
|
73
|
+
setLoadingResponses = _useState22[1];
|
|
74
|
+
var fetchForms = /*#__PURE__*/function () {
|
|
75
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
76
|
+
var response, data, _t;
|
|
77
|
+
return _regenerator().w(function (_context) {
|
|
78
|
+
while (1) switch (_context.n) {
|
|
79
|
+
case 0:
|
|
80
|
+
if (projectId) {
|
|
81
|
+
_context.n = 1;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
setError('Project ID is required');
|
|
85
|
+
setLoading(false);
|
|
86
|
+
return _context.a(2);
|
|
87
|
+
case 1:
|
|
88
|
+
_context.p = 1;
|
|
89
|
+
setLoading(true);
|
|
90
|
+
setError('');
|
|
91
|
+
_context.n = 2;
|
|
92
|
+
return fetch("".concat(apiUrl, "/powrform?projectId=").concat(projectId));
|
|
93
|
+
case 2:
|
|
94
|
+
response = _context.v;
|
|
95
|
+
if (response.ok) {
|
|
96
|
+
_context.n = 3;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
throw new Error('Failed to fetch forms');
|
|
100
|
+
case 3:
|
|
101
|
+
_context.n = 4;
|
|
102
|
+
return response.json();
|
|
103
|
+
case 4:
|
|
104
|
+
data = _context.v;
|
|
105
|
+
if (!(data.success && data.data)) {
|
|
106
|
+
_context.n = 5;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
setForms(data.data || []);
|
|
110
|
+
_context.n = 6;
|
|
111
|
+
break;
|
|
112
|
+
case 5:
|
|
113
|
+
throw new Error(data.message || 'Failed to load forms');
|
|
114
|
+
case 6:
|
|
115
|
+
_context.n = 8;
|
|
116
|
+
break;
|
|
117
|
+
case 7:
|
|
118
|
+
_context.p = 7;
|
|
119
|
+
_t = _context.v;
|
|
120
|
+
setError(_t.message || 'Something went wrong');
|
|
121
|
+
console.error('Error fetching forms:', _t);
|
|
122
|
+
if (onFormAction) {
|
|
123
|
+
onFormAction('error', 'Failed to load forms');
|
|
124
|
+
}
|
|
125
|
+
case 8:
|
|
126
|
+
_context.p = 8;
|
|
127
|
+
setLoading(false);
|
|
128
|
+
return _context.f(8);
|
|
129
|
+
case 9:
|
|
130
|
+
return _context.a(2);
|
|
131
|
+
}
|
|
132
|
+
}, _callee, null, [[1, 7, 8, 9]]);
|
|
133
|
+
}));
|
|
134
|
+
return function fetchForms() {
|
|
135
|
+
return _ref2.apply(this, arguments);
|
|
136
|
+
};
|
|
137
|
+
}();
|
|
138
|
+
var fetchFormResponses = /*#__PURE__*/function () {
|
|
139
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(formName) {
|
|
140
|
+
var response, data, _t2;
|
|
141
|
+
return _regenerator().w(function (_context2) {
|
|
142
|
+
while (1) switch (_context2.n) {
|
|
143
|
+
case 0:
|
|
144
|
+
if (projectId) {
|
|
145
|
+
_context2.n = 1;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
return _context2.a(2);
|
|
149
|
+
case 1:
|
|
150
|
+
setLoadingResponses(true);
|
|
151
|
+
_context2.p = 2;
|
|
152
|
+
_context2.n = 3;
|
|
153
|
+
return fetch("".concat(apiUrl, "/getCount/").concat(formName, "?projectId=").concat(projectId), {
|
|
154
|
+
headers: {
|
|
155
|
+
'Content-Type': 'application/json'
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
case 3:
|
|
159
|
+
response = _context2.v;
|
|
160
|
+
if (!response.ok) {
|
|
161
|
+
_context2.n = 5;
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
_context2.n = 4;
|
|
165
|
+
return response.json();
|
|
166
|
+
case 4:
|
|
167
|
+
data = _context2.v;
|
|
168
|
+
if (data.success) {
|
|
169
|
+
setResponseCount(data.count || 0);
|
|
170
|
+
setFormResponses(data.data || []);
|
|
171
|
+
}
|
|
172
|
+
_context2.n = 6;
|
|
173
|
+
break;
|
|
174
|
+
case 5:
|
|
175
|
+
throw new Error('Failed to fetch responses');
|
|
176
|
+
case 6:
|
|
177
|
+
_context2.n = 8;
|
|
178
|
+
break;
|
|
179
|
+
case 7:
|
|
180
|
+
_context2.p = 7;
|
|
181
|
+
_t2 = _context2.v;
|
|
182
|
+
console.error('Error fetching form responses:', _t2);
|
|
183
|
+
setResponseCount(0);
|
|
184
|
+
setFormResponses([]);
|
|
185
|
+
if (onFormAction) {
|
|
186
|
+
onFormAction('error', 'Failed to load form responses');
|
|
187
|
+
}
|
|
188
|
+
case 8:
|
|
189
|
+
_context2.p = 8;
|
|
190
|
+
setLoadingResponses(false);
|
|
191
|
+
return _context2.f(8);
|
|
192
|
+
case 9:
|
|
193
|
+
return _context2.a(2);
|
|
194
|
+
}
|
|
195
|
+
}, _callee2, null, [[2, 7, 8, 9]]);
|
|
196
|
+
}));
|
|
197
|
+
return function fetchFormResponses(_x) {
|
|
198
|
+
return _ref3.apply(this, arguments);
|
|
199
|
+
};
|
|
200
|
+
}();
|
|
201
|
+
var createForm = /*#__PURE__*/function () {
|
|
202
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
203
|
+
var formData, response, result, errorMessage, _errorMessage, _t3;
|
|
204
|
+
return _regenerator().w(function (_context3) {
|
|
205
|
+
while (1) switch (_context3.n) {
|
|
206
|
+
case 0:
|
|
207
|
+
if (!(!projectId || !selectedFile)) {
|
|
208
|
+
_context3.n = 1;
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
if (onFormAction) {
|
|
212
|
+
onFormAction('error', 'Please select a JSON file to upload');
|
|
213
|
+
}
|
|
214
|
+
return _context3.a(2);
|
|
215
|
+
case 1:
|
|
216
|
+
setIsUploading(true);
|
|
217
|
+
_context3.p = 2;
|
|
218
|
+
formData = new FormData();
|
|
219
|
+
formData.append('jsonFile', selectedFile);
|
|
220
|
+
_context3.n = 3;
|
|
221
|
+
return fetch("".concat(apiUrl, "/create-form?projectId=").concat(projectId), {
|
|
222
|
+
method: 'POST',
|
|
223
|
+
body: formData
|
|
224
|
+
});
|
|
225
|
+
case 3:
|
|
226
|
+
response = _context3.v;
|
|
227
|
+
_context3.n = 4;
|
|
228
|
+
return response.json();
|
|
229
|
+
case 4:
|
|
230
|
+
result = _context3.v;
|
|
231
|
+
if (response.ok) {
|
|
232
|
+
_context3.n = 5;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
errorMessage = result.message || 'Failed to create form';
|
|
236
|
+
throw new Error(errorMessage);
|
|
237
|
+
case 5:
|
|
238
|
+
if (onFormAction) {
|
|
239
|
+
onFormAction('success', result.message || 'Form created successfully!');
|
|
240
|
+
}
|
|
241
|
+
setSelectedFile(null);
|
|
242
|
+
setShowCreateModal(false);
|
|
243
|
+
fetchForms();
|
|
244
|
+
if (onRefresh) {
|
|
245
|
+
onRefresh();
|
|
246
|
+
}
|
|
247
|
+
_context3.n = 7;
|
|
248
|
+
break;
|
|
249
|
+
case 6:
|
|
250
|
+
_context3.p = 6;
|
|
251
|
+
_t3 = _context3.v;
|
|
252
|
+
console.error('Error creating form:', _t3);
|
|
253
|
+
_errorMessage = _t3 instanceof Error ? _t3.message : 'Failed to create form';
|
|
254
|
+
if (onFormAction) {
|
|
255
|
+
onFormAction('error', _errorMessage);
|
|
256
|
+
}
|
|
257
|
+
setSelectedFile(null);
|
|
258
|
+
setShowCreateModal(false);
|
|
259
|
+
case 7:
|
|
260
|
+
_context3.p = 7;
|
|
261
|
+
setIsUploading(false);
|
|
262
|
+
return _context3.f(7);
|
|
263
|
+
case 8:
|
|
264
|
+
return _context3.a(2);
|
|
265
|
+
}
|
|
266
|
+
}, _callee3, null, [[2, 6, 7, 8]]);
|
|
267
|
+
}));
|
|
268
|
+
return function createForm() {
|
|
269
|
+
return _ref4.apply(this, arguments);
|
|
270
|
+
};
|
|
271
|
+
}();
|
|
272
|
+
var handleFileChange = function handleFileChange(e) {
|
|
273
|
+
var _e$target$files;
|
|
274
|
+
var file = (_e$target$files = e.target.files) === null || _e$target$files === void 0 ? void 0 : _e$target$files[0];
|
|
275
|
+
if (file && file.type === 'application/json') {
|
|
276
|
+
setSelectedFile(file);
|
|
277
|
+
} else {
|
|
278
|
+
if (onFormAction) {
|
|
279
|
+
onFormAction('error', 'Please select a valid JSON file');
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
var handleViewForm = function handleViewForm(form) {
|
|
284
|
+
setSelectedForm(form);
|
|
285
|
+
setActiveTab('structure');
|
|
286
|
+
setShowDetailModal(true);
|
|
287
|
+
fetchFormResponses(form.formName);
|
|
288
|
+
};
|
|
289
|
+
(0, _react.useEffect)(function () {
|
|
290
|
+
fetchForms();
|
|
291
|
+
}, [projectId, apiUrl]);
|
|
292
|
+
if (loading) {
|
|
293
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
294
|
+
className: "flex items-center justify-center h-64"
|
|
295
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
296
|
+
className: "animate-spin h-8 w-8 border-4 border-blue-600 border-t-transparent rounded-full"
|
|
297
|
+
}));
|
|
298
|
+
}
|
|
299
|
+
if (error) {
|
|
300
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
301
|
+
className: "text-center py-8 text-red-500"
|
|
302
|
+
}, /*#__PURE__*/_react["default"].createElement("p", null, error));
|
|
303
|
+
}
|
|
304
|
+
if (!projectId) {
|
|
305
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
306
|
+
className: "flex items-center justify-center h-64"
|
|
307
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
308
|
+
className: "text-center"
|
|
309
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
310
|
+
className: "text-gray-500"
|
|
311
|
+
}, "No project selected"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
312
|
+
className: "text-sm text-gray-400"
|
|
313
|
+
}, "Please select a project to view forms")));
|
|
314
|
+
}
|
|
315
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
316
|
+
className: "space-y-6"
|
|
317
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
318
|
+
className: "flex items-center justify-between"
|
|
319
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("h1", {
|
|
320
|
+
className: "text-2xl font-bold text-gray-900"
|
|
321
|
+
}, "Forms Management"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
322
|
+
className: "text-gray-600 mt-1"
|
|
323
|
+
}, "Create and manage your dynamic forms")), /*#__PURE__*/_react["default"].createElement("button", {
|
|
324
|
+
onClick: function onClick() {
|
|
325
|
+
return setShowCreateModal(true);
|
|
326
|
+
},
|
|
327
|
+
className: "bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg flex items-center gap-2"
|
|
328
|
+
}, /*#__PURE__*/_react["default"].createElement("svg", {
|
|
329
|
+
className: "h-4 w-4",
|
|
330
|
+
fill: "none",
|
|
331
|
+
stroke: "currentColor",
|
|
332
|
+
viewBox: "0 0 24 24"
|
|
333
|
+
}, /*#__PURE__*/_react["default"].createElement("path", {
|
|
334
|
+
strokeLinecap: "round",
|
|
335
|
+
strokeLinejoin: "round",
|
|
336
|
+
strokeWidth: 2,
|
|
337
|
+
d: "M12 4v16m8-8H4"
|
|
338
|
+
})), "Create Form")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
339
|
+
className: "bg-white rounded-lg shadow"
|
|
340
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
341
|
+
className: "px-6 py-4 border-b border-gray-200"
|
|
342
|
+
}, /*#__PURE__*/_react["default"].createElement("h3", {
|
|
343
|
+
className: "text-lg font-semibold text-gray-900"
|
|
344
|
+
}, "Your Forms")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
345
|
+
className: "p-6"
|
|
346
|
+
}, forms.length === 0 ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
347
|
+
className: "text-center py-8 text-gray-500"
|
|
348
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
349
|
+
className: "h-12 w-12 mx-auto mb-4 text-gray-300"
|
|
350
|
+
}, /*#__PURE__*/_react["default"].createElement("svg", {
|
|
351
|
+
fill: "currentColor",
|
|
352
|
+
viewBox: "0 0 20 20"
|
|
353
|
+
}, /*#__PURE__*/_react["default"].createElement("path", {
|
|
354
|
+
fillRule: "evenodd",
|
|
355
|
+
d: "M4 4a2 2 0 00-2 2v8a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2H4zm3 2h6v4H7V6zm8 8H5v-2h10v2z",
|
|
356
|
+
clipRule: "evenodd"
|
|
357
|
+
}))), /*#__PURE__*/_react["default"].createElement("p", null, "No forms created yet"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
358
|
+
className: "text-sm"
|
|
359
|
+
}, "Create your first form to get started")) : /*#__PURE__*/_react["default"].createElement("div", {
|
|
360
|
+
className: "space-y-4"
|
|
361
|
+
}, forms.map(function (form) {
|
|
362
|
+
var _form$fields;
|
|
363
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
364
|
+
key: form._id,
|
|
365
|
+
className: "flex items-center justify-between p-4 border rounded-lg hover:bg-gray-50 cursor-pointer",
|
|
366
|
+
onClick: function onClick() {
|
|
367
|
+
return handleViewForm(form);
|
|
368
|
+
}
|
|
369
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
370
|
+
className: "flex-1"
|
|
371
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
372
|
+
className: "flex items-center space-x-3"
|
|
373
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", {
|
|
374
|
+
className: "text-sm font-medium text-gray-900"
|
|
375
|
+
}, form.formTitle), /*#__PURE__*/_react["default"].createElement("p", {
|
|
376
|
+
className: "text-xs text-gray-400"
|
|
377
|
+
}, "ID: ", form.formId), /*#__PURE__*/_react["default"].createElement("p", {
|
|
378
|
+
className: "text-xs text-gray-400"
|
|
379
|
+
}, "Name: ", form.formName)))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
380
|
+
className: "text-sm text-gray-500"
|
|
381
|
+
}, ((_form$fields = form.fields) === null || _form$fields === void 0 ? void 0 : _form$fields.length) || 0, " fields"));
|
|
382
|
+
})))), showCreateModal && /*#__PURE__*/_react["default"].createElement("div", {
|
|
383
|
+
className: "fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50"
|
|
384
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
385
|
+
className: "bg-white rounded-2xl shadow-xl p-8 w-full max-w-lg"
|
|
386
|
+
}, /*#__PURE__*/_react["default"].createElement("h2", {
|
|
387
|
+
className: "text-xl font-bold text-gray-800 mb-6"
|
|
388
|
+
}, "Create New Form"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
389
|
+
className: "space-y-4"
|
|
390
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
391
|
+
htmlFor: "jsonFile",
|
|
392
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
393
|
+
}, "JSON Form Schema *"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
394
|
+
id: "jsonFile",
|
|
395
|
+
name: "jsonFile",
|
|
396
|
+
type: "file",
|
|
397
|
+
accept: ".json",
|
|
398
|
+
onChange: handleFileChange,
|
|
399
|
+
required: true,
|
|
400
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
401
|
+
}), /*#__PURE__*/_react["default"].createElement("p", {
|
|
402
|
+
className: "text-xs text-gray-500 mt-1"
|
|
403
|
+
}, "Upload a JSON file containing your form schema"))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
404
|
+
className: "flex justify-end gap-4 mt-6"
|
|
405
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
406
|
+
onClick: function onClick() {
|
|
407
|
+
return setShowCreateModal(false);
|
|
408
|
+
},
|
|
409
|
+
className: "bg-gray-300 text-gray-700 hover:bg-gray-400 px-4 py-2 rounded-md"
|
|
410
|
+
}, "Cancel"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
411
|
+
onClick: createForm,
|
|
412
|
+
disabled: isUploading || !selectedFile,
|
|
413
|
+
className: "bg-blue-600 text-white hover:bg-blue-700 px-4 py-2 rounded-md disabled:opacity-50"
|
|
414
|
+
}, isUploading ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
415
|
+
className: "animate-spin h-5 w-5 mx-auto border-2 border-white border-t-transparent rounded-full"
|
|
416
|
+
}) : 'Create Form')))), showDetailModal && selectedForm && /*#__PURE__*/_react["default"].createElement("div", {
|
|
417
|
+
className: "fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50"
|
|
418
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
419
|
+
className: "bg-white rounded-2xl shadow-xl p-8 w-full max-w-4xl max-h-[90vh] overflow-y-auto"
|
|
420
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
421
|
+
className: "flex items-center justify-between mb-6"
|
|
422
|
+
}, /*#__PURE__*/_react["default"].createElement("h2", {
|
|
423
|
+
className: "text-xl font-bold text-gray-800"
|
|
424
|
+
}, selectedForm.formTitle), /*#__PURE__*/_react["default"].createElement("button", {
|
|
425
|
+
onClick: function onClick() {
|
|
426
|
+
return setShowDetailModal(false);
|
|
427
|
+
},
|
|
428
|
+
className: "text-gray-400 hover:text-gray-600"
|
|
429
|
+
}, /*#__PURE__*/_react["default"].createElement("svg", {
|
|
430
|
+
className: "h-6 w-6",
|
|
431
|
+
fill: "none",
|
|
432
|
+
stroke: "currentColor",
|
|
433
|
+
viewBox: "0 0 24 24"
|
|
434
|
+
}, /*#__PURE__*/_react["default"].createElement("path", {
|
|
435
|
+
strokeLinecap: "round",
|
|
436
|
+
strokeLinejoin: "round",
|
|
437
|
+
strokeWidth: 2,
|
|
438
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
439
|
+
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
440
|
+
className: "mb-4"
|
|
441
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
442
|
+
className: "flex space-x-4 border-b border-gray-200"
|
|
443
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
444
|
+
onClick: function onClick() {
|
|
445
|
+
return setActiveTab('structure');
|
|
446
|
+
},
|
|
447
|
+
className: "py-2 px-4 ".concat(activeTab === 'structure' ? 'border-b-2 border-blue-500 text-blue-600' : 'text-gray-500')
|
|
448
|
+
}, "Form Structure"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
449
|
+
onClick: function onClick() {
|
|
450
|
+
return setActiveTab('responses');
|
|
451
|
+
},
|
|
452
|
+
className: "py-2 px-4 ".concat(activeTab === 'responses' ? 'border-b-2 border-blue-500 text-blue-600' : 'text-gray-500')
|
|
453
|
+
}, "Responses (", responseCount, ")"))), activeTab === 'structure' && /*#__PURE__*/_react["default"].createElement("div", {
|
|
454
|
+
className: "space-y-4"
|
|
455
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
456
|
+
className: "grid grid-cols-2 gap-4 text-sm"
|
|
457
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", {
|
|
458
|
+
className: "font-medium text-gray-700"
|
|
459
|
+
}, "Form ID:"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
460
|
+
className: "text-gray-900"
|
|
461
|
+
}, selectedForm.formId)), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", {
|
|
462
|
+
className: "font-medium text-gray-700"
|
|
463
|
+
}, "Form Name:"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
464
|
+
className: "text-gray-900"
|
|
465
|
+
}, selectedForm.formName))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", {
|
|
466
|
+
className: "font-medium text-gray-700 mb-2"
|
|
467
|
+
}, "Form Fields:"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
468
|
+
className: "bg-gray-50 p-4 rounded-lg"
|
|
469
|
+
}, /*#__PURE__*/_react["default"].createElement("pre", {
|
|
470
|
+
className: "text-sm overflow-x-auto"
|
|
471
|
+
}, JSON.stringify(selectedForm.fields, null, 2))))), activeTab === 'responses' && /*#__PURE__*/_react["default"].createElement("div", {
|
|
472
|
+
className: "space-y-4"
|
|
473
|
+
}, loadingResponses ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
474
|
+
className: "flex items-center justify-center h-32"
|
|
475
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
476
|
+
className: "animate-spin h-6 w-6 border-4 border-blue-600 border-t-transparent rounded-full"
|
|
477
|
+
})) : formResponses.length === 0 ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
478
|
+
className: "text-center py-8 text-gray-500"
|
|
479
|
+
}, /*#__PURE__*/_react["default"].createElement("p", null, "No responses yet"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
480
|
+
className: "text-sm"
|
|
481
|
+
}, "Share your form to start collecting responses")) : /*#__PURE__*/_react["default"].createElement("div", {
|
|
482
|
+
className: "space-y-4"
|
|
483
|
+
}, formResponses.map(function (response, index) {
|
|
484
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
485
|
+
key: index,
|
|
486
|
+
className: "border rounded-lg p-4"
|
|
487
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
488
|
+
className: "text-sm text-gray-500 mb-2"
|
|
489
|
+
}, "Response #", index + 1), /*#__PURE__*/_react["default"].createElement("pre", {
|
|
490
|
+
className: "text-sm bg-gray-50 p-3 rounded overflow-x-auto"
|
|
491
|
+
}, JSON.stringify(response, null, 2)));
|
|
492
|
+
}))))));
|
|
493
|
+
};
|
|
494
|
+
var _default = exports["default"] = FormsManagement;
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,12 @@ Object.defineProperty(exports, "FormDisplay", {
|
|
|
9
9
|
return _forms.FormDisplay;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
+
Object.defineProperty(exports, "FormsManagement", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _management["default"];
|
|
16
|
+
}
|
|
17
|
+
});
|
|
12
18
|
Object.defineProperty(exports, "PowrBaseActivities", {
|
|
13
19
|
enumerable: true,
|
|
14
20
|
get: function get() {
|
|
@@ -75,7 +81,7 @@ Object.defineProperty(exports, "PowrLogin", {
|
|
|
75
81
|
return _auth["default"];
|
|
76
82
|
}
|
|
77
83
|
});
|
|
78
|
-
Object.defineProperty(exports, "
|
|
84
|
+
Object.defineProperty(exports, "WaitlistManagement", {
|
|
79
85
|
enumerable: true,
|
|
80
86
|
get: function get() {
|
|
81
87
|
return _display["default"];
|
|
@@ -93,4 +99,5 @@ var _blogs = _interopRequireDefault(require("./blogs"));
|
|
|
93
99
|
var _likes = _interopRequireDefault(require("./likes"));
|
|
94
100
|
var _auth = _interopRequireDefault(require("./auth"));
|
|
95
101
|
var _forms = require("./forms");
|
|
102
|
+
var _management = _interopRequireDefault(require("./forms/management"));
|
|
96
103
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
@@ -6,7 +6,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
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
|
|
9
|
+
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); }
|
|
10
|
+
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; }
|
|
11
|
+
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; }
|
|
12
|
+
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; }
|
|
13
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
14
|
+
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); }
|
|
10
15
|
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 }; })(); }
|
|
11
16
|
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); }
|
|
12
17
|
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); }
|
|
@@ -17,10 +22,12 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
|
|
|
17
22
|
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; }
|
|
18
23
|
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; } }
|
|
19
24
|
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
20
|
-
var
|
|
25
|
+
var WaitlistManagement = function WaitlistManagement(_ref) {
|
|
21
26
|
var projectId = _ref.projectId,
|
|
22
27
|
_ref$apiUrl = _ref.apiUrl,
|
|
23
|
-
apiUrl = _ref$apiUrl === void 0 ? 'https://api.powrbase.cloud/waitlists' : _ref$apiUrl
|
|
28
|
+
apiUrl = _ref$apiUrl === void 0 ? 'https://api.powrbase.cloud/waitlists' : _ref$apiUrl,
|
|
29
|
+
onAddEntry = _ref.onAddEntry,
|
|
30
|
+
onRefresh = _ref.onRefresh;
|
|
24
31
|
var _useState = (0, _react.useState)([]),
|
|
25
32
|
_useState2 = _slicedToArray(_useState, 2),
|
|
26
33
|
entries = _useState2[0],
|
|
@@ -33,75 +40,173 @@ var WaitlistDisplay = function WaitlistDisplay(_ref) {
|
|
|
33
40
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
34
41
|
error = _useState6[0],
|
|
35
42
|
setError = _useState6[1];
|
|
36
|
-
(0, _react.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
data = _context.v;
|
|
73
|
-
if (!data.success) {
|
|
74
|
-
_context.n = 5;
|
|
75
|
-
break;
|
|
43
|
+
var _useState7 = (0, _react.useState)(false),
|
|
44
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
45
|
+
showAddModal = _useState8[0],
|
|
46
|
+
setShowAddModal = _useState8[1];
|
|
47
|
+
var _useState9 = (0, _react.useState)(false),
|
|
48
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
49
|
+
isSubmitting = _useState0[0],
|
|
50
|
+
setIsSubmitting = _useState0[1];
|
|
51
|
+
var _useState1 = (0, _react.useState)({
|
|
52
|
+
email: ''
|
|
53
|
+
}),
|
|
54
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
55
|
+
formData = _useState10[0],
|
|
56
|
+
setFormData = _useState10[1];
|
|
57
|
+
var fetchWaitlist = /*#__PURE__*/function () {
|
|
58
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
59
|
+
var response, data, _t;
|
|
60
|
+
return _regenerator().w(function (_context) {
|
|
61
|
+
while (1) switch (_context.n) {
|
|
62
|
+
case 0:
|
|
63
|
+
if (projectId) {
|
|
64
|
+
_context.n = 1;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
setError('Project ID is required');
|
|
68
|
+
setLoading(false);
|
|
69
|
+
return _context.a(2);
|
|
70
|
+
case 1:
|
|
71
|
+
_context.p = 1;
|
|
72
|
+
setLoading(true);
|
|
73
|
+
setError('');
|
|
74
|
+
_context.n = 2;
|
|
75
|
+
return fetch("".concat(apiUrl, "?projectId=").concat(projectId), {
|
|
76
|
+
method: 'GET',
|
|
77
|
+
headers: {
|
|
78
|
+
'Content-Type': 'application/json'
|
|
76
79
|
}
|
|
77
|
-
|
|
78
|
-
|
|
80
|
+
});
|
|
81
|
+
case 2:
|
|
82
|
+
response = _context.v;
|
|
83
|
+
if (response.ok) {
|
|
84
|
+
_context.n = 3;
|
|
79
85
|
break;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
86
|
+
}
|
|
87
|
+
throw new Error('Failed to fetch waitlist');
|
|
88
|
+
case 3:
|
|
89
|
+
_context.n = 4;
|
|
90
|
+
return response.json();
|
|
91
|
+
case 4:
|
|
92
|
+
data = _context.v;
|
|
93
|
+
if (!data.success) {
|
|
94
|
+
_context.n = 5;
|
|
84
95
|
break;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
96
|
+
}
|
|
97
|
+
setEntries(data.entries || []);
|
|
98
|
+
_context.n = 6;
|
|
99
|
+
break;
|
|
100
|
+
case 5:
|
|
101
|
+
throw new Error(data.message || 'Failed to load waitlist');
|
|
102
|
+
case 6:
|
|
103
|
+
_context.n = 8;
|
|
104
|
+
break;
|
|
105
|
+
case 7:
|
|
106
|
+
_context.p = 7;
|
|
107
|
+
_t = _context.v;
|
|
108
|
+
setError(_t.message || 'Something went wrong');
|
|
109
|
+
console.error('Error fetching waitlist:', _t);
|
|
110
|
+
case 8:
|
|
111
|
+
_context.p = 8;
|
|
112
|
+
setLoading(false);
|
|
113
|
+
return _context.f(8);
|
|
114
|
+
case 9:
|
|
115
|
+
return _context.a(2);
|
|
116
|
+
}
|
|
117
|
+
}, _callee, null, [[1, 7, 8, 9]]);
|
|
118
|
+
}));
|
|
119
|
+
return function fetchWaitlist() {
|
|
120
|
+
return _ref2.apply(this, arguments);
|
|
121
|
+
};
|
|
122
|
+
}();
|
|
123
|
+
(0, _react.useEffect)(function () {
|
|
103
124
|
fetchWaitlist();
|
|
104
125
|
}, [projectId, apiUrl]);
|
|
126
|
+
var handleInputChange = function handleInputChange(e) {
|
|
127
|
+
var _e$target = e.target,
|
|
128
|
+
name = _e$target.name,
|
|
129
|
+
value = _e$target.value;
|
|
130
|
+
setFormData(function (prev) {
|
|
131
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, value));
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
var handleSubmit = /*#__PURE__*/function () {
|
|
135
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
|
|
136
|
+
var response, result, _t2;
|
|
137
|
+
return _regenerator().w(function (_context2) {
|
|
138
|
+
while (1) switch (_context2.n) {
|
|
139
|
+
case 0:
|
|
140
|
+
if (formData.email) {
|
|
141
|
+
_context2.n = 1;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
if (onAddEntry) {
|
|
145
|
+
onAddEntry('error', 'Email is required');
|
|
146
|
+
}
|
|
147
|
+
return _context2.a(2);
|
|
148
|
+
case 1:
|
|
149
|
+
setIsSubmitting(true);
|
|
150
|
+
_context2.p = 2;
|
|
151
|
+
_context2.n = 3;
|
|
152
|
+
return fetch('https://api.powrbase.cloud/waitlist', {
|
|
153
|
+
method: 'POST',
|
|
154
|
+
headers: {
|
|
155
|
+
'Content-Type': 'application/json'
|
|
156
|
+
},
|
|
157
|
+
body: JSON.stringify({
|
|
158
|
+
email: formData.email,
|
|
159
|
+
projectId: projectId
|
|
160
|
+
})
|
|
161
|
+
});
|
|
162
|
+
case 3:
|
|
163
|
+
response = _context2.v;
|
|
164
|
+
_context2.n = 4;
|
|
165
|
+
return response.json();
|
|
166
|
+
case 4:
|
|
167
|
+
result = _context2.v;
|
|
168
|
+
if (!result.success) {
|
|
169
|
+
_context2.n = 5;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
if (onAddEntry) {
|
|
173
|
+
onAddEntry('success', 'Entry added to waitlist successfully!');
|
|
174
|
+
}
|
|
175
|
+
setFormData({
|
|
176
|
+
email: ''
|
|
177
|
+
});
|
|
178
|
+
setShowAddModal(false);
|
|
179
|
+
fetchWaitlist(); // Refresh the list
|
|
180
|
+
if (onRefresh) {
|
|
181
|
+
onRefresh();
|
|
182
|
+
}
|
|
183
|
+
_context2.n = 6;
|
|
184
|
+
break;
|
|
185
|
+
case 5:
|
|
186
|
+
throw new Error(result.message || 'Failed to add entry');
|
|
187
|
+
case 6:
|
|
188
|
+
_context2.n = 8;
|
|
189
|
+
break;
|
|
190
|
+
case 7:
|
|
191
|
+
_context2.p = 7;
|
|
192
|
+
_t2 = _context2.v;
|
|
193
|
+
console.error('Error adding entry:', _t2);
|
|
194
|
+
if (onAddEntry) {
|
|
195
|
+
onAddEntry('error', _t2.message || 'Failed to add entry to waitlist');
|
|
196
|
+
}
|
|
197
|
+
case 8:
|
|
198
|
+
_context2.p = 8;
|
|
199
|
+
setIsSubmitting(false);
|
|
200
|
+
return _context2.f(8);
|
|
201
|
+
case 9:
|
|
202
|
+
return _context2.a(2);
|
|
203
|
+
}
|
|
204
|
+
}, _callee2, null, [[2, 7, 8, 9]]);
|
|
205
|
+
}));
|
|
206
|
+
return function handleSubmit() {
|
|
207
|
+
return _ref3.apply(this, arguments);
|
|
208
|
+
};
|
|
209
|
+
}();
|
|
105
210
|
if (loading) {
|
|
106
211
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
107
212
|
className: "flex items-center justify-center h-64"
|
|
@@ -114,21 +219,79 @@ var WaitlistDisplay = function WaitlistDisplay(_ref) {
|
|
|
114
219
|
className: "text-center py-8 text-red-500"
|
|
115
220
|
}, /*#__PURE__*/_react["default"].createElement("p", null, error));
|
|
116
221
|
}
|
|
117
|
-
if (
|
|
222
|
+
if (!projectId) {
|
|
118
223
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
119
|
-
className: "
|
|
224
|
+
className: "flex items-center justify-center h-64"
|
|
120
225
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
121
|
-
className: "
|
|
122
|
-
}, /*#__PURE__*/_react["default"].createElement("
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}))), /*#__PURE__*/_react["default"].createElement("p", null, "No waitlist entries yet"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
128
|
-
className: "text-sm"
|
|
129
|
-
}, "Add your first entry to get started"));
|
|
226
|
+
className: "text-center"
|
|
227
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
228
|
+
className: "text-gray-500"
|
|
229
|
+
}, "No project selected"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
230
|
+
className: "text-sm text-gray-400"
|
|
231
|
+
}, "Please select a project to view waitlist")));
|
|
130
232
|
}
|
|
131
233
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
234
|
+
className: "space-y-6"
|
|
235
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
236
|
+
className: "flex items-center justify-between"
|
|
237
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("h1", {
|
|
238
|
+
className: "text-2xl font-bold text-gray-900"
|
|
239
|
+
}, "Waitlist Management"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
240
|
+
className: "text-gray-600 mt-1"
|
|
241
|
+
}, "Manage your waitlist entries and approvals")), /*#__PURE__*/_react["default"].createElement("button", {
|
|
242
|
+
onClick: function onClick() {
|
|
243
|
+
return setShowAddModal(true);
|
|
244
|
+
},
|
|
245
|
+
className: "bg-orange-600 hover:bg-orange-700 text-white px-4 py-2 rounded-lg flex items-center gap-2"
|
|
246
|
+
}, /*#__PURE__*/_react["default"].createElement("svg", {
|
|
247
|
+
className: "h-4 w-4",
|
|
248
|
+
fill: "none",
|
|
249
|
+
stroke: "currentColor",
|
|
250
|
+
viewBox: "0 0 24 24"
|
|
251
|
+
}, /*#__PURE__*/_react["default"].createElement("path", {
|
|
252
|
+
strokeLinecap: "round",
|
|
253
|
+
strokeLinejoin: "round",
|
|
254
|
+
strokeWidth: 2,
|
|
255
|
+
d: "M12 4v16m8-8H4"
|
|
256
|
+
})), "Add Entry")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
257
|
+
className: "grid grid-cols-1 md:grid-cols-1 gap-4"
|
|
258
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
259
|
+
className: "bg-white rounded-lg shadow p-4"
|
|
260
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
261
|
+
className: "flex items-center"
|
|
262
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
263
|
+
className: "h-8 w-8 text-blue-600"
|
|
264
|
+
}, /*#__PURE__*/_react["default"].createElement("svg", {
|
|
265
|
+
fill: "currentColor",
|
|
266
|
+
viewBox: "0 0 20 20"
|
|
267
|
+
}, /*#__PURE__*/_react["default"].createElement("path", {
|
|
268
|
+
d: "M13 6a3 3 0 11-6 0 3 3 0 016 0zM18 8a2 2 0 11-4 0 2 2 0 014 0zM14 15a4 4 0 00-8 0v3h8v-3z"
|
|
269
|
+
}))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
270
|
+
className: "ml-3"
|
|
271
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
272
|
+
className: "text-sm font-medium text-gray-600"
|
|
273
|
+
}, "Total Waitlist Entries"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
274
|
+
className: "text-2xl font-bold text-gray-900"
|
|
275
|
+
}, entries.length))))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
276
|
+
className: "bg-white rounded-lg shadow"
|
|
277
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
278
|
+
className: "px-6 py-4 border-b border-gray-200"
|
|
279
|
+
}, /*#__PURE__*/_react["default"].createElement("h3", {
|
|
280
|
+
className: "text-lg font-semibold text-gray-900"
|
|
281
|
+
}, "Waitlist Entries")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
282
|
+
className: "p-6"
|
|
283
|
+
}, entries.length === 0 ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
284
|
+
className: "text-center py-8 text-gray-500"
|
|
285
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
286
|
+
className: "h-12 w-12 mx-auto mb-4 text-gray-300"
|
|
287
|
+
}, /*#__PURE__*/_react["default"].createElement("svg", {
|
|
288
|
+
fill: "currentColor",
|
|
289
|
+
viewBox: "0 0 20 20"
|
|
290
|
+
}, /*#__PURE__*/_react["default"].createElement("path", {
|
|
291
|
+
d: "M13 6a3 3 0 11-6 0 3 3 0 016 0zM18 8a2 2 0 11-4 0 2 2 0 014 0zM14 15a4 4 0 00-8 0v3h8v-3z"
|
|
292
|
+
}))), /*#__PURE__*/_react["default"].createElement("p", null, "No waitlist entries yet"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
293
|
+
className: "text-sm"
|
|
294
|
+
}, "Add your first entry to get started")) : /*#__PURE__*/_react["default"].createElement("div", {
|
|
132
295
|
className: "space-y-4"
|
|
133
296
|
}, entries.map(function (entry) {
|
|
134
297
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -143,6 +306,39 @@ var WaitlistDisplay = function WaitlistDisplay(_ref) {
|
|
|
143
306
|
}, entry.email), /*#__PURE__*/_react["default"].createElement("p", {
|
|
144
307
|
className: "text-xs text-gray-400"
|
|
145
308
|
}, "Added: ", new Date(entry.createdAt).toLocaleDateString())))));
|
|
146
|
-
}))
|
|
309
|
+
})))), showAddModal && /*#__PURE__*/_react["default"].createElement("div", {
|
|
310
|
+
className: "fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50"
|
|
311
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
312
|
+
className: "bg-white rounded-2xl shadow-xl p-8 w-full max-w-lg"
|
|
313
|
+
}, /*#__PURE__*/_react["default"].createElement("h2", {
|
|
314
|
+
className: "text-xl font-bold text-gray-800 mb-6"
|
|
315
|
+
}, "Add Waitlist Entry"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
316
|
+
className: "space-y-4"
|
|
317
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
318
|
+
htmlFor: "email",
|
|
319
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
320
|
+
}, "Email *"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
321
|
+
id: "email",
|
|
322
|
+
name: "email",
|
|
323
|
+
type: "email",
|
|
324
|
+
value: formData.email,
|
|
325
|
+
onChange: handleInputChange,
|
|
326
|
+
placeholder: "Enter email address",
|
|
327
|
+
required: true,
|
|
328
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
329
|
+
}))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
330
|
+
className: "flex justify-end gap-4 mt-6"
|
|
331
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
332
|
+
onClick: function onClick() {
|
|
333
|
+
return setShowAddModal(false);
|
|
334
|
+
},
|
|
335
|
+
className: "bg-gray-300 text-gray-700 hover:bg-gray-400 px-4 py-2 rounded-md"
|
|
336
|
+
}, "Cancel"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
337
|
+
onClick: handleSubmit,
|
|
338
|
+
disabled: isSubmitting,
|
|
339
|
+
className: "bg-orange-600 text-white hover:bg-orange-700 px-4 py-2 rounded-md disabled:opacity-50"
|
|
340
|
+
}, isSubmitting ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
341
|
+
className: "animate-spin h-5 w-5 mx-auto border-2 border-white border-t-transparent rounded-full"
|
|
342
|
+
}) : 'Add Entry')))));
|
|
147
343
|
};
|
|
148
|
-
var _default = exports["default"] =
|
|
344
|
+
var _default = exports["default"] = WaitlistManagement;
|