powr-sdk-web 5.6.7 → 5.6.8
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 +275 -61
- package/package.json +1 -1
package/dist/forms/admin.js
CHANGED
|
@@ -8,6 +8,15 @@ exports["default"] = void 0;
|
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _auth = require("../utils/auth");
|
|
10
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 _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); }
|
|
11
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
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
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
14
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
15
|
+
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; }
|
|
16
|
+
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; }
|
|
17
|
+
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; }
|
|
18
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
19
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
11
20
|
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
12
21
|
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
13
22
|
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); }
|
|
@@ -39,14 +48,19 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
39
48
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
40
49
|
showCreateModal = _useState8[0],
|
|
41
50
|
setShowCreateModal = _useState8[1];
|
|
42
|
-
var _useState9 = (0, _react.useState)(
|
|
51
|
+
var _useState9 = (0, _react.useState)(false),
|
|
43
52
|
_useState0 = _slicedToArray(_useState9, 2),
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var _useState1 = (0, _react.useState)(
|
|
53
|
+
isSaving = _useState0[0],
|
|
54
|
+
setIsSaving = _useState0[1];
|
|
55
|
+
var _useState1 = (0, _react.useState)({
|
|
56
|
+
formTitle: '',
|
|
57
|
+
formName: '',
|
|
58
|
+
formId: '',
|
|
59
|
+
fields: []
|
|
60
|
+
}),
|
|
47
61
|
_useState10 = _slicedToArray(_useState1, 2),
|
|
48
|
-
|
|
49
|
-
|
|
62
|
+
formDraft = _useState10[0],
|
|
63
|
+
setFormDraft = _useState10[1];
|
|
50
64
|
var _useState11 = (0, _react.useState)(null),
|
|
51
65
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
52
66
|
selectedForm = _useState12[0],
|
|
@@ -176,86 +190,163 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
176
190
|
return _ref3.apply(this, arguments);
|
|
177
191
|
};
|
|
178
192
|
}();
|
|
193
|
+
var resetFormDraft = function resetFormDraft() {
|
|
194
|
+
setFormDraft({
|
|
195
|
+
formTitle: '',
|
|
196
|
+
formName: '',
|
|
197
|
+
formId: '',
|
|
198
|
+
fields: []
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
var slugify = function slugify(value) {
|
|
202
|
+
return value.toLowerCase().trim().replace(/[^a-z0-9]+/g, '').slice(0, 32);
|
|
203
|
+
};
|
|
204
|
+
var addField = function addField(type) {
|
|
205
|
+
var index = formDraft.fields.length + 1;
|
|
206
|
+
setFormDraft(function (prev) {
|
|
207
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
208
|
+
fields: [].concat(_toConsumableArray(prev.fields), [_objectSpread({
|
|
209
|
+
name: "field".concat(index),
|
|
210
|
+
label: "Field ".concat(index),
|
|
211
|
+
type: type,
|
|
212
|
+
required: false
|
|
213
|
+
}, type === 'radio' ? {
|
|
214
|
+
options: ['Option 1', 'Option 2']
|
|
215
|
+
} : {})])
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
};
|
|
219
|
+
var updateField = function updateField(index, updates) {
|
|
220
|
+
setFormDraft(function (prev) {
|
|
221
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
222
|
+
fields: prev.fields.map(function (field, i) {
|
|
223
|
+
return i === index ? _objectSpread(_objectSpread({}, field), updates) : field;
|
|
224
|
+
})
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
};
|
|
228
|
+
var removeField = function removeField(index) {
|
|
229
|
+
setFormDraft(function (prev) {
|
|
230
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
231
|
+
fields: prev.fields.filter(function (_, i) {
|
|
232
|
+
return i !== index;
|
|
233
|
+
})
|
|
234
|
+
});
|
|
235
|
+
});
|
|
236
|
+
};
|
|
179
237
|
var createForm = /*#__PURE__*/function () {
|
|
180
238
|
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
181
|
-
var
|
|
239
|
+
var trimmedTitle, trimmedName, trimmedId, hasInvalidField, payload, _yield$apiCall3, result, ok, errorMessage, _t3;
|
|
182
240
|
return _regenerator().w(function (_context3) {
|
|
183
241
|
while (1) switch (_context3.p = _context3.n) {
|
|
184
242
|
case 0:
|
|
185
|
-
if (
|
|
243
|
+
if (projectId) {
|
|
186
244
|
_context3.n = 1;
|
|
187
245
|
break;
|
|
188
246
|
}
|
|
189
247
|
if (onFormAction) {
|
|
190
|
-
onFormAction('error', '
|
|
248
|
+
onFormAction('error', 'Project ID is required');
|
|
191
249
|
}
|
|
192
250
|
return _context3.a(2);
|
|
193
251
|
case 1:
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
252
|
+
trimmedTitle = formDraft.formTitle.trim();
|
|
253
|
+
trimmedName = formDraft.formName.trim();
|
|
254
|
+
trimmedId = formDraft.formId.trim();
|
|
255
|
+
if (!(!trimmedTitle || !trimmedName || !trimmedId)) {
|
|
256
|
+
_context3.n = 2;
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
if (onFormAction) {
|
|
260
|
+
onFormAction('error', 'Form title, name, and ID are required');
|
|
261
|
+
}
|
|
262
|
+
return _context3.a(2);
|
|
263
|
+
case 2:
|
|
264
|
+
if (!(formDraft.fields.length === 0)) {
|
|
265
|
+
_context3.n = 3;
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
if (onFormAction) {
|
|
269
|
+
onFormAction('error', 'Add at least one field');
|
|
270
|
+
}
|
|
271
|
+
return _context3.a(2);
|
|
272
|
+
case 3:
|
|
273
|
+
hasInvalidField = formDraft.fields.some(function (field) {
|
|
274
|
+
var _field$name, _field$label;
|
|
275
|
+
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());
|
|
276
|
+
});
|
|
277
|
+
if (!hasInvalidField) {
|
|
278
|
+
_context3.n = 4;
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
if (onFormAction) {
|
|
282
|
+
onFormAction('error', 'Each field needs a name and label');
|
|
283
|
+
}
|
|
284
|
+
return _context3.a(2);
|
|
285
|
+
case 4:
|
|
286
|
+
setIsSaving(true);
|
|
287
|
+
_context3.p = 5;
|
|
288
|
+
payload = {
|
|
289
|
+
formTitle: trimmedTitle,
|
|
290
|
+
formName: trimmedName,
|
|
291
|
+
formId: trimmedId,
|
|
292
|
+
fields: formDraft.fields.map(function (field) {
|
|
293
|
+
return _objectSpread({
|
|
294
|
+
name: field.name.trim(),
|
|
295
|
+
label: field.label.trim(),
|
|
296
|
+
type: field.type,
|
|
297
|
+
required: !!field.required
|
|
298
|
+
}, field.type === 'radio' ? {
|
|
299
|
+
options: field.options || []
|
|
300
|
+
} : {});
|
|
301
|
+
})
|
|
302
|
+
};
|
|
303
|
+
_context3.n = 6;
|
|
199
304
|
return (0, _auth.apiCall)(apiUrl, "/forms/create-form", projectId, {
|
|
200
305
|
method: 'POST',
|
|
201
|
-
body:
|
|
306
|
+
body: payload
|
|
202
307
|
});
|
|
203
|
-
case
|
|
308
|
+
case 6:
|
|
204
309
|
_yield$apiCall3 = _context3.v;
|
|
205
310
|
result = _yield$apiCall3.data;
|
|
206
311
|
ok = _yield$apiCall3.ok;
|
|
207
312
|
if (ok) {
|
|
208
|
-
_context3.n =
|
|
313
|
+
_context3.n = 7;
|
|
209
314
|
break;
|
|
210
315
|
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
case 4:
|
|
316
|
+
throw new Error(result.message || 'Failed to create form');
|
|
317
|
+
case 7:
|
|
214
318
|
if (onFormAction) {
|
|
215
319
|
onFormAction('success', result.message || 'Form created successfully!');
|
|
216
320
|
}
|
|
217
|
-
|
|
321
|
+
resetFormDraft();
|
|
218
322
|
setShowCreateModal(false);
|
|
219
323
|
fetchForms();
|
|
220
324
|
if (onRefresh) {
|
|
221
325
|
onRefresh();
|
|
222
326
|
}
|
|
223
|
-
_context3.n =
|
|
327
|
+
_context3.n = 9;
|
|
224
328
|
break;
|
|
225
|
-
case
|
|
226
|
-
_context3.p =
|
|
329
|
+
case 8:
|
|
330
|
+
_context3.p = 8;
|
|
227
331
|
_t3 = _context3.v;
|
|
228
332
|
console.error('Error creating form:', _t3);
|
|
229
|
-
|
|
333
|
+
errorMessage = _t3 instanceof Error ? _t3.message : 'Failed to create form';
|
|
230
334
|
if (onFormAction) {
|
|
231
|
-
onFormAction('error',
|
|
335
|
+
onFormAction('error', errorMessage);
|
|
232
336
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
_context3.
|
|
237
|
-
|
|
238
|
-
return _context3.f(6);
|
|
239
|
-
case 7:
|
|
337
|
+
case 9:
|
|
338
|
+
_context3.p = 9;
|
|
339
|
+
setIsSaving(false);
|
|
340
|
+
return _context3.f(9);
|
|
341
|
+
case 10:
|
|
240
342
|
return _context3.a(2);
|
|
241
343
|
}
|
|
242
|
-
}, _callee3, null, [[
|
|
344
|
+
}, _callee3, null, [[5, 8, 9, 10]]);
|
|
243
345
|
}));
|
|
244
346
|
return function createForm() {
|
|
245
347
|
return _ref4.apply(this, arguments);
|
|
246
348
|
};
|
|
247
349
|
}();
|
|
248
|
-
var handleFileChange = function handleFileChange(e) {
|
|
249
|
-
var _e$target$files;
|
|
250
|
-
var file = (_e$target$files = e.target.files) === null || _e$target$files === void 0 ? void 0 : _e$target$files[0];
|
|
251
|
-
if (file && file.type === 'application/json') {
|
|
252
|
-
setSelectedFile(file);
|
|
253
|
-
} else {
|
|
254
|
-
if (onFormAction) {
|
|
255
|
-
onFormAction('error', 'Please select a valid JSON file');
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
};
|
|
259
350
|
var handleViewForm = function handleViewForm(form) {
|
|
260
351
|
setSelectedForm(form);
|
|
261
352
|
setActiveTab('responses');
|
|
@@ -287,7 +378,8 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
287
378
|
className: "text-gray-600 mt-1"
|
|
288
379
|
}, "Create and manage your dynamic forms")), /*#__PURE__*/_react["default"].createElement("button", {
|
|
289
380
|
onClick: function onClick() {
|
|
290
|
-
|
|
381
|
+
resetFormDraft();
|
|
382
|
+
setShowCreateModal(true);
|
|
291
383
|
},
|
|
292
384
|
className: "bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg flex items-center gap-2"
|
|
293
385
|
}, /*#__PURE__*/_react["default"].createElement("svg", {
|
|
@@ -345,38 +437,160 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
|
|
|
345
437
|
className: "text-sm text-gray-500"
|
|
346
438
|
}, ((_form$fields = form.fields) === null || _form$fields === void 0 ? void 0 : _form$fields.length) || 0, " fields"));
|
|
347
439
|
})))), showCreateModal && /*#__PURE__*/_react["default"].createElement("div", {
|
|
348
|
-
className: "fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50"
|
|
440
|
+
className: "fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50 p-4"
|
|
349
441
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
350
|
-
className: "bg-white rounded-2xl shadow-xl p-8 w-full max-w-
|
|
442
|
+
className: "bg-white rounded-2xl shadow-xl p-8 w-full max-w-3xl max-h-[90vh] overflow-y-auto"
|
|
351
443
|
}, /*#__PURE__*/_react["default"].createElement("h2", {
|
|
352
444
|
className: "text-xl font-bold text-gray-800 mb-6"
|
|
353
445
|
}, "Create New Form"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
354
|
-
className: "space-y-
|
|
446
|
+
className: "space-y-6"
|
|
447
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
448
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-4"
|
|
355
449
|
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
356
|
-
htmlFor: "
|
|
450
|
+
htmlFor: "formTitle",
|
|
451
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
452
|
+
}, "Form Title *"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
453
|
+
id: "formTitle",
|
|
454
|
+
type: "text",
|
|
455
|
+
value: formDraft.formTitle,
|
|
456
|
+
onChange: function onChange(e) {
|
|
457
|
+
var formTitle = e.target.value;
|
|
458
|
+
setFormDraft(function (prev) {
|
|
459
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
460
|
+
formTitle: formTitle,
|
|
461
|
+
formName: prev.formName || slugify(formTitle)
|
|
462
|
+
});
|
|
463
|
+
});
|
|
464
|
+
},
|
|
465
|
+
placeholder: "Genkit Workshop Registration",
|
|
466
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
467
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
468
|
+
htmlFor: "formId",
|
|
469
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
470
|
+
}, "Form ID *"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
471
|
+
id: "formId",
|
|
472
|
+
type: "text",
|
|
473
|
+
value: formDraft.formId,
|
|
474
|
+
onChange: function onChange(e) {
|
|
475
|
+
return setFormDraft(function (prev) {
|
|
476
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
477
|
+
formId: e.target.value.toUpperCase()
|
|
478
|
+
});
|
|
479
|
+
});
|
|
480
|
+
},
|
|
481
|
+
placeholder: "KHA2025A2",
|
|
482
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
483
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
484
|
+
className: "md:col-span-2"
|
|
485
|
+
}, /*#__PURE__*/_react["default"].createElement("label", {
|
|
486
|
+
htmlFor: "formName",
|
|
357
487
|
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
358
|
-
}, "
|
|
359
|
-
id: "
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
488
|
+
}, "Form Name (URL slug) *"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
489
|
+
id: "formName",
|
|
490
|
+
type: "text",
|
|
491
|
+
value: formDraft.formName,
|
|
492
|
+
onChange: function onChange(e) {
|
|
493
|
+
return setFormDraft(function (prev) {
|
|
494
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
495
|
+
formName: slugify(e.target.value)
|
|
496
|
+
});
|
|
497
|
+
});
|
|
498
|
+
},
|
|
499
|
+
placeholder: "workshopform",
|
|
365
500
|
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
|
|
366
501
|
}), /*#__PURE__*/_react["default"].createElement("p", {
|
|
367
502
|
className: "text-xs text-gray-500 mt-1"
|
|
368
|
-
}, "
|
|
503
|
+
}, "Used in URLs like `/forms?id=workshopform`"))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
504
|
+
className: "flex items-center justify-between mb-3"
|
|
505
|
+
}, /*#__PURE__*/_react["default"].createElement("h3", {
|
|
506
|
+
className: "text-sm font-semibold text-gray-900"
|
|
507
|
+
}, "Fields"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
508
|
+
className: "flex flex-wrap gap-2"
|
|
509
|
+
}, ['text', 'email', 'textarea', 'radio', 'fileUploader'].map(function (type) {
|
|
510
|
+
return /*#__PURE__*/_react["default"].createElement("button", {
|
|
511
|
+
key: type,
|
|
512
|
+
type: "button",
|
|
513
|
+
onClick: function onClick() {
|
|
514
|
+
return addField(type);
|
|
515
|
+
},
|
|
516
|
+
className: "px-3 py-1 text-xs rounded-full border border-gray-300 hover:bg-gray-50"
|
|
517
|
+
}, "+ ", type);
|
|
518
|
+
}))), formDraft.fields.length === 0 ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
519
|
+
className: "rounded-lg border border-dashed border-gray-300 p-6 text-center text-sm text-gray-500"
|
|
520
|
+
}, "Add fields using the buttons above") : /*#__PURE__*/_react["default"].createElement("div", {
|
|
521
|
+
className: "space-y-4"
|
|
522
|
+
}, formDraft.fields.map(function (field, index) {
|
|
523
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
524
|
+
key: "".concat(field.name, "-").concat(index),
|
|
525
|
+
className: "rounded-lg border border-gray-200 p-4 space-y-3"
|
|
526
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
527
|
+
className: "flex items-center justify-between"
|
|
528
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
529
|
+
className: "text-sm font-medium text-gray-700 capitalize"
|
|
530
|
+
}, field.type, " field"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
531
|
+
type: "button",
|
|
532
|
+
onClick: function onClick() {
|
|
533
|
+
return removeField(index);
|
|
534
|
+
},
|
|
535
|
+
className: "text-sm text-red-600 hover:text-red-700"
|
|
536
|
+
}, "Remove")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
537
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-3"
|
|
538
|
+
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
539
|
+
type: "text",
|
|
540
|
+
value: field.label,
|
|
541
|
+
onChange: function onChange(e) {
|
|
542
|
+
return updateField(index, {
|
|
543
|
+
label: e.target.value
|
|
544
|
+
});
|
|
545
|
+
},
|
|
546
|
+
placeholder: "Label",
|
|
547
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md"
|
|
548
|
+
}), /*#__PURE__*/_react["default"].createElement("input", {
|
|
549
|
+
type: "text",
|
|
550
|
+
value: field.name,
|
|
551
|
+
onChange: function onChange(e) {
|
|
552
|
+
return updateField(index, {
|
|
553
|
+
name: slugify(e.target.value)
|
|
554
|
+
});
|
|
555
|
+
},
|
|
556
|
+
placeholder: "name",
|
|
557
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md"
|
|
558
|
+
})), /*#__PURE__*/_react["default"].createElement("label", {
|
|
559
|
+
className: "flex items-center gap-2 text-sm text-gray-700"
|
|
560
|
+
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
561
|
+
type: "checkbox",
|
|
562
|
+
checked: !!field.required,
|
|
563
|
+
onChange: function onChange(e) {
|
|
564
|
+
return updateField(index, {
|
|
565
|
+
required: e.target.checked
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
}), "Required"), field.type === 'radio' && /*#__PURE__*/_react["default"].createElement("textarea", {
|
|
569
|
+
value: (field.options || []).join('\n'),
|
|
570
|
+
onChange: function onChange(e) {
|
|
571
|
+
return updateField(index, {
|
|
572
|
+
options: e.target.value.split('\n').map(function (option) {
|
|
573
|
+
return option.trim();
|
|
574
|
+
}).filter(Boolean)
|
|
575
|
+
});
|
|
576
|
+
},
|
|
577
|
+
placeholder: "One option per line",
|
|
578
|
+
rows: 3,
|
|
579
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md"
|
|
580
|
+
}));
|
|
581
|
+
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
369
582
|
className: "flex justify-end gap-4 mt-6"
|
|
370
583
|
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
371
584
|
onClick: function onClick() {
|
|
372
|
-
|
|
585
|
+
resetFormDraft();
|
|
586
|
+
setShowCreateModal(false);
|
|
373
587
|
},
|
|
374
588
|
className: "bg-gray-300 text-gray-700 hover:bg-gray-400 px-4 py-2 rounded-md"
|
|
375
589
|
}, "Cancel"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
376
590
|
onClick: createForm,
|
|
377
|
-
disabled:
|
|
591
|
+
disabled: isSaving,
|
|
378
592
|
className: "bg-blue-600 text-white hover:bg-blue-700 px-4 py-2 rounded-md disabled:opacity-50"
|
|
379
|
-
},
|
|
593
|
+
}, isSaving ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
380
594
|
className: "animate-spin h-5 w-5 mx-auto border-2 border-white border-t-transparent rounded-full"
|
|
381
595
|
}) : 'Create Form')))), showDetailModal && selectedForm && /*#__PURE__*/_react["default"].createElement("div", {
|
|
382
596
|
className: "fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50"
|