@knovator/pagecreator-admin 0.5.12 → 0.7.0

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/index.cjs CHANGED
@@ -10,8 +10,8 @@ var reactHookForm = require('react-hook-form');
10
10
  var reactBeautifulDnd = require('react-beautiful-dnd');
11
11
  var CSSTransition = require('react-transition-group/CSSTransition');
12
12
  var reactDropzone = require('react-dropzone');
13
- var reactTabs = require('react-tabs');
14
13
  var reactTinyPopover = require('react-tiny-popover');
14
+ var reactTabs = require('react-tabs');
15
15
 
16
16
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
17
17
 
@@ -1646,6 +1646,18 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
1646
1646
  PERFORMANCE OF THIS SOFTWARE.
1647
1647
  ***************************************************************************** */
1648
1648
 
1649
+ function __rest(s, e) {
1650
+ var t = {};
1651
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
1652
+ t[p] = s[p];
1653
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
1654
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
1655
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
1656
+ t[p[i]] = s[p[i]];
1657
+ }
1658
+ return t;
1659
+ }
1660
+
1649
1661
  function __awaiter(thisArg, _arguments, P, generator) {
1650
1662
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
1651
1663
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -1674,6 +1686,11 @@ var CALLBACK_CODES;
1674
1686
  CALLBACK_CODES["IMAGE_REMOVE"] = "IMAGE_REMOVE";
1675
1687
  CALLBACK_CODES["INTERNAL"] = "INTERNAL";
1676
1688
  })(CALLBACK_CODES || (CALLBACK_CODES = {}));
