@knovator/pagecreator-admin 0.8.5 → 0.9.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
@@ -2693,6 +2693,12 @@ const apiList = {
2693
2693
  url: `${prefix}/collection-data`,
2694
2694
  method: 'POST'
2695
2695
  }),
2696
+ LANGUAGES: ({
2697
+ prefix
2698
+ }) => ({
2699
+ url: `${prefix}/languages`,
2700
+ method: 'GET'
2701
+ }),
2696
2702
  // Image Upload API
2697
2703
  IMAGE_UPLOAD: ({
2698
2704
  prefix
@@ -3709,7 +3715,8 @@ const SimpleForm = /*#__PURE__*/React.forwardRef(({
3709
3715
  handleSubmit,
3710
3716
  setValue,
3711
3717
  control,
3712
- setError
3718
+ setError,
3719
+ languages
3713
3720
  }, ref) => {
3714
3721
  const inputRenderer = schema => {
3715
3722
  var _a, _b, _c, _d, _e, _f;
@@ -3781,7 +3788,23 @@ const SimpleForm = /*#__PURE__*/React.forwardRef(({
3781
3788
  case 'url':
3782
3789
  case 'color':
3783
3790
  default:
3784
- input = /*#__PURE__*/React__default["default"].createElement(Input, {
3791
+ if (Array.isArray(languages) && languages.length > 0 && schema.accessor === 'widgetTitles') {
3792
+ input = languages.map(lang => {
3793
+ var _a, _b;
3794
+ return /*#__PURE__*/React__default["default"].createElement(Input, {
3795
+ key: lang.code,
3796
+ rest: register(`${schema.accessor}.${lang.code}`, schema.validations || {}),
3797
+ label: schema.label + ' (' + lang.name + ')',
3798
+ onInput: schema.onInput,
3799
+ error: (_b = (_a = errors[schema.accessor]) === null || _a === void 0 ? void 0 : _a[lang.code]) === null || _b === void 0 ? void 0 : _b.message,
3800
+ required: schema.required,
3801
+ type: schema.type,
3802
+ className: "kms_w-full kms_p-2",
3803
+ placeholder: (schema.placeholder || '') + ' (' + lang.name + ')',
3804
+ disabled: _isUpdating && typeof schema.editable !== 'undefined' && !schema.editable
3805
+ });
3806
+ });
3807
+ } else input = /*#__PURE__*/React__default["default"].createElement(Input, {
3785
3808
  rest: register(schema.accessor, schema.validations || {}),
3786
3809
  label: schema.label,
3787
3810
  error: (_f = (_e = errors[schema.accessor]) === null || _e === void 0 ? void 0 : _e.message) === null || _f === void 0 ? void 0 : _f.toString(),
@@ -4516,6 +4539,7 @@ const useWidget = ({
4516
4539
  const [loading, setLoading] = React.useState(false);
4517
4540
  const [totalPages, setTotalPages] = React.useState(0);
4518
4541
  const [totalRecords, setTotalRecords] = React.useState(0);
4542
+ const [languages, setLanguages] = React.useState([]);
4519
4543
  const [itemData, setItemData] = React.useState(null);
4520
4544
  const [formState, setFormState] = React.useState();
4521
4545
  const [itemsTypes, setItemsTypes] = React.useState([]);
@@ -4528,7 +4552,8 @@ const useWidget = ({
4528
4552
  onError,
4529
4553
  onSuccess,
4530
4554
  onLogout,
4531
- widgetRoutesPrefix
4555
+ widgetRoutesPrefix,
4556
+ pageRoutesPrefix
4532
4557
  } = useProviderState();
4533
4558
  const {
4534
4559
  changeSearch,
@@ -4586,6 +4611,24 @@ const useWidget = ({
4586
4611
  setLoading(false);
4587
4612
  }
4588
4613
  }), [baseUrl, currentPageRef, limitRef, offsetRef, handleError, routes, token, widgetRoutesPrefix]);
4614
+ const getLanguagesList = React.useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
4615
+ const api = getApiType({
4616
+ routes,
4617
+ action: 'LANGUAGES',
4618
+ prefix: pageRoutesPrefix
4619
+ });
4620
+ const response = yield commonApi({
4621
+ baseUrl,
4622
+ token,
4623
+ method: api.method,
4624
+ url: api.url,
4625
+ onError: handleError(CALLBACK_CODES.GET_ALL)
4626
+ });
4627
+ if ((response === null || response === void 0 ? void 0 : response.code) === 'SUCCESS') {
4628
+ setLanguages(response.data);
4629
+ return response.data;
4630
+ }
4631
+ }), [baseUrl, handleError, pageRoutesPrefix, routes, token]);
4589
4632
  const onCofirmDeleteWidget = () => __awaiter(void 0, void 0, void 0, function* () {
4590
4633
  try {
4591
4634
  let proceed = true;
@@ -4878,10 +4921,14 @@ const useWidget = ({
4878
4921
  if (_canList) getWidgets();
4879
4922
  // eslint-disable-next-line react-hooks/exhaustive-deps
4880
4923
  }, [_canList]);
4924
+ React.useEffect(() => {
4925
+ getLanguagesList();
4926
+ }, [getLanguagesList]);
4881
4927
  return {
4882
4928
  list,
4883
4929
  getWidgets,
4884
4930
  loading,
4931
+ languages,
4885
4932
  setLoading,
4886
4933
  // Pagination
4887
4934
  searchText: searchRef.current,
@@ -5986,6 +6033,7 @@ const WidgetContextProvider = ({
5986
6033
  t: _t = () => '',
5987
6034
  // Form
5988
6035
  list: _list = [],
6036
+ languages: _languages = [],
5989
6037
  imageBaseUrl: _imageBaseUrl = '',
5990
6038
  searchText: _searchText = '',
5991
6039
  changeSearch: _changeSearch = () => {},
@@ -6034,6 +6082,7 @@ const WidgetContextProvider = ({
6034
6082
  t: _t,
6035
6083
  // Form
6036
6084
  list: _list,
6085
+ languages: _languages,
6037
6086
  imageBaseUrl: _imageBaseUrl,
6038
6087
  closeForm: _closeForm,
6039
6088
  formState: _formState,
@@ -6434,6 +6483,7 @@ const ItemsAccordian = ({
6434
6483
  register,
6435
6484
  setError,
6436
6485
  itemType,
6486
+ languages,
6437
6487
  clearError,
6438
6488
  addText: _addText = 'Add',
6439
6489
  deleteText: _deleteText = 'Delete'
@@ -6475,8 +6525,6 @@ const ItemsAccordian = ({
6475
6525
  }, [errors, name, errors === null || errors === void 0 ? void 0 : errors[name]]);
6476
6526
  const addTab = index => {
6477
6527
  appendItem({
6478
- title: '',
6479
- subtitle: '',
6480
6528
  altText: '',
6481
6529
  link: '',
6482
6530
  img: '',
@@ -6519,20 +6567,39 @@ const ItemsAccordian = ({
6519
6567
  }, _deleteText))
6520
6568
  }, /*#__PURE__*/React__default["default"].createElement("div", {
6521
6569
  className: "khb-form-items"
6522
- }, /*#__PURE__*/React__default["default"].createElement(Input, {
6570
+ }, Array.isArray(languages) && languages.length > 0 ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, languages.map(lang => {
6571
+ var _a, _b, _c, _d, _e;
6572
+ return /*#__PURE__*/React__default["default"].createElement(Input, {
6573
+ rest: register(`${name}.${index}.titles.${lang.code}`, {
6574
+ required: t('item.titleRequired')
6575
+ }),
6576
+ label: t('item.title') + ` (${lang.name})`,
6577
+ error: (_e = (_d = (_c = (_b = (_a = errors[name]) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b['titles']) === null || _c === void 0 ? void 0 : _c[lang.code]) === null || _d === void 0 ? void 0 : _d.message) === null || _e === void 0 ? void 0 : _e.toString(),
6578
+ type: "text",
6579
+ className: "w-full p-2",
6580
+ placeholder: t('item.titlePlaceholder'),
6581
+ required: true
6582
+ });
6583
+ })) : /*#__PURE__*/React__default["default"].createElement(Input, {
6523
6584
  rest: register(`${name}.${index}.title`, {
6524
6585
  required: t('item.titleRequired')
6525
6586
  }),
6526
6587
  label: t('item.title'),
6527
6588
  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(),
6528
- type: 'text',
6589
+ type: "text",
6529
6590
  className: "w-full p-2",
6530
6591
  placeholder: t('item.titlePlaceholder'),
6531
6592
  required: true
6532
- }), /*#__PURE__*/React__default["default"].createElement(Input, {
6593
+ }), Array.isArray(languages) && languages.length > 0 ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, languages.map(lang => /*#__PURE__*/React__default["default"].createElement(Input, {
6594
+ rest: register(`${name}.${index}.subtitles.${lang.code}`),
6595
+ label: t('item.subtitle') + ` (${lang.name})`,
6596
+ type: "text",
6597
+ className: "w-full p-2",
6598
+ placeholder: t('item.subTitlePlaceholder')
6599
+ }))) : /*#__PURE__*/React__default["default"].createElement(Input, {
6533
6600
  rest: register(`${name}.${index}.subtitle`),
6534
6601
  label: t('item.subtitle'),
6535
- type: 'text',
6602
+ type: "text",
6536
6603
  className: "w-full p-2",
6537
6604
  placeholder: t('item.subTitlePlaceholder')
6538
6605
  }), /*#__PURE__*/React__default["default"].createElement(Input, {
@@ -6632,10 +6699,13 @@ const Tabs = ({
6632
6699
  setActiveTab,
6633
6700
  options,
6634
6701
  control,
6635
- register,
6636
6702
  listCode,
6703
+ setValue,
6704
+ getValues,
6705
+ languages,
6637
6706
  formatItem,
6638
6707
  deleteTitle,
6708
+ clearErrors,
6639
6709
  loadOptions,
6640
6710
  customStyles,
6641
6711
  noButtonText,
@@ -6644,9 +6714,10 @@ const Tabs = ({
6644
6714
  itemsPlaceholder,
6645
6715
  formatOptionLabel,
6646
6716
  tabCollectionItems,
6647
- tabNameRequiredText,
6648
6717
  onCollectionItemsIndexChange
6649
6718
  }) => {
6719
+ var _a;
6720
+ const [selectedLanguage, setSelectedLanguage] = React.useState((_a = languages === null || languages === void 0 ? void 0 : languages[0]) === null || _a === void 0 ? void 0 : _a.code);
6650
6721
  const {
6651
6722
  fields: tabFields,
6652
6723
  append: appendField,
@@ -6656,12 +6727,27 @@ const Tabs = ({
6656
6727
  control
6657
6728
  });
6658
6729
  const addTab = () => {
6659
- appendField({
6660
- name: 'Tab Name',
6730
+ appendField(Object.assign(Object.assign({}, selectedLanguage ? {
6731
+ names: languages === null || languages === void 0 ? void 0 : languages.reduce((acc, lng) => {
6732
+ acc[lng.code] = '';
6733
+ return acc;
6734
+ }, {})
6735
+ } : {
6736
+ name: ''
6737
+ }), {
6661
6738
  collectionItems: []
6662
- });
6739
+ }));
6663
6740
  setActiveTab(tabFields.length);
6664
6741
  };
6742
+ const onTabnameChange = (index, value) => {
6743
+ if (selectedLanguage) {
6744
+ clearErrors(`tabs.${index}.names.${selectedLanguage}`);
6745
+ setValue(`tabs.${index}.names.${selectedLanguage}`, value);
6746
+ } else {
6747
+ clearErrors(`tabs.${index}.name`);
6748
+ setValue(`tabs.${index}.name`, value);
6749
+ }
6750
+ };
6665
6751
  return /*#__PURE__*/React__default["default"].createElement("div", {
6666
6752
  className: "khb_tabs-container"
6667
6753
  }, /*#__PURE__*/React__default["default"].createElement(reactTabs.Tabs, {
@@ -6670,8 +6756,18 @@ const Tabs = ({
6670
6756
  className: "khb-tabs"
6671
6757
  }, /*#__PURE__*/React__default["default"].createElement(reactTabs.TabList, {
6672
6758
  className: "khb_tabs-list"
6673
- }, tabFields === null || tabFields === void 0 ? void 0 : tabFields.map((field, index) => {
6674
- var _a, _b, _c;
6759
+ }, Array.isArray(languages) && languages.length > 0 && /*#__PURE__*/React__default["default"].createElement("div", {
6760
+ className: "khb_input-wrapper"
6761
+ }, /*#__PURE__*/React__default["default"].createElement("select", {
6762
+ title: "Change Language",
6763
+ value: selectedLanguage,
6764
+ className: "khb_input khb_input-sm h-full",
6765
+ onChange: e => setSelectedLanguage(e.target.value)
6766
+ }, languages.map(lng => /*#__PURE__*/React__default["default"].createElement("option", {
6767
+ value: lng.code,
6768
+ key: lng.code
6769
+ }, lng.name)))), tabFields === null || tabFields === void 0 ? void 0 : tabFields.map((field, index) => {
6770
+ var _a, _b, _c, _d, _e, _f, _g;
6675
6771
  return /*#__PURE__*/React__default["default"].createElement(reactTabs.Tab, {
6676
6772
  key: field.id,
6677
6773
  className: classNames__default["default"]('khb_tabs-item', {
@@ -6680,14 +6776,18 @@ const Tabs = ({
6680
6776
  }, /*#__PURE__*/React__default["default"].createElement(TabItem, {
6681
6777
  key: field.id,
6682
6778
  deleteTitle: deleteTitle,
6683
- register: register(`tabs.${index}.name`, {
6684
- required: tabNameRequiredText
6685
- }),
6779
+ register: {
6780
+ value: getValues(`tabs.${index}.names.${selectedLanguage}`),
6781
+ onChange: e => onTabnameChange(index, e.target.value || '')
6782
+ },
6686
6783
  onRemoveTab: () => {
6687
6784
  removeField(index);
6688
6785
  setActiveTab(index === 0 ? 0 : index - 1);
6689
6786
  },
6690
- error: (_c = (_b = (_a = errors === null || errors === void 0 ? void 0 : errors['tabs']) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.message,
6787
+ error: selectedLanguage ? ((_b = (_a = errors === null || errors === void 0 ? void 0 : errors['tabs']) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.names) ? Object.keys((_d = (_c = errors === null || errors === void 0 ? void 0 : errors['tabs']) === null || _c === void 0 ? void 0 : _c[index]) === null || _d === void 0 ? void 0 : _d.names).map(key => {
6788
+ var _a, _b, _c, _d;
6789
+ return (_d = (_c = (_b = (_a = errors === null || errors === void 0 ? void 0 : errors['tabs']) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.names) === null || _c === void 0 ? void 0 : _c[key]) === null || _d === void 0 ? void 0 : _d.message;
6790
+ }).join(', ') : '' : (_g = (_f = (_e = errors === null || errors === void 0 ? void 0 : errors['tabs']) === null || _e === void 0 ? void 0 : _e[index]) === null || _f === void 0 ? void 0 : _f.name) === null || _g === void 0 ? void 0 : _g.message,
6691
6791
  noButtonText: noButtonText,
6692
6792
  yesButtonText: yesButtonText,
6693
6793
  showDelete: (tabFields === null || tabFields === void 0 ? void 0 : tabFields.length) > 1
@@ -6780,6 +6880,7 @@ const WidgetForm = ({
6780
6880
  itemsTypes,
6781
6881
  widgetTypes,
6782
6882
  loading,
6883
+ languages,
6783
6884
  onWidgetFormSubmit,
6784
6885
  getCollectionData,
6785
6886
  collectionData,
@@ -6914,6 +7015,32 @@ const WidgetForm = ({
6914
7015
  setTabCollectionItems(value[constants.tabsAccessor].map(tabItem => tabItem[constants.tabCollectionItemsAccessor]));
6915
7016
  }
6916
7017
  }, [getFirstItemTypeValue, itemsTypes, widgetTypes]);
7018
+ const validateTabs = tabsData => {
7019
+ const isLanguagesProvided = Array.isArray(languages) && languages.length > 0;
7020
+ let isTabsValid = true;
7021
+ if (Array.isArray(tabsData) && tabsData.length > 0) {
7022
+ tabsData.forEach((tabItem, index) => {
7023
+ if (isLanguagesProvided) {
7024
+ languages.forEach(lang => {
7025
+ if (!tabItem.names[lang.code]) {
7026
+ setError(`tabs.${index}.names.${lang.code}`, {
7027
+ type: 'manual',
7028
+ message: `${t('widget.tabNameRequired')} (${lang.name})`
7029
+ });
7030
+ isTabsValid = false;
7031
+ }
7032
+ });
7033
+ } else if (!tabItem.name) {
7034
+ setError(`tabs.${index}.name`, {
7035
+ type: 'manual',
7036
+ message: t('widget.tabNameRequired')
7037
+ });
7038
+ isTabsValid = false;
7039
+ }
7040
+ });
7041
+ }
7042
+ return isTabsValid;
7043
+ };
6917
7044
  const onFormSubmit = data => {
6918
7045
  var _a, _b;
6919
7046
  const formData = Object.assign({}, data);
@@ -6923,9 +7050,14 @@ const WidgetForm = ({
6923
7050
  }
6924
7051
  // setting tabs data if widgetType tab is selected
6925
7052
  const tabsData = getValues('tabs');
7053
+ if (Array.isArray(tabsData) && tabsData.length > 0) {
7054
+ const isTabsValid = validateTabs(tabsData);
7055
+ if (!isTabsValid) return;
7056
+ }
6926
7057
  if (Array.isArray(tabsData) && (formData[constants.widgetTypeAccessor] === constants.tabsWidgetTypeValue || formState === 'UPDATE')) {
6927
7058
  formData[constants.tabsAccessor] = tabsData.map(tabItem => ({
6928
7059
  name: tabItem.name,
7060
+ names: tabItem.names,
6929
7061
  collectionItems: tabItem.collectionItems.map(item => typeof item == 'string' ? item : item.value)
6930
7062
  }));
6931
7063
  } else formData[constants.tabsAccessor] = [];
@@ -7012,7 +7144,19 @@ const WidgetForm = ({
7012
7144
  required: t('widget.codeRequired')
7013
7145
  },
7014
7146
  wrapperClassName: 'khb_grid-item-1of2 khb_padding-left-1 khb_align-top khb_margin-top-0'
7015
- }, {
7147
+ }, Array.isArray(languages) && languages.length > 0 ? {
7148
+ label: `${t('widget.widgetTitle')}`,
7149
+ accessor: 'widgetTitles',
7150
+ required: true,
7151
+ type: customInputs && customInputs['widgetTitle'] ? undefined : 'text',
7152
+ validations: {
7153
+ required: t('widget.widgetTitleRequired')
7154
+ },
7155
+ info: t('widget.widgetTitleInfo'),
7156
+ placeholder: t('widget.widgetTitlePlaceholder'),
7157
+ onInput: handleCapitalize,
7158
+ Input: customInputs && customInputs['widgetTitle'] ? customInputs['widgetTitle'] : undefined
7159
+ } : {
7016
7160
  label: `${t('widget.widgetTitle')}`,
7017
7161
  accessor: 'widgetTitle',
7018
7162
  required: true,
@@ -7128,15 +7272,18 @@ const WidgetForm = ({
7128
7272
  handleSubmit: handleSubmit,
7129
7273
  setValue: setValue,
7130
7274
  control: control,
7131
- setError: setError
7275
+ setError: setError,
7276
+ languages: languages
7132
7277
  }), (selectedWidgetType === null || selectedWidgetType === void 0 ? void 0 : selectedWidgetType.value) === 'Tabs' ? /*#__PURE__*/React__default["default"].createElement(Tabs, {
7278
+ clearErrors: clearErrors,
7279
+ getValues: getValues,
7280
+ setValue: setValue,
7133
7281
  control: control,
7134
- register: register,
7282
+ languages: languages,
7135
7283
  deleteTitle: t('widget.tabDeleteTitle'),
7136
7284
  yesButtonText: t('yesButtonText'),
7137
7285
  noButtonText: t('cancelButtonText'),
7138
7286
  errors: errors,
7139
- tabNameRequiredText: t('widget.tabNameRequired'),
7140
7287
  itemsPlaceholder: `Select ${selectedCollectionType === null || selectedCollectionType === void 0 ? void 0 : selectedCollectionType.label}...`,
7141
7288
  loadOptions: onChangeSearch,
7142
7289
  isItemsLoading: collectionDataLoading,
@@ -7154,6 +7301,7 @@ const WidgetForm = ({
7154
7301
  formatItem: formatListItem,
7155
7302
  listCode: selectedCollectionType === null || selectedCollectionType === void 0 ? void 0 : selectedCollectionType.value
7156
7303
  }), itemsEnabled && (selectedWidgetType === null || selectedWidgetType === void 0 ? void 0 : selectedWidgetType.value) !== 'Tabs' && /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, /*#__PURE__*/React__default["default"].createElement(ItemsAccordian, {
7304
+ languages: languages,
7157
7305
  clearError: clearErrors,
7158
7306
  collapseId: constants.webItems,
7159
7307
  title: t('widget.webItems'),
@@ -7170,6 +7318,7 @@ const WidgetForm = ({
7170
7318
  addText: t('addButtonText'),
7171
7319
  deleteText: t('deleteButtonText')
7172
7320
  }), /*#__PURE__*/React__default["default"].createElement(ItemsAccordian, {
7321
+ languages: languages,
7173
7322
  clearError: clearErrors,
7174
7323
  collapseId: constants.mobileItems,
7175
7324
  title: t('widget.mobileItems'),
@@ -7344,6 +7493,7 @@ const Widget = ({
7344
7493
  totalRecords,
7345
7494
  currentPage,
7346
7495
  pageSize,
7496
+ languages,
7347
7497
  setCurrentPage
7348
7498
  } = useWidget({
7349
7499
  canList: derivedPermissions.list,
@@ -7355,6 +7505,7 @@ const Widget = ({
7355
7505
  return /*#__PURE__*/React__default["default"].createElement(WidgetContextProvider, {
7356
7506
  loading: loading,
7357
7507
  list: list,
7508
+ languages: languages,
7358
7509
  imageBaseUrl: imageBaseUrl,
7359
7510
  onChangeFormState: onChangeFormState,
7360
7511
  t: derivedT,
package/index.css CHANGED
@@ -2038,6 +2038,7 @@ input:checked + .slider:before {
2038
2038
  .khb_tabs-item {
2039
2039
  display: flex;
2040
2040
  cursor: pointer;
2041
+ flex-direction: column;
2041
2042
  align-self: center;
2042
2043
  border-radius: 0.375rem;
2043
2044
  --tw-bg-opacity: 1;
package/index.js CHANGED
@@ -2681,6 +2681,12 @@ const apiList = {
2681
2681
  url: `${prefix}/collection-data`,
2682
2682
  method: 'POST'
2683
2683
  }),
2684
+ LANGUAGES: ({
2685
+ prefix
2686
+ }) => ({
2687
+ url: `${prefix}/languages`,
2688
+ method: 'GET'
2689
+ }),
2684
2690
  // Image Upload API
2685
2691
  IMAGE_UPLOAD: ({
2686
2692
  prefix
@@ -3697,7 +3703,8 @@ const SimpleForm = /*#__PURE__*/forwardRef(({
3697
3703
  handleSubmit,
3698
3704
  setValue,
3699
3705
  control,
3700
- setError
3706
+ setError,
3707
+ languages
3701
3708
  }, ref) => {
3702
3709
  const inputRenderer = schema => {
3703
3710
  var _a, _b, _c, _d, _e, _f;
@@ -3769,7 +3776,23 @@ const SimpleForm = /*#__PURE__*/forwardRef(({
3769
3776
  case 'url':
3770
3777
  case 'color':
3771
3778
  default:
3772
- input = /*#__PURE__*/React.createElement(Input, {
3779
+ if (Array.isArray(languages) && languages.length > 0 && schema.accessor === 'widgetTitles') {
3780
+ input = languages.map(lang => {
3781
+ var _a, _b;
3782
+ return /*#__PURE__*/React.createElement(Input, {
3783
+ key: lang.code,
3784
+ rest: register(`${schema.accessor}.${lang.code}`, schema.validations || {}),
3785
+ label: schema.label + ' (' + lang.name + ')',
3786
+ onInput: schema.onInput,
3787
+ error: (_b = (_a = errors[schema.accessor]) === null || _a === void 0 ? void 0 : _a[lang.code]) === null || _b === void 0 ? void 0 : _b.message,
3788
+ required: schema.required,
3789
+ type: schema.type,
3790
+ className: "kms_w-full kms_p-2",
3791
+ placeholder: (schema.placeholder || '') + ' (' + lang.name + ')',
3792
+ disabled: _isUpdating && typeof schema.editable !== 'undefined' && !schema.editable
3793
+ });
3794
+ });
3795
+ } else input = /*#__PURE__*/React.createElement(Input, {
3773
3796
  rest: register(schema.accessor, schema.validations || {}),
3774
3797
  label: schema.label,
3775
3798
  error: (_f = (_e = errors[schema.accessor]) === null || _e === void 0 ? void 0 : _e.message) === null || _f === void 0 ? void 0 : _f.toString(),
@@ -4504,6 +4527,7 @@ const useWidget = ({
4504
4527
  const [loading, setLoading] = useState(false);
4505
4528
  const [totalPages, setTotalPages] = useState(0);
4506
4529
  const [totalRecords, setTotalRecords] = useState(0);
4530
+ const [languages, setLanguages] = useState([]);
4507
4531
  const [itemData, setItemData] = useState(null);
4508
4532
  const [formState, setFormState] = useState();
4509
4533
  const [itemsTypes, setItemsTypes] = useState([]);
@@ -4516,7 +4540,8 @@ const useWidget = ({
4516
4540
  onError,
4517
4541
  onSuccess,
4518
4542
  onLogout,
4519
- widgetRoutesPrefix
4543
+ widgetRoutesPrefix,
4544
+ pageRoutesPrefix
4520
4545
  } = useProviderState();
4521
4546
  const {
4522
4547
  changeSearch,
@@ -4574,6 +4599,24 @@ const useWidget = ({
4574
4599
  setLoading(false);
4575
4600
  }
4576
4601
  }), [baseUrl, currentPageRef, limitRef, offsetRef, handleError, routes, token, widgetRoutesPrefix]);
4602
+ const getLanguagesList = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
4603
+ const api = getApiType({
4604
+ routes,
4605
+ action: 'LANGUAGES',
4606
+ prefix: pageRoutesPrefix
4607
+ });
4608
+ const response = yield commonApi({
4609
+ baseUrl,
4610
+ token,
4611
+ method: api.method,
4612
+ url: api.url,
4613
+ onError: handleError(CALLBACK_CODES.GET_ALL)
4614
+ });
4615
+ if ((response === null || response === void 0 ? void 0 : response.code) === 'SUCCESS') {
4616
+ setLanguages(response.data);
4617
+ return response.data;
4618
+ }
4619
+ }), [baseUrl, handleError, pageRoutesPrefix, routes, token]);
4577
4620
  const onCofirmDeleteWidget = () => __awaiter(void 0, void 0, void 0, function* () {
4578
4621
  try {
4579
4622
  let proceed = true;
@@ -4866,10 +4909,14 @@ const useWidget = ({
4866
4909
  if (_canList) getWidgets();
4867
4910
  // eslint-disable-next-line react-hooks/exhaustive-deps
4868
4911
  }, [_canList]);
4912
+ useEffect(() => {
4913
+ getLanguagesList();
4914
+ }, [getLanguagesList]);
4869
4915
  return {
4870
4916
  list,
4871
4917
  getWidgets,
4872
4918
  loading,
4919
+ languages,
4873
4920
  setLoading,
4874
4921
  // Pagination
4875
4922
  searchText: searchRef.current,
@@ -5974,6 +6021,7 @@ const WidgetContextProvider = ({
5974
6021
  t: _t = () => '',
5975
6022
  // Form
5976
6023
  list: _list = [],
6024
+ languages: _languages = [],
5977
6025
  imageBaseUrl: _imageBaseUrl = '',
5978
6026
  searchText: _searchText = '',
5979
6027
  changeSearch: _changeSearch = () => {},
@@ -6022,6 +6070,7 @@ const WidgetContextProvider = ({
6022
6070
  t: _t,
6023
6071
  // Form
6024
6072
  list: _list,
6073
+ languages: _languages,
6025
6074
  imageBaseUrl: _imageBaseUrl,
6026
6075
  closeForm: _closeForm,
6027
6076
  formState: _formState,
@@ -6422,6 +6471,7 @@ const ItemsAccordian = ({
6422
6471
  register,
6423
6472
  setError,
6424
6473
  itemType,
6474
+ languages,
6425
6475
  clearError,
6426
6476
  addText: _addText = 'Add',
6427
6477
  deleteText: _deleteText = 'Delete'
@@ -6463,8 +6513,6 @@ const ItemsAccordian = ({
6463
6513
  }, [errors, name, errors === null || errors === void 0 ? void 0 : errors[name]]);
6464
6514
  const addTab = index => {
6465
6515
  appendItem({
6466
- title: '',
6467
- subtitle: '',
6468
6516
  altText: '',
6469
6517
  link: '',
6470
6518
  img: '',
@@ -6507,20 +6555,39 @@ const ItemsAccordian = ({
6507
6555
  }, _deleteText))
6508
6556
  }, /*#__PURE__*/React.createElement("div", {
6509
6557
  className: "khb-form-items"
6510
- }, /*#__PURE__*/React.createElement(Input, {
6558
+ }, Array.isArray(languages) && languages.length > 0 ? /*#__PURE__*/React.createElement(React.Fragment, null, languages.map(lang => {
6559
+ var _a, _b, _c, _d, _e;
6560
+ return /*#__PURE__*/React.createElement(Input, {
6561
+ rest: register(`${name}.${index}.titles.${lang.code}`, {
6562
+ required: t('item.titleRequired')
6563
+ }),
6564
+ label: t('item.title') + ` (${lang.name})`,
6565
+ error: (_e = (_d = (_c = (_b = (_a = errors[name]) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b['titles']) === null || _c === void 0 ? void 0 : _c[lang.code]) === null || _d === void 0 ? void 0 : _d.message) === null || _e === void 0 ? void 0 : _e.toString(),
6566
+ type: "text",
6567
+ className: "w-full p-2",
6568
+ placeholder: t('item.titlePlaceholder'),
6569
+ required: true
6570
+ });
6571
+ })) : /*#__PURE__*/React.createElement(Input, {
6511
6572
  rest: register(`${name}.${index}.title`, {
6512
6573
  required: t('item.titleRequired')
6513
6574
  }),
6514
6575
  label: t('item.title'),
6515
6576
  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(),
6516
- type: 'text',
6577
+ type: "text",
6517
6578
  className: "w-full p-2",
6518
6579
  placeholder: t('item.titlePlaceholder'),
6519
6580
  required: true
6520
- }), /*#__PURE__*/React.createElement(Input, {
6581
+ }), Array.isArray(languages) && languages.length > 0 ? /*#__PURE__*/React.createElement(React.Fragment, null, languages.map(lang => /*#__PURE__*/React.createElement(Input, {
6582
+ rest: register(`${name}.${index}.subtitles.${lang.code}`),
6583
+ label: t('item.subtitle') + ` (${lang.name})`,
6584
+ type: "text",
6585
+ className: "w-full p-2",
6586
+ placeholder: t('item.subTitlePlaceholder')
6587
+ }))) : /*#__PURE__*/React.createElement(Input, {
6521
6588
  rest: register(`${name}.${index}.subtitle`),
6522
6589
  label: t('item.subtitle'),
6523
- type: 'text',
6590
+ type: "text",
6524
6591
  className: "w-full p-2",
6525
6592
  placeholder: t('item.subTitlePlaceholder')
6526
6593
  }), /*#__PURE__*/React.createElement(Input, {
@@ -6620,10 +6687,13 @@ const Tabs = ({
6620
6687
  setActiveTab,
6621
6688
  options,
6622
6689
  control,
6623
- register,
6624
6690
  listCode,
6691
+ setValue,
6692
+ getValues,
6693
+ languages,
6625
6694
  formatItem,
6626
6695
  deleteTitle,
6696
+ clearErrors,
6627
6697
  loadOptions,
6628
6698
  customStyles,
6629
6699
  noButtonText,
@@ -6632,9 +6702,10 @@ const Tabs = ({
6632
6702
  itemsPlaceholder,
6633
6703
  formatOptionLabel,
6634
6704
  tabCollectionItems,
6635
- tabNameRequiredText,
6636
6705
  onCollectionItemsIndexChange
6637
6706
  }) => {
6707
+ var _a;
6708
+ const [selectedLanguage, setSelectedLanguage] = useState((_a = languages === null || languages === void 0 ? void 0 : languages[0]) === null || _a === void 0 ? void 0 : _a.code);
6638
6709
  const {
6639
6710
  fields: tabFields,
6640
6711
  append: appendField,
@@ -6644,12 +6715,27 @@ const Tabs = ({
6644
6715
  control
6645
6716
  });
6646
6717
  const addTab = () => {
6647
- appendField({
6648
- name: 'Tab Name',
6718
+ appendField(Object.assign(Object.assign({}, selectedLanguage ? {
6719
+ names: languages === null || languages === void 0 ? void 0 : languages.reduce((acc, lng) => {
6720
+ acc[lng.code] = '';
6721
+ return acc;
6722
+ }, {})
6723
+ } : {
6724
+ name: ''
6725
+ }), {
6649
6726
  collectionItems: []
6650
- });
6727
+ }));
6651
6728
  setActiveTab(tabFields.length);
6652
6729
  };
6730
+ const onTabnameChange = (index, value) => {
6731
+ if (selectedLanguage) {
6732
+ clearErrors(`tabs.${index}.names.${selectedLanguage}`);
6733
+ setValue(`tabs.${index}.names.${selectedLanguage}`, value);
6734
+ } else {
6735
+ clearErrors(`tabs.${index}.name`);
6736
+ setValue(`tabs.${index}.name`, value);
6737
+ }
6738
+ };
6653
6739
  return /*#__PURE__*/React.createElement("div", {
6654
6740
  className: "khb_tabs-container"
6655
6741
  }, /*#__PURE__*/React.createElement(Tabs$1, {
@@ -6658,8 +6744,18 @@ const Tabs = ({
6658
6744
  className: "khb-tabs"
6659
6745
  }, /*#__PURE__*/React.createElement(TabList, {
6660
6746
  className: "khb_tabs-list"
6661
- }, tabFields === null || tabFields === void 0 ? void 0 : tabFields.map((field, index) => {
6662
- var _a, _b, _c;
6747
+ }, Array.isArray(languages) && languages.length > 0 && /*#__PURE__*/React.createElement("div", {
6748
+ className: "khb_input-wrapper"
6749
+ }, /*#__PURE__*/React.createElement("select", {
6750
+ title: "Change Language",
6751
+ value: selectedLanguage,
6752
+ className: "khb_input khb_input-sm h-full",
6753
+ onChange: e => setSelectedLanguage(e.target.value)
6754
+ }, languages.map(lng => /*#__PURE__*/React.createElement("option", {
6755
+ value: lng.code,
6756
+ key: lng.code
6757
+ }, lng.name)))), tabFields === null || tabFields === void 0 ? void 0 : tabFields.map((field, index) => {
6758
+ var _a, _b, _c, _d, _e, _f, _g;
6663
6759
  return /*#__PURE__*/React.createElement(Tab, {
6664
6760
  key: field.id,
6665
6761
  className: classNames('khb_tabs-item', {
@@ -6668,14 +6764,18 @@ const Tabs = ({
6668
6764
  }, /*#__PURE__*/React.createElement(TabItem, {
6669
6765
  key: field.id,
6670
6766
  deleteTitle: deleteTitle,
6671
- register: register(`tabs.${index}.name`, {
6672
- required: tabNameRequiredText
6673
- }),
6767
+ register: {
6768
+ value: getValues(`tabs.${index}.names.${selectedLanguage}`),
6769
+ onChange: e => onTabnameChange(index, e.target.value || '')
6770
+ },
6674
6771
  onRemoveTab: () => {
6675
6772
  removeField(index);
6676
6773
  setActiveTab(index === 0 ? 0 : index - 1);
6677
6774
  },
6678
- error: (_c = (_b = (_a = errors === null || errors === void 0 ? void 0 : errors['tabs']) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.message,
6775
+ error: selectedLanguage ? ((_b = (_a = errors === null || errors === void 0 ? void 0 : errors['tabs']) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.names) ? Object.keys((_d = (_c = errors === null || errors === void 0 ? void 0 : errors['tabs']) === null || _c === void 0 ? void 0 : _c[index]) === null || _d === void 0 ? void 0 : _d.names).map(key => {
6776
+ var _a, _b, _c, _d;
6777
+ return (_d = (_c = (_b = (_a = errors === null || errors === void 0 ? void 0 : errors['tabs']) === null || _a === void 0 ? void 0 : _a[index]) === null || _b === void 0 ? void 0 : _b.names) === null || _c === void 0 ? void 0 : _c[key]) === null || _d === void 0 ? void 0 : _d.message;
6778
+ }).join(', ') : '' : (_g = (_f = (_e = errors === null || errors === void 0 ? void 0 : errors['tabs']) === null || _e === void 0 ? void 0 : _e[index]) === null || _f === void 0 ? void 0 : _f.name) === null || _g === void 0 ? void 0 : _g.message,
6679
6779
  noButtonText: noButtonText,
6680
6780
  yesButtonText: yesButtonText,
6681
6781
  showDelete: (tabFields === null || tabFields === void 0 ? void 0 : tabFields.length) > 1
@@ -6768,6 +6868,7 @@ const WidgetForm = ({
6768
6868
  itemsTypes,
6769
6869
  widgetTypes,
6770
6870
  loading,
6871
+ languages,
6771
6872
  onWidgetFormSubmit,
6772
6873
  getCollectionData,
6773
6874
  collectionData,
@@ -6902,6 +7003,32 @@ const WidgetForm = ({
6902
7003
  setTabCollectionItems(value[constants.tabsAccessor].map(tabItem => tabItem[constants.tabCollectionItemsAccessor]));
6903
7004
  }
6904
7005
  }, [getFirstItemTypeValue, itemsTypes, widgetTypes]);
7006
+ const validateTabs = tabsData => {
7007
+ const isLanguagesProvided = Array.isArray(languages) && languages.length > 0;
7008
+ let isTabsValid = true;
7009
+ if (Array.isArray(tabsData) && tabsData.length > 0) {
7010
+ tabsData.forEach((tabItem, index) => {
7011
+ if (isLanguagesProvided) {
7012
+ languages.forEach(lang => {
7013
+ if (!tabItem.names[lang.code]) {
7014
+ setError(`tabs.${index}.names.${lang.code}`, {
7015
+ type: 'manual',
7016
+ message: `${t('widget.tabNameRequired')} (${lang.name})`
7017
+ });
7018
+ isTabsValid = false;
7019
+ }
7020
+ });
7021
+ } else if (!tabItem.name) {
7022
+ setError(`tabs.${index}.name`, {
7023
+ type: 'manual',
7024
+ message: t('widget.tabNameRequired')
7025
+ });
7026
+ isTabsValid = false;
7027
+ }
7028
+ });
7029
+ }
7030
+ return isTabsValid;
7031
+ };
6905
7032
  const onFormSubmit = data => {
6906
7033
  var _a, _b;
6907
7034
  const formData = Object.assign({}, data);
@@ -6911,9 +7038,14 @@ const WidgetForm = ({
6911
7038
  }
6912
7039
  // setting tabs data if widgetType tab is selected
6913
7040
  const tabsData = getValues('tabs');
7041
+ if (Array.isArray(tabsData) && tabsData.length > 0) {
7042
+ const isTabsValid = validateTabs(tabsData);
7043
+ if (!isTabsValid) return;
7044
+ }
6914
7045
  if (Array.isArray(tabsData) && (formData[constants.widgetTypeAccessor] === constants.tabsWidgetTypeValue || formState === 'UPDATE')) {
6915
7046
  formData[constants.tabsAccessor] = tabsData.map(tabItem => ({
6916
7047
  name: tabItem.name,
7048
+ names: tabItem.names,
6917
7049
  collectionItems: tabItem.collectionItems.map(item => typeof item == 'string' ? item : item.value)
6918
7050
  }));
6919
7051
  } else formData[constants.tabsAccessor] = [];
@@ -7000,7 +7132,19 @@ const WidgetForm = ({
7000
7132
  required: t('widget.codeRequired')
7001
7133
  },
7002
7134
  wrapperClassName: 'khb_grid-item-1of2 khb_padding-left-1 khb_align-top khb_margin-top-0'
7003
- }, {
7135
+ }, Array.isArray(languages) && languages.length > 0 ? {
7136
+ label: `${t('widget.widgetTitle')}`,
7137
+ accessor: 'widgetTitles',
7138
+ required: true,
7139
+ type: customInputs && customInputs['widgetTitle'] ? undefined : 'text',
7140
+ validations: {
7141
+ required: t('widget.widgetTitleRequired')
7142
+ },
7143
+ info: t('widget.widgetTitleInfo'),
7144
+ placeholder: t('widget.widgetTitlePlaceholder'),
7145
+ onInput: handleCapitalize,
7146
+ Input: customInputs && customInputs['widgetTitle'] ? customInputs['widgetTitle'] : undefined
7147
+ } : {
7004
7148
  label: `${t('widget.widgetTitle')}`,
7005
7149
  accessor: 'widgetTitle',
7006
7150
  required: true,
@@ -7116,15 +7260,18 @@ const WidgetForm = ({
7116
7260
  handleSubmit: handleSubmit,
7117
7261
  setValue: setValue,
7118
7262
  control: control,
7119
- setError: setError
7263
+ setError: setError,
7264
+ languages: languages
7120
7265
  }), (selectedWidgetType === null || selectedWidgetType === void 0 ? void 0 : selectedWidgetType.value) === 'Tabs' ? /*#__PURE__*/React.createElement(Tabs, {
7266
+ clearErrors: clearErrors,
7267
+ getValues: getValues,
7268
+ setValue: setValue,
7121
7269
  control: control,
7122
- register: register,
7270
+ languages: languages,
7123
7271
  deleteTitle: t('widget.tabDeleteTitle'),
7124
7272
  yesButtonText: t('yesButtonText'),
7125
7273
  noButtonText: t('cancelButtonText'),
7126
7274
  errors: errors,
7127
- tabNameRequiredText: t('widget.tabNameRequired'),
7128
7275
  itemsPlaceholder: `Select ${selectedCollectionType === null || selectedCollectionType === void 0 ? void 0 : selectedCollectionType.label}...`,
7129
7276
  loadOptions: onChangeSearch,
7130
7277
  isItemsLoading: collectionDataLoading,
@@ -7142,6 +7289,7 @@ const WidgetForm = ({
7142
7289
  formatItem: formatListItem,
7143
7290
  listCode: selectedCollectionType === null || selectedCollectionType === void 0 ? void 0 : selectedCollectionType.value
7144
7291
  }), itemsEnabled && (selectedWidgetType === null || selectedWidgetType === void 0 ? void 0 : selectedWidgetType.value) !== 'Tabs' && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ItemsAccordian, {
7292
+ languages: languages,
7145
7293
  clearError: clearErrors,
7146
7294
  collapseId: constants.webItems,
7147
7295
  title: t('widget.webItems'),
@@ -7158,6 +7306,7 @@ const WidgetForm = ({
7158
7306
  addText: t('addButtonText'),
7159
7307
  deleteText: t('deleteButtonText')
7160
7308
  }), /*#__PURE__*/React.createElement(ItemsAccordian, {
7309
+ languages: languages,
7161
7310
  clearError: clearErrors,
7162
7311
  collapseId: constants.mobileItems,
7163
7312
  title: t('widget.mobileItems'),
@@ -7332,6 +7481,7 @@ const Widget = ({
7332
7481
  totalRecords,
7333
7482
  currentPage,
7334
7483
  pageSize,
7484
+ languages,
7335
7485
  setCurrentPage
7336
7486
  } = useWidget({
7337
7487
  canList: derivedPermissions.list,
@@ -7343,6 +7493,7 @@ const Widget = ({
7343
7493
  return /*#__PURE__*/React.createElement(WidgetContextProvider, {
7344
7494
  loading: loading,
7345
7495
  list: list,
7496
+ languages: languages,
7346
7497
  imageBaseUrl: imageBaseUrl,
7347
7498
  onChangeFormState: onChangeFormState,
7348
7499
  t: derivedT,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knovator/pagecreator-admin",
3
- "version": "0.8.5",
3
+ "version": "0.9.0",
4
4
  "dependencies": {
5
5
  "classnames": "^2.3.1",
6
6
  "react-beautiful-dnd": "^13.1.0",
@@ -40,6 +40,10 @@ declare const apiList: {
40
40
  url: string;
41
41
  method: string;
42
42
  };
43
+ LANGUAGES: ({ prefix }: API_INPUT_TYPE) => {
44
+ url: string;
45
+ method: string;
46
+ };
43
47
  IMAGE_UPLOAD: ({ prefix }: API_INPUT_TYPE) => {
44
48
  url: string;
45
49
  method: string;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import { ItemsAccordianProps } from '../../../types';
3
- declare const ItemsAccordian: ({ show, title, id, collapseId, toggleShow, loading, name, errors, control, register, setError, itemType, clearError, addText, deleteText, }: ItemsAccordianProps) => JSX.Element;
3
+ declare const ItemsAccordian: ({ show, title, id, collapseId, toggleShow, loading, name, errors, control, register, setError, itemType, languages, clearError, addText, deleteText, }: ItemsAccordianProps) => JSX.Element;
4
4
  export default ItemsAccordian;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import { TabsProps } from '../../../../types';
3
- declare const Tabs: ({ errors, activeTab, setActiveTab, options, control, register, listCode, formatItem, deleteTitle, loadOptions, customStyles, noButtonText, yesButtonText, isItemsLoading, itemsPlaceholder, formatOptionLabel, tabCollectionItems, tabNameRequiredText, onCollectionItemsIndexChange, }: TabsProps) => JSX.Element;
3
+ declare const Tabs: ({ errors, activeTab, setActiveTab, options, control, listCode, setValue, getValues, languages, formatItem, deleteTitle, clearErrors, loadOptions, customStyles, noButtonText, yesButtonText, isItemsLoading, itemsPlaceholder, formatOptionLabel, tabCollectionItems, onCollectionItemsIndexChange, }: TabsProps) => JSX.Element;
4
4
  export default Tabs;
@@ -1,10 +1,11 @@
1
1
  import React, { MutableRefObject } from 'react';
2
- import { CombineObjectType, SchemaType } from '../../../types';
2
+ import { CombineObjectType, LanguageType, SchemaType } from '../../../types';
3
3
  interface SimpleFormProps {
4
4
  schema: SchemaType[];
5
5
  isUpdating?: boolean;
6
6
  onSubmit: (data: CombineObjectType) => void;
7
7
  enable?: boolean;
8
+ languages?: LanguageType[];
8
9
  ref: MutableRefObject<HTMLFormElement | null>;
9
10
  register: any;
10
11
  errors: any;
@@ -13,5 +14,5 @@ interface SimpleFormProps {
13
14
  control: any;
14
15
  setError: any;
15
16
  }
16
- declare const SimpleForm: React.ForwardRefExoticComponent<Pick<SimpleFormProps, "schema" | "onSubmit" | "isUpdating" | "enable" | "register" | "errors" | "handleSubmit" | "setValue" | "control" | "setError"> & React.RefAttributes<HTMLFormElement | null>>;
17
+ declare const SimpleForm: React.ForwardRefExoticComponent<Pick<SimpleFormProps, "schema" | "onSubmit" | "isUpdating" | "enable" | "register" | "errors" | "handleSubmit" | "setValue" | "control" | "setError" | "languages"> & React.RefAttributes<HTMLFormElement | null>>;
17
18
  export default SimpleForm;
@@ -2,6 +2,6 @@ import React from 'react';
2
2
  import { WidgetContextType } from '../types';
3
3
  interface WidgetContextProviderProps extends React.PropsWithChildren, Partial<WidgetContextType> {
4
4
  }
5
- declare const WidgetContextProvider: ({ t, list, imageBaseUrl, searchText, changeSearch, formState, closeForm, loading, onChangeFormState, onWidgetFormSubmit, updateData, canAdd, canUpdate, onDeleteItem, getWidgets, onImageUpload, onImageRemove, itemsTypes, widgetTypes, getCollectionData, collectionDataLoading, collectionData, formatListItem, formatOptionLabel, currentPage, limits, pageSize, setCurrentPage, setPageSize, totalPages, totalRecords, canList, canPartialUpdate, columns, data, canDelete, loader, onPartialUpdateWidget, reactSelectStyles, imageMaxSize, children, }: WidgetContextProviderProps) => JSX.Element;
5
+ declare const WidgetContextProvider: ({ t, list, languages, imageBaseUrl, searchText, changeSearch, formState, closeForm, loading, onChangeFormState, onWidgetFormSubmit, updateData, canAdd, canUpdate, onDeleteItem, getWidgets, onImageUpload, onImageRemove, itemsTypes, widgetTypes, getCollectionData, collectionDataLoading, collectionData, formatListItem, formatOptionLabel, currentPage, limits, pageSize, setCurrentPage, setPageSize, totalPages, totalRecords, canList, canPartialUpdate, columns, data, canDelete, loader, onPartialUpdateWidget, reactSelectStyles, imageMaxSize, children, }: WidgetContextProviderProps) => JSX.Element;
6
6
  export declare function useWidgetState(): WidgetContextType;
7
7
  export default WidgetContextProvider;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { Routes_Input, WidgetType, ItemsType } from '../types';
3
- import { FormActionTypes, ObjectType } from '../types/common';
3
+ import { FormActionTypes, ObjectType, LanguageType } from '../types/common';
4
4
  interface UseWidgetProps {
5
5
  canList?: boolean;
6
6
  defaultLimit: number;
@@ -10,10 +10,11 @@ interface UseWidgetProps {
10
10
  }) => Promise<boolean>;
11
11
  imageBaseUrl?: string;
12
12
  }
13
- declare const useWidget: ({ canList, defaultLimit, routes, preConfirmDelete, imageBaseUrl }: UseWidgetProps) => {
13
+ declare const useWidget: ({ canList, defaultLimit, routes, preConfirmDelete, imageBaseUrl, }: UseWidgetProps) => {
14
14
  list: ObjectType[];
15
15
  getWidgets: (search?: string) => Promise<void>;
16
16
  loading: boolean;
17
+ languages: LanguageType[];
17
18
  setLoading: import("react").Dispatch<import("react").SetStateAction<boolean>>;
18
19
  searchText: string;
19
20
  pageSize: number;
@@ -1,4 +1,4 @@
1
- export type ACTION_TYPES = 'IMAGE_UPLOAD' | 'IMAGE_REMOVE' | 'CREATE' | 'LIST' | 'DELETE' | 'UPDATE' | 'ITEM' | 'PARTIAL_UPDATE' | 'WIDGET_TYPES' | 'SELECTION_TYPES' | 'COLLECTION_DATA' | 'GET_ONE';
1
+ export type ACTION_TYPES = 'IMAGE_UPLOAD' | 'IMAGE_REMOVE' | 'CREATE' | 'LIST' | 'DELETE' | 'UPDATE' | 'ITEM' | 'PARTIAL_UPDATE' | 'WIDGET_TYPES' | 'SELECTION_TYPES' | 'COLLECTION_DATA' | 'GET_ONE' | 'LANGUAGES';
2
2
  export type API_TYPE = {
3
3
  url: string;
4
4
  method: string;
@@ -11,6 +11,10 @@ export interface PermissionsObj {
11
11
  partialUpdate: boolean;
12
12
  delete: boolean;
13
13
  }
14
+ export type LanguageType = {
15
+ name: string;
16
+ code: string;
17
+ };
14
18
  export type ObjectType = {
15
19
  [key: string]: string;
16
20
  };
@@ -1,8 +1,8 @@
1
1
  import React, { MutableRefObject } from 'react';
2
2
  import { DropResult } from 'react-beautiful-dnd';
3
- import { RegisterOptions } from 'react-hook-form';
3
+ import { FieldValues, RegisterOptions, UseFormClearErrors, UseFormGetValues, UseFormSetValue } from 'react-hook-form';
4
4
  import { Routes_Input } from './api';
5
- import { OptionType, FormActionTypes, PermissionsObj, ObjectType } from './common';
5
+ import { OptionType, FormActionTypes, PermissionsObj, ObjectType, LanguageType } from './common';
6
6
  export interface DNDItemsListProps {
7
7
  onDragEnd: (result: DropResult) => void;
8
8
  items: OptionType[];
@@ -227,6 +227,7 @@ export interface ItemsAccordianProps {
227
227
  addText?: string;
228
228
  deleteText?: string;
229
229
  loading?: boolean;
230
+ languages?: LanguageType[];
230
231
  name: string;
231
232
  itemType: 'Web' | 'Mobile';
232
233
  errors: any;
@@ -250,14 +251,12 @@ export interface TabsProps {
250
251
  setActiveTab: (value: number) => void;
251
252
  onSubmit?: () => void;
252
253
  control: any;
253
- register: any;
254
254
  options?: {
255
255
  value: string;
256
256
  label: string;
257
257
  }[];
258
258
  deleteTitle: string;
259
259
  listCode: string;
260
- tabNameRequiredText: string;
261
260
  noButtonText: string;
262
261
  yesButtonText: string;
263
262
  itemsPlaceholder?: string;
@@ -270,6 +269,10 @@ export interface TabsProps {
270
269
  [key: string]: any;
271
270
  };
272
271
  customStyles?: any;
272
+ clearErrors: UseFormClearErrors<FieldValues>;
273
+ getValues: UseFormGetValues<FieldValues>;
274
+ setValue: UseFormSetValue<FieldValues>;
275
+ languages?: LanguageType[];
273
276
  loadOptions?: (value?: string, callback?: (options: OptionType[]) => void) => Promise<OptionType[]>;
274
277
  }
275
278
  export interface ImageUploadProps {
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { WidgetType, ItemsType } from './api';
3
- import { FormActionTypes, OptionType } from './common';
3
+ import { FormActionTypes, LanguageType, OptionType } from './common';
4
4
  export interface ProviderContextType {
5
5
  baseUrl: string;
6
6
  token: string | (() => Promise<string>);
@@ -23,6 +23,7 @@ export interface ProviderContextProviderProps extends React.PropsWithChildren, O
23
23
  export interface WidgetContextType {
24
24
  t: (key: string) => string;
25
25
  list: any[];
26
+ languages: LanguageType[];
26
27
  searchText?: string;
27
28
  changeSearch: (str: string) => void;
28
29
  formState: FormActionTypes | undefined;