@knovator/pagecreator-admin 0.3.2 → 0.4.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.
Files changed (4) hide show
  1. package/index.cjs +173 -105
  2. package/index.css +123 -5
  3. package/index.js +173 -105
  4. package/package.json +1 -1
package/index.cjs CHANGED
@@ -1680,6 +1680,7 @@ const DEFAULT_PERMISSIONS = {
1680
1680
  update: true
1681
1681
  };
1682
1682
  const TRANSLATION_PAIRS_COMMON = {
1683
+ confirmationRequired: 'Confirmation Required',
1683
1684
  permanentlyDelete: 'You are about to permanently delete the',
1684
1685
  lossOfData: 'This action can lead to data loss. To prevent accidental actions we ask you to confirm your intention.',
1685
1686
  pleaseType: 'Please type',
@@ -1697,7 +1698,8 @@ const TRANSLATION_PAIRS_COMMON = {
1697
1698
  deleteButtonText: 'Delete',
1698
1699
  saveButtonText: 'Save',
1699
1700
  showing: 'Showing',
1700
- of: 'of'
1701
+ of: 'of',
1702
+ typeHerePlaceholder: 'Type Here'
1701
1703
  };
1702
1704
  const TRANSLATION_PAIRS_WIDGET = {
1703
1705
  'widget.name': 'Name',
@@ -1710,6 +1712,7 @@ const TRANSLATION_PAIRS_WIDGET = {
1710
1712
  'widget.itemsTypePlaceholder': 'Select Items Type',
1711
1713
  'widget.widgetType': 'Widget Type',
1712
1714
  'widget.widgetTypeRequired': 'Widget Type is required',
1715
+ 'widget.color': 'Color',
1713
1716
  'widget.code': 'Code',
1714
1717
  'widget.codePlaceholder': 'Enter code',
1715
1718
  'widget.codeRequired': 'Code is required',
@@ -1735,6 +1738,8 @@ const TRANSLATION_PAIRS_WIDGET = {
1735
1738
  const TRANSLATION_PAIRS_ITEM = {
1736
1739
  'item.title': 'Title',
1737
1740
  'item.titlePlaceholder': 'Enter title',
1741
+ 'item.subtitle': 'Subtitle',
1742
+ 'item.subTitlePlaceholder': 'Enter Subtitle',
1738
1743
  'item.altText': 'Alt Text',
1739
1744
  'item.altTextPlaceholder': 'Enter alt text',
1740
1745
  'item.link': 'Link',
@@ -2768,8 +2773,9 @@ const getApiType = ({
2768
2773
  };
2769
2774
 
2770
2775
  const usePage = ({
2771
- defaultLimit,
2772
2776
  routes,
2777
+ defaultLimit,
2778
+ canList: _canList = true,
2773
2779
  preConfirmDelete
2774
2780
  }) => {
2775
2781
  const [list, setList] = React.useState([]);
@@ -2975,10 +2981,10 @@ const usePage = ({
2975
2981
  });
2976
2982
  };
2977
2983
  React.useEffect(() => {
2978
- getPages();
2984
+ if (_canList) getPages();
2979
2985
  getWidgets();
2980
2986
  // eslint-disable-next-line react-hooks/exhaustive-deps
2981
- }, [pageSize, currentPage]);
2987
+ }, [pageSize, currentPage, _canList]);
2982
2988
  return {
2983
2989
  list,
2984
2990
  getPages,
@@ -3080,21 +3086,6 @@ function usePageState() {
3080
3086
  return context;
3081
3087
  }
3082
3088
 
3083
- const Button = ({
3084
- type: _type = 'primary',
3085
- size: _size = 'base',
3086
- onClick,
3087
- className,
3088
- children,
3089
- disabled
3090
- }) => {
3091
- return /*#__PURE__*/React__default["default"].createElement("button", {
3092
- className: classNames__default["default"]('khb_btn', `khb_btn-${_type}`, `khb_btn-${_size}`, className),
3093
- onClick: onClick,
3094
- disabled: disabled
3095
- }, children);
3096
- };
3097
-
3098
3089
  const Pencil = ({
3099
3090
  srText,
3100
3091
  className
@@ -3161,7 +3152,7 @@ const Table = ({
3161
3152
  }, loader) : /*#__PURE__*/React__default["default"].createElement("table", {
3162
3153
  className: "khb_table"
3163
3154
  }, /*#__PURE__*/React__default["default"].createElement("thead", {
3164
- className: "khb_table-thead"
3155
+ className: "khb_thead"
3165
3156
  }, /*#__PURE__*/React__default["default"].createElement("tr", null, dataKeys.map((key, i) => /*#__PURE__*/React__default["default"].createElement("th", {
3166
3157
  scope: "col",
3167
3158
  className: "khb_table-heading",
@@ -3169,17 +3160,22 @@ const Table = ({
3169
3160
  }, key.label)), actions && ((actions === null || actions === void 0 ? void 0 : actions.edit) || (actions === null || actions === void 0 ? void 0 : actions.delete)) && /*#__PURE__*/React__default["default"].createElement("th", {
3170
3161
  scope: "col",
3171
3162
  className: "khb_table-heading"
3172
- }, "Actions"))), /*#__PURE__*/React__default["default"].createElement("tbody", null, data.length > 0 ? data.map((item, i) => /*#__PURE__*/React__default["default"].createElement("tr", {
3163
+ }, "Actions"))), /*#__PURE__*/React__default["default"].createElement("tbody", {
3164
+ className: "khb_tbody"
3165
+ }, data.length > 0 ? data.map((item, i) => /*#__PURE__*/React__default["default"].createElement("tr", {
3173
3166
  className: "khb_table-row",
3174
3167
  key: item['id'] || item['_id'] || i
3175
3168
  }, dataKeys.map((key, j) => cellItemRenderer(item, key, j)), actions && /*#__PURE__*/React__default["default"].createElement("td", {
3176
3169
  className: "khb_table-row-actions"
3177
- }, actions.edit && /*#__PURE__*/React__default["default"].createElement(Button, {
3178
- size: "xs",
3170
+ }, actions.edit && typeof actions.edit === 'function' ? /*#__PURE__*/React__default["default"].createElement("button", {
3171
+ className: "khb_actions-update",
3172
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3173
+ // @ts-ignore
3179
3174
  onClick: () => actions.edit(item)
3180
- }, /*#__PURE__*/React__default["default"].createElement(Pencil, null)), actions.delete && /*#__PURE__*/React__default["default"].createElement(Button, {
3181
- size: "xs",
3182
- type: "danger",
3175
+ }, /*#__PURE__*/React__default["default"].createElement(Pencil, null)) : null, actions.delete && typeof actions.delete === 'function' && /*#__PURE__*/React__default["default"].createElement("button", {
3176
+ className: "khb_actions-delete",
3177
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3178
+ // @ts-ignore
3183
3179
  onClick: () => actions.delete(item)
3184
3180
  }, /*#__PURE__*/React__default["default"].createElement(Trash, null))))) : /*#__PURE__*/React__default["default"].createElement("tr", null, /*#__PURE__*/React__default["default"].createElement("td", {
3185
3181
  colSpan: ((dataKeys === null || dataKeys === void 0 ? void 0 : dataKeys.length) || 0) + 1
@@ -3189,7 +3185,6 @@ const Table = ({
3189
3185
  const PageTable = () => {
3190
3186
  const {
3191
3187
  list,
3192
- canList,
3193
3188
  onChangeFormState,
3194
3189
  t,
3195
3190
  loading,
@@ -3199,26 +3194,23 @@ const PageTable = () => {
3199
3194
  } = usePageState();
3200
3195
  const onUpdateClick = item => onChangeFormState('UPDATE', item);
3201
3196
  const onDeleteClick = item => onChangeFormState('DELETE', item);
3202
- if (Array.isArray(list) && canList) {
3203
- return /*#__PURE__*/React__default["default"].createElement(Table, {
3204
- data: list,
3205
- loader: loader,
3206
- loading: loading,
3207
- dataKeys: [{
3208
- label: t('page.tableName'),
3209
- dataKey: 'name',
3210
- highlight: true
3211
- }, {
3212
- label: t('page.tableCode'),
3213
- dataKey: 'code'
3214
- }],
3215
- actions: {
3216
- edit: canUpdate ? onUpdateClick : undefined,
3217
- delete: canDelete ? onDeleteClick : undefined
3218
- }
3219
- });
3220
- }
3221
- return null;
3197
+ return /*#__PURE__*/React__default["default"].createElement(Table, {
3198
+ data: list,
3199
+ loader: loader,
3200
+ loading: loading,
3201
+ dataKeys: [{
3202
+ label: t('page.tableName'),
3203
+ dataKey: 'name',
3204
+ highlight: true
3205
+ }, {
3206
+ label: t('page.tableCode'),
3207
+ dataKey: 'code'
3208
+ }],
3209
+ actions: {
3210
+ edit: canUpdate ? onUpdateClick : undefined,
3211
+ delete: canDelete ? onDeleteClick : undefined
3212
+ }
3213
+ });
3222
3214
  };
3223
3215
 
3224
3216
  const Checkbox = ({
@@ -3520,10 +3512,11 @@ var Input = Object.assign(Input$1, {
3520
3512
  const PageSearch = () => {
3521
3513
  const {
3522
3514
  getPages,
3523
- t
3515
+ t,
3516
+ canList
3524
3517
  } = usePageState();
3525
3518
  const callerRef = React.useRef(null);
3526
- const [search, setSearch] = React.useState("");
3519
+ const [search, setSearch] = React.useState('');
3527
3520
  const onChangeSearch = str => {
3528
3521
  setSearch(str);
3529
3522
  if (callerRef.current) clearTimeout(callerRef.current);
@@ -3534,8 +3527,9 @@ const PageSearch = () => {
3534
3527
  return /*#__PURE__*/React__default["default"].createElement(Input, {
3535
3528
  type: "search",
3536
3529
  value: search,
3530
+ disabled: !canList,
3537
3531
  onChange: e => onChangeSearch(e.target.value),
3538
- placeholder: t("page.searchPages")
3532
+ placeholder: t('page.searchPages')
3539
3533
  });
3540
3534
  };
3541
3535
 
@@ -3931,13 +3925,14 @@ const SimpleForm = /*#__PURE__*/React.forwardRef(({
3931
3925
  case 'text':
3932
3926
  case 'number':
3933
3927
  case 'url':
3928
+ case 'color':
3934
3929
  default:
3935
3930
  input = /*#__PURE__*/React__default["default"].createElement(Input, {
3936
3931
  rest: register(schema.accessor, schema.validations || {}),
3937
3932
  label: schema.label,
3938
3933
  error: (_f = (_e = errors[schema.accessor]) === null || _e === void 0 ? void 0 : _e.message) === null || _f === void 0 ? void 0 : _f.toString(),
3939
3934
  type: schema.type,
3940
- className: "w-full p-2",
3935
+ className: classNames__default["default"]('w-full p-2', schema.className),
3941
3936
  placeholder: schema.placeholder,
3942
3937
  disabled: _isUpdating && typeof schema.editable !== 'undefined' && !schema.editable || !_enable,
3943
3938
  required: schema.required,
@@ -4104,6 +4099,21 @@ const PageForm = ({
4104
4099
  }));
4105
4100
  };
4106
4101
 
4102
+ const Button = ({
4103
+ type: _type = 'primary',
4104
+ size: _size = 'base',
4105
+ onClick,
4106
+ className,
4107
+ children,
4108
+ disabled
4109
+ }) => {
4110
+ return /*#__PURE__*/React__default["default"].createElement("button", {
4111
+ className: classNames__default["default"]('khb_btn', `khb_btn-${_type}`, `khb_btn-${_size}`, className),
4112
+ onClick: onClick,
4113
+ disabled: disabled
4114
+ }, children);
4115
+ };
4116
+
4107
4117
  const AddButton$1 = () => {
4108
4118
  const {
4109
4119
  onChangeFormState,
@@ -4154,7 +4164,9 @@ const Pagination = ({
4154
4164
  setCurrentPage,
4155
4165
  showingText: _showingText = TRANSLATION_PAIRS_COMMON.showing,
4156
4166
  pageText: _pageText = TRANSLATION_PAIRS_COMMON.page,
4157
- ofText: _ofText = TRANSLATION_PAIRS_COMMON.of
4167
+ ofText: _ofText = TRANSLATION_PAIRS_COMMON.of,
4168
+ previousContent,
4169
+ nextContent
4158
4170
  }) => {
4159
4171
  const [localCurrentPage, setLocalCurrentPage] = React.useState(currentPage);
4160
4172
  const updatePagination = () => {
@@ -4185,16 +4197,17 @@ const Pagination = ({
4185
4197
  className: "khb_pagination-total"
4186
4198
  }, _showingText, ' ', /*#__PURE__*/React__default["default"].createElement("span", {
4187
4199
  className: "khb_pagination-total-showing"
4188
- }, (currentPage - 1) * pageSize + 1), ' ', "-", ' ', /*#__PURE__*/React__default["default"].createElement("span", {
4200
+ }, !totalRecords ? 0 : (currentPage - 1) * pageSize + 1), ' ', "-", ' ', /*#__PURE__*/React__default["default"].createElement("span", {
4189
4201
  className: "khb_pagination-total-showing"
4190
4202
  }, Math.min(currentPage * pageSize, totalRecords)), ' ', _ofText, " ", totalRecords), /*#__PURE__*/React__default["default"].createElement("ul", {
4191
4203
  className: "khb_pagination-actions"
4192
4204
  }, /*#__PURE__*/React__default["default"].createElement(Button, {
4193
4205
  size: "xs",
4194
4206
  type: "secondary",
4207
+ className: "khb_pagination-previous",
4195
4208
  disabled: currentPage - 1 === 0,
4196
4209
  onClick: () => onPaginationButtonClick('previous')
4197
- }, /*#__PURE__*/React__default["default"].createElement(ChevronLeft, {
4210
+ }, previousContent || /*#__PURE__*/React__default["default"].createElement(ChevronLeft, {
4198
4211
  srText: "Previous"
4199
4212
  })), /*#__PURE__*/React__default["default"].createElement("div", {
4200
4213
  className: "khb_pagination-pager"
@@ -4205,13 +4218,15 @@ const Pagination = ({
4205
4218
  id: "page",
4206
4219
  value: localCurrentPage,
4207
4220
  onChange: e => setLocalCurrentPage(Number(e.target.value)),
4208
- onBlur: updatePagination
4221
+ onBlur: updatePagination,
4222
+ disabled: !totalRecords
4209
4223
  }), ' ', "/ ", totalPages), /*#__PURE__*/React__default["default"].createElement(Button, {
4210
4224
  size: "xs",
4211
4225
  type: "secondary",
4212
- disabled: currentPage === totalPages,
4226
+ className: "khb_pagination-next",
4227
+ disabled: currentPage === totalPages || !totalRecords,
4213
4228
  onClick: () => onPaginationButtonClick('next')
4214
- }, /*#__PURE__*/React__default["default"].createElement(ChevronRight, {
4229
+ }, nextContent || /*#__PURE__*/React__default["default"].createElement(ChevronRight, {
4215
4230
  srText: "Next"
4216
4231
  }))));
4217
4232
  };
@@ -4226,9 +4241,11 @@ const PagePagination = () => {
4226
4241
  setCurrentPage
4227
4242
  } = usePageState();
4228
4243
  return /*#__PURE__*/React__default["default"].createElement(Pagination, {
4229
- ofText: t("of"),
4230
- pageText: t("page"),
4231
- showingText: t("showing"),
4244
+ ofText: t('of'),
4245
+ pageText: t('page'),
4246
+ showingText: t('showing'),
4247
+ nextContent: t('nextContent'),
4248
+ previousContent: t('previousContent'),
4232
4249
  totalPages: totalPages,
4233
4250
  totalRecords: totalRecords,
4234
4251
  currentPage: currentPage,
@@ -4292,11 +4309,13 @@ const DeleteModal = ({
4292
4309
  onClose,
4293
4310
  itemData,
4294
4311
  onConfirmDelete,
4295
- permanentlyDelete: _permanentlyDelete = TRANSLATION_PAIRS_COMMON.permanentlyDelete,
4296
- lossOfData: _lossOfData = TRANSLATION_PAIRS_COMMON.lossOfData,
4297
- pleaseType: _pleaseType = TRANSLATION_PAIRS_COMMON.pleaseType,
4298
- toProceedOrCancel: _toProceedOrCancel = TRANSLATION_PAIRS_COMMON.toProceedOrCancel,
4299
- confirm: _confirm = TRANSLATION_PAIRS_COMMON.confirm
4312
+ confirmationRequired,
4313
+ permanentlyDelete,
4314
+ lossOfData,
4315
+ pleaseType,
4316
+ toProceedOrCancel,
4317
+ confirm,
4318
+ typeHerePlaceholder
4300
4319
  }) => {
4301
4320
  const [userInput, setUserInput] = React.useState('');
4302
4321
  React.useEffect(() => {
@@ -4305,19 +4324,19 @@ const DeleteModal = ({
4305
4324
  return itemData ? /*#__PURE__*/React__default["default"].createElement(Modal, {
4306
4325
  open: formState === 'DELETE' && itemData ? true : false,
4307
4326
  onClose: onClose,
4308
- title: "Confirmation Required"
4327
+ title: confirmationRequired || TRANSLATION_PAIRS_COMMON.confirmationRequired
4309
4328
  }, /*#__PURE__*/React__default["default"].createElement("div", {
4310
4329
  className: "khb_delete-header"
4311
- }, /*#__PURE__*/React__default["default"].createElement("p", null, _permanentlyDelete, " ", /*#__PURE__*/React__default["default"].createElement("b", null, itemData['name']))), /*#__PURE__*/React__default["default"].createElement("div", {
4330
+ }, /*#__PURE__*/React__default["default"].createElement("p", null, permanentlyDelete || TRANSLATION_PAIRS_COMMON.permanentlyDelete, ' ', /*#__PURE__*/React__default["default"].createElement("b", null, itemData['name']))), /*#__PURE__*/React__default["default"].createElement("div", {
4312
4331
  className: "khb_delete-content"
4313
- }, /*#__PURE__*/React__default["default"].createElement("p", null, _lossOfData), /*#__PURE__*/React__default["default"].createElement("p", {
4332
+ }, /*#__PURE__*/React__default["default"].createElement("p", null, lossOfData || TRANSLATION_PAIRS_COMMON.lossOfData), /*#__PURE__*/React__default["default"].createElement("p", {
4314
4333
  className: "khb_delete-note"
4315
- }, _pleaseType, ' ', /*#__PURE__*/React__default["default"].createElement("b", {
4334
+ }, pleaseType || TRANSLATION_PAIRS_COMMON.pleaseType, ' ', /*#__PURE__*/React__default["default"].createElement("b", {
4316
4335
  className: "text-black font-bold"
4317
- }, itemData['name']), ' ', _toProceedOrCancel)), /*#__PURE__*/React__default["default"].createElement("div", {
4336
+ }, itemData['name']), ' ', toProceedOrCancel || TRANSLATION_PAIRS_COMMON.toProceedOrCancel)), /*#__PURE__*/React__default["default"].createElement("div", {
4318
4337
  className: "khb_delete-actions"
4319
4338
  }, /*#__PURE__*/React__default["default"].createElement(Input, {
4320
- placeholder: "Type Here",
4339
+ placeholder: typeHerePlaceholder || TRANSLATION_PAIRS_COMMON.typeHerePlaceholder,
4321
4340
  className: "khb_delete-input",
4322
4341
  value: userInput,
4323
4342
  onChange: e => setUserInput(e.target.value)
@@ -4326,7 +4345,7 @@ const DeleteModal = ({
4326
4345
  }, /*#__PURE__*/React__default["default"].createElement(Button, {
4327
4346
  disabled: userInput !== (itemData === null || itemData === void 0 ? void 0 : itemData['name']),
4328
4347
  onClick: onConfirmDelete
4329
- }, _confirm)))) : null;
4348
+ }, confirm || TRANSLATION_PAIRS_COMMON.confirm)))) : null;
4330
4349
  };
4331
4350
 
4332
4351
  const Drawer = ({
@@ -4382,7 +4401,7 @@ const Drawer = ({
4382
4401
  }, /*#__PURE__*/React__default["default"].createElement("p", {
4383
4402
  className: "khb_drawer-header-title"
4384
4403
  }, title)), /*#__PURE__*/React__default["default"].createElement("div", {
4385
- className: "relative flex-1 px-6 py-6 overflow-auto"
4404
+ className: "khb_darwer-content"
4386
4405
  }, children), footerContent && /*#__PURE__*/React__default["default"].createElement("div", {
4387
4406
  className: "khb_drawer-footer"
4388
4407
  }, footerContent)))))));
@@ -4461,8 +4480,12 @@ const Page = ({
4461
4480
  loader,
4462
4481
  explicitForm: _explicitForm = false,
4463
4482
  children,
4464
- permissions: _permissions = DEFAULT_PERMISSIONS
4483
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
4484
+ // @ts-ignore
4485
+ permissions: _permissions = {},
4486
+ preConfirmDelete
4465
4487
  }) => {
4488
+ const derivedPermissions = Object.assign(DEFAULT_PERMISSIONS, _permissions);
4466
4489
  const formRef = React.useRef(null);
4467
4490
  const derivedT = createTranslation(t, Object.assign(Object.assign({}, TRANSLATION_PAIRS_COMMON), TRANSLATION_PAIRS_PAGE));
4468
4491
  const {
@@ -4485,7 +4508,9 @@ const Page = ({
4485
4508
  onChangeWidgetSequence,
4486
4509
  getPages
4487
4510
  } = usePage({
4488
- defaultLimit: 10
4511
+ defaultLimit: 10,
4512
+ preConfirmDelete,
4513
+ canList: derivedPermissions.list
4489
4514
  });
4490
4515
  return /*#__PURE__*/React__default["default"].createElement(PageContextProvider, {
4491
4516
  t: derivedT,
@@ -4508,10 +4533,10 @@ const Page = ({
4508
4533
  formState: formState,
4509
4534
  closeForm: onCloseForm,
4510
4535
  // permissions
4511
- canAdd: _permissions === null || _permissions === void 0 ? void 0 : _permissions.add,
4512
- canDelete: _permissions === null || _permissions === void 0 ? void 0 : _permissions.delete,
4513
- canUpdate: _permissions === null || _permissions === void 0 ? void 0 : _permissions.update,
4514
- canList: _permissions === null || _permissions === void 0 ? void 0 : _permissions.list
4536
+ canAdd: derivedPermissions.add,
4537
+ canDelete: derivedPermissions.delete,
4538
+ canUpdate: derivedPermissions.update,
4539
+ canList: derivedPermissions.list
4515
4540
  }, children ? children : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(AddButton$1, null), /*#__PURE__*/React__default["default"].createElement(PageSearch, null), /*#__PURE__*/React__default["default"].createElement("div", {
4516
4541
  className: "khb_table-wrapper"
4517
4542
  }, /*#__PURE__*/React__default["default"].createElement(PageTable, null), /*#__PURE__*/React__default["default"].createElement(PagePagination, null))), !_explicitForm && /*#__PURE__*/React__default["default"].createElement(Drawer, {
@@ -4527,7 +4552,14 @@ const Page = ({
4527
4552
  formState: formState,
4528
4553
  itemData: itemData,
4529
4554
  onClose: onCloseForm,
4530
- onConfirmDelete: onCofirmDeletePage
4555
+ onConfirmDelete: onCofirmDeletePage,
4556
+ confirmationRequired: derivedT('confirmationRequired'),
4557
+ confirm: derivedT('confirm'),
4558
+ lossOfData: derivedT('lossOfData'),
4559
+ permanentlyDelete: derivedT('permanentlyDelete'),
4560
+ pleaseType: derivedT('pleaseType'),
4561
+ toProceedOrCancel: derivedT('toProceedOrCancel'),
4562
+ typeHerePlaceholder: derivedT('typeHerePlaceholder')
4531
4563
  }));
4532
4564
  };
4533
4565
  Page.Table = PageTable;
@@ -4539,6 +4571,7 @@ Page.FormActions = PageFormActions;
4539
4571
  Page.FormWrapper = PageFormWrapper;
4540
4572
 
4541
4573
  const useWidget = ({
4574
+ canList: _canList = true,
4542
4575
  defaultLimit,
4543
4576
  routes,
4544
4577
  preConfirmDelete
@@ -4960,9 +4993,9 @@ const useWidget = ({
4960
4993
  }
4961
4994
  });
4962
4995
  React.useEffect(() => {
4963
- getWidgets();
4996
+ if (_canList) getWidgets();
4964
4997
  // eslint-disable-next-line react-hooks/exhaustive-deps
4965
- }, [pageSize, currentPage]);
4998
+ }, [pageSize, currentPage, _canList]);
4966
4999
  return {
4967
5000
  list,
4968
5001
  getWidgets,
@@ -6196,7 +6229,9 @@ const WidgetTable = () => {
6196
6229
  } = useProviderState();
6197
6230
  const {
6198
6231
  list,
6199
- canList,
6232
+ canUpdate,
6233
+ canDelete,
6234
+ canPartialUpdate,
6200
6235
  onChangeFormState,
6201
6236
  onPartialUpdateWidget,
6202
6237
  loading,
@@ -6210,7 +6245,25 @@ const WidgetTable = () => {
6210
6245
  }, [onPartialUpdateWidget]);
6211
6246
  const onUpdateClick = item => onChangeFormState('UPDATE', item);
6212
6247
  const onDeleteClick = item => onChangeFormState('DELETE', item);
6213
- if (!canList) return null;
6248
+ const dataKeys = [{
6249
+ label: t('widget.tableName'),
6250
+ dataKey: 'name',
6251
+ highlight: true
6252
+ }, {
6253
+ label: t('widget.tableCode'),
6254
+ dataKey: 'code'
6255
+ }];
6256
+ if (canPartialUpdate) dataKeys.push({
6257
+ label: t('widget.tableActive'),
6258
+ dataKey: 'isActive',
6259
+ Cell: ({
6260
+ row
6261
+ }) => canPartialUpdate ? /*#__PURE__*/React__default["default"].createElement(Toggle, {
6262
+ switchClass: switchClass,
6263
+ isChecked: row === null || row === void 0 ? void 0 : row.isActive,
6264
+ onChange: status => updateClosure(row, 'isActive', status)
6265
+ }) : null
6266
+ });
6214
6267
  return /*#__PURE__*/React__default["default"].createElement(Table, {
6215
6268
  data: list,
6216
6269
  loader: loader,
@@ -6222,20 +6275,10 @@ const WidgetTable = () => {
6222
6275
  }, {
6223
6276
  label: t('widget.tableCode'),
6224
6277
  dataKey: 'code'
6225
- }, {
6226
- label: t('widget.tableActive'),
6227
- dataKey: 'isActive',
6228
- Cell: ({
6229
- row
6230
- }) => /*#__PURE__*/React__default["default"].createElement(Toggle, {
6231
- switchClass: switchClass,
6232
- isChecked: row === null || row === void 0 ? void 0 : row.isActive,
6233
- onChange: status => updateClosure(row, 'isActive', status)
6234
- })
6235
6278
  }],
6236
6279
  actions: {
6237
- edit: onUpdateClick,
6238
- delete: onDeleteClick
6280
+ edit: canUpdate ? onUpdateClick : false,
6281
+ delete: canDelete ? onDeleteClick : false
6239
6282
  }
6240
6283
  });
6241
6284
  };
@@ -6736,6 +6779,11 @@ const WidgetForm = ({
6736
6779
  type: 'checkbox',
6737
6780
  show: showAutoPlay,
6738
6781
  switchClass: switchClass
6782
+ }, {
6783
+ label: t('widget.color'),
6784
+ accessor: 'backgroundColor',
6785
+ type: 'color',
6786
+ className: 'khb_input-color'
6739
6787
  }, {
6740
6788
  label: t('widget.webPerRow'),
6741
6789
  accessor: 'webPerRow',
@@ -6792,6 +6840,11 @@ const WidgetForm = ({
6792
6840
  accessor: 'title',
6793
6841
  type: 'text',
6794
6842
  placeholder: t('item.titlePlaceholder')
6843
+ }, {
6844
+ label: `${t('item.subtitle')}`,
6845
+ accessor: 'subtitle',
6846
+ type: 'text',
6847
+ placeholder: t('item.subTitlePlaceholder')
6795
6848
  }, {
6796
6849
  label: `${t('item.altText')}`,
6797
6850
  accessor: 'altText',
@@ -6921,6 +6974,8 @@ const WidgetPagination = () => {
6921
6974
  ofText: t('of'),
6922
6975
  pageText: t('page'),
6923
6976
  showingText: t('showing'),
6977
+ nextContent: t('nextContent'),
6978
+ previousContent: t('previousContent'),
6924
6979
  totalPages: totalPages,
6925
6980
  totalRecords: totalRecords,
6926
6981
  currentPage: currentPage,
@@ -6932,7 +6987,8 @@ const WidgetPagination = () => {
6932
6987
  const WidgetSearch = () => {
6933
6988
  const {
6934
6989
  getWidgets,
6935
- t
6990
+ t,
6991
+ canList
6936
6992
  } = useWidgetState();
6937
6993
  const callerRef = React.useRef(null);
6938
6994
  const [search, setSearch] = React.useState('');
@@ -6946,6 +7002,7 @@ const WidgetSearch = () => {
6946
7002
  return /*#__PURE__*/React__default["default"].createElement(Input, {
6947
7003
  type: "search",
6948
7004
  value: search,
7005
+ disabled: !canList,
6949
7006
  onChange: e => onChangeSearch(e.target.value),
6950
7007
  placeholder: t('widget.searchPlaceholder')
6951
7008
  });
@@ -6969,7 +7026,7 @@ const WidgetFormActions = ({
6969
7026
  if (!formRef) {
6970
7027
  return onError(CALLBACK_CODES.INTERNAL, 'error', `formRef is required to submit the form!`);
6971
7028
  } else if (!formRef.current) {
6972
- return onError(CALLBACK_CODES.INTERNAL, 'error', `formRef is empty, make sure it's passed as 'ref' prop to the form!`);
7029
+ return onError(CALLBACK_CODES.INTERNAL, 'error', `formRef is empty, make sure it's passed as 'formRef' prop to the form!`);
6973
7030
  }
6974
7031
  // formRef is provided
6975
7032
  e === null || e === void 0 ? void 0 : e.preventDefault();
@@ -7007,12 +7064,15 @@ const Widget = ({
7007
7064
  routes,
7008
7065
  loader,
7009
7066
  explicitForm: _explicitForm = false,
7010
- permissions: _permissions = DEFAULT_PERMISSIONS,
7067
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
7068
+ // @ts-ignore
7069
+ permissions: _permissions = {},
7011
7070
  preConfirmDelete,
7012
7071
  formatListItem,
7013
7072
  formatOptionLabel,
7014
7073
  children
7015
7074
  }) => {
7075
+ const derivedPermissions = Object.assign(DEFAULT_PERMISSIONS, _permissions);
7016
7076
  const widgetFormRef = React.useRef(null);
7017
7077
  const derivedT = createTranslation(t, Object.assign(Object.assign(Object.assign({}, TRANSLATION_PAIRS_COMMON), TRANSLATION_PAIRS_WIDGET), TRANSLATION_PAIRS_ITEM));
7018
7078
  const {
@@ -7045,6 +7105,7 @@ const Widget = ({
7045
7105
  itemsLoading,
7046
7106
  onItemFormSubmit
7047
7107
  } = useWidget({
7108
+ canList: derivedPermissions.list,
7048
7109
  routes,
7049
7110
  defaultLimit: 10,
7050
7111
  preConfirmDelete
@@ -7081,11 +7142,11 @@ const Widget = ({
7081
7142
  itemsLoading: itemsLoading,
7082
7143
  onItemFormSubmit: onItemFormSubmit,
7083
7144
  // Permissions
7084
- canAdd: _permissions.add,
7085
- canDelete: _permissions.delete,
7086
- canList: _permissions.list,
7087
- canUpdate: _permissions.update,
7088
- canPartialUpdate: _permissions.partialUpdate,
7145
+ canAdd: derivedPermissions.add,
7146
+ canDelete: derivedPermissions.delete,
7147
+ canList: derivedPermissions.list,
7148
+ canUpdate: derivedPermissions.update,
7149
+ canPartialUpdate: derivedPermissions.partialUpdate,
7089
7150
  formState: formState,
7090
7151
  closeForm: onCloseForm
7091
7152
  }, children ? children : /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(AddButton, null), /*#__PURE__*/React__default["default"].createElement(WidgetSearch, null), /*#__PURE__*/React__default["default"].createElement("div", {
@@ -7103,7 +7164,14 @@ const Widget = ({
7103
7164
  formState: formState,
7104
7165
  itemData: itemData,
7105
7166
  onClose: onCloseForm,
7106
- onConfirmDelete: onCofirmDeleteWidget
7167
+ onConfirmDelete: onCofirmDeleteWidget,
7168
+ confirmationRequired: derivedT('confirmationRequired'),
7169
+ confirm: derivedT('confirm'),
7170
+ lossOfData: derivedT('lossOfData'),
7171
+ permanentlyDelete: derivedT('permanentlyDelete'),
7172
+ pleaseType: derivedT('pleaseType'),
7173
+ toProceedOrCancel: derivedT('toProceedOrCancel'),
7174
+ typeHerePlaceholder: derivedT('typeHerePlaceholder')
7107
7175
  }));
7108
7176
  };
7109
7177
  Widget.Table = WidgetTable;