1689
+ const CONSTANTS = {
1690
+ EMPTY_REGEX: / /g,
1691
+ SLUG_REGEX: /^[\da-z-]*$/,
1692
+ SLUG_REPLACE_REGEX: /[^\da-z-]/gi
1693
+ };
1677
1694
  const DEFAULT_PERMISSIONS = {
1678
1695
  list: true,
1679
1696
  add: true,
@@ -1755,7 +1772,15 @@ const TRANSLATION_PAIRS_ITEM = {
1755
1772
  'item.uploadFile': 'Upload File',
1756
1773
  'item.dragDrop': 'or drag and drop',
1757
1774
  'item.allowedFormat': 'PNG, JPG, SVG up to 2 MB',
1758
- 'item.srcset': 'Srcset'
1775
+ 'item.srcset': 'Srcset',
1776
+ 'item.screenSizeRequired': 'ScreenSize is required',
1777
+ 'item.widthRequired': 'Width is required',
1778
+ 'item.heightRequired': 'Height is required',
1779
+ 'item.minScreenSize': 'ScreenSize should be greater than 0',
1780
+ 'item.minWidth': 'Width should be greater than 0',
1781
+ 'item.minHeight': 'Height should be greater than 0',
1782
+ 'item.titleRequired': 'Title is required',
1783
+ 'item.deleteTitle': 'Are you sure you want to delete this item?'
1759
1784
  };
1760
1785
  const TRANSLATION_PAIRS_PAGE = {
1761
1786
  'page.name': 'Name',
@@ -1764,6 +1789,9 @@ const TRANSLATION_PAIRS_PAGE = {
1764
1789
  'page.code': 'Code',
1765
1790
  'page.codePlaceholder': 'Enter code',
1766
1791
  'page.codeRequired': 'Code is required',
1792
+ 'page.slug': 'Slug',
1793
+ 'page.slugPlaceholder': 'Enter Slug',
1794
+ 'page.slugRequired': 'Slug is required',
1767
1795
  'page.addPageTitle': 'Add Page',
1768
1796
  'page.updatePageTitle': 'Update Page',
1769
1797
  'page.searchPages': 'Search Pages...',
@@ -1783,7 +1811,6 @@ const Provider = ({
1783
1811
  onSuccess: _onSuccess = () => {},
1784
1812
  onLogout: _onLogout = () => {},
1785
1813
  switchClass: _switchClass = 'khb_switch',
1786
- itemsRoutesPrefix: _itemsRoutesPrefix = 'items',
1787
1814
  widgetRoutesPrefix: _widgetRoutesPrefix = 'widgets',
1788
1815
  pageRoutesPrefix: _pageRoutesPrefix = 'pages'
1789
1816
  }) => {
@@ -1795,7 +1822,6 @@ const Provider = ({
1795
1822
  onSuccess: _onSuccess,
1796
1823
  onLogout: _onLogout,
1797
1824
  switchClass: _switchClass,
1798
- itemsRoutesPrefix: _itemsRoutesPrefix,
1799
1825
  widgetRoutesPrefix: _widgetRoutesPrefix,
1800
1826
  pageRoutesPrefix: _pageRoutesPrefix
1801
1827
  }
@@ -2494,7 +2520,11 @@ const capitalizeFirstLetter = (string = '') => {
2494
2520
  };
2495
2521
  const changeToCode = (string = '') => {
2496
2522
  var _a, _b;
2497
- return (_b = (_a = string.replace(/[^\s\w]/gi, '')) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === null || _b === void 0 ? void 0 : _b.replace(/ /g, '_');
2523
+ return (_b = (_a = string.replace(/[^\s\w]/gi, '')) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === null || _b === void 0 ? void 0 : _b.replace(CONSTANTS.EMPTY_REGEX, '_');
2524
+ };
2525
+ const changeToSlug = (string = '') => {
2526
+ var _a;
2527
+ return (_a = string === null || string === void 0 ? void 0 : string.toLowerCase()) === null || _a === void 0 ? void 0 : _a.replace(CONSTANTS.EMPTY_REGEX, '-');
2498
2528
  };
2499
2529
  const isObject$3 = data => {
2500
2530
  var _a;
@@ -2596,6 +2626,13 @@ const usePagination = ({
2596
2626
  };
2597
2627
 
2598
2628
  const apiList = {
2629
+ GET_ONE: ({
2630
+ prefix,
2631
+ id
2632
+ }) => ({
2633
+ url: `${prefix}/${id}`,
2634
+ method: 'GET'
2635
+ }),
2599
2636
  LIST: ({
2600
2637
  prefix
2601
2638
  }) => ({
@@ -3339,6 +3376,45 @@ const CustomReactSelect = ({
3339
3376
  }, error));
3340
3377
  };
3341
3378
 
3379
+ var call$7 = functionCall;
3380
+ var hasOwn$1 = hasOwnProperty_1;
3381
+ var isPrototypeOf$2 = objectIsPrototypeOf;
3382
+ var regExpFlags = regexpFlags$1;
3383
+
3384
+ var RegExpPrototype$1 = RegExp.prototype;
3385
+
3386
+ var regexpGetFlags = function (R) {
3387
+ var flags = R.flags;
3388
+ return flags === undefined && !('flags' in RegExpPrototype$1) && !hasOwn$1(R, 'flags') && isPrototypeOf$2(RegExpPrototype$1, R)
3389
+ ? call$7(regExpFlags, R) : flags;
3390
+ };
3391
+
3392
+ var PROPER_FUNCTION_NAME = functionName.PROPER;
3393
+ var defineBuiltIn$2 = defineBuiltIn$7;
3394
+ var anObject$5 = anObject$e;
3395
+ var $toString = toString$6;
3396
+ var fails$3 = fails$n;
3397
+ var getRegExpFlags = regexpGetFlags;
3398
+
3399
+ var TO_STRING = 'toString';
3400
+ var RegExpPrototype = RegExp.prototype;
3401
+ var nativeToString = RegExpPrototype[TO_STRING];
3402
+
3403
+ var NOT_GENERIC = fails$3(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
3404
+ // FF44- RegExp#toString has a wrong name
3405
+ var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name != TO_STRING;
3406
+
3407
+ // `RegExp.prototype.toString` method
3408
+ // https://tc39.es/ecma262/#sec-regexp.prototype.tostring
3409
+ if (NOT_GENERIC || INCORRECT_NAME) {
3410
+ defineBuiltIn$2(RegExp.prototype, TO_STRING, function toString() {
3411
+ var R = anObject$5(this);
3412
+ var pattern = $toString(R.source);
3413
+ var flags = $toString(getRegExpFlags(R));
3414
+ return '/' + pattern + '/' + flags;
3415
+ }, { unsafe: true });
3416
+ }
3417
+
3342
3418
  const Close = ({
3343
3419
  srText,
3344
3420
  className
@@ -3380,27 +3456,19 @@ const Plus = ({
3380
3456
  const SrcSetInput = ({
3381
3457
  size,
3382
3458
  className,
3383
- index,
3384
- register,
3385
- errors,
3386
- name,
3387
- inputKey,
3459
+ rest,
3460
+ error,
3388
3461
  placeholder,
3389
3462
  disabled: _disabled = false
3390
3463
  }) => {
3391
- var _a, _b;
3392
3464
  return /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement("input", Object.assign({
3393
3465
  className: classNames__default["default"]('khb_input', `khb_input-${size}`, className),
3394
3466
  type: 'number',
3395
3467
  placeholder: placeholder,
3396
- name: `srcset[${index}].${inputKey}`,
3397
3468
  disabled: _disabled
3398
- }, register(`srcset[${index}].${inputKey}`, {
3399
- required: `${name} Size is required`,
3400
- validate: value => Number(value) <= 0 ? `${inputKey} should be greater than 0` : true
3401
- }))), Array.isArray(errors) && errors[index] && /*#__PURE__*/React__default["default"].createElement("p", {
3469
+ }, rest || {})), error && /*#__PURE__*/React__default["default"].createElement("p", {
3402
3470
  className: "khb_input-error"
3403
- }, (_b = (_a = errors[index]) === null || _a === void 0 ? void 0 : _a[inputKey]) === null || _b === void 0 ? void 0 : _b['message']));
3471
+ }, error));
3404
3472
  };
3405
3473
  const SrcSet = ({
3406
3474
  label,
@@ -3412,7 +3480,9 @@ const SrcSet = ({
3412
3480
  wrapperClassName,
3413
3481
  control,
3414
3482
  errors,
3415
- disabled: _disabled2 = false
3483
+ name,
3484
+ disabled: _disabled2 = false,
3485
+ t
3416
3486
  }) => {
3417
3487
  const {
3418
3488
  fields,
@@ -3420,7 +3490,7 @@ const SrcSet = ({
3420
3490
  remove
3421
3491
  } = reactHookForm.useFieldArray({
3422
3492
  control,
3423
- name: 'srcset'
3493
+ name: name
3424
3494
  });
3425
3495
  return /*#__PURE__*/React__default["default"].createElement("div", {
3426
3496
  className: classNames__default["default"]('khb_input-wrapper', wrapperClassName)
@@ -3430,49 +3500,55 @@ const SrcSet = ({
3430
3500
  className: "khb_input-label-required"
3431
3501
  }, "*") : null), /*#__PURE__*/React__default["default"].createElement("div", {
3432
3502
  className: "khb_input-srcset-items"
3433
- }, fields === null || fields === void 0 ? void 0 : fields.map((item, index) => /*#__PURE__*/React__default["default"].createElement("div", {
3434
- key: index,
3435
- className: "khb_input-srcset"
3436
- }, /*#__PURE__*/React__default["default"].createElement(SrcSetInput, {
3437
- errors: errors,
3438
- index: index,
3439
- className: className,
3440
- inputKey: "screenSize",
3441
- name: "Screen Size",
3442
- size: _size,
3443
- placeholder: "Screen Size",
3444
- register: register,
3445
- disabled: _disabled2
3446
- }), /*#__PURE__*/React__default["default"].createElement("span", {
3447
- className: "p-2"
3448
- }, "="), /*#__PURE__*/React__default["default"].createElement(SrcSetInput, {
3449
- errors: errors,
3450
- index: index,
3451
- register: register,
3452
- className: className,
3453
- inputKey: "width",
3454
- name: "Width",
3455
- size: _size,
3456
- placeholder: "Width",
3457
- disabled: _disabled2
3458
- }), /*#__PURE__*/React__default["default"].createElement("span", {
3459
- className: "p-2"
3460
- }, "x"), /*#__PURE__*/React__default["default"].createElement(SrcSetInput, {
3461
- errors: errors,
3462
- index: index,
3463
- register: register,
3464
- className: className,
3465
- inputKey: "height",
3466
- name: "Height",
3467
- size: _size,
3468
- placeholder: "Height",
3469
- disabled: _disabled2
3503
+ }, fields === null || fields === void 0 ? void 0 : fields.map((item, index) => {
3504
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
3505
+ return /*#__PURE__*/React__default["default"].createElement("div", {
3506
+ key: index,
3507
+ className: "khb_input-srcset"
3508
+ }, /*#__PURE__*/React__default["default"].createElement(SrcSetInput, {
3509
+ error: (_c = (_b = (_a = errors === null || errors === void 0 ? void 0 : errors[index]) === null || _a === void 0 ? void 0 : _a['screenSize']) === null || _b === void 0 ? void 0 : _b.message) === null || _c === void 0 ? void 0 : _c.toString(),
3510
+ index: index,
3511
+ className: className,
3512
+ size: _size,
3513
+ placeholder: "Screen Size",
3514
+ rest: register(`${name}.${index}.screenSize`, {
3515
+ required: t('item.screenSizeRequired'),
3516
+ validate: value => Number(value) <= 0 ? t('item.minScreenSize') : true
3517
+ }),
3518
+ disabled: _disabled2
3519
+ }), /*#__PURE__*/React__default["default"].createElement("span", {
3520
+ className: "p-2"
3521
+ }, "="), /*#__PURE__*/React__default["default"].createElement(SrcSetInput, {
3522
+ error: (_f = (_e = (_d = errors === null || errors === void 0 ? void 0 : errors[index]) === null || _d === void 0 ? void 0 : _d['width']) === null || _e === void 0 ? void 0 : _e.message) === null || _f === void 0 ? void 0 : _f.toString(),
3523
+ index: index,
3524
+ rest: register(`${name}.${index}.width`, {
3525
+ required: t('item.widthRequired'),
3526
+ validate: value => Number(value) <= 0 ? t('item.minWidth') : true
3527
+ }),
3528
+ className: className,
3529
+ size: _size,
3530
+ placeholder: "Width",
3531
+ disabled: _disabled2
3532
+ }), /*#__PURE__*/React__default["default"].createElement("span", {
3533
+ className: "p-2"
3534
+ }, "x"), /*#__PURE__*/React__default["default"].createElement(SrcSetInput, {
3535
+ error: (_j = (_h = (_g = errors === null || errors === void 0 ? void 0 : errors[index]) === null || _g === void 0 ? void 0 : _g['height']) === null || _h === void 0 ? void 0 : _h.message) === null || _j === void 0 ? void 0 : _j.toString(),
3536
+ index: index,
3537
+ rest: register(`${name}.${index}.height`, {
3538
+ required: t('item.heightRequired'),
3539
+ validate: value => Number(value) <= 0 ? t('item.minHeight') : true
3540
+ }),
3541
+ className: className,
3542
+ size: _size,
3543
+ placeholder: "Height",
3544
+ disabled: _disabled2
3545
+ }), /*#__PURE__*/React__default["default"].createElement("button", {
3546
+ type: "button",
3547
+ className: "khb_btn khb_btn-danger khb_btn-xs",
3548
+ onClick: () => remove(index),
3549
+ disabled: _disabled2
3550
+ }, /*#__PURE__*/React__default["default"].createElement(Close, null)));
3470
3551
  }), /*#__PURE__*/React__default["default"].createElement("button", {
3471
- type: "button",
3472
- className: "khb_btn khb_btn-danger khb_btn-xs",
3473
- onClick: () => remove(index),
3474
- disabled: _disabled2
3475
- }, /*#__PURE__*/React__default["default"].createElement(Close, null)))), /*#__PURE__*/React__default["default"].createElement("button", {
3476
3552
  type: "button",
3477
3553
  disabled: _disabled2,
3478
3554
  onClick: () => append({
@@ -3482,7 +3558,7 @@ const SrcSet = ({
3482
3558
  }),
3483
3559
  className: "khb_btn khb_btn-primary khb_btn-xs"
3484
3560
  }, /*#__PURE__*/React__default["default"].createElement(Plus, {
3485
- className: "w-7 h-7"
3561
+ className: "khb_srcset-remove"
3486
3562
  }))), error && /*#__PURE__*/React__default["default"].createElement("p", {
3487
3563
  className: "khb_input-error "
3488
3564
  }, error));
@@ -3521,45 +3597,6 @@ const PageSearch = () => {
3521
3597
  });
3522
3598
  };
3523
3599
 
3524
- var call$7 = functionCall;
3525
- var hasOwn$1 = hasOwnProperty_1;
3526
- var isPrototypeOf$2 = objectIsPrototypeOf;
3527
- var regExpFlags = regexpFlags$1;
3528
-
3529
- var RegExpPrototype$1 = RegExp.prototype;
3530
-
3531
- var regexpGetFlags = function (R) {
3532
- var flags = R.flags;
3533
- return flags === undefined && !('flags' in RegExpPrototype$1) && !hasOwn$1(R, 'flags') && isPrototypeOf$2(RegExpPrototype$1, R)
3534
- ? call$7(regExpFlags, R) : flags;
3535
- };
3536
-
3537
- var PROPER_FUNCTION_NAME = functionName.PROPER;
3538
- var defineBuiltIn$2 = defineBuiltIn$7;
3539
- var anObject$5 = anObject$e;
3540
- var $toString = toString$6;
3541
- var fails$3 = fails$n;
3542
- var getRegExpFlags = regexpGetFlags;
3543
-
3544
- var TO_STRING = 'toString';
3545
- var RegExpPrototype = RegExp.prototype;
3546
- var nativeToString = RegExpPrototype[TO_STRING];
3547
-
3548
- var NOT_GENERIC = fails$3(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
3549
- // FF44- RegExp#toString has a wrong name
3550
- var INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name != TO_STRING;
3551
-
3552
- // `RegExp.prototype.toString` method
3553
- // https://tc39.es/ecma262/#sec-regexp.prototype.tostring
3554
- if (NOT_GENERIC || INCORRECT_NAME) {
3555
- defineBuiltIn$2(RegExp.prototype, TO_STRING, function toString() {
3556
- var R = anObject$5(this);
3557
- var pattern = $toString(R.source);
3558
- var flags = $toString(getRegExpFlags(R));
3559
- return '/' + pattern + '/' + flags;
3560
- }, { unsafe: true });
3561
- }
3562
-
3563
3600
  var aCallable$6 = aCallable$8;
3564
3601
  var toObject = toObject$5;
3565
3602
  var IndexedObject = indexedObject;
@@ -4035,6 +4072,16 @@ const PageForm = ({
4035
4072
  event.target.value = changeToCode(event.target.value);
4036
4073
  return event;
4037
4074
  }
4075
+ function handleSlug(event) {
4076
+ let slugValue = changeToSlug(event.target.value);
4077
+ if (!slugValue || !CONSTANTS.SLUG_REGEX.test(slugValue)) {
4078
+ slugValue = '';
4079
+ } else {
4080
+ slugValue = slugValue.replace(CONSTANTS.SLUG_REPLACE_REGEX, '');
4081
+ }
4082
+ event.target.value = slugValue;
4083
+ return event;
4084
+ }
4038
4085
  function loadOptions(value, callback) {
4039
4086
  getWidgets(widgetsData => {
4040
4087
  if (callback) callback(widgetsData);
@@ -4071,6 +4118,17 @@ const PageForm = ({
4071
4118
  validations: {
4072
4119
  required: t('page.codeRequired')
4073
4120
  }
4121
+ }, {
4122
+ label: `${t('page.slug')}`,
4123
+ accessor: 'slug',
4124
+ required: true,
4125
+ type: 'text',
4126
+ onInput: handleSlug,
4127
+ editable: false,
4128
+ placeholder: t('page.slugPlaceholder'),
4129
+ validations: {
4130
+ required: t('page.slugRequired')
4131
+ }
4074
4132
  }, {
4075
4133
  label: t('page.widgets'),
4076
4134
  accessor: 'widgets',
@@ -4105,13 +4163,23 @@ const Button = ({
4105
4163
  onClick,
4106
4164
  className,
4107
4165
  children,
4108
- disabled
4166
+ disabled,
4167
+ loading
4109
4168
  }) => {
4110
4169
  return /*#__PURE__*/React__default["default"].createElement("button", {
4111
4170
  className: classNames__default["default"]('khb_btn', `khb_btn-${_type}`, `khb_btn-${_size}`, className),
4112
4171
  onClick: onClick,
4113
- disabled: disabled
4114
- }, children);
4172
+ disabled: disabled || loading
4173
+ }, loading && /*#__PURE__*/React__default["default"].createElement("svg", {
4174
+ className: "khb_btn-loader",
4175
+ xmlns: "http://www.w3.org/2000/svg",
4176
+ width: "12",
4177
+ height: "13",
4178
+ viewBox: "0 0 12 13"
4179
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
4180
+ // style={{ fill: kind }}
4181
+ d: "M5.5,12a1,1,0,1,1,1,1A1,1,0,0,1,5.5,12ZM1.75,10.5A1.25,1.25,0,1,1,3,11.75,1.25,1.25,0,0,1,1.75,10.5Zm7.531.031a.75.75,0,1,1,.75.75A.75.75,0,0,1,9.281,10.531ZM0,7A1.5,1.5,0,1,1,1.5,8.5,1.5,1.5,0,0,1,0,7ZM11,7a.5.5,0,1,1,.5.5A.5.5,0,0,1,11,7ZM1.875,4.637a1.62,1.62,0,0,1,0-2.275,1.582,1.582,0,0,1,2.253,0,1.62,1.62,0,0,1,0,2.275,1.582,1.582,0,0,1-2.253,0ZM4.5,2a2,2,0,1,1,2,2A2,2,0,0,1,4.5,2ZM9.75,3.5a.25.25,0,1,1,.25.25A.25.25,0,0,1,9.75,3.5Z"
4182
+ })), children);
4115
4183
  };
4116
4184
 
4117
4185
  const AddButton$1 = () => {
@@ -4414,7 +4482,7 @@ const FormActions = ({
4414
4482
  onClick: onSecondaryButtonClick
4415
4483
  }, _secondaryLabel), /*#__PURE__*/React__default["default"].createElement(Button, {
4416
4484
  onClick: onPrimaryButtonClick,
4417
- disabled: _loading
4485
+ loading: _loading
4418
4486
  }, _primaryLabel));
4419
4487
  };
4420
4488
 
@@ -4578,11 +4646,6 @@ const useWidget = ({
4578
4646
  imageBaseUrl
4579
4647
  }) => {
4580
4648
  const [list, setList] = React.useState([]);
4581
- const [itemsList, setItemsList] = React.useState({
4582
- web: [],
4583
- mobile: []
4584
- });
4585
- const [itemsLoading, setItemsLoading] = React.useState(false);
4586
4649
  const [loading, setLoading] = React.useState(false);
4587
4650
  const [totalPages, setTotalPages] = React.useState(0);
4588
4651
  const [totalRecords, setTotalRecords] = React.useState(0);
@@ -4598,8 +4661,7 @@ const useWidget = ({
4598
4661
  onError,
4599
4662
  onSuccess,
4600
4663
  onLogout,
4601
- widgetRoutesPrefix,
4602
- itemsRoutesPrefix
4664
+ widgetRoutesPrefix
4603
4665
  } = useProviderState();
4604
4666
  const {
4605
4667
  changeSearch,
@@ -4657,67 +4719,6 @@ const useWidget = ({
4657
4719
  setLoading(false);
4658
4720
  }
4659
4721
  }), [baseUrl, currentPageRef, limitRef, offsetRef, handleError, routes, token, widgetRoutesPrefix]);
4660
- const getItems = React.useCallback(id => __awaiter(void 0, void 0, void 0, function* () {
4661
- try {
4662
- setItemsLoading(true);
4663
- const api = getApiType({
4664
- routes,
4665
- action: 'ITEM',
4666
- prefix: itemsRoutesPrefix,
4667
- id
4668
- });
4669
- const response = yield commonApi({
4670
- baseUrl,
4671
- token,
4672
- method: api.method,
4673
- url: api.url,
4674
- onError: handleError(CALLBACK_CODES.GET_ALL)
4675
- });
4676
- if ((response === null || response === void 0 ? void 0 : response.code) === 'SUCCESS') {
4677
- setItemsLoading(false);
4678
- const itemsResponse = dataGatter(response).reduce((acc, itemItem) => {
4679
- if (itemItem['itemType'] === 'Web') acc.web.push(itemItem);else acc.mobile.push(itemItem);
4680
- return acc;
4681
- }, {
4682
- web: [],
4683
- mobile: []
4684
- });
4685
- return setItemsList(itemsResponse);
4686
- }
4687
- setItemsLoading(false);
4688
- } catch (error) {
4689
- setItemsLoading(false);
4690
- }
4691
- }), [baseUrl, handleError, routes, itemsRoutesPrefix, token]);
4692
- const onDeleteItem = id => __awaiter(void 0, void 0, void 0, function* () {
4693
- try {
4694
- setItemsLoading(true);
4695
- const api = getApiType({
4696
- routes,
4697
- action: 'DELETE',
4698
- prefix: itemsRoutesPrefix,
4699
- id
4700
- });
4701
- const response = yield commonApi({
4702
- baseUrl,
4703
- token,
4704
- method: api.method,
4705
- url: api.url,
4706
- onError: handleError(CALLBACK_CODES.DELETE)
4707
- });
4708
- if ((response === null || response === void 0 ? void 0 : response.code) === 'SUCCESS') {
4709
- setItemsLoading(false);
4710
- onSuccess(CALLBACK_CODES.DELETE, response === null || response === void 0 ? void 0 : response.code, response === null || response === void 0 ? void 0 : response.message);
4711
- if (itemData) getItems(itemData['_id']);
4712
- return;
4713
- }
4714
- setItemsLoading(false);
4715
- onError(CALLBACK_CODES.DELETE, response === null || response === void 0 ? void 0 : response.code, response === null || response === void 0 ? void 0 : response.message);
4716
- } catch (error) {
4717
- setItemsLoading(false);
4718
- onError(CALLBACK_CODES.DELETE, INTERNAL_ERROR_CODE, error.message);
4719
- }
4720
- });
4721
4722
  const onCofirmDeleteWidget = () => __awaiter(void 0, void 0, void 0, function* () {
4722
4723
  try {
4723
4724
  let proceed = true;
@@ -4780,6 +4781,7 @@ const useWidget = ({
4780
4781
  });
4781
4782
  if ((response === null || response === void 0 ? void 0 : response.code) === 'SUCCESS') {
4782
4783
  setList(oldListData => oldListData.map(item => item['_id'] === id ? response.data : item));
4784
+ if (response.message) onSuccess(CALLBACK_CODES.PARTIAL_UPDATE, response === null || response === void 0 ? void 0 : response.code, response === null || response === void 0 ? void 0 : response.message);
4783
4785
  } else {
4784
4786
  onError(CALLBACK_CODES.PARTIAL_UPDATE, response === null || response === void 0 ? void 0 : response.code, response === null || response === void 0 ? void 0 : response.message);
4785
4787
  }
@@ -4890,7 +4892,39 @@ const useWidget = ({
4890
4892
  setFormState(undefined);
4891
4893
  setItemData(null);
4892
4894
  };
4893
- const onChangeFormState = (state, data) => {
4895
+ const getAndSetWidget = id => __awaiter(void 0, void 0, void 0, function* () {
4896
+ try {
4897
+ setLoading(true);
4898
+ const api = getApiType({
4899
+ routes,
4900
+ action: 'GET_ONE',
4901
+ prefix: widgetRoutesPrefix,
4902
+ id
4903
+ });
4904
+ const response = yield commonApi({
4905
+ baseUrl,
4906
+ token,
4907
+ url: api.url,
4908
+ method: api.method,
4909
+ onError: handleError(CALLBACK_CODES.GET_SINGLE)
4910
+ });
4911
+ if ((response === null || response === void 0 ? void 0 : response.code) === 'SUCCESS') {
4912
+ setLoading(false);
4913
+ const data = response === null || response === void 0 ? void 0 : response.data;
4914
+ if (Array.isArray(data.items)) {
4915
+ const items = JSON.parse(JSON.stringify(data.items));
4916
+ data.webItems = items.filter(item => item.itemType === 'Web');
4917
+ data.mobileItems = items.filter(item => item.itemType === 'Mobile');
4918
+ delete data.items;
4919
+ }
4920
+ setItemData(data);
4921
+ }
4922
+ } catch (error) {
4923
+ setLoading(false);
4924
+ onError(CALLBACK_CODES.UPDATE, '', error.message);
4925
+ }
4926
+ });
4927
+ const onChangeFormState = (state, data) => __awaiter(void 0, void 0, void 0, function* () {
4894
4928
  setFormState(state);
4895
4929
  // fetch ItemsTypes & WidgetTypes if needed
4896
4930
  if (state === 'ADD' || state === 'UPDATE') {
@@ -4899,52 +4933,14 @@ const useWidget = ({
4899
4933
  }
4900
4934
  // get Item data if widget is updating
4901
4935
  if (state === 'UPDATE' && data) {
4902
- if (data['itemsType'] === 'Image') {
4903
- getItems(data['_id']);
4904
- }
4905
- setItemData(data);
4936
+ getAndSetWidget(data['_id']);
4906
4937
  } else if (state === 'ADD') {
4907
4938
  // reset Item data if widget is adding
4908
- setItemsList({
4909
- web: [],
4910
- mobile: []
4911
- });
4912
4939
  setItemData(null);
4913
4940
  } else if (state === 'DELETE' && data) {
4914
4941
  setItemData(data);
4915
4942
  setFormState(state);
4916
4943
  }
4917
- };
4918
- const onItemFormSubmit = (state, data, updateId) => __awaiter(void 0, void 0, void 0, function* () {
4919
- setItemsLoading(true);
4920
- const code = state === 'ADD' ? CALLBACK_CODES.CREATE : CALLBACK_CODES.UPDATE;
4921
- try {
4922
- const api = getApiType({
4923
- routes,
4924
- action: state === 'ADD' ? 'CREATE' : 'UPDATE',
4925
- prefix: itemsRoutesPrefix,
4926
- id: updateId
4927
- });
4928
- const response = yield commonApi({
4929
- baseUrl,
4930
- token,
4931
- data,
4932
- url: api.url,
4933
- method: api.method,
4934
- onError: handleError(code)
4935
- });
4936
- if ((response === null || response === void 0 ? void 0 : response.code) === 'SUCCESS') {
4937
- setItemsLoading(false);
4938
- onSuccess(code, response === null || response === void 0 ? void 0 : response.code, response === null || response === void 0 ? void 0 : response.message);
4939
- if (itemData) getItems(itemData['_id']);
4940
- } else {
4941
- setItemsLoading(false);
4942
- onError(code, response === null || response === void 0 ? void 0 : response.code, response === null || response === void 0 ? void 0 : response.message);
4943
- }
4944
- } catch (error) {
4945
- setItemsLoading(false);
4946
- onError(code, INTERNAL_ERROR_CODE, error.message);
4947
- }
4948
4944
  });
4949
4945
  // Image Upload operations
4950
4946
  const onImageUpload = file => __awaiter(void 0, void 0, void 0, function* () {
@@ -5030,7 +5026,6 @@ const useWidget = ({
5030
5026
  itemData,
5031
5027
  onChangeFormState,
5032
5028
  onCloseForm,
5033
- onDeleteItem,
5034
5029
  onWidgetFormSubmit,
5035
5030
  onCofirmDeleteWidget,
5036
5031
  onPartialUpdateWidget,
@@ -5041,11 +5036,7 @@ const useWidget = ({
5041
5036
  changeSearch,
5042
5037
  collectionDataLoading,
5043
5038
  getCollectionData,
5044
- collectionData,
5045
- // Items
5046
- itemsList,
5047
- itemsLoading,
5048
- onItemFormSubmit
5039
+ collectionData
5049
5040
  };
5050
5041
  };
5051
5042
 
@@ -6163,11 +6154,6 @@ const WidgetContextProvider = ({
6163
6154
  canDelete: _canDelete = false,
6164
6155
  loader: _loader = /*#__PURE__*/React__default["default"].createElement("span", null),
6165
6156
  onPartialUpdateWidget: _onPartialUpdateWidget = () => Promise.resolve(),
6166
- // Item
6167
- webItems: _webItems = [],
6168
- mobileItems: _mobileItems = [],
6169
- itemsLoading: _itemsLoading = false,
6170
- onItemFormSubmit: _onItemFormSubmit = () => {},
6171
6157
  reactSelectStyles: _reactSelectStyles = {},
6172
6158
  // other
6173
6159
  children
@@ -6215,12 +6201,7 @@ const WidgetContextProvider = ({
6215
6201
  columns: _columns,
6216
6202
  data: _data,
6217
6203
  canDelete: _canDelete,
6218
- loader: _loader,
6219
- // Item
6220
- webItems: _webItems,
6221
- mobileItems: _mobileItems,
6222
- itemsLoading: _itemsLoading,
6223
- onItemFormSubmit: _onItemFormSubmit
6204
+ loader: _loader
6224
6205
  }
6225
6206
  }, children);
6226
6207
  };
@@ -6368,6 +6349,72 @@ $({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') },
6368
6349
  }
6369
6350
  });
6370
6351
 
6352
+ const ChevronDown = ({
6353
+ srText,
6354
+ className
6355
+ }) => {
6356
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, srText ? /*#__PURE__*/React__default["default"].createElement("span", {
6357
+ className: "khb_sr-only"
6358
+ }, srText) : null, /*#__PURE__*/React__default["default"].createElement("svg", {
6359
+ xmlns: "http://www.w3.org/2000/svg",
6360
+ viewBox: "-5 -8 24 24",
6361
+ width: "24",
6362
+ fill: "currentColor",
6363
+ className: className
6364
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
6365
+ d: "M7.071 5.314l4.95-4.95a1 1 0 1 1 1.414 1.414L7.778 7.435a1 1 0 0 1-1.414 0L.707 1.778A1 1 0 1 1 2.121.364l4.95 4.95z"
6366
+ })));
6367
+ };
6368
+
6369
+ const ChevronUp = ({
6370
+ srText,
6371
+ className
6372
+ }) => {
6373
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, srText ? /*#__PURE__*/React__default["default"].createElement("span", {
6374
+ className: "khb_sr-only"
6375
+ }, srText) : null, /*#__PURE__*/React__default["default"].createElement("svg", {
6376
+ xmlns: "http://www.w3.org/2000/svg",
6377
+ viewBox: "-5 -7.5 24 24",
6378
+ width: "24",
6379
+ fill: "currentColor",
6380
+ className: className
6381
+ }, /*#__PURE__*/React__default["default"].createElement("path", {
6382
+ d: "M7.071 2.828l-4.95 4.95A1 1 0 0 1 .707 6.364L6.364.707a1 1 0 0 1 1.414 0l5.657 5.657a1 1 0 0 1-1.414 1.414l-4.95-4.95z"
6383
+ })));
6384
+ };
6385
+
6386
+ const Accordian = ({
6387
+ id,
6388
+ className,
6389
+ children,
6390
+ open,
6391
+ onToggle,
6392
+ title,
6393
+ collapseId,
6394
+ footerContent
6395
+ }) => {
6396
+ return /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement("h2", {
6397
+ id: id
6398
+ }, /*#__PURE__*/React__default["default"].createElement("button", {
6399
+ type: "button",
6400
+ className: "khb_accordian-header",
6401
+ "data-accordion-target": `#${collapseId}`,
6402
+ "aria-expanded": "true",
6403
+ "aria-controls": collapseId,
6404
+ onClick: () => onToggle && onToggle(!open)
6405
+ }, /*#__PURE__*/React__default["default"].createElement("span", null, title), open ? /*#__PURE__*/React__default["default"].createElement(ChevronUp, null) : /*#__PURE__*/React__default["default"].createElement(ChevronDown, null))), /*#__PURE__*/React__default["default"].createElement("div", {
6406
+ id: collapseId,
6407
+ className: classNames__default["default"]('khb_accordian-body', {
6408
+ hidden: !open
6409
+ }),
6410
+ "aria-labelledby": id
6411
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
6412
+ className: "khb_accordian-content"
6413
+ }, children), footerContent && /*#__PURE__*/React__default["default"].createElement("div", {
6414
+ className: "khb_accordian-footer"
6415
+ }, footerContent)));
6416
+ };
6417
+
6371
6418
  const ImageUpload = ({
6372
6419
  className,
6373
6420
  text,
@@ -6378,6 +6425,7 @@ const ImageUpload = ({
6378
6425
  imgId: _imgId = '',
6379
6426
  onImageUpload,
6380
6427
  onImageRemove,
6428
+ clearError,
6381
6429
  baseUrl,
6382
6430
  disabled: _disabled = false
6383
6431
  }) => {
@@ -6396,7 +6444,7 @@ const ImageUpload = ({
6396
6444
  onDrop: (acceptedFiles, rejectedFiles) => __awaiter(void 0, void 0, void 0, function* () {
6397
6445
  var _a, _b, _c;
6398
6446
  try {
6399
- onError('');
6447
+ if (typeof clearError === 'function') clearError();
6400
6448
  if ((acceptedFiles === null || acceptedFiles === void 0 ? void 0 : acceptedFiles.length) > 0) {
6401
6449
  const regex = /\.(png|jpeg|jpg|webp|svg)$/gi;
6402
6450
  const files = acceptedFiles.filter(file => regex.test(file.name));
@@ -6442,174 +6490,127 @@ const ImageUpload = ({
6442
6490
  className: "khb_img-wrapper-del"
6443
6491
  }, /*#__PURE__*/React__default["default"].createElement(Close, null)));
6444
6492
  };
6445
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
6493
+ if (!isEmpty(img) && isString(img) && img) {
6494
+ return /*#__PURE__*/React__default["default"].createElement("div", {
6495
+ className: "khb_img-upload-wrapper-1"
6496
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
6497
+ className: "khb_img-upload-wrapper-2"
6498
+ }, /*#__PURE__*/React__default["default"].createElement("div", null, showImage(img))));
6499
+ }
6500
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", Object.assign({}, getRootProps(), {
6446
6501
  className: "khb_img-upload-wrapper-1"
6447
- }, /*#__PURE__*/React__default["default"].createElement("div", {
6448
- className: "khb_img-upload-wrapper-2"
6449
- }, !isEmpty(img) && isString(img) && img ? showImage(img) : /*#__PURE__*/React__default["default"].createElement("div", Object.assign({}, getRootProps({
6450
- className
6451
- })), /*#__PURE__*/React__default["default"].createElement("input", Object.assign({
6502
+ }), /*#__PURE__*/React__default["default"].createElement("input", Object.assign({
6452
6503
  disabled: _disabled
6453
6504
  }, getInputProps(), {
6454
6505
  id: "file-upload"
6455
- })), text))), error && /*#__PURE__*/React__default["default"].createElement("p", {
6506
+ })), /*#__PURE__*/React__default["default"].createElement("label", {
6507
+ htmlFor: "file-upload",
6508
+ className: "khb_img-upload-wrapper-2"
6509
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
6510
+ className: className
6511
+ }, text))), error && /*#__PURE__*/React__default["default"].createElement("p", {
6456
6512
  className: "khb_input-error"
6457
6513
  }, error));
6458
6514
  };
6459
6515
  var ImageUpload$1 = /*#__PURE__*/React__default["default"].memo(ImageUpload);
6460
6516
 
6461
- const ChevronDown = ({
6462
- srText,
6463
- className
6464
- }) => {
6465
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, srText ? /*#__PURE__*/React__default["default"].createElement("span", {
6466
- className: "khb_sr-only"
6467
- }, srText) : null, /*#__PURE__*/React__default["default"].createElement("svg", {
6468
- xmlns: "http://www.w3.org/2000/svg",
6469
- viewBox: "-5 -8 24 24",
6470
- width: "24",
6471
- fill: "currentColor",
6472
- className: className
6473
- }, /*#__PURE__*/React__default["default"].createElement("path", {
6474
- d: "M7.071 5.314l4.95-4.95a1 1 0 1 1 1.414 1.414L7.778 7.435a1 1 0 0 1-1.414 0L.707 1.778A1 1 0 1 1 2.121.364l4.95 4.95z"
6475
- })));
6476
- };
6477
-
6478
- const ChevronUp = ({
6479
- srText,
6480
- className
6481
- }) => {
6482
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, srText ? /*#__PURE__*/React__default["default"].createElement("span", {
6483
- className: "khb_sr-only"
6484
- }, srText) : null, /*#__PURE__*/React__default["default"].createElement("svg", {
6485
- xmlns: "http://www.w3.org/2000/svg",
6486
- viewBox: "-5 -7.5 24 24",
6487
- width: "24",
6488
- fill: "currentColor",
6489
- className: className
6490
- }, /*#__PURE__*/React__default["default"].createElement("path", {
6491
- d: "M7.071 2.828l-4.95 4.95A1 1 0 0 1 .707 6.364L6.364.707a1 1 0 0 1 1.414 0l5.657 5.657a1 1 0 0 1-1.414 1.414l-4.95-4.95z"
6492
- })));
6493
- };
6494
-
6495
- const Accordian = ({
6496
- id,
6497
- className,
6517
+ const ConfirmPopOver = ({
6498
6518
  children,
6499
- open,
6500
- onToggle,
6519
+ onConfirm,
6501
6520
  title,
6502
- collapseId,
6503
- footerContent
6521
+ confirmText: _confirmText = 'Yes',
6522
+ cancelText: _cancelText = 'No'
6504
6523
  }) => {
6505
- return /*#__PURE__*/React__default["default"].createElement("div", null, /*#__PURE__*/React__default["default"].createElement("h2", {
6506
- id: id
6507
- }, /*#__PURE__*/React__default["default"].createElement("button", {
6508
- type: "button",
6509
- className: "khb_accordian-header",
6510
- "data-accordion-target": `#${collapseId}`,
6511
- "aria-expanded": "true",
6512
- "aria-controls": collapseId,
6513
- onClick: () => onToggle && onToggle(!open)
6514
- }, /*#__PURE__*/React__default["default"].createElement("span", null, title), open ? /*#__PURE__*/React__default["default"].createElement(ChevronUp, null) : /*#__PURE__*/React__default["default"].createElement(ChevronDown, null))), /*#__PURE__*/React__default["default"].createElement("div", {
6515
- id: collapseId,
6516
- className: classNames__default["default"]('khb_accordian-body', {
6517
- hidden: !open
6518
- }),
6519
- "aria-labelledby": id
6524
+ const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);
6525
+ const onConfirmClick = () => {
6526
+ setIsPopoverOpen(false);
6527
+ onConfirm();
6528
+ };
6529
+ return /*#__PURE__*/React__default["default"].createElement(reactTinyPopover.Popover, {
6530
+ containerClassName: "khb_confirm-popover",
6531
+ isOpen: isPopoverOpen,
6532
+ padding: 10,
6533
+ onClickOutside: () => setIsPopoverOpen(false),
6534
+ content: () => /*#__PURE__*/React__default["default"].createElement("div", {
6535
+ className: "khb_confirm-popover-content"
6536
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
6537
+ className: "khb_confirm-popover-title"
6538
+ }, title), /*#__PURE__*/React__default["default"].createElement("div", {
6539
+ className: "khb_confirm-popover-footer"
6540
+ }, /*#__PURE__*/React__default["default"].createElement(Button, {
6541
+ type: "secondary",
6542
+ onClick: () => setIsPopoverOpen(false)
6543
+ }, _cancelText), /*#__PURE__*/React__default["default"].createElement(Button, {
6544
+ type: "primary",
6545
+ onClick: onConfirmClick
6546
+ }, _confirmText)))
6520
6547
  }, /*#__PURE__*/React__default["default"].createElement("div", {
6521
- className: "khb_accordian-content"
6522
- }, children), footerContent && /*#__PURE__*/React__default["default"].createElement("div", {
6523
- className: "khb_accordian-footer"
6524
- }, footerContent)));
6548
+ onClick: () => setIsPopoverOpen(true)
6549
+ }, children));
6525
6550
  };
6526
6551
 
6527
6552
  const ItemsAccordian = ({
6528
- schema,
6529
- onDataSubmit,
6530
6553
  show,
6531
6554
  title,
6532
6555
  id,
6533
- itemsData,
6534
6556
  collapseId,
6535
6557
  toggleShow,
6558
+ loading,
6559
+ name,
6560
+ errors,
6561
+ control,
6562
+ register,
6563
+ setError,
6536
6564
  itemType,
6537
- widgetId,
6538
- onDelete,
6565
+ clearError,
6539
6566
  addText: _addText = 'Add',
6540
- saveText: _saveText = 'Save',
6541
- cancelText: _cancelText = 'Cancel',
6542
- deleteText: _deleteText = 'Delete',
6543
- editText: _editText = 'Edit'
6567
+ deleteText: _deleteText = 'Delete'
6544
6568
  }) => {
6545
- const [data, setData] = React.useState([]);
6546
- const formRefs = React.useRef([]);
6569
+ const {
6570
+ baseUrl
6571
+ } = useProviderState();
6572
+ const {
6573
+ onImageUpload,
6574
+ onImageRemove,
6575
+ t,
6576
+ imageBaseUrl
6577
+ } = useWidgetState();
6547
6578
  const [itemsShow, setItemsShow] = React.useState([]);
6548
- const [editingItemIndex, setEditingItemIndex] = React.useState();
6549
- React.useEffect(() => {
6550
- if (Array.isArray(itemsData)) {
6551
- setData(itemsData);
6552
- formRefs.current = itemsData.map(() => null);
6553
- setItemsShow(itemsData.map(() => false));
6554
- }
6555
- }, [itemsData]);
6556
- const onItemFormSubmitClick = index => {
6557
- var _a;
6558
- (_a = formRefs.current[index]) === null || _a === void 0 ? void 0 : _a.dispatchEvent(new Event('submit', {
6559
- cancelable: true,
6560
- bubbles: true
6561
- }));
6562
- };
6563
- const onItemFormSubmit = (index, formData) => {
6564
- var _a;
6565
- const state = index === editingItemIndex && data[index] ? 'UPDATE' : 'ADD';
6566
- const finalData = Object.assign(Object.assign({}, formData), {
6567
- widgetId,
6568
- itemType,
6569
- sequence: index
6570
- });
6571
- if (finalData['img'] && finalData['img']['_id']) {
6572
- const id = finalData['img']['_id'];
6573
- finalData['img'] = id;
6574
- }
6575
- onDataSubmit(state, finalData, state === 'UPDATE' ? (_a = data[index]) === null || _a === void 0 ? void 0 : _a['_id'] : undefined);
6576
- setEditingItemIndex(undefined);
6577
- };
6579
+ const {
6580
+ fields: items,
6581
+ append: appendItem,
6582
+ remove: removeItem
6583
+ } = reactHookForm.useFieldArray({
6584
+ name,
6585
+ control
6586
+ });
6578
6587
  const onItemsToggleClick = (index, status) => {
6588
+ var _a;
6579
6589
  const newItemsShow = [...itemsShow];
6580
- const newStatus = typeof status === 'undefined' ? !newItemsShow[index] : status;
6581
- newItemsShow.fill(false);
6590
+ const newStatus = ((_a = errors === null || errors === void 0 ? void 0 : errors[name]) === null || _a === void 0 ? void 0 : _a[index]) ? true : typeof status === 'undefined' ? !newItemsShow[index] : status;
6582
6591
  newItemsShow[index] = newStatus;
6583
6592
  setItemsShow(newItemsShow);
6584
6593
  };
6585
- const onItemRemoveClick = index => {
6586
- const newItemsShow = [...itemsShow];
6587
- newItemsShow.splice(index, 1);
6588
- setItemsShow(newItemsShow);
6589
- formRefs.current.splice(index, 1);
6590
- };
6591
- const onItemAddClick = () => {
6592
- const newItemsShow = [...itemsShow];
6593
- newItemsShow.push(false);
6594
- setItemsShow(newItemsShow);
6595
- formRefs.current.push(null);
6596
- onItemsToggleClick(newItemsShow.length - 1);
6597
- };
6598
- const onItemEditClick = index => {
6599
- setEditingItemIndex(index);
6600
- };
6601
- const onItemCancelClick = index => {
6602
- if (!data[index]) {
6603
- onItemRemoveClick(index);
6604
- } else {
6605
- setEditingItemIndex(undefined);
6594
+ React.useEffect(() => {
6595
+ var _a, _b;
6596
+ if (errors && ((_a = errors === null || errors === void 0 ? void 0 : errors[name]) === null || _a === void 0 ? void 0 : _a.length) > 0) {
6597
+ (_b = errors === null || errors === void 0 ? void 0 : errors[name]) === null || _b === void 0 ? void 0 : _b.forEach((errorItem, index) => {
6598
+ if (errorItem) onItemsToggleClick(index, true);
6599
+ });
6606
6600
  }
6607
- onItemsToggleClick(index, false);
6608
- };
6609
- const onDeleteClick = index => {
6610
- var _a;
6611
- onDelete((_a = data[index]) === null || _a === void 0 ? void 0 : _a['_id']);
6612
- onItemRemoveClick(index);
6601
+ // eslint-disable-next-line react-hooks/exhaustive-deps
6602
+ }, [errors, name, errors === null || errors === void 0 ? void 0 : errors[name]]);
6603
+ const addTab = index => {
6604
+ appendItem({
6605
+ title: '',
6606
+ subtitle: '',
6607
+ altText: '',
6608
+ link: '',
6609
+ img: '',
6610
+ srcset: [],
6611
+ itemType,
6612
+ sequence: index
6613
+ });
6613
6614
  };
6614
6615
  return /*#__PURE__*/React__default["default"].createElement(Accordian, {
6615
6616
  open: show,
@@ -6619,76 +6620,107 @@ const ItemsAccordian = ({
6619
6620
  id: id,
6620
6621
  footerContent: /*#__PURE__*/React__default["default"].createElement(Button, {
6621
6622
  size: "sm",
6622
- onClick: onItemAddClick,
6623
- disabled: !widgetId
6623
+ disabled: loading,
6624
+ onClick: () => addTab(items.length)
6624
6625
  }, _addText)
6625
6626
  }, /*#__PURE__*/React__default["default"].createElement("div", {
6626
6627
  className: "khb_item-items"
6627
- }, itemsShow.map((status, index) => /*#__PURE__*/React__default["default"].createElement(Accordian, {
6628
- key: index,
6629
- open: status,
6630
- onToggle: () => onItemsToggleClick(index),
6631
- title: `Item ${index + 1}`,
6632
- collapseId: `${id}-item-content-${index}`,
6633
- id: `${id}-item-${index}`,
6634
- footerContent: editingItemIndex === index || !data[index] ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(Button, {
6635
- size: "sm",
6636
- onClick: () => onItemFormSubmitClick(index)
6637
- }, _saveText), /*#__PURE__*/React__default["default"].createElement(Button, {
6638
- type: "secondary",
6639
- size: "sm",
6640
- onClick: () => onItemCancelClick(index)
6641
- }, _cancelText)) : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(Button, {
6642
- size: "sm",
6643
- onClick: () => onItemEditClick(index)
6644
- }, _editText), /*#__PURE__*/React__default["default"].createElement(Button, {
6645
- type: "danger",
6646
- size: "sm",
6647
- onClick: () => onDeleteClick(index)
6648
- }, _deleteText))
6649
- }, /*#__PURE__*/React__default["default"].createElement(Form, {
6650
- schema: schema,
6651
- data: data[index],
6652
- onSubmit: data => onItemFormSubmit(index, data),
6653
- ref: el => formRefs.current[index] = el,
6654
- enable: editingItemIndex === index || !data[index],
6655
- isUpdating: editingItemIndex === index
6656
- })))));
6657
- };
6658
-
6659
- const ConfirmPopOver = ({
6660
- children,
6661
- onConfirm,
6662
- title,
6663
- confirmText: _confirmText = 'Yes',
6664
- cancelText: _cancelText = 'No'
6665
- }) => {
6666
- const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);
6667
- const onConfirmClick = () => {
6668
- setIsPopoverOpen(false);
6669
- onConfirm();
6670
- };
6671
- return /*#__PURE__*/React__default["default"].createElement(reactTinyPopover.Popover, {
6672
- containerClassName: "khb_confirm-popover",
6673
- isOpen: isPopoverOpen,
6674
- padding: 10,
6675
- onClickOutside: () => setIsPopoverOpen(false),
6676
- content: () => /*#__PURE__*/React__default["default"].createElement("div", {
6677
- className: "khb_confirm-popover-content"
6628
+ }, items === null || items === void 0 ? void 0 : items.map((field, index) => {
6629
+ var _a, _b, _c, _d, _e, _f;
6630
+ return /*#__PURE__*/React__default["default"].createElement(Accordian, {
6631
+ key: index,
6632
+ open: itemsShow[index],
6633
+ onToggle: () => onItemsToggleClick(index),
6634
+ title: `Item ${index + 1}`,
6635
+ collapseId: `${id}-item-content-${index}`,
6636
+ id: `${id}-item-${index}`,
6637
+ footerContent: /*#__PURE__*/React__default["default"].createElement(ConfirmPopOver, {
6638
+ onConfirm: () => removeItem(index),
6639
+ title: t('item.deleteTitle'),
6640
+ confirmText: t('yesButtonText'),
6641
+ cancelText: t('cancelButtonText')
6642
+ }, /*#__PURE__*/React__default["default"].createElement(Button, {
6643
+ type: "danger",
6644
+ size: "sm",
6645
+ disabled: loading
6646
+ }, _deleteText))
6678
6647
  }, /*#__PURE__*/React__default["default"].createElement("div", {
6679
- className: "khb_confirm-popover-title"
6680
- }, title), /*#__PURE__*/React__default["default"].createElement("div", {
6681
- className: "khb_confirm-popover-footer"
6682
- }, /*#__PURE__*/React__default["default"].createElement(Button, {
6683
- type: "secondary",
6684
- onClick: () => setIsPopoverOpen(false)
6685
- }, _cancelText), /*#__PURE__*/React__default["default"].createElement(Button, {
6686
- type: "primary",
6687
- onClick: onConfirmClick
6688
- }, _confirmText)))
6689
- }, /*#__PURE__*/React__default["default"].createElement("div", {
6690
- onClick: () => setIsPopoverOpen(true)
6691
- }, children));
6648
+ className: "khb-form-items"
6649
+ }, /*#__PURE__*/React__default["default"].createElement(Input, {
6650
+ rest: register(`${name}.${index}.title`, {
6651
+ required: t('item.titleRequired')
6652
+ }),
6653
+ label: t('item.title'),
6654
+ error: (_d = (_c = (_b = (_a = errors[name]) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b['title']) === null || _c === void 0 ? void 0 : _c.message) === null || _d === void 0 ? void 0 : _d.toString(),
6655
+ type: 'text',
6656
+ className: "w-full p-2",
6657
+ placeholder: t('item.titlePlaceholder'),
6658
+ required: true
6659
+ }), /*#__PURE__*/React__default["default"].createElement(Input, {
6660
+ rest: register(`${name}.${index}.subtitle`),
6661
+ label: t('item.subtitle'),
6662
+ type: 'text',
6663
+ className: "w-full p-2",
6664
+ placeholder: t('item.subTitlePlaceholder')
6665
+ }), /*#__PURE__*/React__default["default"].createElement(Input, {
6666
+ rest: register(`${name}.${index}.altText`),
6667
+ label: t('item.altText'),
6668
+ type: 'text',
6669
+ className: "w-full p-2",
6670
+ placeholder: t('item.altTextPlaceholder')
6671
+ }), /*#__PURE__*/React__default["default"].createElement(Input, {
6672
+ rest: register(`${name}.${index}.link`),
6673
+ label: t('item.link'),
6674
+ type: 'url',
6675
+ className: "w-full p-2",
6676
+ placeholder: t('item.linkPlaceholder')
6677
+ }), /*#__PURE__*/React__default["default"].createElement(Input.SrcSet, {
6678
+ control: control,
6679
+ register: register,
6680
+ label: t(`item.srcset`),
6681
+ name: `${name}.${index}.srcset`,
6682
+ errors: (_f = (_e = errors[name]) === null || _e === void 0 ? void 0 : _e[index]) === null || _f === void 0 ? void 0 : _f['srcset'],
6683
+ t: t
6684
+ }), /*#__PURE__*/React__default["default"].createElement("div", {
6685
+ className: "kms_input-wrapper"
6686
+ }, /*#__PURE__*/React__default["default"].createElement("label", {
6687
+ className: "kms_input-label"
6688
+ }, t('item.image')), /*#__PURE__*/React__default["default"].createElement(reactHookForm.Controller, {
6689
+ control: control,
6690
+ name: `${name}.${index}.img`,
6691
+ render: ({
6692
+ field
6693
+ }) => {
6694
+ var _a, _b, _c, _d;
6695
+ return /*#__PURE__*/React__default["default"].createElement(ImageUpload$1, {
6696
+ imgId: field.value,
6697
+ clearError: () => clearError(`${name}.${index}.img`),
6698
+ maxSize: 10485760,
6699
+ onError: msg => setError(`${name}.${index}.img`, {
6700
+ type: 'custom',
6701
+ message: msg
6702
+ }),
6703
+ error: (_d = (_c = (_b = (_a = errors[name]) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b['img']) === null || _c === void 0 ? void 0 : _c.message) === null || _d === void 0 ? void 0 : _d.toString(),
6704
+ setImgId: value => {
6705
+ field.onChange(value);
6706
+ },
6707
+ baseUrl: imageBaseUrl ? imageBaseUrl : baseUrl,
6708
+ text: /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
6709
+ className: "khb_img-text-wrapper"
6710
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
6711
+ className: "khb_img-text-label"
6712
+ }, /*#__PURE__*/React__default["default"].createElement("span", null, t('item.uploadFile'))), /*#__PURE__*/React__default["default"].createElement("p", {
6713
+ className: "khb_img-text-1"
6714
+ }, t('item.dragDrop'))), /*#__PURE__*/React__default["default"].createElement("p", {
6715
+ className: "khb_img-text-2"
6716
+ }, t('item.allowedFormat'))),
6717
+ onImageUpload: onImageUpload,
6718
+ onImageRemove: onImageRemove,
6719
+ className: "khb_img-upload-wrapper-3"
6720
+ });
6721
+ }
6722
+ }))));
6723
+ })));
6692
6724
  };
6693
6725
 
6694
6726
  const TabItem = ({
@@ -6827,6 +6859,8 @@ const constants = {
6827
6859
  carouselWidgetTypeValue: 'Carousel',
6828
6860
  imageItemsTypeValue: 'Image',
6829
6861
  tabsAccessor: 'tabs',
6862
+ webItems: 'webItems',
6863
+ mobileItems: 'mobileItems',
6830
6864
  tabCollectionItemsAccessor: 'collectionItems'
6831
6865
  };
6832
6866
  const WidgetForm = ({
@@ -6843,13 +6877,13 @@ const WidgetForm = ({
6843
6877
  setValue,
6844
6878
  control,
6845
6879
  watch,
6880
+ clearErrors,
6846
6881
  setError,
6847
6882
  getValues
6848
6883
  } = reactHookForm.useForm({
6849
6884
  shouldUnregister: false
6850
6885
  });
6851
6886
  const {
6852
- baseUrl,
6853
6887
  switchClass
6854
6888
  } = useProviderState();
6855
6889
  const {
@@ -6857,23 +6891,17 @@ const WidgetForm = ({
6857
6891
  data,
6858
6892
  canAdd,
6859
6893
  canUpdate,
6860
- webItems,
6861
- mobileItems,
6862
6894
  formState,
6863
6895
  itemsTypes,
6864
6896
  widgetTypes,
6865
- onItemFormSubmit,
6897
+ loading,
6866
6898
  onWidgetFormSubmit,
6867
- onDeleteItem,
6868
- onImageRemove,
6869
- onImageUpload,
6870
6899
  getCollectionData,
6871
6900
  collectionData,
6872
6901
  collectionDataLoading,
6873
6902
  formatListItem,
6874
6903
  formatOptionLabel,
6875
- reactSelectStyles,
6876
- imageBaseUrl
6904
+ reactSelectStyles
6877
6905
  } = useWidgetState();
6878
6906
  const callerRef = React.useRef(null);
6879
6907
  const [activeTab, setActiveTab] = React.useState(0);
@@ -6914,7 +6942,7 @@ const WidgetForm = ({
6914
6942
  let valueToSet = '';
6915
6943
  if (formState === 'UPDATE') {
6916
6944
  if (data[constants.widgetTypeAccessor] === constants.tabsWidgetTypeValue) {
6917
- collectionItems = data[constants.tabsAccessor][activeTab]['collectionItems'];
6945
+ collectionItems = data[constants.tabsAccessor][activeTab] ? data[constants.tabsAccessor][activeTab]['collectionItems'] : [];
6918
6946
  valueToSet = `${constants.tabsAccessor}.${activeTab}.${constants.tabCollectionItemsAccessor}`;
6919
6947
  } else if (Array.isArray(data[constants.collectionItemsAccessor]) && data[constants.collectionItemsAccessor].length > 0) {
6920
6948
  collectionItems = data[constants.collectionItemsAccessor];
@@ -7014,7 +7042,19 @@ const WidgetForm = ({
7014
7042
  if (Array.isArray(selectedCollectionItems) && selectedCollectionItems.length > 0) {
7015
7043
  formData['collectionItems'] = selectedCollectionItems.map(item => item.value);
7016
7044
  }
7017
- onWidgetFormSubmit(formData);
7045
+ let items = [...(getValues(constants.webItems) || []), ...(getValues(constants.mobileItems) || [])];
7046
+ items = items.map(_a => {
7047
+ var item = __rest(_a, ["_id", "__v", "widgetId"]);
7048
+ if (item['img'] && item['img']['_id']) {
7049
+ item['img'] = item['img']['_id'];
7050
+ } else if (typeof item['img'] !== 'string' || !item['img']) {
7051
+ delete item['img'];
7052
+ }
7053
+ return item;
7054
+ });
7055
+ onWidgetFormSubmit(Object.assign(Object.assign({}, formData), {
7056
+ items
7057
+ }));
7018
7058
  };
7019
7059
  const onCollectionIndexChange = result => {
7020
7060
  const {
@@ -7177,65 +7217,6 @@ const WidgetForm = ({
7177
7217
  customStyles: reactSelectStyles || {},
7178
7218
  selectKey: selectedCollectionType === null || selectedCollectionType === void 0 ? void 0 : selectedCollectionType.value
7179
7219
  }];
7180
- const itemFormSchema = [{
7181
- label: `${t('item.title')}`,
7182
- required: true,
7183
- accessor: 'title',
7184
- type: 'text',
7185
- placeholder: t('item.titlePlaceholder')
7186
- }, {
7187
- label: `${t('item.subtitle')}`,
7188
- accessor: 'subtitle',
7189
- type: 'text',
7190
- placeholder: t('item.subTitlePlaceholder')
7191
- }, {
7192
- label: `${t('item.altText')}`,
7193
- accessor: 'altText',
7194
- type: 'text',
7195
- placeholder: t('item.altTextPlaceholder')
7196
- }, {
7197
- label: `${t('item.link')}`,
7198
- required: true,
7199
- accessor: 'link',
7200
- type: 'url',
7201
- placeholder: t('item.linkPlaceholder')
7202
- }, {
7203
- label: `${t('item.srcset')}`,
7204
- accessor: 'srcset',
7205
- type: 'srcset'
7206
- }, {
7207
- label: t('item.image'),
7208
- accessor: 'img',
7209
- Input: ({
7210
- field,
7211
- error,
7212
- setError,
7213
- disabled
7214
- }) => /*#__PURE__*/React__default["default"].createElement(ImageUpload$1, {
7215
- imgId: field.value,
7216
- maxSize: 10485760,
7217
- onError: setError,
7218
- error: error,
7219
- setImgId: value => {
7220
- field.onChange(value);
7221
- },
7222
- baseUrl: imageBaseUrl ? imageBaseUrl : baseUrl,
7223
- disabled: disabled,
7224
- text: /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement("div", {
7225
- className: "khb_img-text-wrapper"
7226
- }, /*#__PURE__*/React__default["default"].createElement("label", {
7227
- htmlFor: "file-upload",
7228
- className: "khb_img-text-label"
7229
- }, /*#__PURE__*/React__default["default"].createElement("span", null, t('item.uploadFile'))), /*#__PURE__*/React__default["default"].createElement("p", {
7230
- className: "khb_img-text-1"
7231
- }, t('item.dragDrop'))), /*#__PURE__*/React__default["default"].createElement("p", {
7232
- className: "khb_img-text-2"
7233
- }, t('item.allowedFormat'))),
7234
- onImageUpload: onImageUpload,
7235
- onImageRemove: onImageRemove,
7236
- className: "khb_img-upload-wrapper-3"
7237
- })
7238
- }];
7239
7220
  if (!canAdd || !canUpdate) return null;
7240
7221
  return /*#__PURE__*/React__default["default"].createElement("div", {
7241
7222
  className: "khb_form"
@@ -7273,38 +7254,36 @@ const WidgetForm = ({
7273
7254
  formatItem: formatListItem,
7274
7255
  listCode: selectedCollectionType === null || selectedCollectionType === void 0 ? void 0 : selectedCollectionType.value
7275
7256
  }), itemsEnabled && selectedWidgetType !== 'Tabs' && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(ItemsAccordian, {
7276
- collapseId: "webItems",
7257
+ clearError: clearErrors,
7258
+ collapseId: constants.webItems,
7277
7259
  title: t('widget.webItems'),
7278
- id: "webItems",
7279
- schema: itemFormSchema,
7280
- show: webItemsVisible,
7281
- itemsData: webItems,
7260
+ id: constants.webItems,
7261
+ setError: setError,
7262
+ show: webItemsVisible || !!(errors && (errors === null || errors === void 0 ? void 0 : errors[constants.webItems])),
7282
7263
  toggleShow: setWebItemsVisible,
7283
- onDataSubmit: onItemFormSubmit,
7284
7264
  itemType: "Web",
7285
- widgetId: data === null || data === void 0 ? void 0 : data._id,
7286
- onDelete: onDeleteItem,
7265
+ name: constants.webItems,
7266
+ errors: errors,
7267
+ control: control,
7268
+ register: register,
7269
+ loading: loading,
7287
7270
  addText: t('addButtonText'),
7288
- cancelText: t('cancelButtonText'),
7289
- saveText: t('saveButtonText'),
7290
- editText: t('editButtonText'),
7291
7271
  deleteText: t('deleteButtonText')
7292
7272
  }), /*#__PURE__*/React__default["default"].createElement(ItemsAccordian, {
7293
- collapseId: "mobileItems",
7273
+ clearError: clearErrors,
7274
+ collapseId: constants.mobileItems,
7294
7275
  title: t('widget.mobileItems'),
7295
- id: "mobileItems",
7296
- schema: itemFormSchema,
7297
- show: mobileItemsVisible,
7298
- itemsData: mobileItems,
7276
+ id: constants.mobileItems,
7277
+ name: constants.mobileItems,
7278
+ setError: setError,
7279
+ loading: loading,
7280
+ show: mobileItemsVisible || !!(errors && (errors === null || errors === void 0 ? void 0 : errors[constants.mobileItems])),
7299
7281
  toggleShow: setMobileItemsVisible,
7300
- onDataSubmit: onItemFormSubmit,
7301
7282
  itemType: "Mobile",
7302
- widgetId: data === null || data === void 0 ? void 0 : data._id,
7303
- onDelete: onDeleteItem,
7283
+ errors: errors,
7284
+ control: control,
7285
+ register: register,
7304
7286
  addText: t('addButtonText'),
7305
- cancelText: t('cancelButtonText'),
7306
- saveText: t('saveButtonText'),
7307
- editText: t('editButtonText'),
7308
7287
  deleteText: t('deleteButtonText')
7309
7288
  })));
7310
7289
  };
@@ -7450,7 +7429,6 @@ const Widget = ({
7450
7429
  itemData,
7451
7430
  getWidgets,
7452
7431
  onCofirmDeleteWidget,
7453
- onDeleteItem,
7454
7432
  onImageRemove,
7455
7433
  onImageUpload,
7456
7434
  onPartialUpdateWidget,
@@ -7464,11 +7442,7 @@ const Widget = ({
7464
7442
  totalRecords,
7465
7443
  currentPage,
7466
7444
  pageSize,
7467
- setCurrentPage,
7468
- // Item
7469
- itemsList,
7470
- itemsLoading,
7471
- onItemFormSubmit
7445
+ setCurrentPage
7472
7446
  } = useWidget({
7473
7447
  canList: derivedPermissions.list,
7474
7448
  routes,
@@ -7487,7 +7461,6 @@ const Widget = ({
7487
7461
  loader: loader,
7488
7462
  onWidgetFormSubmit: onWidgetFormSubmit,
7489
7463
  data: itemData,
7490
- onDeleteItem: onDeleteItem,
7491
7464
  getWidgets: getWidgets,
7492
7465
  onImageRemove: onImageRemove,
7493
7466
  onImageUpload: onImageUpload,
@@ -7505,11 +7478,6 @@ const Widget = ({
7505
7478
  currentPage: currentPage,
7506
7479
  pageSize: pageSize,
7507
7480
  setCurrentPage: setCurrentPage,
7508
- // Item
7509
- webItems: itemsList.web,
7510
- mobileItems: itemsList.mobile,
7511
- itemsLoading: itemsLoading,
7512
- onItemFormSubmit: onItemFormSubmit,
7513
7481
  // Permissions
7514
7482
  canAdd: derivedPermissions.add,
7515
7483
  canDelete: derivedPermissions.delete,