powr-sdk-web 5.6.8 → 5.6.9

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.
Files changed (2) hide show
  1. package/dist/forms/admin.js +93 -57
  2. package/package.json +1 -1
@@ -52,39 +52,43 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
52
52
  _useState0 = _slicedToArray(_useState9, 2),
53
53
  isSaving = _useState0[0],
54
54
  setIsSaving = _useState0[1];
55
- var _useState1 = (0, _react.useState)({
55
+ var _useState1 = (0, _react.useState)(''),
56
+ _useState10 = _slicedToArray(_useState1, 2),
57
+ createFeedback = _useState10[0],
58
+ setCreateFeedback = _useState10[1];
59
+ var _useState11 = (0, _react.useState)({
56
60
  formTitle: '',
57
61
  formName: '',
58
62
  formId: '',
59
63
  fields: []
60
64
  }),
61
- _useState10 = _slicedToArray(_useState1, 2),
62
- formDraft = _useState10[0],
63
- setFormDraft = _useState10[1];
64
- var _useState11 = (0, _react.useState)(null),
65
65
  _useState12 = _slicedToArray(_useState11, 2),
66
- selectedForm = _useState12[0],
67
- setSelectedForm = _useState12[1];
68
- var _useState13 = (0, _react.useState)(false),
66
+ formDraft = _useState12[0],
67
+ setFormDraft = _useState12[1];
68
+ var _useState13 = (0, _react.useState)(null),
69
69
  _useState14 = _slicedToArray(_useState13, 2),
70
- showDetailModal = _useState14[0],
71
- setShowDetailModal = _useState14[1];
72
- var _useState15 = (0, _react.useState)('responses'),
70
+ selectedForm = _useState14[0],
71
+ setSelectedForm = _useState14[1];
72
+ var _useState15 = (0, _react.useState)(false),
73
73
  _useState16 = _slicedToArray(_useState15, 2),
74
- activeTab = _useState16[0],
75
- setActiveTab = _useState16[1];
76
- var _useState17 = (0, _react.useState)([]),
74
+ showDetailModal = _useState16[0],
75
+ setShowDetailModal = _useState16[1];
76
+ var _useState17 = (0, _react.useState)('responses'),
77
77
  _useState18 = _slicedToArray(_useState17, 2),
78
- formResponses = _useState18[0],
79
- setFormResponses = _useState18[1];
80
- var _useState19 = (0, _react.useState)(0),
78
+ activeTab = _useState18[0],
79
+ setActiveTab = _useState18[1];
80
+ var _useState19 = (0, _react.useState)([]),
81
81
  _useState20 = _slicedToArray(_useState19, 2),
82
- responseCount = _useState20[0],
83
- setResponseCount = _useState20[1];
84
- var _useState21 = (0, _react.useState)(false),
82
+ formResponses = _useState20[0],
83
+ setFormResponses = _useState20[1];
84
+ var _useState21 = (0, _react.useState)(0),
85
85
  _useState22 = _slicedToArray(_useState21, 2),
86
- loadingResponses = _useState22[0],
87
- setLoadingResponses = _useState22[1];
86
+ responseCount = _useState22[0],
87
+ setResponseCount = _useState22[1];
88
+ var _useState23 = (0, _react.useState)(false),
89
+ _useState24 = _slicedToArray(_useState23, 2),
90
+ loadingResponses = _useState24[0],
91
+ setLoadingResponses = _useState24[1];
88
92
  var fetchForms = /*#__PURE__*/function () {
89
93
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
90
94
  var _yield$apiCall, data, ok, _t;
@@ -190,6 +194,12 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
190
194
  return _ref3.apply(this, arguments);
191
195
  };
192
196
  }();
197
+ var notify = function notify(type, message) {
198
+ setCreateFeedback(message);
199
+ if (onFormAction) {
200
+ onFormAction(type, message);
201
+ }
202
+ };
193
203
  var resetFormDraft = function resetFormDraft() {
194
204
  setFormDraft({
195
205
  formTitle: '',
@@ -201,6 +211,19 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
201
211
  var slugify = function slugify(value) {
202
212
  return value.toLowerCase().trim().replace(/[^a-z0-9]+/g, '').slice(0, 32);
203
213
  };
214
+ var uniqueFieldName = function uniqueFieldName(label, index, fields) {
215
+ var taken = fields.map(function (field) {
216
+ return field.name;
217
+ }).filter(Boolean);
218
+ var base = slugify(label) || "field".concat(index + 1);
219
+ var candidate = base;
220
+ var suffix = 2;
221
+ while (taken.includes(candidate)) {
222
+ candidate = "".concat(base).concat(suffix);
223
+ suffix += 1;
224
+ }
225
+ return candidate;
226
+ };
204
227
  var addField = function addField(type) {
205
228
  var index = formDraft.fields.length + 1;
206
229
  setFormDraft(function (prev) {
@@ -236,17 +259,16 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
236
259
  };
237
260
  var createForm = /*#__PURE__*/function () {
238
261
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
239
- var trimmedTitle, trimmedName, trimmedId, hasInvalidField, payload, _yield$apiCall3, result, ok, errorMessage, _t3;
262
+ var trimmedTitle, trimmedName, trimmedId, hasInvalidField, fieldNames, duplicateNames, payload, _yield$apiCall3, result, ok, errorMessage, _t3;
240
263
  return _regenerator().w(function (_context3) {
241
264
  while (1) switch (_context3.p = _context3.n) {
242
265
  case 0:
266
+ setCreateFeedback('');
243
267
  if (projectId) {
244
268
  _context3.n = 1;
245
269
  break;
246
270
  }
247
- if (onFormAction) {
248
- onFormAction('error', 'Project ID is required');
249
- }
271
+ notify('error', 'Project ID is required');
250
272
  return _context3.a(2);
251
273
  case 1:
252
274
  trimmedTitle = formDraft.formTitle.trim();
@@ -256,18 +278,14 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
256
278
  _context3.n = 2;
257
279
  break;
258
280
  }
259
- if (onFormAction) {
260
- onFormAction('error', 'Form title, name, and ID are required');
261
- }
281
+ notify('error', 'Form title, name, and ID are required');
262
282
  return _context3.a(2);
263
283
  case 2:
264
284
  if (!(formDraft.fields.length === 0)) {
265
285
  _context3.n = 3;
266
286
  break;
267
287
  }
268
- if (onFormAction) {
269
- onFormAction('error', 'Add at least one field');
270
- }
288
+ notify('error', 'Add at least one field');
271
289
  return _context3.a(2);
272
290
  case 3:
273
291
  hasInvalidField = formDraft.fields.some(function (field) {
@@ -278,13 +296,24 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
278
296
  _context3.n = 4;
279
297
  break;
280
298
  }
281
- if (onFormAction) {
282
- onFormAction('error', 'Each field needs a name and label');
283
- }
299
+ notify('error', 'Each field needs a name and label');
284
300
  return _context3.a(2);
285
301
  case 4:
302
+ fieldNames = formDraft.fields.map(function (field) {
303
+ return field.name.trim();
304
+ });
305
+ duplicateNames = fieldNames.filter(function (name, index) {
306
+ return fieldNames.indexOf(name) !== index;
307
+ });
308
+ if (!(duplicateNames.length > 0)) {
309
+ _context3.n = 5;
310
+ break;
311
+ }
312
+ notify('error', "Each field needs a unique name. Duplicate: ".concat(_toConsumableArray(new Set(duplicateNames)).join(', ')));
313
+ return _context3.a(2);
314
+ case 5:
286
315
  setIsSaving(true);
287
- _context3.p = 5;
316
+ _context3.p = 6;
288
317
  payload = {
289
318
  formTitle: trimmedTitle,
290
319
  formName: trimmedName,
@@ -300,48 +329,45 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
300
329
  } : {});
301
330
  })
302
331
  };
303
- _context3.n = 6;
332
+ _context3.n = 7;
304
333
  return (0, _auth.apiCall)(apiUrl, "/forms/create-form", projectId, {
305
334
  method: 'POST',
306
335
  body: payload
307
336
  });
308
- case 6:
337
+ case 7:
309
338
  _yield$apiCall3 = _context3.v;
310
339
  result = _yield$apiCall3.data;
311
340
  ok = _yield$apiCall3.ok;
312
341
  if (ok) {
313
- _context3.n = 7;
342
+ _context3.n = 8;
314
343
  break;
315
344
  }
316
345
  throw new Error(result.message || 'Failed to create form');
317
- case 7:
318
- if (onFormAction) {
319
- onFormAction('success', result.message || 'Form created successfully!');
320
- }
346
+ case 8:
347
+ notify('success', result.message || 'Form created successfully!');
321
348
  resetFormDraft();
349
+ setCreateFeedback('');
322
350
  setShowCreateModal(false);
323
351
  fetchForms();
324
352
  if (onRefresh) {
325
353
  onRefresh();
326
354
  }
327
- _context3.n = 9;
355
+ _context3.n = 10;
328
356
  break;
329
- case 8:
330
- _context3.p = 8;
357
+ case 9:
358
+ _context3.p = 9;
331
359
  _t3 = _context3.v;
332
360
  console.error('Error creating form:', _t3);
333
361
  errorMessage = _t3 instanceof Error ? _t3.message : 'Failed to create form';
334
- if (onFormAction) {
335
- onFormAction('error', errorMessage);
336
- }
337
- case 9:
338
- _context3.p = 9;
339
- setIsSaving(false);
340
- return _context3.f(9);
362
+ notify('error', errorMessage);
341
363
  case 10:
364
+ _context3.p = 10;
365
+ setIsSaving(false);
366
+ return _context3.f(10);
367
+ case 11:
342
368
  return _context3.a(2);
343
369
  }
344
- }, _callee3, null, [[5, 8, 9, 10]]);
370
+ }, _callee3, null, [[6, 9, 10, 11]]);
345
371
  }));
