powr-sdk-web 5.6.9 → 5.6.11
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/admin/index.js +3 -0
- package/dist/forms/admin.js +216 -83
- package/dist/forms/index.js +20 -0
- package/package.json +1 -1
package/dist/admin/index.js
CHANGED
|
@@ -30,6 +30,7 @@ var AdminDashboard = function AdminDashboard(_ref) {
|
|
|
30
30
|
projectId = _ref.projectId,
|
|
31
31
|
_ref$sections = _ref.sections,
|
|
32
32
|
sections = _ref$sections === void 0 ? [] : _ref$sections,
|
|
33
|
+
formPublicBaseUrl = _ref.formPublicBaseUrl,
|
|
33
34
|
_ref$theme = _ref.theme,
|
|
34
35
|
theme = _ref$theme === void 0 ? "default" : _ref$theme;
|
|
35
36
|
var _useState = (0, _react.useState)(null),
|
|
@@ -190,6 +191,7 @@ var AdminDashboard = function AdminDashboard(_ref) {
|
|
|
190
191
|
var sectionProps = {
|
|
191
192
|
apiUrl: apiUrl,
|
|
192
193
|
projectId: projectId,
|
|
194
|
+
formPublicBaseUrl: formPublicBaseUrl,
|
|
193
195
|
theme: theme === 'dark' ? 'dark' : 'blue'
|
|
194
196
|
};
|
|
195
197
|
switch (currentSection) {
|
|
@@ -272,6 +274,7 @@ var AdminDashboard = function AdminDashboard(_ref) {
|
|
|
272
274
|
AdminDashboard.propTypes = {
|
|
273
275
|
projectId: _propTypes["default"].string,
|
|
274
276
|
sections: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
|
277
|
+
formPublicBaseUrl: _propTypes["default"].string,
|
|
275
278
|
theme: _propTypes["default"].oneOf(['default', 'dark'])
|
|
276
279
|
};
|
|
277
280
|
var _default = exports["default"] = AdminDashboard;
|
package/dist/forms/admin.js
CHANGED
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _auth = require("../utils/auth");
|
|
10
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var
|
|
10
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t5 in e) "default" !== _t5 && {}.hasOwnProperty.call(e, _t5) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t5)) && (i.get || i.set) ? o(f, _t5, i) : f[_t5] = e[_t5]); return f; })(e, t); }
|
|
11
11
|
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
12
12
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
13
13
|
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
@@ -30,6 +30,7 @@ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
|
30
30
|
var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
31
31
|
var projectId = _ref.projectId,
|
|
32
32
|
apiUrl = _ref.apiUrl,
|
|
33
|
+
formPublicBaseUrl = _ref.formPublicBaseUrl,
|
|
33
34
|
onFormAction = _ref.onFormAction,
|
|
34
35
|
onRefresh = _ref.onRefresh;
|
|
35
36
|
var _useState = (0, _react.useState)([]),
|
|
@@ -56,39 +57,47 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
56
57
|
_useState10 = _slicedToArray(_useState1, 2),
|
|
57
58
|
createFeedback = _useState10[0],
|
|
58
59
|
setCreateFeedback = _useState10[1];
|
|
59
|
-
var _useState11 = (0, _react.useState)(
|
|
60
|
+
var _useState11 = (0, _react.useState)(''),
|
|
61
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
62
|
+
createdFormLink = _useState12[0],
|
|
63
|
+
setCreatedFormLink = _useState12[1];
|
|
64
|
+
var _useState13 = (0, _react.useState)(''),
|
|
65
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
66
|
+
copiedFormName = _useState14[0],
|
|
67
|
+
setCopiedFormName = _useState14[1];
|
|
68
|
+
var _useState15 = (0, _react.useState)({
|
|
60
69
|
formTitle: '',
|
|
61
70
|
formName: '',
|
|
62
71
|
formId: '',
|
|
63
72
|
fields: []
|
|
64
73
|
}),
|
|
65
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
|
66
|
-
formDraft = _useState12[0],
|
|
67
|
-
setFormDraft = _useState12[1];
|
|
68
|
-
var _useState13 = (0, _react.useState)(null),
|
|
69
|
-
_useState14 = _slicedToArray(_useState13, 2),
|
|
70
|
-
selectedForm = _useState14[0],
|
|
71
|
-
setSelectedForm = _useState14[1];
|
|
72
|
-
var _useState15 = (0, _react.useState)(false),
|
|
73
74
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
var _useState17 = (0, _react.useState)(
|
|
75
|
+
formDraft = _useState16[0],
|
|
76
|
+
setFormDraft = _useState16[1];
|
|
77
|
+
var _useState17 = (0, _react.useState)(null),
|
|
77
78
|
_useState18 = _slicedToArray(_useState17, 2),
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
var _useState19 = (0, _react.useState)(
|
|
79
|
+
selectedForm = _useState18[0],
|
|
80
|
+
setSelectedForm = _useState18[1];
|
|
81
|
+
var _useState19 = (0, _react.useState)(false),
|
|
81
82
|
_useState20 = _slicedToArray(_useState19, 2),
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
var _useState21 = (0, _react.useState)(
|
|
83
|
+
showDetailModal = _useState20[0],
|
|
84
|
+
setShowDetailModal = _useState20[1];
|
|
85
|
+
var _useState21 = (0, _react.useState)('responses'),
|
|
85
86
|
_useState22 = _slicedToArray(_useState21, 2),
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
var _useState23 = (0, _react.useState)(
|
|
87
|
+
activeTab = _useState22[0],
|
|
88
|
+
setActiveTab = _useState22[1];
|
|
89
|
+
var _useState23 = (0, _react.useState)([]),
|
|
89
90
|
_useState24 = _slicedToArray(_useState23, 2),
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
formResponses = _useState24[0],
|
|
92
|
+
setFormResponses = _useState24[1];
|
|
93
|
+
var _useState25 = (0, _react.useState)(0),
|
|
94
|
+
_useState26 = _slicedToArray(_useState25, 2),
|
|
95
|
+
responseCount = _useState26[0],
|
|
96
|
+
setResponseCount = _useState26[1];
|
|
97
|
+
var _useState27 = (0, _react.useState)(false),
|
|
98
|
+
_useState28 = _slicedToArray(_useState27, 2),
|
|
99
|
+
loadingResponses = _useState28[0],
|
|
100
|
+
setLoadingResponses = _useState28[1];
|
|
92
101
|
var fetchForms = /*#__PURE__*/function () {
|
|
93
102
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
94
103
|
var _yield$apiCall, data, ok, _t;
|
|
@@ -200,7 +209,75 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
200
209
|
onFormAction(type, message);
|
|
201
210
|
}
|
|
202
211
|
};
|
|
212
|
+
var getFormPublicUrl = function getFormPublicUrl(formName) {
|
|
213
|
+
if (!formName) return '';
|
|
214
|
+
var base = (formPublicBaseUrl === null || formPublicBaseUrl === void 0 ? void 0 : formPublicBaseUrl.replace(/\/$/, '')) || (typeof window !== 'undefined' ? "".concat(window.location.origin, "/forms") : '/forms');
|
|
215
|
+
return "".concat(base, "?id=").concat(encodeURIComponent(formName));
|
|
216
|
+
};
|
|
217
|
+
var copyFormLink = /*#__PURE__*/function () {
|
|
218
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(formName, event) {
|
|
219
|
+
var _event$stopPropagatio;
|
|
220
|
+
var url, _t3;
|
|
221
|
+
return _regenerator().w(function (_context3) {
|
|
222
|
+
while (1) switch (_context3.p = _context3.n) {
|
|
223
|
+
case 0:
|
|
224
|
+
event === null || event === void 0 || (_event$stopPropagatio = event.stopPropagation) === null || _event$stopPropagatio === void 0 || _event$stopPropagatio.call(event);
|
|
225
|
+
url = getFormPublicUrl(formName);
|
|
226
|
+
if (url) {
|
|
227
|
+
_context3.n = 1;
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
return _context3.a(2);
|
|
231
|
+
case 1:
|
|
232
|
+
_context3.p = 1;
|
|
233
|
+
_context3.n = 2;
|
|
234
|
+
return navigator.clipboard.writeText(url);
|
|
235
|
+
case 2:
|
|
236
|
+
setCopiedFormName(formName);
|
|
237
|
+
setTimeout(function () {
|
|
238
|
+
return setCopiedFormName('');
|
|
239
|
+
}, 2000);
|
|
240
|
+
_context3.n = 4;
|
|
241
|
+
break;
|
|
242
|
+
case 3:
|
|
243
|
+
_context3.p = 3;
|
|
244
|
+
_t3 = _context3.v;
|
|
245
|
+
notify('error', 'Could not copy link');
|
|
246
|
+
case 4:
|
|
247
|
+
return _context3.a(2);
|
|
248
|
+
}
|
|
249
|
+
}, _callee3, null, [[1, 3]]);
|
|
250
|
+
}));
|
|
251
|
+
return function copyFormLink(_x2, _x3) {
|
|
252
|
+
return _ref4.apply(this, arguments);
|
|
253
|
+
};
|
|
254
|
+
}();
|
|
255
|
+
var FormPublicLink = function FormPublicLink(_ref5) {
|
|
256
|
+
var formName = _ref5.formName,
|
|
257
|
+
_ref5$compact = _ref5.compact,
|
|
258
|
+
compact = _ref5$compact === void 0 ? false : _ref5$compact;
|
|
259
|
+
var url = getFormPublicUrl(formName);
|
|
260
|
+
if (!url) return null;
|
|
261
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
262
|
+
className: "flex items-center gap-2 ".concat(compact ? 'mt-1' : 'mt-2'),
|
|
263
|
+
onClick: function onClick(e) {
|
|
264
|
+
return e.stopPropagation();
|
|
265
|
+
}
|
|
266
|
+
}, /*#__PURE__*/_react["default"].createElement("a", {
|
|
267
|
+
href: url,
|
|
268
|
+
target: "_blank",
|
|
269
|
+
rel: "noopener noreferrer",
|
|
270
|
+
className: "text-xs text-blue-600 hover:text-blue-800 underline truncate max-w-md"
|
|
271
|
+
}, url), /*#__PURE__*/_react["default"].createElement("button", {
|
|
272
|
+
type: "button",
|
|
273
|
+
onClick: function onClick(e) {
|
|
274
|
+
return copyFormLink(formName, e);
|
|
275
|
+
},
|
|
276
|
+
className: "shrink-0 text-xs text-gray-600 hover:text-gray-900 border border-gray-300 rounded px-2 py-0.5"
|
|
277
|
+
}, copiedFormName === formName ? 'Copied!' : 'Copy'));
|
|
278
|
+
};
|
|
203
279
|
var resetFormDraft = function resetFormDraft() {
|
|
280
|
+
setCreatedFormLink('');
|
|
204
281
|
setFormDraft({
|
|
205
282
|
formTitle: '',
|
|
206
283
|
formName: '',
|
|
@@ -225,12 +302,19 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
225
302
|
return candidate;
|
|
226
303
|
};
|
|
227
304
|
var addField = function addField(type) {
|
|
228
|
-
var index = formDraft.fields.length + 1;
|
|
229
305
|
setFormDraft(function (prev) {
|
|
306
|
+
var index = prev.fields.length + 1;
|
|
307
|
+
var defaults = type === 'mobile' ? {
|
|
308
|
+
name: 'whatsapp',
|
|
309
|
+
label: 'Mobile Number'
|
|
310
|
+
} : {
|
|
311
|
+
name: "field".concat(index),
|
|
312
|
+
label: "Field ".concat(index)
|
|
313
|
+
};
|
|
230
314
|
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
231
|
-
fields: [].concat(_toConsumableArray(prev.fields), [_objectSpread({
|
|
232
|
-
|
|
233
|
-
|
|
315
|
+
fields: [].concat(_toConsumableArray(prev.fields), [_objectSpread(_objectSpread({
|
|
316
|
+
id: "".concat(Date.now(), "-").concat(index)
|
|
317
|
+
}, defaults), {}, {
|
|
234
318
|
type: type,
|
|
235
319
|
required: false
|
|
236
320
|
}, type === 'radio' ? {
|
|
@@ -258,46 +342,46 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
258
342
|
});
|
|
259
343
|
};
|
|
260
344
|
var createForm = /*#__PURE__*/function () {
|
|
261
|
-
var
|
|
262
|
-
var trimmedTitle, trimmedName, trimmedId, hasInvalidField, fieldNames, duplicateNames, payload, _yield$apiCall3, result, ok, errorMessage,
|
|
263
|
-
return _regenerator().w(function (
|
|
264
|
-
while (1) switch (
|
|
345
|
+
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
|
|
346
|
+
var trimmedTitle, trimmedName, trimmedId, hasInvalidField, fieldNames, duplicateNames, usedNames, normalizedFields, payload, _yield$apiCall3, result, ok, errorMessage, _t4;
|
|
347
|
+
return _regenerator().w(function (_context4) {
|
|
348
|
+
while (1) switch (_context4.p = _context4.n) {
|
|
265
349
|
case 0:
|
|
266
350
|
setCreateFeedback('');
|
|
267
351
|
if (projectId) {
|
|
268
|
-
|
|
352
|
+
_context4.n = 1;
|
|
269
353
|
break;
|
|
270
354
|
}
|
|
271
355
|
notify('error', 'Project ID is required');
|
|
272
|
-
return
|
|
356
|
+
return _context4.a(2);
|
|
273
357
|
case 1:
|
|
274
358
|
trimmedTitle = formDraft.formTitle.trim();
|
|
275
359
|
trimmedName = formDraft.formName.trim();
|
|
276
360
|
trimmedId = formDraft.formId.trim();
|
|
277
361
|
if (!(!trimmedTitle || !trimmedName || !trimmedId)) {
|
|
278
|
-
|
|
362
|
+
_context4.n = 2;
|
|
279
363
|
break;
|
|
280
364
|
}
|
|
281
365
|
notify('error', 'Form title, name, and ID are required');
|
|
282
|
-
return
|
|
366
|
+
return _context4.a(2);
|
|
283
367
|
case 2:
|
|
284
368
|
if (!(formDraft.fields.length === 0)) {
|
|
285
|
-
|
|
369
|
+
_context4.n = 3;
|
|
286
370
|
break;
|
|
287
371
|
}
|
|
288
372
|
notify('error', 'Add at least one field');
|
|
289
|
-
return
|
|
373
|
+
return _context4.a(2);
|
|
290
374
|
case 3:
|
|
291
375
|
hasInvalidField = formDraft.fields.some(function (field) {
|
|
292
376
|
var _field$name, _field$label;
|
|
293
377
|
return !((_field$name = field.name) !== null && _field$name !== void 0 && _field$name.trim()) || !((_field$label = field.label) !== null && _field$label !== void 0 && _field$label.trim());
|
|
294
378
|
});
|
|
295
379
|
if (!hasInvalidField) {
|
|
296
|
-
|
|
380
|
+
_context4.n = 4;
|
|
297
381
|
break;
|
|
298
382
|
}
|
|
299
383
|
notify('error', 'Each field needs a name and label');
|
|
300
|
-
return
|
|
384
|
+
return _context4.a(2);
|
|
301
385
|
case 4:
|
|
302
386
|
fieldNames = formDraft.fields.map(function (field) {
|
|
303
387
|
return field.name.trim();
|
|
@@ -306,71 +390,83 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
306
390
|
return fieldNames.indexOf(name) !== index;
|
|
307
391
|
});
|
|
308
392
|
if (!(duplicateNames.length > 0)) {
|
|
309
|
-
|
|
393
|
+
_context4.n = 5;
|
|
310
394
|
break;
|
|
311
395
|
}
|
|
312
396
|
notify('error', "Each field needs a unique name. Duplicate: ".concat(_toConsumableArray(new Set(duplicateNames)).join(', ')));
|
|
313
|
-
return
|
|
397
|
+
return _context4.a(2);
|
|
314
398
|
case 5:
|
|
315
399
|
setIsSaving(true);
|
|
316
|
-
|
|
400
|
+
_context4.p = 6;
|
|
401
|
+
usedNames = new Set();
|
|
402
|
+
normalizedFields = formDraft.fields.map(function (field, index, allFields) {
|
|
403
|
+
var _field$name2;
|
|
404
|
+
var others = allFields.filter(function (_, i) {
|
|
405
|
+
return i !== index;
|
|
406
|
+
});
|
|
407
|
+
var name = ((_field$name2 = field.name) === null || _field$name2 === void 0 ? void 0 : _field$name2.trim()) || uniqueFieldName(field.label, index, others);
|
|
408
|
+
var candidate = name;
|
|
409
|
+
var suffix = 2;
|
|
410
|
+
while (usedNames.has(candidate)) {
|
|
411
|
+
candidate = "".concat(name).concat(suffix);
|
|
412
|
+
suffix += 1;
|
|
413
|
+
}
|
|
414
|
+
usedNames.add(candidate);
|
|
415
|
+
return _objectSpread({
|
|
416
|
+
name: candidate,
|
|
417
|
+
label: field.label.trim(),
|
|
418
|
+
type: field.type,
|
|
419
|
+
required: !!field.required
|
|
420
|
+
}, field.type === 'radio' ? {
|
|
421
|
+
options: field.options || []
|
|
422
|
+
} : {});
|
|
423
|
+
});
|
|
317
424
|
payload = {
|
|
318
425
|
formTitle: trimmedTitle,
|
|
319
426
|
formName: trimmedName,
|
|
320
427
|
formId: trimmedId,
|
|
321
|
-
fields:
|
|
322
|
-
return _objectSpread({
|
|
323
|
-
name: field.name.trim(),
|
|
324
|
-
label: field.label.trim(),
|
|
325
|
-
type: field.type,
|
|
326
|
-
required: !!field.required
|
|
327
|
-
}, field.type === 'radio' ? {
|
|
328
|
-
options: field.options || []
|
|
329
|
-
} : {});
|
|
330
|
-
})
|
|
428
|
+
fields: normalizedFields
|
|
331
429
|
};
|
|
332
|
-
|
|
430
|
+
_context4.n = 7;
|
|
333
431
|
return (0, _auth.apiCall)(apiUrl, "/forms/create-form", projectId, {
|
|
334
432
|
method: 'POST',
|
|
335
433
|
body: payload
|
|
336
434
|
});
|
|
337
435
|
case 7:
|
|
338
|
-
_yield$apiCall3 =
|
|
436
|
+
_yield$apiCall3 = _context4.v;
|
|
339
437
|
result = _yield$apiCall3.data;
|
|
340
438
|
ok = _yield$apiCall3.ok;
|
|
341
439
|
if (ok) {
|
|
342
|
-
|
|
440
|
+
_context4.n = 8;
|
|
343
441
|
break;
|
|
344
442
|
}
|
|
345
443
|
throw new Error(result.message || 'Failed to create form');
|
|
346
444
|
case 8:
|
|
347
445
|
notify('success', result.message || 'Form created successfully!');
|
|
348
|
-
|
|
349
|
-
setCreateFeedback('');
|
|
350
|
-
setShowCreateModal(false);
|
|
446
|
+
setCreatedFormLink(getFormPublicUrl(trimmedName));
|
|
351
447
|
fetchForms();
|
|
352
448
|
if (onRefresh) {
|
|
353
449
|
onRefresh();
|
|
354
450
|
}
|
|
355
|
-
|
|
451
|
+
_context4.n = 10;
|
|
356
452
|
break;
|
|
357
453
|
case 9:
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
console.error('Error creating form:',
|
|
361
|
-
errorMessage =
|
|
454
|
+
_context4.p = 9;
|
|
455
|
+
_t4 = _context4.v;
|
|
456
|
+
console.error('Error creating form:', _t4);
|
|
457
|
+
errorMessage = _t4 instanceof Error ? _t4.message : 'Failed to create form';
|
|
362
458
|
notify('error', errorMessage);
|
|
363
459
|
case 10:
|
|
364
|
-
|
|
460
|
+
_context4.p = 10;
|
|
365
461
|
setIsSaving(false);
|
|
366
|
-
return
|
|
462
|
+
return _context4.f(10);
|
|
367
463
|
case 11:
|
|
368
|
-
return
|
|
464
|
+
return _context4.a(2);
|
|
369
465
|
}
|
|
370
|
-
},
|
|
466
|
+
}, _callee4, null, [[6, 9, 10, 11]]);
|
|
371
467
|
}));
|
|
372
468
|
return function createForm() {
|
|
373
|
-
return
|
|
469
|
+
return _ref6.apply(this, arguments);
|
|
374
470
|
};
|
|
375
471
|
}();
|
|
376
472
|
var handleViewForm = function handleViewForm(form) {
|
|
@@ -460,7 +556,10 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
460
556
|
className: "text-xs text-gray-400"
|
|
461
557
|
}, "ID: ", form.formId), /*#__PURE__*/_react["default"].createElement("p", {
|
|
462
558
|
className: "text-xs text-gray-400"
|
|
463
|
-
}, "Name: ", form.formName)
|
|
559
|
+
}, "Name: ", form.formName), /*#__PURE__*/_react["default"].createElement(FormPublicLink, {
|
|
560
|
+
formName: form.formName,
|
|
561
|
+
compact: true
|
|
562
|
+
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
464
563
|
className: "text-sm text-gray-500"
|
|
465
564
|
}, ((_form$fields = form.fields) === null || _form$fields === void 0 ? void 0 : _form$fields.length) || 0, " fields"));
|
|
466
565
|
})))), showCreateModal && /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -469,9 +568,26 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
469
568
|
className: "bg-white rounded-2xl shadow-xl p-8 w-full max-w-3xl max-h-[90vh] overflow-y-auto"
|
|
470
569
|
}, /*#__PURE__*/_react["default"].createElement("h2", {
|
|
471
570
|
className: "text-xl font-bold text-gray-800 mb-6"
|
|
472
|
-
}, "Create New Form"), createFeedback && /*#__PURE__*/_react["default"].createElement("div", {
|
|
571
|
+
}, "Create New Form"), createFeedback && !createdFormLink && /*#__PURE__*/_react["default"].createElement("div", {
|
|
473
572
|
className: "mb-4 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700"
|
|
474
|
-
}, createFeedback), /*#__PURE__*/_react["default"].createElement("div", {
|
|
573
|
+
}, createFeedback), createdFormLink && /*#__PURE__*/_react["default"].createElement("div", {
|
|
574
|
+
className: "mb-4 rounded-lg border border-green-200 bg-green-50 px-4 py-3 text-sm text-green-800 space-y-2"
|
|
575
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
576
|
+
className: "font-medium"
|
|
577
|
+
}, "Form created! Share this link:"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
578
|
+
className: "flex flex-wrap items-center gap-2"
|
|
579
|
+
}, /*#__PURE__*/_react["default"].createElement("a", {
|
|
580
|
+
href: createdFormLink,
|
|
581
|
+
target: "_blank",
|
|
582
|
+
rel: "noopener noreferrer",
|
|
583
|
+
className: "text-blue-700 underline break-all"
|
|
584
|
+
}, createdFormLink), /*#__PURE__*/_react["default"].createElement("button", {
|
|
585
|
+
type: "button",
|
|
586
|
+
onClick: function onClick() {
|
|
587
|
+
return copyFormLink(formDraft.formName.trim());
|
|
588
|
+
},
|
|
589
|
+
className: "text-xs border border-green-300 rounded px-2 py-1 bg-white"
|
|
590
|
+
}, "Copy link"))), !createdFormLink && /*#__PURE__*/_react["default"].createElement("div", {
|
|
475
591
|
className: "space-y-6"
|
|
476
592
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
477
593
|
className: "grid grid-cols-1 md:grid-cols-2 gap-4"
|
|
@@ -529,13 +645,20 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
529
645
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
530
646
|
}), /*#__PURE__*/_react["default"].createElement("p", {
|
|
531
647
|
className: "text-xs text-gray-500 mt-1"
|
|
532
|
-
}, "Used in URLs like `/forms?id=workshopform`")
|
|
648
|
+
}, "Used in URLs like `/forms?id=workshopform`"), formDraft.formName.trim() && /*#__PURE__*/_react["default"].createElement("div", {
|
|
649
|
+
className: "mt-2 rounded-md border border-blue-100 bg-blue-50 px-3 py-2"
|
|
650
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
651
|
+
className: "text-xs font-medium text-blue-900 mb-1"
|
|
652
|
+
}, "Public form link"), /*#__PURE__*/_react["default"].createElement(FormPublicLink, {
|
|
653
|
+
formName: formDraft.formName.trim(),
|
|
654
|
+
compact: true
|
|
655
|
+
})))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
533
656
|
className: "flex items-center justify-between mb-3"
|
|
534
657
|
}, /*#__PURE__*/_react["default"].createElement("h3", {
|
|
535
658
|
className: "text-sm font-semibold text-gray-900"
|
|
536
659
|
}, "Fields"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
537
660
|
className: "flex flex-wrap gap-2"
|
|
538
|
-
}, ['text', 'email', 'textarea', 'radio', 'fileUploader'].map(function (type) {
|
|
661
|
+
}, ['text', 'email', 'mobile', 'textarea', 'radio', 'fileUploader'].map(function (type) {
|
|
539
662
|
return /*#__PURE__*/_react["default"].createElement("button", {
|
|
540
663
|
key: type,
|
|
541
664
|
type: "button",
|
|
@@ -550,7 +673,7 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
550
673
|
className: "space-y-4"
|
|
551
674
|
}, formDraft.fields.map(function (field, index) {
|
|
552
675
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
553
|
-
key:
|
|
676
|
+
key: field.id || index,
|
|
554
677
|
className: "rounded-lg border border-gray-200 p-4 space-y-3"
|
|
555
678
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
556
679
|
className: "flex items-center justify-between"
|
|
@@ -568,12 +691,8 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
568
691
|
type: "text",
|
|
569
692
|
value: field.label,
|
|
570
693
|
onChange: function onChange(e) {
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
label: label,
|
|
574
|
-
name: uniqueFieldName(label, index, formDraft.fields.filter(function (_, i) {
|
|
575
|
-
return i !== index;
|
|
576
|
-
}))
|
|
694
|
+
return updateField(index, {
|
|
695
|
+
label: e.target.value
|
|
577
696
|
});
|
|
578
697
|
},
|
|
579
698
|
placeholder: "Label",
|
|
@@ -613,7 +732,15 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
613
732
|
}));
|
|
614
733
|
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
615
734
|
className: "flex justify-end gap-4 mt-6"
|
|
616
|
-
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
735
|
+
}, createdFormLink ? /*#__PURE__*/_react["default"].createElement("button", {
|
|
736
|
+
type: "button",
|
|
737
|
+
onClick: function onClick() {
|
|
738
|
+
resetFormDraft();
|
|
739
|
+
setCreateFeedback('');
|
|
740
|
+
setShowCreateModal(false);
|
|
741
|
+
},
|
|
742
|
+
className: "bg-blue-600 text-white hover:bg-blue-700 px-4 py-2 rounded-md"
|
|
743
|
+
}, "Done") : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("button", {
|
|
617
744
|
type: "button",
|
|
618
745
|
onClick: function onClick() {
|
|
619
746
|
resetFormDraft();
|
|
@@ -628,7 +755,7 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
628
755
|
className: "bg-blue-600 text-white hover:bg-blue-700 px-4 py-2 rounded-md disabled:opacity-50"
|
|
629
756
|
}, isSaving ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
630
757
|
className: "animate-spin h-5 w-5 mx-auto border-2 border-white border-t-transparent rounded-full"
|
|
631
|
-
}) : 'Create Form')))), showDetailModal && selectedForm && /*#__PURE__*/_react["default"].createElement("div", {
|
|
758
|
+
}) : 'Create Form'))))), showDetailModal && selectedForm && /*#__PURE__*/_react["default"].createElement("div", {
|
|
632
759
|
className: "fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50"
|
|
633
760
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
634
761
|
className: "bg-white rounded-2xl shadow-xl p-8 w-full max-w-4xl max-h-[90vh] overflow-y-auto"
|
|
@@ -652,6 +779,12 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
652
779
|
strokeWidth: 2,
|
|
653
780
|
d: "M6 18L18 6M6 6l12 12"
|
|
654
781
|
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
782
|
+
className: "mb-4 rounded-lg border border-blue-100 bg-blue-50 px-4 py-3"
|
|
783
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
784
|
+
className: "text-sm font-medium text-blue-900 mb-1"
|
|
785
|
+
}, "Public form link"), /*#__PURE__*/_react["default"].createElement(FormPublicLink, {
|
|
786
|
+
formName: selectedForm.formName
|
|
787
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
655
788
|
className: "mb-4"
|
|
656
789
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
657
790
|
className: "flex space-x-4 border-b border-gray-200"
|
package/dist/forms/index.js
CHANGED
|
@@ -202,6 +202,26 @@ var PowrForm = function PowrForm(_ref) {
|
|
|
202
202
|
}), {
|
|
203
203
|
className: inputClass
|
|
204
204
|
})));
|
|
205
|
+
case "mobile":
|
|
206
|
+
return /*#__PURE__*/_react["default"].createElement(InputField, {
|
|
207
|
+
key: field.name,
|
|
208
|
+
label: field.label,
|
|
209
|
+
required: field.required,
|
|
210
|
+
error: errors[field.name],
|
|
211
|
+
theme: theme
|
|
212
|
+
}, /*#__PURE__*/_react["default"].createElement("input", _extends({
|
|
213
|
+
type: "tel",
|
|
214
|
+
inputMode: "tel",
|
|
215
|
+
autoComplete: "tel"
|
|
216
|
+
}, register(field.name, {
|
|
217
|
+
required: field.required,
|
|
218
|
+
pattern: {
|
|
219
|
+
value: /^[0-9+\-\s()]{8,15}$/,
|
|
220
|
+
message: "Invalid mobile number"
|
|
221
|
+
}
|
|
222
|
+
}), {
|
|
223
|
+
className: inputClass
|
|
224
|
+
})));
|
|
205
225
|
case "textarea":
|
|
206
226
|
return /*#__PURE__*/_react["default"].createElement(InputField, {
|
|
207
227
|
key: field.name,
|