powr-sdk-web 2.0.4 → 2.0.6

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.
@@ -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 PowrFormsAdmin = function PowrFormsAdmin(_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"] = PowrFormsAdmin;
@@ -4,17 +4,10 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- Object.defineProperty(exports, "FormDisplay", {
8
- enumerable: true,
9
- get: function get() {
10
- return _display["default"];
11
- }
12
- });
13
- exports["default"] = exports.PowrFormBuilder = void 0;
7
+ exports["default"] = void 0;
14
8
  var _react = _interopRequireWildcard(require("react"));
15
9
  var _reactHookForm = require("react-hook-form");
16
10
  var _axios = _interopRequireDefault(require("axios"));
17
- var _display = _interopRequireDefault(require("./display"));
18
11
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
19
12
  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); }
20
13
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
@@ -33,7 +26,7 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
33
26
  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; }
34
27
  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; } }
35
28
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
36
- var PowrFormBuilder = exports.PowrFormBuilder = function PowrFormBuilder(_ref) {
29
+ var PowrForm = function PowrForm(_ref) {
37
30
  var formName = _ref.formName,
38
31
  projectId = _ref.projectId,
39
32
  _ref$apiUrl = _ref.apiUrl,
@@ -384,4 +377,4 @@ var RadioGroup = function RadioGroup(_ref5) {
384
377
  className: "text-red-600 text-sm mt-1"
385
378
  }, error.message));
386
379
  };