346
372
  return function createForm() {
347
373
  return _ref4.apply(this, arguments);
@@ -379,6 +405,7 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
379
405
  }, "Create and manage your dynamic forms")), /*#__PURE__*/_react["default"].createElement("button", {
380
406
  onClick: function onClick() {
381
407
  resetFormDraft();
408
+ setCreateFeedback('');
382
409
  setShowCreateModal(true);
383
410
  },
384
411
  className: "bg-blue-600 hover:bg-blue-700 text-white px-4 py-2 rounded-lg flex items-center gap-2"
@@ -442,7 +469,9 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
442
469
  className: "bg-white rounded-2xl shadow-xl p-8 w-full max-w-3xl max-h-[90vh] overflow-y-auto"
443
470
  }, /*#__PURE__*/_react["default"].createElement("h2", {
444
471
  className: "text-xl font-bold text-gray-800 mb-6"
445
- }, "Create New Form"), /*#__PURE__*/_react["default"].createElement("div", {
472
+ }, "Create New Form"), createFeedback && /*#__PURE__*/_react["default"].createElement("div", {
473
+ 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", {
446
475
  className: "space-y-6"
447
476
  }, /*#__PURE__*/_react["default"].createElement("div", {
448
477
  className: "grid grid-cols-1 md:grid-cols-2 gap-4"
@@ -539,8 +568,12 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
539
568
  type: "text",
540
569
  value: field.label,
541
570
  onChange: function onChange(e) {
542
- return updateField(index, {
543
- label: e.target.value
571
+ var label = e.target.value;
572
+ updateField(index, {
573
+ label: label,
574
+ name: uniqueFieldName(label, index, formDraft.fields.filter(function (_, i) {
575
+ return i !== index;
576
+ }))
544
577
  });
545
578
  },
546
579
  placeholder: "Label",
@@ -581,12 +614,15 @@ var PowrFormsAdmin = function PowrFormsAdmin(_ref) {
581
614
  })))), /*#__PURE__*/_react["default"].createElement("div", {
582
615
  className: "flex justify-end gap-4 mt-6"
583
616
  }, /*#__PURE__*/_react["default"].createElement("button", {
617
+ type: "button",
584
618
  onClick: function onClick() {
585
619
  resetFormDraft();
620
+ setCreateFeedback('');
586
621
  setShowCreateModal(false);
587
622
  },
588
623
  className: "bg-gray-300 text-gray-700 hover:bg-gray-400 px-4 py-2 rounded-md"
589
624
  }, "Cancel"), /*#__PURE__*/_react["default"].createElement("button", {
625
+ type: "button",
590
626
  onClick: createForm,
591
627
  disabled: isSaving,
592
628
  className: "bg-blue-600 text-white hover:bg-blue-700 px-4 py-2 rounded-md disabled:opacity-50"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "powr-sdk-web",
3
- "version": "5.6.8",
3
+ "version": "5.6.9",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "build": "babel src -d dist --copy-files",