powr-sdk-web 5.6.11 → 5.6.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/forms/admin.js +554 -178
- package/dist/forms/index.js +20 -5
- package/package.json +1 -1
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 _t6 in e) "default" !== _t6 && {}.hasOwnProperty.call(e, _t6) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t6)) && (i.get || i.set) ? o(f, _t6, i) : f[_t6] = e[_t6]); 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); }
|
|
@@ -69,35 +69,60 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
69
69
|
formTitle: '',
|
|
70
70
|
formName: '',
|
|
71
71
|
formId: '',
|
|
72
|
+
description: '',
|
|
73
|
+
imageUrl: '',
|
|
72
74
|
fields: []
|
|
73
75
|
}),
|
|
74
76
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
75
77
|
formDraft = _useState16[0],
|
|
76
78
|
setFormDraft = _useState16[1];
|
|
77
|
-
var _useState17 = (0, _react.useState)(
|
|
79
|
+
var _useState17 = (0, _react.useState)(false),
|
|
78
80
|
_useState18 = _slicedToArray(_useState17, 2),
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
var _useState19 = (0, _react.useState)(
|
|
81
|
+
showEditModal = _useState18[0],
|
|
82
|
+
setShowEditModal = _useState18[1];
|
|
83
|
+
var _useState19 = (0, _react.useState)({
|
|
84
|
+
formTitle: '',
|
|
85
|
+
formName: '',
|
|
86
|
+
formId: '',
|
|
87
|
+
description: '',
|
|
88
|
+
imageUrl: '',
|
|
89
|
+
fields: []
|
|
90
|
+
}),
|
|
82
91
|
_useState20 = _slicedToArray(_useState19, 2),
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
var _useState21 = (0, _react.useState)('
|
|
92
|
+
editDraft = _useState20[0],
|
|
93
|
+
setEditDraft = _useState20[1];
|
|
94
|
+
var _useState21 = (0, _react.useState)(''),
|
|
86
95
|
_useState22 = _slicedToArray(_useState21, 2),
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
var _useState23 = (0, _react.useState)(
|
|
96
|
+
editFeedback = _useState22[0],
|
|
97
|
+
setEditFeedback = _useState22[1];
|
|
98
|
+
var _useState23 = (0, _react.useState)(false),
|
|
90
99
|
_useState24 = _slicedToArray(_useState23, 2),
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
var _useState25 = (0, _react.useState)(
|
|
100
|
+
isUpdating = _useState24[0],
|
|
101
|
+
setIsUpdating = _useState24[1];
|
|
102
|
+
var _useState25 = (0, _react.useState)(null),
|
|
94
103
|
_useState26 = _slicedToArray(_useState25, 2),
|
|
95
|
-
|
|
96
|
-
|
|
104
|
+
selectedForm = _useState26[0],
|
|
105
|
+
setSelectedForm = _useState26[1];
|
|
97
106
|
var _useState27 = (0, _react.useState)(false),
|
|
98
107
|
_useState28 = _slicedToArray(_useState27, 2),
|
|
99
|
-
|
|
100
|
-
|
|
108
|
+
showDetailModal = _useState28[0],
|
|
109
|
+
setShowDetailModal = _useState28[1];
|
|
110
|
+
var _useState29 = (0, _react.useState)('responses'),
|
|
111
|
+
_useState30 = _slicedToArray(_useState29, 2),
|
|
112
|
+
activeTab = _useState30[0],
|
|
113
|
+
setActiveTab = _useState30[1];
|
|
114
|
+
var _useState31 = (0, _react.useState)([]),
|
|
115
|
+
_useState32 = _slicedToArray(_useState31, 2),
|
|
116
|
+
formResponses = _useState32[0],
|
|
117
|
+
setFormResponses = _useState32[1];
|
|
118
|
+
var _useState33 = (0, _react.useState)(0),
|
|
119
|
+
_useState34 = _slicedToArray(_useState33, 2),
|
|
120
|
+
responseCount = _useState34[0],
|
|
121
|
+
setResponseCount = _useState34[1];
|
|
122
|
+
var _useState35 = (0, _react.useState)(false),
|
|
123
|
+
_useState36 = _slicedToArray(_useState35, 2),
|
|
124
|
+
loadingResponses = _useState36[0],
|
|
125
|
+
setLoadingResponses = _useState36[1];
|
|
101
126
|
var fetchForms = /*#__PURE__*/function () {
|
|
102
127
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
103
128
|
var _yield$apiCall, data, ok, _t;
|
|
@@ -282,9 +307,105 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
282
307
|
formTitle: '',
|
|
283
308
|
formName: '',
|
|
284
309
|
formId: '',
|
|
310
|
+
description: '',
|
|
311
|
+
imageUrl: '',
|
|
285
312
|
fields: []
|
|
286
313
|
});
|
|
287
314
|
};
|
|
315
|
+
var populateEditDraft = function populateEditDraft(form) {
|
|
316
|
+
return {
|
|
317
|
+
formTitle: form.formTitle || '',
|
|
318
|
+
formName: form.formName || '',
|
|
319
|
+
formId: form.formId || '',
|
|
320
|
+
description: form.description || '',
|
|
321
|
+
imageUrl: form.imageUrl || '',
|
|
322
|
+
fields: (form.fields || []).map(function (field, index) {
|
|
323
|
+
return _objectSpread({
|
|
324
|
+
id: "".concat(field.name || 'field', "-").concat(index),
|
|
325
|
+
name: field.name || '',
|
|
326
|
+
label: field.label || '',
|
|
327
|
+
type: field.type || 'text',
|
|
328
|
+
required: !!field.required,
|
|
329
|
+
description: field.description || ''
|
|
330
|
+
}, field.type === 'radio' ? {
|
|
331
|
+
options: field.options || []
|
|
332
|
+
} : {});
|
|
333
|
+
})
|
|
334
|
+
};
|
|
335
|
+
};
|
|
336
|
+
var normalizeFieldsForSave = function normalizeFieldsForSave(fields) {
|
|
337
|
+
var usedNames = new Set();
|
|
338
|
+
return fields.map(function (field, index, allFields) {
|
|
339
|
+
var _field$name, _field$description;
|
|
340
|
+
var others = allFields.filter(function (_, i) {
|
|
341
|
+
return i !== index;
|
|
342
|
+
});
|
|
343
|
+
var name = ((_field$name = field.name) === null || _field$name === void 0 ? void 0 : _field$name.trim()) || uniqueFieldName(field.label, index, others);
|
|
344
|
+
var candidate = name;
|
|
345
|
+
var suffix = 2;
|
|
346
|
+
while (usedNames.has(candidate)) {
|
|
347
|
+
candidate = "".concat(name).concat(suffix);
|
|
348
|
+
suffix += 1;
|
|
349
|
+
}
|
|
350
|
+
usedNames.add(candidate);
|
|
351
|
+
return _objectSpread(_objectSpread({
|
|
352
|
+
name: candidate,
|
|
353
|
+
label: field.label.trim(),
|
|
354
|
+
type: field.type,
|
|
355
|
+
required: !!field.required
|
|
356
|
+
}, (_field$description = field.description) !== null && _field$description !== void 0 && _field$description.trim() ? {
|
|
357
|
+
description: field.description.trim()
|
|
358
|
+
} : {}), field.type === 'radio' ? {
|
|
359
|
+
options: field.options || []
|
|
360
|
+
} : {});
|
|
361
|
+
});
|
|
362
|
+
};
|
|
363
|
+
var validateFormDraft = function validateFormDraft(draft) {
|
|
364
|
+
var trimmedTitle = draft.formTitle.trim();
|
|
365
|
+
var trimmedName = draft.formName.trim();
|
|
366
|
+
var trimmedId = draft.formId.trim();
|
|
367
|
+
if (!trimmedTitle || !trimmedName || !trimmedId) {
|
|
368
|
+
return {
|
|
369
|
+
valid: false,
|
|
370
|
+
message: 'Form title, name, and ID are required'
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
if (draft.fields.length === 0) {
|
|
374
|
+
return {
|
|
375
|
+
valid: false,
|
|
376
|
+
message: 'Add at least one field'
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
var hasInvalidField = draft.fields.some(function (field) {
|
|
380
|
+
var _field$name2, _field$label;
|
|
381
|
+
return !((_field$name2 = field.name) !== null && _field$name2 !== void 0 && _field$name2.trim()) || !((_field$label = field.label) !== null && _field$label !== void 0 && _field$label.trim());
|
|
382
|
+
});
|
|
383
|
+
if (hasInvalidField) {
|
|
384
|
+
return {
|
|
385
|
+
valid: false,
|
|
386
|
+
message: 'Each field needs a name and label'
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
var fieldNames = draft.fields.map(function (field) {
|
|
390
|
+
return field.name.trim();
|
|
391
|
+
});
|
|
392
|
+
var duplicateNames = fieldNames.filter(function (name, index) {
|
|
393
|
+
return fieldNames.indexOf(name) !== index;
|
|
394
|
+
});
|
|
395
|
+
if (duplicateNames.length > 0) {
|
|
396
|
+
return {
|
|
397
|
+
valid: false,
|
|
398
|
+
message: "Each field needs a unique name. Duplicate: ".concat(_toConsumableArray(new Set(duplicateNames)).join(', '))
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
return {
|
|
402
|
+
valid: true,
|
|
403
|
+
trimmedTitle: trimmedTitle,
|
|
404
|
+
trimmedName: trimmedName,
|
|
405
|
+
trimmedId: trimmedId,
|
|
406
|
+
normalizedFields: normalizeFieldsForSave(draft.fields)
|
|
407
|
+
};
|
|
408
|
+
};
|
|
288
409
|
var slugify = function slugify(value) {
|
|
289
410
|
return value.toLowerCase().trim().replace(/[^a-z0-9]+/g, '').slice(0, 32);
|
|
290
411
|
};
|
|
@@ -316,7 +437,8 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
316
437
|
id: "".concat(Date.now(), "-").concat(index)
|
|
317
438
|
}, defaults), {}, {
|
|
318
439
|
type: type,
|
|
319
|
-
required: false
|
|
440
|
+
required: false,
|
|
441
|
+
description: ''
|
|
320
442
|
}, type === 'radio' ? {
|
|
321
443
|
options: ['Option 1', 'Option 2']
|
|
322
444
|
} : {})])
|
|
@@ -341,9 +463,50 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
341
463
|
});
|
|
342
464
|
});
|
|
343
465
|
};
|
|
466
|
+
var addEditField = function addEditField(type) {
|
|
467
|
+
setEditDraft(function (prev) {
|
|
468
|
+
var index = prev.fields.length + 1;
|
|
469
|
+
var defaults = type === 'mobile' ? {
|
|
470
|
+
name: 'whatsapp',
|
|
471
|
+
label: 'Mobile Number'
|
|
472
|
+
} : {
|
|
473
|
+
name: "field".concat(index),
|
|
474
|
+
label: "Field ".concat(index)
|
|
475
|
+
};
|
|
476
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
477
|
+
fields: [].concat(_toConsumableArray(prev.fields), [_objectSpread(_objectSpread({
|
|
478
|
+
id: "".concat(Date.now(), "-").concat(index)
|
|
479
|
+
}, defaults), {}, {
|
|
480
|
+
type: type,
|
|
481
|
+
required: false,
|
|
482
|
+
description: ''
|
|
483
|
+
}, type === 'radio' ? {
|
|
484
|
+
options: ['Option 1', 'Option 2']
|
|
485
|
+
} : {})])
|
|
486
|
+
});
|
|
487
|
+
});
|
|
488
|
+
};
|
|
489
|
+
var updateEditField = function updateEditField(index, updates) {
|
|
490
|
+
setEditDraft(function (prev) {
|
|
491
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
492
|
+
fields: prev.fields.map(function (field, i) {
|
|
493
|
+
return i === index ? _objectSpread(_objectSpread({}, field), updates) : field;
|
|
494
|
+
})
|
|
495
|
+
});
|
|
496
|
+
});
|
|
497
|
+
};
|
|
498
|
+
var removeEditField = function removeEditField(index) {
|
|
499
|
+
setEditDraft(function (prev) {
|
|
500
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
501
|
+
fields: prev.fields.filter(function (_, i) {
|
|
502
|
+
return i !== index;
|
|
503
|
+
})
|
|
504
|
+
});
|
|
505
|
+
});
|
|
506
|
+
};
|
|
344
507
|
var createForm = /*#__PURE__*/function () {
|
|
345
508
|
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
|
|
346
|
-
var
|
|
509
|
+
var validation, payload, _yield$apiCall3, result, ok, errorMessage, _t4;
|
|
347
510
|
return _regenerator().w(function (_context4) {
|
|
348
511
|
while (1) switch (_context4.p = _context4.n) {
|
|
349
512
|
case 0:
|
|
@@ -355,120 +518,244 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
355
518
|
notify('error', 'Project ID is required');
|
|
356
519
|
return _context4.a(2);
|
|
357
520
|
case 1:
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
trimmedId = formDraft.formId.trim();
|
|
361
|
-
if (!(!trimmedTitle || !trimmedName || !trimmedId)) {
|
|
521
|
+
validation = validateFormDraft(formDraft);
|
|
522
|
+
if (validation.valid) {
|
|
362
523
|
_context4.n = 2;
|
|
363
524
|
break;
|
|
364
525
|
}
|
|
365
|
-
notify('error',
|
|
526
|
+
notify('error', validation.message);
|
|
366
527
|
return _context4.a(2);
|
|
367
528
|
case 2:
|
|
368
|
-
if (!(formDraft.fields.length === 0)) {
|
|
369
|
-
_context4.n = 3;
|
|
370
|
-
break;
|
|
371
|
-
}
|
|
372
|
-
notify('error', 'Add at least one field');
|
|
373
|
-
return _context4.a(2);
|
|
374
|
-
case 3:
|
|
375
|
-
hasInvalidField = formDraft.fields.some(function (field) {
|
|
376
|
-
var _field$name, _field$label;
|
|
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());
|
|
378
|
-
});
|
|
379
|
-
if (!hasInvalidField) {
|
|
380
|
-
_context4.n = 4;
|
|
381
|
-
break;
|
|
382
|
-
}
|
|
383
|
-
notify('error', 'Each field needs a name and label');
|
|
384
|
-
return _context4.a(2);
|
|
385
|
-
case 4:
|
|
386
|
-
fieldNames = formDraft.fields.map(function (field) {
|
|
387
|
-
return field.name.trim();
|
|
388
|
-
});
|
|
389
|
-
duplicateNames = fieldNames.filter(function (name, index) {
|
|
390
|
-
return fieldNames.indexOf(name) !== index;
|
|
391
|
-
});
|
|
392
|
-
if (!(duplicateNames.length > 0)) {
|
|
393
|
-
_context4.n = 5;
|
|
394
|
-
break;
|
|
395
|
-
}
|
|
396
|
-
notify('error', "Each field needs a unique name. Duplicate: ".concat(_toConsumableArray(new Set(duplicateNames)).join(', ')));
|
|
397
|
-
return _context4.a(2);
|
|
398
|
-
case 5:
|
|
399
529
|
setIsSaving(true);
|
|
400
|
-
_context4.p =
|
|
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
|
-
});
|
|
530
|
+
_context4.p = 3;
|
|
424
531
|
payload = {
|
|
425
|
-
formTitle: trimmedTitle,
|
|
426
|
-
formName: trimmedName,
|
|
427
|
-
formId: trimmedId,
|
|
428
|
-
|
|
532
|
+
formTitle: validation.trimmedTitle,
|
|
533
|
+
formName: validation.trimmedName,
|
|
534
|
+
formId: validation.trimmedId,
|
|
535
|
+
description: formDraft.description.trim(),
|
|
536
|
+
imageUrl: formDraft.imageUrl.trim(),
|
|
537
|
+
fields: validation.normalizedFields
|
|
429
538
|
};
|
|
430
|
-
_context4.n =
|
|
539
|
+
_context4.n = 4;
|
|
431
540
|
return (0, _auth.apiCall)(apiUrl, "/forms/create-form", projectId, {
|
|
432
541
|
method: 'POST',
|
|
433
542
|
body: payload
|
|
434
543
|
});
|
|
435
|
-
case
|
|
544
|
+
case 4:
|
|
436
545
|
_yield$apiCall3 = _context4.v;
|
|
437
546
|
result = _yield$apiCall3.data;
|
|
438
547
|
ok = _yield$apiCall3.ok;
|
|
439
548
|
if (ok) {
|
|
440
|
-
_context4.n =
|
|
549
|
+
_context4.n = 5;
|
|
441
550
|
break;
|
|
442
551
|
}
|
|
443
552
|
throw new Error(result.message || 'Failed to create form');
|
|
444
|
-
case
|
|
553
|
+
case 5:
|
|
445
554
|
notify('success', result.message || 'Form created successfully!');
|
|
446
|
-
setCreatedFormLink(getFormPublicUrl(trimmedName));
|
|
555
|
+
setCreatedFormLink(getFormPublicUrl(validation.trimmedName));
|
|
447
556
|
fetchForms();
|
|
448
557
|
if (onRefresh) {
|
|
449
558
|
onRefresh();
|
|
450
559
|
}
|
|
451
|
-
_context4.n =
|
|
560
|
+
_context4.n = 7;
|
|
452
561
|
break;
|
|
453
|
-
case
|
|
454
|
-
_context4.p =
|
|
562
|
+
case 6:
|
|
563
|
+
_context4.p = 6;
|
|
455
564
|
_t4 = _context4.v;
|
|
456
565
|
console.error('Error creating form:', _t4);
|
|
457
566
|
errorMessage = _t4 instanceof Error ? _t4.message : 'Failed to create form';
|
|
458
567
|
notify('error', errorMessage);
|
|
459
|
-
case
|
|
460
|
-
_context4.p =
|
|
568
|
+
case 7:
|
|
569
|
+
_context4.p = 7;
|
|
461
570
|
setIsSaving(false);
|
|
462
|
-
return _context4.f(
|
|
463
|
-
case
|
|
571
|
+
return _context4.f(7);
|
|
572
|
+
case 8:
|
|
464
573
|
return _context4.a(2);
|
|
465
574
|
}
|
|
466
|
-
}, _callee4, null, [[
|
|
575
|
+
}, _callee4, null, [[3, 6, 7, 8]]);
|
|
467
576
|
}));
|
|
468
577
|
return function createForm() {
|
|
469
578
|
return _ref6.apply(this, arguments);
|
|
470
579
|
};
|
|
471
580
|
}();
|
|
581
|
+
var updateForm = /*#__PURE__*/function () {
|
|
582
|
+
var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
|
|
583
|
+
var validation, payload, _yield$apiCall4, result, ok, updatedForm, _t5;
|
|
584
|
+
return _regenerator().w(function (_context5) {
|
|
585
|
+
while (1) switch (_context5.p = _context5.n) {
|
|
586
|
+
case 0:
|
|
587
|
+
setEditFeedback('');
|
|
588
|
+
if (projectId) {
|
|
589
|
+
_context5.n = 1;
|
|
590
|
+
break;
|
|
591
|
+
}
|
|
592
|
+
setEditFeedback('Project ID is required');
|
|
593
|
+
return _context5.a(2);
|
|
594
|
+
case 1:
|
|
595
|
+
validation = validateFormDraft(editDraft);
|
|
596
|
+
if (validation.valid) {
|
|
597
|
+
_context5.n = 2;
|
|
598
|
+
break;
|
|
599
|
+
}
|
|
600
|
+
setEditFeedback(validation.message);
|
|
601
|
+
return _context5.a(2);
|
|
602
|
+
case 2:
|
|
603
|
+
setIsUpdating(true);
|
|
604
|
+
_context5.p = 3;
|
|
605
|
+
payload = {
|
|
606
|
+
formTitle: validation.trimmedTitle,
|
|
607
|
+
formId: validation.trimmedId,
|
|
608
|
+
description: editDraft.description.trim(),
|
|
609
|
+
imageUrl: editDraft.imageUrl.trim(),
|
|
610
|
+
fields: validation.normalizedFields
|
|
611
|
+
};
|
|
612
|
+
_context5.n = 4;
|
|
613
|
+
return (0, _auth.apiCall)(apiUrl, "/forms/update-form/".concat(encodeURIComponent(editDraft.formName)), projectId, {
|
|
614
|
+
method: 'PUT',
|
|
615
|
+
body: payload
|
|
616
|
+
});
|
|
617
|
+
case 4:
|
|
618
|
+
_yield$apiCall4 = _context5.v;
|
|
619
|
+
result = _yield$apiCall4.data;
|
|
620
|
+
ok = _yield$apiCall4.ok;
|
|
621
|
+
if (ok) {
|
|
622
|
+
_context5.n = 5;
|
|
623
|
+
break;
|
|
624
|
+
}
|
|
625
|
+
throw new Error(result.message || 'Failed to update form');
|
|
626
|
+
case 5:
|
|
627
|
+
updatedForm = result.data || _objectSpread(_objectSpread(_objectSpread({}, selectedForm), payload), {}, {
|
|
628
|
+
formName: editDraft.formName
|
|
629
|
+
});
|
|
630
|
+
setSelectedForm(updatedForm);
|
|
631
|
+
setShowEditModal(false);
|
|
632
|
+
setEditFeedback('');
|
|
633
|
+
fetchForms();
|
|
634
|
+
if (onRefresh) {
|
|
635
|
+
onRefresh();
|
|
636
|
+
}
|
|
637
|
+
if (onFormAction) {
|
|
638
|
+
onFormAction('success', result.message || 'Form updated successfully!');
|
|
639
|
+
}
|
|
640
|
+
_context5.n = 7;
|
|
641
|
+
break;
|
|
642
|
+
case 6:
|
|
643
|
+
_context5.p = 6;
|
|
644
|
+
_t5 = _context5.v;
|
|
645
|
+
console.error('Error updating form:', _t5);
|
|
646
|
+
setEditFeedback(_t5 instanceof Error ? _t5.message : 'Failed to update form');
|
|
647
|
+
case 7:
|
|
648
|
+
_context5.p = 7;
|
|
649
|
+
setIsUpdating(false);
|
|
650
|
+
return _context5.f(7);
|
|
651
|
+
case 8:
|
|
652
|
+
return _context5.a(2);
|
|
653
|
+
}
|
|
654
|
+
}, _callee5, null, [[3, 6, 7, 8]]);
|
|
655
|
+
}));
|
|
656
|
+
return function updateForm() {
|
|
657
|
+
return _ref7.apply(this, arguments);
|
|
658
|
+
};
|
|
659
|
+
}();
|
|
660
|
+
var openEditModal = function openEditModal(form) {
|
|
661
|
+
setEditDraft(populateEditDraft(form));
|
|
662
|
+
setEditFeedback('');
|
|
663
|
+
setShowEditModal(true);
|
|
664
|
+
};
|
|
665
|
+
var renderFieldBuilder = function renderFieldBuilder(draft, _ref8) {
|
|
666
|
+
var addFieldFn = _ref8.addFieldFn,
|
|
667
|
+
updateFieldFn = _ref8.updateFieldFn,
|
|
668
|
+
removeFieldFn = _ref8.removeFieldFn;
|
|
669
|
+
return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
670
|
+
className: "flex items-center justify-between mb-3"
|
|
671
|
+
}, /*#__PURE__*/_react["default"].createElement("h3", {
|
|
672
|
+
className: "text-sm font-semibold text-gray-900"
|
|
673
|
+
}, "Fields"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
674
|
+
className: "flex flex-wrap gap-2"
|
|
675
|
+
}, ['text', 'email', 'mobile', 'textarea', 'radio', 'fileUploader'].map(function (type) {
|
|
676
|
+
return /*#__PURE__*/_react["default"].createElement("button", {
|
|
677
|
+
key: type,
|
|
678
|
+
type: "button",
|
|
679
|
+
onClick: function onClick() {
|
|
680
|
+
return addFieldFn(type);
|
|
681
|
+
},
|
|
682
|
+
className: "px-3 py-1 text-xs rounded-full border border-gray-300 hover:bg-gray-50"
|
|
683
|
+
}, "+ ", type);
|
|
684
|
+
}))), draft.fields.length === 0 ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
685
|
+
className: "rounded-lg border border-dashed border-gray-300 p-6 text-center text-sm text-gray-500"
|
|
686
|
+
}, "Add fields using the buttons above") : /*#__PURE__*/_react["default"].createElement("div", {
|
|
687
|
+
className: "space-y-4"
|
|
688
|
+
}, draft.fields.map(function (field, index) {
|
|
689
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
690
|
+
key: field.id || index,
|
|
691
|
+
className: "rounded-lg border border-gray-200 p-4 space-y-3"
|
|
692
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
693
|
+
className: "flex items-center justify-between"
|
|
694
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
695
|
+
className: "text-sm font-medium text-gray-700 capitalize"
|
|
696
|
+
}, field.type, " field"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
697
|
+
type: "button",
|
|
698
|
+
onClick: function onClick() {
|
|
699
|
+
return removeFieldFn(index);
|
|
700
|
+
},
|
|
701
|
+
className: "text-sm text-red-600 hover:text-red-700"
|
|
702
|
+
}, "Remove")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
703
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-3"
|
|
704
|
+
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
705
|
+
type: "text",
|
|
706
|
+
value: field.label,
|
|
707
|
+
onChange: function onChange(e) {
|
|
708
|
+
return updateFieldFn(index, {
|
|
709
|
+
label: e.target.value
|
|
710
|
+
});
|
|
711
|
+
},
|
|
712
|
+
placeholder: "Label",
|
|
713
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md"
|
|
714
|
+
}), /*#__PURE__*/_react["default"].createElement("input", {
|
|
715
|
+
type: "text",
|
|
716
|
+
value: field.name,
|
|
717
|
+
onChange: function onChange(e) {
|
|
718
|
+
return updateFieldFn(index, {
|
|
719
|
+
name: slugify(e.target.value)
|
|
720
|
+
});
|
|
721
|
+
},
|
|
722
|
+
placeholder: "name",
|
|
723
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md"
|
|
724
|
+
})), /*#__PURE__*/_react["default"].createElement("input", {
|
|
725
|
+
type: "text",
|
|
726
|
+
value: field.description || '',
|
|
727
|
+
onChange: function onChange(e) {
|
|
728
|
+
return updateFieldFn(index, {
|
|
729
|
+
description: e.target.value
|
|
730
|
+
});
|
|
731
|
+
},
|
|
732
|
+
placeholder: "Help text (optional, shown below the label)",
|
|
733
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md text-sm"
|
|
734
|
+
}), /*#__PURE__*/_react["default"].createElement("label", {
|
|
735
|
+
className: "flex items-center gap-2 text-sm text-gray-700"
|
|
736
|
+
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
737
|
+
type: "checkbox",
|
|
738
|
+
checked: !!field.required,
|
|
739
|
+
onChange: function onChange(e) {
|
|
740
|
+
return updateFieldFn(index, {
|
|
741
|
+
required: e.target.checked
|
|
742
|
+
});
|
|
743
|
+
}
|
|
744
|
+
}), "Required"), field.type === 'radio' && /*#__PURE__*/_react["default"].createElement("textarea", {
|
|
745
|
+
value: (field.options || []).join('\n'),
|
|
746
|
+
onChange: function onChange(e) {
|
|
747
|
+
return updateFieldFn(index, {
|
|
748
|
+
options: e.target.value.split('\n').map(function (option) {
|
|
749
|
+
return option.trim();
|
|
750
|
+
}).filter(Boolean)
|
|
751
|
+
});
|
|
752
|
+
},
|
|
753
|
+
placeholder: "One option per line",
|
|
754
|
+
rows: 3,
|
|
755
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md"
|
|
756
|
+
}));
|
|
757
|
+
})));
|
|
758
|
+
};
|
|
472
759
|
var handleViewForm = function handleViewForm(form) {
|
|
473
760
|
setSelectedForm(form);
|
|
474
761
|
setActiveTab('responses');
|
|
@@ -652,85 +939,45 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
652
939
|
}, "Public form link"), /*#__PURE__*/_react["default"].createElement(FormPublicLink, {
|
|
653
940
|
formName: formDraft.formName.trim(),
|
|
654
941
|
compact: true
|
|
655
|
-
})))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
onClick: function onClick() {
|
|
666
|
-
return addField(type);
|
|
667
|
-
},
|
|
668
|
-
className: "px-3 py-1 text-xs rounded-full border border-gray-300 hover:bg-gray-50"
|
|
669
|
-
}, "+ ", type);
|
|
670
|
-
}))), formDraft.fields.length === 0 ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
671
|
-
className: "rounded-lg border border-dashed border-gray-300 p-6 text-center text-sm text-gray-500"
|
|
672
|
-
}, "Add fields using the buttons above") : /*#__PURE__*/_react["default"].createElement("div", {
|
|
673
|
-
className: "space-y-4"
|
|
674
|
-
}, formDraft.fields.map(function (field, index) {
|
|
675
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
676
|
-
key: field.id || index,
|
|
677
|
-
className: "rounded-lg border border-gray-200 p-4 space-y-3"
|
|
678
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
679
|
-
className: "flex items-center justify-between"
|
|
680
|
-
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
681
|
-
className: "text-sm font-medium text-gray-700 capitalize"
|
|
682
|
-
}, field.type, " field"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
683
|
-
type: "button",
|
|
684
|
-
onClick: function onClick() {
|
|
685
|
-
return removeField(index);
|
|
686
|
-
},
|
|
687
|
-
className: "text-sm text-red-600 hover:text-red-700"
|
|
688
|
-
}, "Remove")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
689
|
-
className: "grid grid-cols-1 md:grid-cols-2 gap-3"
|
|
690
|
-
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
691
|
-
type: "text",
|
|
692
|
-
value: field.label,
|
|
693
|
-
onChange: function onChange(e) {
|
|
694
|
-
return updateField(index, {
|
|
695
|
-
label: e.target.value
|
|
696
|
-
});
|
|
697
|
-
},
|
|
698
|
-
placeholder: "Label",
|
|
699
|
-
className: "w-full px-3 py-2 border border-gray-300 rounded-md"
|
|
700
|
-
}), /*#__PURE__*/_react["default"].createElement("input", {
|
|
701
|
-
type: "text",
|
|
702
|
-
value: field.name,
|
|
703
|
-
onChange: function onChange(e) {
|
|
704
|
-
return updateField(index, {
|
|
705
|
-
name: slugify(e.target.value)
|
|
706
|
-
});
|
|
707
|
-
},
|
|
708
|
-
placeholder: "name",
|
|
709
|
-
className: "w-full px-3 py-2 border border-gray-300 rounded-md"
|
|
710
|
-
})), /*#__PURE__*/_react["default"].createElement("label", {
|
|
711
|
-
className: "flex items-center gap-2 text-sm text-gray-700"
|
|
712
|
-
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
713
|
-
type: "checkbox",
|
|
714
|
-
checked: !!field.required,
|
|
715
|
-
onChange: function onChange(e) {
|
|
716
|
-
return updateField(index, {
|
|
717
|
-
required: e.target.checked
|
|
942
|
+
})))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
943
|
+
htmlFor: "formDescription",
|
|
944
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
945
|
+
}, "Description (optional)"), /*#__PURE__*/_react["default"].createElement("textarea", {
|
|
946
|
+
id: "formDescription",
|
|
947
|
+
value: formDraft.description,
|
|
948
|
+
onChange: function onChange(e) {
|
|
949
|
+
return setFormDraft(function (prev) {
|
|
950
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
951
|
+
description: e.target.value
|
|
718
952
|
});
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
953
|
+
});
|
|
954
|
+
},
|
|
955
|
+
placeholder: "Instructions or context shown at the top of the public form",
|
|
956
|
+
rows: 3,
|
|
957
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
958
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
959
|
+
htmlFor: "formImageUrl",
|
|
960
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
961
|
+
}, "Banner / share image URL (optional)"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
962
|
+
id: "formImageUrl",
|
|
963
|
+
type: "url",
|
|
964
|
+
value: formDraft.imageUrl,
|
|
965
|
+
onChange: function onChange(e) {
|
|
966
|
+
return setFormDraft(function (prev) {
|
|
967
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
968
|
+
imageUrl: e.target.value
|
|
727
969
|
});
|
|
728
|
-
}
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
970
|
+
});
|
|
971
|
+
},
|
|
972
|
+
placeholder: "https://www.excelrs.dev/bannar1.jpg",
|
|
973
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
974
|
+
}), /*#__PURE__*/_react["default"].createElement("p", {
|
|
975
|
+
className: "text-xs text-gray-500 mt-1"
|
|
976
|
+
}, "Used for the form banner and link previews (Open Graph / Twitter).")), renderFieldBuilder(formDraft, {
|
|
977
|
+
addFieldFn: addField,
|
|
978
|
+
updateFieldFn: updateField,
|
|
979
|
+
removeFieldFn: removeField
|
|
980
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
734
981
|
className: "flex justify-end gap-4 mt-6"
|
|
735
982
|
}, createdFormLink ? /*#__PURE__*/_react["default"].createElement("button", {
|
|
736
983
|
type: "button",
|
|
@@ -763,7 +1010,15 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
763
1010
|
className: "flex items-center justify-between mb-6"
|
|
764
1011
|
}, /*#__PURE__*/_react["default"].createElement("h2", {
|
|
765
1012
|
className: "text-xl font-bold text-gray-800"
|
|
766
|
-
}, selectedForm.formTitle), /*#__PURE__*/_react["default"].createElement("
|
|
1013
|
+
}, selectedForm.formTitle), /*#__PURE__*/_react["default"].createElement("div", {
|
|
1014
|
+
className: "flex items-center gap-2"
|
|
1015
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
1016
|
+
type: "button",
|
|
1017
|
+
onClick: function onClick() {
|
|
1018
|
+
return openEditModal(selectedForm);
|
|
1019
|
+
},
|
|
1020
|
+
className: "text-sm bg-blue-600 hover:bg-blue-700 text-white px-3 py-1.5 rounded-md"
|
|
1021
|
+
}, "Edit Form"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
767
1022
|
onClick: function onClick() {
|
|
768
1023
|
return setShowDetailModal(false);
|
|
769
1024
|
},
|
|
@@ -778,7 +1033,7 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
778
1033
|
strokeLinejoin: "round",
|
|
779
1034
|
strokeWidth: 2,
|
|
780
1035
|
d: "M6 18L18 6M6 6l12 12"
|
|
781
|
-
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
1036
|
+
}))))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
782
1037
|
className: "mb-4 rounded-lg border border-blue-100 bg-blue-50 px-4 py-3"
|
|
783
1038
|
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
784
1039
|
className: "text-sm font-medium text-blue-900 mb-1"
|
|
@@ -810,7 +1065,19 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
810
1065
|
className: "font-medium text-gray-700"
|
|
811
1066
|
}, "Form Name:"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
812
1067
|
className: "text-gray-900"
|
|
813
|
-
}, selectedForm.formName))
|
|
1068
|
+
}, selectedForm.formName)), selectedForm.description && /*#__PURE__*/_react["default"].createElement("div", {
|
|
1069
|
+
className: "md:col-span-2"
|
|
1070
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
1071
|
+
className: "font-medium text-gray-700"
|
|
1072
|
+
}, "Description:"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
1073
|
+
className: "text-gray-900 whitespace-pre-wrap"
|
|
1074
|
+
}, selectedForm.description)), selectedForm.imageUrl && /*#__PURE__*/_react["default"].createElement("div", {
|
|
1075
|
+
className: "md:col-span-2"
|
|
1076
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
1077
|
+
className: "font-medium text-gray-700"
|
|
1078
|
+
}, "Banner / share image:"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
1079
|
+
className: "text-gray-900 break-all"
|
|
1080
|
+
}, selectedForm.imageUrl))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", {
|
|
814
1081
|
className: "font-medium text-gray-700 mb-2"
|
|
815
1082
|
}, "Form Fields:"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
816
1083
|
className: "bg-gray-50 p-4 rounded-lg"
|
|
@@ -893,6 +1160,115 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
893
1160
|
}, "View Raw Data"), /*#__PURE__*/_react["default"].createElement("pre", {
|
|
894
1161
|
className: "mt-2 text-xs bg-gray-50 p-3 rounded overflow-x-auto"
|
|
895
1162
|
}, JSON.stringify(response, null, 2)))));
|
|
896
|
-
})))))
|
|
1163
|
+
}))))), showEditModal && /*#__PURE__*/_react["default"].createElement("div", {
|
|
1164
|
+
className: "fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-[60] p-4"
|
|
1165
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
1166
|
+
className: "bg-white rounded-2xl shadow-xl p-8 w-full max-w-3xl max-h-[90vh] overflow-y-auto"
|
|
1167
|
+
}, /*#__PURE__*/_react["default"].createElement("h2", {
|
|
1168
|
+
className: "text-xl font-bold text-gray-800 mb-6"
|
|
1169
|
+
}, "Edit Form"), editFeedback && /*#__PURE__*/_react["default"].createElement("div", {
|
|
1170
|
+
className: "mb-4 rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700"
|
|
1171
|
+
}, editFeedback), /*#__PURE__*/_react["default"].createElement("div", {
|
|
1172
|
+
className: "space-y-6"
|
|
1173
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
1174
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-4"
|
|
1175
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
1176
|
+
htmlFor: "editFormTitle",
|
|
1177
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
1178
|
+
}, "Form Title *"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
1179
|
+
id: "editFormTitle",
|
|
1180
|
+
type: "text",
|
|
1181
|
+
value: editDraft.formTitle,
|
|
1182
|
+
onChange: function onChange(e) {
|
|
1183
|
+
return setEditDraft(function (prev) {
|
|
1184
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
1185
|
+
formTitle: e.target.value
|
|
1186
|
+
});
|
|
1187
|
+
});
|
|
1188
|
+
},
|
|
1189
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
1190
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
1191
|
+
htmlFor: "editFormId",
|
|
1192
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
1193
|
+
}, "Form ID *"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
1194
|
+
id: "editFormId",
|
|
1195
|
+
type: "text",
|
|
1196
|
+
value: editDraft.formId,
|
|
1197
|
+
onChange: function onChange(e) {
|
|
1198
|
+
return setEditDraft(function (prev) {
|
|
1199
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
1200
|
+
formId: e.target.value.toUpperCase()
|
|
1201
|
+
});
|
|
1202
|
+
});
|
|
1203
|
+
},
|
|
1204
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
1205
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
1206
|
+
className: "md:col-span-2"
|
|
1207
|
+
}, /*#__PURE__*/_react["default"].createElement("label", {
|
|
1208
|
+
htmlFor: "editFormName",
|
|
1209
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
1210
|
+
}, "Form Name (URL slug)"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
1211
|
+
id: "editFormName",
|
|
1212
|
+
type: "text",
|
|
1213
|
+
value: editDraft.formName,
|
|
1214
|
+
disabled: true,
|
|
1215
|
+
className: "w-full px-3 py-2 border border-gray-200 rounded-md bg-gray-50 text-gray-500"
|
|
1216
|
+
}), /*#__PURE__*/_react["default"].createElement("p", {
|
|
1217
|
+
className: "text-xs text-gray-500 mt-1"
|
|
1218
|
+
}, "Form name cannot be changed after creation"))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
1219
|
+
htmlFor: "editFormDescription",
|
|
1220
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
1221
|
+
}, "Description (optional)"), /*#__PURE__*/_react["default"].createElement("textarea", {
|
|
1222
|
+
id: "editFormDescription",
|
|
1223
|
+
value: editDraft.description,
|
|
1224
|
+
onChange: function onChange(e) {
|
|
1225
|
+
return setEditDraft(function (prev) {
|
|
1226
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
1227
|
+
description: e.target.value
|
|
1228
|
+
});
|
|
1229
|
+
});
|
|
1230
|
+
},
|
|
1231
|
+
placeholder: "Instructions or context shown at the top of the public form",
|
|
1232
|
+
rows: 3,
|
|
1233
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
1234
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
1235
|
+
htmlFor: "editFormImageUrl",
|
|
1236
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
1237
|
+
}, "Banner / share image URL (optional)"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
1238
|
+
id: "editFormImageUrl",
|
|
1239
|
+
type: "url",
|
|
1240
|
+
value: editDraft.imageUrl,
|
|
1241
|
+
onChange: function onChange(e) {
|
|
1242
|
+
return setEditDraft(function (prev) {
|
|
1243
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
1244
|
+
imageUrl: e.target.value
|
|
1245
|
+
});
|
|
1246
|
+
});
|
|
1247
|
+
},
|
|
1248
|
+
placeholder: "https://www.excelrs.dev/bannar1.jpg",
|
|
1249
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
1250
|
+
}), /*#__PURE__*/_react["default"].createElement("p", {
|
|
1251
|
+
className: "text-xs text-gray-500 mt-1"
|
|
1252
|
+
}, "Used for the form banner and link previews (Open Graph / Twitter).")), renderFieldBuilder(editDraft, {
|
|
1253
|
+
addFieldFn: addEditField,
|
|
1254
|
+
updateFieldFn: updateEditField,
|
|
1255
|
+
removeFieldFn: removeEditField
|
|
1256
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
1257
|
+
className: "flex justify-end gap-4 mt-6"
|
|
1258
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
1259
|
+
type: "button",
|
|
1260
|
+
onClick: function onClick() {
|
|
1261
|
+
setShowEditModal(false);
|
|
1262
|
+
setEditFeedback('');
|
|
1263
|
+
},
|
|
1264
|
+
className: "bg-gray-300 text-gray-700 hover:bg-gray-400 px-4 py-2 rounded-md"
|
|
1265
|
+
}, "Cancel"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
1266
|
+
type: "button",
|
|
1267
|
+
onClick: updateForm,
|
|
1268
|
+
disabled: isUpdating,
|
|
1269
|
+
className: "bg-blue-600 text-white hover:bg-blue-700 px-4 py-2 rounded-md disabled:opacity-50"
|
|
1270
|
+
}, isUpdating ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
1271
|
+
className: "animate-spin h-5 w-5 mx-auto border-2 border-white border-t-transparent rounded-full"
|
|
1272
|
+
}) : 'Save Changes')))));
|
|
897
1273
|
};
|
|
898
1274
|
var _default = exports["default"] = PowrFormsAdmin;
|
package/dist/forms/index.js
CHANGED
|
@@ -176,6 +176,7 @@ var PowrForm = function PowrForm(_ref) {
|
|
|
176
176
|
label: field.label,
|
|
177
177
|
required: field.required,
|
|
178
178
|
error: errors[field.name],
|
|
179
|
+
description: field.description,
|
|
179
180
|
theme: theme
|
|
180
181
|
}, /*#__PURE__*/_react["default"].createElement("input", _extends({
|
|
181
182
|
type: "email"
|
|
@@ -194,6 +195,7 @@ var PowrForm = function PowrForm(_ref) {
|
|
|
194
195
|
label: field.label,
|
|
195
196
|
required: field.required,
|
|
196
197
|
error: errors[field.name],
|
|
198
|
+
description: field.description,
|
|
197
199
|
theme: theme
|
|
198
200
|
}, /*#__PURE__*/_react["default"].createElement("input", _extends({
|
|
199
201
|
type: "text"
|
|
@@ -208,6 +210,7 @@ var PowrForm = function PowrForm(_ref) {
|
|
|
208
210
|
label: field.label,
|
|
209
211
|
required: field.required,
|
|
210
212
|
error: errors[field.name],
|
|
213
|
+
description: field.description,
|
|
211
214
|
theme: theme
|
|
212
215
|
}, /*#__PURE__*/_react["default"].createElement("input", _extends({
|
|
213
216
|
type: "tel",
|
|
@@ -226,7 +229,8 @@ var PowrForm = function PowrForm(_ref) {
|
|
|
226
229
|
return /*#__PURE__*/_react["default"].createElement(InputField, {
|
|
227
230
|
key: field.name,
|
|
228
231
|
label: field.label,
|
|
229
|
-
required: field.required
|
|
232
|
+
required: field.required,
|
|
233
|
+
description: field.description
|
|
230
234
|
}, /*#__PURE__*/_react["default"].createElement("textarea", _extends({}, register(field.name, {
|
|
231
235
|
required: field.required
|
|
232
236
|
}), {
|
|
@@ -240,6 +244,7 @@ var PowrForm = function PowrForm(_ref) {
|
|
|
240
244
|
options: field.options || [],
|
|
241
245
|
register: register,
|
|
242
246
|
error: errors[field.name],
|
|
247
|
+
description: field.description,
|
|
243
248
|
theme: theme
|
|
244
249
|
});
|
|
245
250
|
case "custom":
|
|
@@ -267,7 +272,9 @@ var PowrForm = function PowrForm(_ref) {
|
|
|
267
272
|
className: "block text-base font-medium mb-1"
|
|
268
273
|
}, field.label, " ", field.required && /*#__PURE__*/_react["default"].createElement("span", {
|
|
269
274
|
className: "text-red-600"
|
|
270
|
-
}, "*")), /*#__PURE__*/_react["default"].createElement("
|
|
275
|
+
}, "*")), field.description && /*#__PURE__*/_react["default"].createElement("p", {
|
|
276
|
+
className: "text-sm text-gray-500 mb-2"
|
|
277
|
+
}, field.description), /*#__PURE__*/_react["default"].createElement("input", {
|
|
271
278
|
type: "file",
|
|
272
279
|
accept: "image/*,application/pdf",
|
|
273
280
|
onChange: function onChange(e) {
|
|
@@ -317,7 +324,9 @@ var PowrForm = function PowrForm(_ref) {
|
|
|
317
324
|
className: "border-b-4 ".concat(borderColor, " pb-6 mb-8")
|
|
318
325
|
}, /*#__PURE__*/_react["default"].createElement("h1", {
|
|
319
326
|
className: "text-3xl font-bold text-gray-800"
|
|
320
|
-
}, formSchema.formTitle)
|
|
327
|
+
}, formSchema.formTitle), formSchema.description && /*#__PURE__*/_react["default"].createElement("p", {
|
|
328
|
+
className: "text-gray-600 mt-3 text-base leading-relaxed"
|
|
329
|
+
}, formSchema.description)), successMessage && /*#__PURE__*/_react["default"].createElement("div", {
|
|
321
330
|
className: "mb-8 flex flex-col items-center justify-center p-6 bg-green-50 border border-green-300 rounded-lg shadow animate-fade-in"
|
|
322
331
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
323
332
|
className: "mb-2"
|
|
@@ -368,13 +377,16 @@ var InputField = function InputField(_ref4) {
|
|
|
368
377
|
required = _ref4.required,
|
|
369
378
|
error = _ref4.error,
|
|
370
379
|
children = _ref4.children,
|
|
380
|
+
description = _ref4.description,
|
|
371
381
|
_ref4$theme = _ref4.theme,
|
|
372
382
|
theme = _ref4$theme === void 0 ? "purple" : _ref4$theme;
|
|
373
383
|
return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
374
384
|
className: "block text-base font-medium mb-1"
|
|
375
385
|
}, label, " ", required && /*#__PURE__*/_react["default"].createElement("span", {
|
|
376
386
|
className: "text-red-600"
|
|
377
|
-
}, "*")),
|
|
387
|
+
}, "*")), description && /*#__PURE__*/_react["default"].createElement("p", {
|
|
388
|
+
className: "text-sm text-gray-500 mb-2"
|
|
389
|
+
}, description), children, error && /*#__PURE__*/_react["default"].createElement("p", {
|
|
378
390
|
className: "text-red-600 text-sm mt-1"
|
|
379
391
|
}, error.message));
|
|
380
392
|
};
|
|
@@ -386,13 +398,16 @@ var RadioGroup = function RadioGroup(_ref5) {
|
|
|
386
398
|
options = _ref5.options,
|
|
387
399
|
register = _ref5.register,
|
|
388
400
|
error = _ref5.error,
|
|
401
|
+
description = _ref5.description,
|
|
389
402
|
_ref5$theme = _ref5.theme,
|
|
390
403
|
theme = _ref5$theme === void 0 ? "purple" : _ref5$theme;
|
|
391
404
|
return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
392
405
|
className: "block text-base font-medium mb-2"
|
|
393
406
|
}, label, " ", /*#__PURE__*/_react["default"].createElement("span", {
|
|
394
407
|
className: "text-red-600"
|
|
395
|
-
}, "*")), /*#__PURE__*/_react["default"].createElement("
|
|
408
|
+
}, "*")), description && /*#__PURE__*/_react["default"].createElement("p", {
|
|
409
|
+
className: "text-sm text-gray-500 mb-2"
|
|
410
|
+
}, description), /*#__PURE__*/_react["default"].createElement("div", {
|
|
396
411
|
className: "flex flex-col gap-3"
|
|
397
412
|
}, options.map(function (option) {
|
|
398
413
|
return /*#__PURE__*/_react["default"].createElement("label", {
|