387
- var _default = exports["default"] = PowrFormBuilder;
380
+ var _default = exports["default"] = PowrForm;
package/dist/index.js CHANGED
@@ -3,18 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "FormDisplay", {
7
- enumerable: true,
8
- get: function get() {
9
- return _forms.FormDisplay;
10
- }
11
- });
12
- Object.defineProperty(exports, "FormsManagement", {
13
- enumerable: true,
14
- get: function get() {
15
- return _management["default"];
16
- }
17
- });
18
6
  Object.defineProperty(exports, "PowrBaseActivities", {
19
7
  enumerable: true,
20
8
  get: function get() {
@@ -33,58 +21,64 @@ Object.defineProperty(exports, "PowrBaseComments", {
33
21
  return _comments["default"];
34
22
  }
35
23
  });
36
- Object.defineProperty(exports, "PowrBaseInvoice", {
24
+ Object.defineProperty(exports, "PowrBaseForm", {
37
25
  enumerable: true,
38
26
  get: function get() {
39
- return _invoice["default"];
27
+ return _forms["default"];
40
28
  }
41
29
  });
42
- Object.defineProperty(exports, "PowrBaseReviews", {
30
+ Object.defineProperty(exports, "PowrBaseFormsAdmin", {
43
31
  enumerable: true,
44
32
  get: function get() {
45
- return _reviews["default"];
33
+ return _admin2["default"];
46
34
  }
47
35
  });
48
- Object.defineProperty(exports, "PowrBaseSwiper", {
36
+ Object.defineProperty(exports, "PowrBaseInvoice", {
49
37
  enumerable: true,
50
38
  get: function get() {
51
- return _swiper["default"];
39
+ return _invoice["default"];
52
40
  }
53
41
  });
54
- Object.defineProperty(exports, "PowrBaseUploader", {
42
+ Object.defineProperty(exports, "PowrBaseLike", {
55
43
  enumerable: true,
56
44
  get: function get() {
57
- return _uploader["default"];
45
+ return _likes["default"];
58
46
  }
59
47
  });
60
- Object.defineProperty(exports, "PowrBaseWaitlist", {
48
+ Object.defineProperty(exports, "PowrBaseLogin", {
61
49
  enumerable: true,
62
50
  get: function get() {
63
- return _waitlists["default"];
51
+ return _auth["default"];
64
52
  }
65
53
  });
66
- Object.defineProperty(exports, "PowrFormBuilder", {
54
+ Object.defineProperty(exports, "PowrBaseReviews", {
67
55
  enumerable: true,
68
56
  get: function get() {
69
- return _forms.PowrFormBuilder;
57
+ return _reviews["default"];
70
58
  }
71
59
  });
72
- Object.defineProperty(exports, "PowrLike", {
60
+ Object.defineProperty(exports, "PowrBaseSwiper", {
73
61
  enumerable: true,
74
62
  get: function get() {
75
- return _likes["default"];
63
+ return _swiper["default"];
76
64
  }
77
65
  });
78
- Object.defineProperty(exports, "PowrLogin", {
66
+ Object.defineProperty(exports, "PowrBaseUploader", {
79
67
  enumerable: true,
80
68
  get: function get() {
81
- return _auth["default"];
69
+ return _uploader["default"];
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "PowrBaseWaitlist", {
73
+ enumerable: true,
74
+ get: function get() {
75
+ return _waitlists["default"];
82
76
  }
83
77
  });
84
- Object.defineProperty(exports, "WaitlistManagement", {
78
+ Object.defineProperty(exports, "PowrWaitListAdmin", {
85
79
  enumerable: true,
86
80
  get: function get() {
87
- return _display["default"];
81
+ return _admin["default"];
88
82
  }
89
83
  });
90
84
  var _swiper = _interopRequireDefault(require("./swiper"));
@@ -93,11 +87,11 @@ var _uploader = _interopRequireDefault(require("./uploader"));
93
87
  var _comments = _interopRequireDefault(require("./comments"));
94
88
  var _invoice = _interopRequireDefault(require("./invoice"));
95
89
  var _waitlists = _interopRequireDefault(require("./waitlists"));
96
- var _display = _interopRequireDefault(require("./waitlists/display"));
90
+ var _admin = _interopRequireDefault(require("./waitlists/admin"));
97
91
  var _activities = _interopRequireDefault(require("./activities"));
98
92
  var _blogs = _interopRequireDefault(require("./blogs"));
99
93
  var _likes = _interopRequireDefault(require("./likes"));
100
94
  var _auth = _interopRequireDefault(require("./auth"));
101
- var _forms = require("./forms");
102
- var _management = _interopRequireDefault(require("./forms/management"));
95
+ var _forms = _interopRequireDefault(require("./forms"));
96
+ var _admin2 = _interopRequireDefault(require("./forms/admin"));
103
97
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
@@ -0,0 +1,344 @@
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 _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); }
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 }; })(); }
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); }
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); }
18
+ 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); }); }; }
19
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
20
+ 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."); }
21
+ 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; } }
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; }
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; } }
24
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
25
+ var PowrWaitListAdmin = function PowrWaitListAdmin(_ref) {
26
+ var projectId = _ref.projectId,
27
+ _ref$apiUrl = _ref.apiUrl,
28
+ apiUrl = _ref$apiUrl === void 0 ? 'https://api.powrbase.cloud/waitlists' : _ref$apiUrl,
29
+ onAddEntry = _ref.onAddEntry,
30
+ onRefresh = _ref.onRefresh;
31
+ var _useState = (0, _react.useState)([]),
32
+ _useState2 = _slicedToArray(_useState, 2),
33
+ entries = _useState2[0],
34
+ setEntries = _useState2[1];
35
+ var _useState3 = (0, _react.useState)(true),
36
+ _useState4 = _slicedToArray(_useState3, 2),
37
+ loading = _useState4[0],
38
+ setLoading = _useState4[1];
39
+ var _useState5 = (0, _react.useState)(''),
40
+ _useState6 = _slicedToArray(_useState5, 2),
41
+ error = _useState6[0],
42
+ setError = _useState6[1];
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'
79
+ }
80
+ });
81
+ case 2:
82
+ response = _context.v;
83
+ if (response.ok) {
84
+ _context.n = 3;
85
+ break;
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;
95
+ break;
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 () {
124
+ fetchWaitlist();
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/waitlists', {
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
+ }();
210
+ if (loading) {
211
+ return /*#__PURE__*/_react["default"].createElement("div", {
212
+ className: "flex items-center justify-center h-64"
213
+ }, /*#__PURE__*/_react["default"].createElement("div", {
214
+ className: "animate-spin h-8 w-8 border-4 border-blue-600 border-t-transparent rounded-full"
215
+ }));
216
+ }
217
+ if (error) {
218
+ return /*#__PURE__*/_react["default"].createElement("div", {
219
+ className: "text-center py-8 text-red-500"
220
+ }, /*#__PURE__*/_react["default"].createElement("p", null, error));
221
+ }
222
+ if (!projectId) {
223
+ return /*#__PURE__*/_react["default"].createElement("div", {
224
+ className: "flex items-center justify-center h-64"
225
+ }, /*#__PURE__*/_react["default"].createElement("div", {
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")));
232
+ }
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", {
295
+ className: "space-y-4"
296
+ }, entries.map(function (entry) {
297
+ return /*#__PURE__*/_react["default"].createElement("div", {
298
+ key: entry._id,
299
+ className: "flex items-center justify-between p-4 border rounded-lg hover:bg-gray-50"
300
+ }, /*#__PURE__*/_react["default"].createElement("div", {
301
+ className: "flex-1"
302
+ }, /*#__PURE__*/_react["default"].createElement("div", {
303
+ className: "flex items-center space-x-3"
304
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", {
305
+ className: "text-sm font-medium text-gray-900"
306
+ }, entry.email), /*#__PURE__*/_react["default"].createElement("p", {
307
+ className: "text-xs text-gray-400"
308
+ }, "Added: ", new Date(entry.createdAt).toLocaleDateString())))));
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')))));
343
+ };
344
+ var _default = exports["default"] = PowrWaitListAdmin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "powr-sdk-web",
3
- "version": "2.0.4",
3
+ "version": "2.0.6",
4
4
  "main": "dist/index.js",
5
5
 
6
6
  "scripts": {
package/README.md DELETED
@@ -1,137 +0,0 @@
1
- # Powr SDK Web
2
-
3
- A comprehensive React component library for building modern web applications with PowrBase integration.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install powr-sdk-web
9
- ```
10
-
11
- ## Components
12
-
13
- ### PowrLogin
14
- A customizable authentication component supporting login, registration, and toggle modes.
15
-
16
- ```jsx
17
- import { PowrLogin } from 'powr-sdk-web';
18
-
19
- <PowrLogin
20
- mode="toggle"
21
- appName="MyApp"
22
- appLogo="/logo.png"
23
- onLogin={(data) => console.log('Login successful:', data)}
24
- onRegister={(data) => console.log('Registration successful:', data)}
25
- loginApiUrl="https://api.powrbase.cloud/auth/login"
26
- registerApiUrl="https://api.powrbase.cloud/auth/register"
27
- />
28
- ```
29
-
30
- **Props:**
31
- - `mode`: 'login' | 'register' | 'toggle'
32
- - `appName`: Application name to display
33
- - `appLogo`: URL to application logo
34
- - `onLogin`: Callback function for successful login
35
- - `onRegister`: Callback function for successful registration
36
- - `loginApiUrl`: Custom login API endpoint (optional)
37
- - `registerApiUrl`: Custom registration API endpoint (optional)
38
-
39
- ### WaitlistDisplay
40
- Display waitlist entries from PowrBase Cloud API.
41
-
42
- ```jsx
43
- import { WaitlistDisplay } from 'powr-sdk-web';
44
-
45
- <WaitlistDisplay
46
- projectId="your-project-id"
47
- apiUrl="https://api.powrbase.cloud/waitlists"
48
- />
49
- ```
50
-
51
- **Props:**
52
- - `projectId`: Your project ID (required)
53
- - `apiUrl`: Custom API endpoint (optional)
54
-
55
- ### PowrFormBuilder
56
- Dynamic form builder that fetches and renders forms based on schema from PowrBase Cloud API.
57
-
58
- ```jsx
59
- import { PowrFormBuilder } from 'powr-sdk-web';
60
-
61
- <PowrFormBuilder
62
- formName="student-registration"
63
- projectId="your-project-id"
64
- theme="purple"
65
- onSubmitSuccess={(data) => console.log('Form submitted:', data)}
66
- onSubmitError={(error) => console.error('Form error:', error)}
67
- />
68
- ```
69
-
70
- **Props:**
71
- - `formName`: Name of the form to fetch (required)
72
- - `projectId`: Your project ID (required)
73
- - `apiUrl`: Custom API endpoint (optional, defaults to PowrBase Cloud)
74
- - `onSubmitSuccess`: Callback for successful form submission
75
- - `onSubmitError`: Callback for form submission errors
76
- - `className`: Additional CSS classes
77
- - `theme`: Color theme ('purple', 'blue', 'green', 'red', 'yellow', 'indigo', 'pink')
78
-
79
- **Supported Field Types:**
80
- - `email`: Email input with validation
81
- - `text`: Text input
82
- - `radio`: Radio button groups
83
- - `custom`: Special fields (e.g., QR codes)
84
- - `fileUploader`: File upload with payment proof support
85
-
86
- ### FormDisplay
87
- Display form responses from PowrBase Cloud API.
88
-
89
- ```jsx
90
- import { FormDisplay } from 'powr-sdk-web';
91
-
92
- <FormDisplay
93
- formName="student-registration"
94
- projectId="your-project-id"
95
- theme="purple"
96
- />
97
- ```
98
-
99
- **Props:**
100
- - `formName`: Name of the form to display responses for (required)
101
- - `projectId`: Your project ID (required)
102
- - `apiUrl`: Custom API endpoint (optional, defaults to PowrBase Cloud)
103
- - `className`: Additional CSS classes
104
- - `theme`: Color theme ('purple', 'blue', 'green', 'red', 'yellow', 'indigo', 'pink')
105
-
106
- ### Other Components
107
-
108
- - `PowrBaseSwiper`: Customizable image/video swiper
109
- - `PowrBaseReviews`: Review display and management
110
- - `PowrBaseUploader`: File upload component
111
- - `PowrBaseComments`: Comment system
112
- - `PowrBaseWaitlist`: Waitlist submission component
113
- - `PowrBaseActivities`: Activity feed
114
- - `PowrBaseInvoice`: Invoice management
115
- - `PowrLike`: Like/reaction system
116
- - `PowrBaseBlogs`: Blog management
117
-
118
- ## API Integration
119
-
120
- All components are designed to work with the PowrBase Cloud API by default, but can be configured to use custom endpoints.
121
-
122
- ### Default API Endpoints:
123
- - Authentication: `https://api.powrbase.cloud/auth`
124
- - Forms: `https://api.powrbase.cloud/forms`
125
- - Waitlists: `https://api.powrbase.cloud/waitlists`
126
-
127
- ## Styling
128
-
129
- Components use Tailwind CSS classes and support custom theming. The default theme is purple, but you can customize colors using the `theme` prop where available.
130
-
131
- ## TypeScript Support
132
-
133
- Full TypeScript support is included with proper type definitions for all components.
134
-
135
- ## License
136
-
137
- MIT License