@knovator/pagecreator-admin 0.8.5 → 0.9.1

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(),
@@ -3797,7 +3820,37 @@ const SimpleForm = /*#__PURE__*/React.forwardRef(({
3797
3820
  break;
3798
3821
  }
3799
3822
  } else if (schema.Input) {
3800
- input = /*#__PURE__*/React__default["default"].createElement("div", {
3823
+ if (Array.isArray(languages) && languages.length > 0 && schema.accessor === 'widgetTitles') {
3824
+ input = languages.map(lang => /*#__PURE__*/React__default["default"].createElement("div", {
3825
+ key: lang.code,
3826
+ className: classNames__default["default"]('khb_input-wrapper', schema.wrapperClassName)
3827
+ }, /*#__PURE__*/React__default["default"].createElement("label", {
3828
+ className: "khb_input-label"
3829
+ }, schema.label, " (", lang.name, ")", schema.required ? /*#__PURE__*/React__default["default"].createElement("span", {
3830
+ className: "khb_input-label-required"
3831
+ }, "*") : null), /*#__PURE__*/React__default["default"].createElement(reactHookForm.Controller, {
3832
+ control: control,
3833
+ name: `${schema.accessor}.${lang.code}`,
3834
+ rules: schema.validations,
3835
+ render: ({
3836
+ field
3837
+ }) => {
3838
+ var _a, _b, _c;
3839
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
3840
+ return schema.Input({
3841
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3842
+ // @ts-ignore
3843
+ field,
3844
+ error: (_c = (_b = (_a = errors[schema.accessor]) === null || _a === void 0 ? void 0 : _a[lang.code]) === null || _b === void 0 ? void 0 : _b.message) === null || _c === void 0 ? void 0 : _c.toString(),
3845
+ disabled: _isUpdating && typeof schema.editable !== 'undefined' && !schema.editable || !_enable,
3846
+ setError: msg => setError.call(null, schema.accessor, {
3847
+ type: 'custom',
3848
+ message: msg
3849
+ })
3850
+ });
3851
+ }
3852
+ })));
3853
+ } else input = /*#__PURE__*/React__default["default"].createElement("div", {
3801
3854
  className: classNames__default["default"]('khb_input-wrapper', schema.wrapperClassName)
3802
3855
  }, schema.label && /*#__PURE__*/React__default["default"].createElement("label", {
3803
3856
  className: "khb_input-label"
@@ -4516,6 +4569,7 @@ const useWidget = ({
4516
4569
  const [loading, setLoading] = React.useState(false);
4517
4570
  const [totalPages, setTotalPages] = React.useState(0);
4518
4571
  const [totalRecords, setTotalRecords] = React.useState(0);
4572
+ const [languages, setLanguages] = React.useState([]);
4519
4573
  const [itemData, setItemData] = React.useState(null);
4520
4574
  const [formState, setFormState] = React.useState();
4521
4575
  const [itemsTypes, setItemsTypes] = React.useState([]);
@@ -4528,7 +4582,8 @@ const useWidget = ({
4528
4582
  onError,
4529
4583
  onSuccess,
4530
4584
  onLogout,
4531
- widgetRoutesPrefix
4585
+ widgetRoutesPrefix,
4586
+ pageRoutesPrefix
4532
4587
  } = useProviderState();
4533
4588
  const {
4534
4589
  changeSearch,
@@ -4586,6 +4641,24 @@ const useWidget = ({
4586
4641
  setLoading(false);
4587
4642
  }
4588
4643
  }), [baseUrl, currentPageRef, limitRef, offsetRef, handleError, routes, token, widgetRoutesPrefix]);
4644
+ const getLanguagesList = React.useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
4645
+ const api = getApiType({
4646
+ routes,
4647
+ action: 'LANGUAGES',
4648
+ prefix: pageRoutesPrefix
4649
+ });
4650
+ const response = yield commonApi({
4651
+ baseUrl,
4652
+ token,
4653
+ method: api.method,
4654
+ url: api.url,
4655
+ onError: handleError(CALLBACK_CODES.GET_ALL)
4656
+ });
4657
+ if ((response === null || response === void 0 ? void 0 : response.code) === 'SUCCESS') {
4658
+ setLanguages(response.data);
4659
+ return response.data;
4660
+ }
4661
+ }), [baseUrl, handleError, pageRoutesPrefix, routes, token]);
4589
4662
  const onCofirmDeleteWidget = () => __awaiter(void 0, void 0, void 0, function* () {
4590
4663
  try {
4591
4664
  let proceed = true;
@@ -4878,10 +4951,14 @@ const useWidget = ({
4878
4951
  if (_canList) getWidgets();
4879
4952
  // eslint-disable-next-line react-hooks/exhaustive-deps
4880
4953
  }, [_canList]);
4954
+ React.useEffect(() => {
4955
+ getLanguagesList();
4956
+ }, [getLanguagesList]);
4881
4957
  return {
4882
4958
  list,
4883
4959
  getWidgets,
4884
4960
  loading,
4961
+ languages,
4885
4962
  setLoading,
4886
4963
  // Pagination
4887
4964
  searchText: searchRef.current,
@@ -5986,6 +6063,7 @@ const WidgetContextProvider = ({
5986
6063
  t: _t = () => '',
5987
6064
  // Form
5988
6065
  list: _list = [],
6066
+ languages: _languages = [],
5989
6067
  imageBaseUrl: _imageBaseUrl = '',
5990
6068
  searchText: _searchText = '',
5991
6069
  changeSearch: _changeSearch = () => {},
@@ -6034,6 +6112,7 @@ const WidgetContextProvider = ({
6034
6112
  t: _t,
6035
6113
  // Form
6036
6114
  list: _list,
6115
+ languages: _languages,
6037
6116
  imageBaseUrl: _imageBaseUrl,
6038
6117
  closeForm: _closeForm,
6039
6118
  formState: _formState,
@@ -6434,6 +6513,7 @@ const ItemsAccordian = ({
6434
6513
  register,
6435
6514
  setError,
6436
6515
  itemType,
6516
+ languages,
6437
6517
  clearError,
6438
6518
  addText: _addText = 'Add',
6439
6519
  deleteText: _deleteText = 'Delete'
@@ -6475,8 +6555,6 @@ const ItemsAccordian = ({
6475
6555
  }, [errors, name, errors === null || errors === void 0 ? void 0 : errors[name]]);
6476
6556
  const addTab = index => {
6477
6557
  appendItem({
6478
- title: '',
6479
- subtitle: '',
6480
6558
  altText: '',
6481
6559
  link: '',
6482
6560
  img: '',
@@ -6519,20 +6597,39 @@ const ItemsAccordian = ({
6519
6597
  }, _deleteText))
6520
6598
  }, /*#__PURE__*/React__default["default"].createElement("div", {
6521
6599
  className: "khb-form-items"
6522
- }, /*#__PURE__*/React__default["default"].createElement(Input, {
6600
+ }, Array.isArray(languages) && languages.length > 0 ? /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, null, languages.map(lang => {
6601
+ var _a, _b, _c, _d, _e;
6602
+ return /*#__PURE__*/React__default["default"].createElement(Input, {
6603
+ rest: register(`${name}.${index}.titles.${lang.code}`, {
6604
+ required: t('item.titleRequired')
6605
+ }),
6606
+ label: t('item.title') + ` (${lang.name})`,
6607
+ 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(),
6608
+ type: "text",
6609
+ className: "w-full p-2",
6610
+ placeholder: t('item.titlePlaceholder'),
6611
+ required: true
6612
+ });
6613
+ })) : /*#__PURE__*/React__default["default"].createElement(Input, {
6523
6614
  rest: register(`${name}.${index}.title`, {
6524
6615
  required: t('item.titleRequired')
6525
6616
  }),
6526
6617
  label: t('item.title'),
6527
6618
  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',
6619
+ type: "text",
6529
6620
  className: "w-full p-2",
6530
6621
  placeholder: t('item.titlePlaceholder'),
6531
6622
  required: true
6532
- }), /*#__PURE__*/React__default["default"].createElement(Input, {
6623
+ }), 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, {
6624
+ rest: register(`${name}.${index}.subtitles.${lang.code}`),
6625
+ label: t('item.subtitle') + ` (${lang.name})`,
6626
+ type: "text",
6627
+ className: "w-full p-2",
6628
+ placeholder: t('item.subTitlePlaceholder')
6629
+ }))) : /*#__PURE__*/React__default["default"].createElement(Input, {
6533
6630
  rest: register(`${name}.${index}.subtitle`),
6534
6631
  label: t('item.subtitle'),
6535
- type: 'text',
6632
+ type: "text",
6536
6633
  className: "w-full p-2",
6537
6634
  placeholder: t('item.subTitlePlaceholder')
6538
6635
  }), /*#__PURE__*/React__default["default"].createElement(Input, {
@@ -6632,10 +6729,13 @@ const Tabs = ({
6632
6729
  setActiveTab,
6633
6730
  options,
6634
6731
  control,
6635
- register,
6636
6732
  listCode,
6733
+ setValue,
6734
+ getValues,
6735
+ languages,
6637
6736
  formatItem,
6638
6737
  deleteTitle,
6738
+ clearErrors,
6639
6739
  loadOptions,
6640
6740
  customStyles,
6641
6741
  noButtonText,
@@ -6644,9 +6744,10 @@ const Tabs = ({
6644
6744
  itemsPlaceholder,
6645
6745
  formatOptionLabel,
6646
6746
  tabCollectionItems,
6647
- tabNameRequiredText,
6648
6747
  onCollectionItemsIndexChange
6649
6748
  }) => {
6749
+ var _a;
6750
+ const [selectedLanguage, setSelectedLanguage] = React.useState((_a = languages === null || languages === void 0 ? void 0 : languages[0]) === null || _a === void 0 ? void 0 : _a.code);
6650
6751
  const {
6651
6752
  fields: tabFields,
6652
6753
  append: appendField,
@@ -6656,12 +6757,27 @@ const Tabs = ({
6656
6757
  control
6657
6758
  });
6658
6759
  const addTab = () => {
6659
- appendField({
6660
- name: 'Tab Name',
6760
+ appendField(Object.assign(Object.assign({}, selectedLanguage ? {
6761
+ names: languages === null || languages === void 0 ? void 0 : languages.reduce((acc, lng) => {
6762
+ acc[lng.code] = '';
6763
+ return acc;
6764
+ }, {})
6765
+ } : {
6766
+ name: ''
6767
+ }), {
6661
6768
  collectionItems: []
6662
- });
6769
+ }));
6663
6770
  setActiveTab(tabFields.length);
6664
6771
  };
6772
+ const onTabnameChange = (index, value) => {
6773
+ if (selectedLanguage) {
6774
+ clearErrors(`tabs.${index}.names.${selectedLanguage}`);
6775
+ setValue(`tabs.${index}.names.${selectedLanguage}`, value);
6776
+ } else {
6777
+ clearErrors(`tabs.${index}.name`);
6778
+ setValue(`tabs.${index}.name`, value);
6779
+ }
6780
+ };
6665
6781
  return /*#__PURE__*/React__default["default"].createElement("div", {
6666
6782
  className: "khb_tabs-container"
6667
6783
  }, /*#__PURE__*/React__default["default"].createElement(reactTabs.Tabs, {
@@ -6670,8 +6786,18 @@ const Tabs = ({
6670
6786
  className: "khb-tabs"
6671
6787
  }, /*#__PURE__*/React__default["default"].createElement(reactTabs.TabList, {
6672
6788
  className: "khb_tabs-list"
6673
- }, tabFields === null || tabFields === void 0 ? void 0 : tabFields.map((field, index) => {
6674
- var _a, _b, _c;
6789
+ }, Array.isArray(languages) && languages.length > 0 && /*#__PURE__*/React__default["default"].createElement("div", {
6790
+ className: "khb_input-wrapper"
6791
+ }, /*#__PURE__*/React__default["default"].createElement("select", {
6792
+ title: "Change Language",
6793
+ value: selectedLanguage,
6794
+ className: "khb_input khb_input-sm h-full",
6795
+ onChange: e => setSelectedLanguage(e.target.value)
6796
+ }, languages.map(lng => /*#__PURE__*/React__default["default"].createElement("option", {
6797
+ value: lng.code,
6798
+ key: lng.code
6799
+ }, lng.name)))), tabFields === null || tabFields === void 0 ? void 0 : tabFields.map((field, index) => {
6800
+ var _a, _b, _c, _d, _e, _f, _g;
6675
6801
  return /*#__PURE__*/React__default["default"].createElement(reactTabs.Tab, {
6676
6802
  key: field.id,
6677
6803
  className: classNames__default["default"]('khb_tabs-item', {
@@ -6680,14 +6806,18 @@ const Tabs = ({
6680
6806
  }, /*#__PURE__*/React__default["default"].createElement(TabItem, {
6681
6807
  key: field.id,
6682
6808
  deleteTitle: deleteTitle,
6683
- register: register(`tabs.${index}.name`, {
6684
- required: tabNameRequiredText
6685
- }),
6809
+ register: {
6810
+ value: getValues(`tabs.${index}.names.${selectedLanguage}`),
6811
+ onChange: e => onTabnameChange(index, e.target.value || '')
6812
+ },
6686
6813
  onRemoveTab: () => {
6687
6814
  removeField(index);
6688
6815
  setActiveTab(index === 0 ? 0 : index - 1);
6689
6816
  },
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,
6817
+ 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 => {
6818
+ var _a, _b, _c, _d;
6819
+ 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;
6820
+ }).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
6821
  noButtonText: noButtonText,
6692
6822
  yesButtonText: yesButtonText,
6693
6823
  showDelete: (tabFields === null || tabFields === void 0 ? void 0 : tabFields.length) > 1
@@ -6780,6 +6910,7 @@ const WidgetForm = ({
6780
6910
  itemsTypes,
6781
6911
  widgetTypes,
6782
6912
  loading,
6913
+ languages,
6783
6914
  onWidgetFormSubmit,
6784
6915
  getCollectionData,
6785
6916
  collectionData,
@@ -6914,6 +7045,32 @@ const WidgetForm = ({
6914
7045
  setTabCollectionItems(value[constants.tabsAccessor].map(tabItem => tabItem[constants.tabCollectionItemsAccessor]));
6915
7046
  }
6916
7047
  }, [getFirstItemTypeValue, itemsTypes, widgetTypes]);
7048
+ const validateTabs = tabsData => {
7049
+ const isLanguagesProvided = Array.isArray(languages) && languages.length > 0;
7050
+ let isTabsValid = true;
7051
+ if (Array.isArray(tabsData) && tabsData.length > 0) {
7052
+ tabsData.forEach((tabItem, index) => {
7053
+ if (isLanguagesProvided) {
7054
+ languages.forEach(lang => {
7055
+ if (!tabItem.names[lang.code]) {
7056
+ setError(`tabs.${index}.names.${lang.code}`, {
7057
+ type: 'manual',
7058
+ message: `${t('widget.tabNameRequired')} (${lang.name})`
7059
+ });
7060
+ isTabsValid = false;
7061
+ }
7062
+ });
7063
+ } else if (!tabItem.name) {
7064
+ setError(`tabs.${index}.name`, {
7065
+ type: 'manual',
7066
+ message: t('widget.tabNameRequired')
7067
+ });
7068
+ isTabsValid = false;
7069
+ }
7070
+ });
7071
+ }
7072
+ return isTabsValid;
7073
+ };
6917
7074
  const onFormSubmit = data => {
6918
7075
  var _a, _b;
6919
7076
  const formData = Object.assign({}, data);
@@ -6923,9 +7080,14 @@ const WidgetForm = ({
6923
7080
  }
6924
7081
  // setting tabs data if widgetType tab is selected
6925
7082
  const tabsData = getValues('tabs');
7083
+ if (Array.isArray(tabsData) && tabsData.length > 0) {
7084
+ const isTabsValid = validateTabs(tabsData);
7085
+ if (!isTabsValid) return;
7086
+ }
6926
7087
  if (Array.isArray(tabsData) && (formData[constants.widgetTypeAccessor] === constants.tabsWidgetTypeValue || formState === 'UPDATE')) {
6927
7088
  formData[constants.tabsAccessor] = tabsData.map(tabItem => ({
6928
7089
  name: tabItem.name,
7090
+ names: tabItem.names,
6929
7091
  collectionItems: tabItem.collectionItems.map(item => typeof item == 'string' ? item : item.value)
6930
7092
  }));
6931
7093
  } else formData[constants.tabsAccessor] = [];
@@ -7012,7 +7174,19 @@ const WidgetForm = ({
7012
7174
  required: t('widget.codeRequired')
7013
7175
  },
7014
7176
  wrapperClassName: 'khb_grid-item-1of2 khb_padding-left-1 khb_align-top khb_margin-top-0'
7015
- }, {
7177
+ }, Array.isArray(languages) && languages.length > 0 ? {
7178
+ label: `${t('widget.widgetTitle')}`,
7179
+ accessor: 'widgetTitles',
7180
+ required: true,
7181
+ type: customInputs && customInputs['widgetTitle'] ? undefined : 'text',
7182
+ validations: {
7183
+ required: t('widget.widgetTitleRequired')
7184
+ },
7185
+ info: t('widget.widgetTitleInfo'),
7186
+ placeholder: t('widget.widgetTitlePlaceholder'),
7187
+ onInput: handleCapitalize,
7188
+ Input: customInputs && customInputs['widgetTitle'] ? customInputs['widgetTitle'] : undefined
7189
+ } : {
7016
7190
  label: `${t('widget.widgetTitle')}`,
7017
7191
  accessor: 'widgetTitle',
7018
7192
  required: true,
@@ -7128,15 +7302,18 @@ const WidgetForm = ({
7128
7302
  handleSubmit: handleSubmit,
7129
7303
  setValue: setValue,
7130
7304
  control: control,
7131
- setError: setError
7305
+ setError: setError,
7306
+ languages: languages
7132
7307
  }), (selectedWidgetType === null || selectedWidgetType === void 0 ? void 0 : selectedWidgetType.value) === 'Tabs' ? /*#__PURE__*/React__default["default"].createElement(Tabs, {
7308
+ clearErrors: clearErrors,
7309
+ getValues: getValues,
7310
+ setValue: setValue,
7133
7311
  control: control,
7134
- register: register,
7312
+ languages: languages,
7135
7313
  deleteTitle: t('widget.tabDeleteTitle'),
7136
7314
  yesButtonText: t('yesButtonText'),
7137
7315
  noButtonText: t('cancelButtonText'),
7138
7316
  errors: errors,
7139
- tabNameRequiredText: t('widget.tabNameRequired'),
7140
7317
  itemsPlaceholder: `Select ${selectedCollectionType === null || selectedCollectionType === void 0 ? void 0 : selectedCollectionType.label}...`,
7141
7318
  loadOptions: onChangeSearch,
7142
7319
  isItemsLoading: collectionDataLoading,
@@ -7154,6 +7331,7 @@ const WidgetForm = ({
7154
7331
  formatItem: formatListItem,
7155
7332
  listCode: selectedCollectionType === null || selectedCollectionType === void 0 ? void 0 : selectedCollectionType.value
7156
7333
  }), 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, {
7334
+ languages: languages,
7157
7335
  clearError: clearErrors,
7158
7336
  collapseId: constants.webItems,
7159
7337
  title: t('widget.webItems'),
@@ -7170,6 +7348,7 @@ const WidgetForm = ({
7170
7348
  addText: t('addButtonText'),
7171
7349
  deleteText: t('deleteButtonText')
7172
7350
  }), /*#__PURE__*/React__default["default"].createElement(ItemsAccordian, {
7351
+ languages: languages,
7173
7352
  clearError: clearErrors,
7174
7353
  collapseId: constants.mobileItems,
7175
7354
  title: t('widget.mobileItems'),
@@ -7344,6 +7523,7 @@ const Widget = ({
7344
7523
  totalRecords,
7345
7524
  currentPage,
7346
7525
  pageSize,
7526
+ languages,
7347
7527
  setCurrentPage
7348
7528
  } = useWidget({
7349
7529
  canList: derivedPermissions.list,
@@ -7355,6 +7535,7 @@ const Widget = ({
7355
7535
  return /*#__PURE__*/React__default["default"].createElement(WidgetContextProvider, {
7356
7536
  loading: loading,
7357
7537
  list: list,
7538
+ languages: languages,
7358
7539
  imageBaseUrl: imageBaseUrl,
7359
7540
  onChangeFormState: onChangeFormState,
7360
7541
  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(),
@@ -3785,7 +3808,37 @@ const SimpleForm = /*#__PURE__*/forwardRef(({
3785
3808
  break;
3786
3809
  }
3787
3810
  } else if (schema.Input) {
3788
- input = /*#__PURE__*/React.createElement("div", {
3811
+ if (Array.isArray(languages) && languages.length > 0 && schema.accessor === 'widgetTitles') {
3812
+ input = languages.map(lang => /*#__PURE__*/React.createElement("div", {
3813
+ key: lang.code,
3814
+ className: classNames('khb_input-wrapper', schema.wrapperClassName)
3815
+ }, /*#__PURE__*/React.createElement("label", {
3816
+ className: "khb_input-label"
3817
+ }, schema.label, " (", lang.name, ")", schema.required ? /*#__PURE__*/React.createElement("span", {
3818
+ className: "khb_input-label-required"
3819
+ }, "*") : null), /*#__PURE__*/React.createElement(Controller, {
3820
+ control: control,
3821
+ name: `${schema.accessor}.${lang.code}`,
3822
+ rules: schema.validations,
3823
+ render: ({
3824
+ field
3825
+ }) => {
3826
+ var _a, _b, _c;
3827
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
3828
+ return schema.Input({
3829
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3830
+ // @ts-ignore
3831
+ field,
3832
+ error: (_c = (_b = (_a = errors[schema.accessor]) === null || _a === void 0 ? void 0 : _a[lang.code]) === null || _b === void 0 ? void 0 : _b.message) === null || _c === void 0 ? void 0 : _c.toString(),
3833
+ disabled: _isUpdating && typeof schema.editable !== 'undefined' && !schema.editable || !_enable,
3834
+ setError: msg => setError.call(null, schema.accessor, {
3835
+ type: 'custom',
3836
+ message: msg
3837
+ })
3838
+ });
3839
+ }
3840
+ })));
3841
+ } else input = /*#__PURE__*/React.createElement("div", {
3789
3842
  className: classNames('khb_input-wrapper', schema.wrapperClassName)
3790
3843
  }, schema.label && /*#__PURE__*/React.createElement("label", {
3791
3844
  className: "khb_input-label"
@@ -4504,6 +4557,7 @@ const useWidget = ({
4504
4557
  const [loading, setLoading] = useState(false);
4505
4558
  const [totalPages, setTotalPages] = useState(0);
4506
4559
  const [totalRecords, setTotalRecords] = useState(0);
4560
+ const [languages, setLanguages] = useState([]);
4507
4561
  const [itemData, setItemData] = useState(null);
4508
4562
  const [formState, setFormState] = useState();
4509
4563
  const [itemsTypes, setItemsTypes] = useState([]);
@@ -4516,7 +4570,8 @@ const useWidget = ({
4516
4570
  onError,
4517
4571
  onSuccess,
4518
4572
  onLogout,
4519
- widgetRoutesPrefix
4573
+ widgetRoutesPrefix,
4574
+ pageRoutesPrefix
4520
4575
  } = useProviderState();
4521
4576
  const {
4522
4577
  changeSearch,
@@ -4574,6 +4629,24 @@ const useWidget = ({
4574
4629
  setLoading(false);
4575
4630
  }
4576
4631
  }), [baseUrl, currentPageRef, limitRef, offsetRef, handleError, routes, token, widgetRoutesPrefix]);
4632
+ const getLanguagesList = useCallback(() => __awaiter(void 0, void 0, void 0, function* () {
4633
+ const api = getApiType({
4634
+ routes,
4635
+ action: 'LANGUAGES',
4636
+ prefix: pageRoutesPrefix
4637
+ });
4638
+ const response = yield commonApi({
4639
+ baseUrl,
4640
+ token,
4641
+ method: api.method,
4642
+ url: api.url,
4643
+ onError: handleError(CALLBACK_CODES.GET_ALL)
4644
+ });
4645
+ if ((response === null || response === void 0 ? void 0 : response.code) === 'SUCCESS') {
4646
+ setLanguages(response.data);
4647
+ return response.data;
4648
+ }
4649
+ }), [baseUrl, handleError, pageRoutesPrefix, routes, token]);
4577
4650
  const onCofirmDeleteWidget = () => __awaiter(void 0, void 0, void 0, function* () {
4578
4651
  try {
4579
4652
  let proceed = true;
@@ -4866,10 +4939,14 @@ const useWidget = ({
4866
4939
  if (_canList) getWidgets();
4867
4940
  // eslint-disable-next-line react-hooks/exhaustive-deps
4868
4941
  }, [_canList]);
4942
+ useEffect(() => {
4943
+ getLanguagesList();
4944
+ }, [getLanguagesList]);
4869
4945
  return {
4870
4946
  list,
4871
4947
  getWidgets,
4872
4948
  loading,
4949
+ languages,
4873
4950
  setLoading,
4874
4951
  // Pagination
4875
4952
  searchText: searchRef.current,
@@ -5974,6 +6051,7 @@ const WidgetContextProvider = ({
5974
6051
  t: _t = () => '',
5975
6052
  // Form
5976
6053
  list: _list = [],
6054
+ languages: _languages = [],
5977
6055
  imageBaseUrl: _imageBaseUrl = '',
5978
6056
  searchText: _searchText = '',
5979
6057
  changeSearch: _changeSearch = () => {},
@@ -6022,6 +6100,7 @@ const WidgetContextProvider = ({
6022
6100
  t: _t,
6023
6101
  // Form
6024
6102
  list: _list,
6103
+ languages: _languages,
6025
6104
  imageBaseUrl: _imageBaseUrl,
6026
6105
  closeForm: _closeForm,
6027
6106
  formState: _formState,
@@ -6422,6 +6501,7 @@ const ItemsAccordian = ({
6422
6501
  register,
6423
6502
  setError,
6424
6503
  itemType,
6504
+ languages,
6425
6505
  clearError,
6426
6506
  addText: _addText = 'Add',
6427
6507
  deleteText: _deleteText = 'Delete'
@@ -6463,8 +6543,6 @@ const ItemsAccordian = ({
6463
6543
  }, [errors, name, errors === null || errors === void 0 ? void 0 : errors[name]]);
6464
6544
  const addTab = index => {
6465
6545
  appendItem({
6466
- title: '',
6467
- subtitle: '',
6468
6546
  altText: '',
6469
6547
  link: '',
6470
6548
  img: '',
@@ -6507,20 +6585,39 @@ const ItemsAccordian = ({
6507
6585
  }, _deleteText))
6508
6586
  }, /*#__PURE__*/React.createElement("div", {
6509
6587
  className: "khb-form-items"
6510
- }, /*#__PURE__*/React.createElement(Input, {
6588
+ }, Array.isArray(languages) && languages.length > 0 ? /*#__PURE__*/React.createElement(React.Fragment, null, languages.map(lang => {
6589
+ var _a, _b, _c, _d, _e;
6590
+ return /*#__PURE__*/React.createElement(Input, {
6591
+ rest: register(`${name}.${index}.titles.${lang.code}`, {
6592
+ required: t('item.titleRequired')
6593
+ }),
6594
+ label: t('item.title') + ` (${lang.name})`,
6595
+ 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(),
6596
+ type: "text",
6597
+ className: "w-full p-2",
6598
+ placeholder: t('item.titlePlaceholder'),
6599
+ required: true
6600
+ });
6601
+ })) : /*#__PURE__*/React.createElement(Input, {
6511
6602
  rest: register(`${name}.${index}.title`, {
6512
6603
  required: t('item.titleRequired')
6513
6604
  }),
6514
6605
  label: t('item.title'),
6515
6606
  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',
6607
+ type: "text",
6517
6608
  className: "w-full p-2",
6518
6609
  placeholder: t('item.titlePlaceholder'),
6519
6610
  required: true
6520
- }), /*#__PURE__*/React.createElement(Input, {
6611
+ }), Array.isArray(languages) && languages.length > 0 ? /*#__PURE__*/React.createElement(React.Fragment, null, languages.map(lang => /*#__PURE__*/React.createElement(Input, {
6612
+ rest: register(`${name}.${index}.subtitles.${lang.code}`),
6613
+ label: t('item.subtitle') + ` (${lang.name})`,
6614
+ type: "text",
6615
+ className: "w-full p-2",
6616
+ placeholder: t('item.subTitlePlaceholder')
6617
+ }))) : /*#__PURE__*/React.createElement(Input, {
6521
6618
  rest: register(`${name}.${index}.subtitle`),
6522
6619
  label: t('item.subtitle'),
6523
- type: 'text',
6620
+ type: "text",
6524
6621
  className: "w-full p-2",
6525
6622
  placeholder: t('item.subTitlePlaceholder')
6526
6623
  }), /*#__PURE__*/React.createElement(Input, {
@@ -6620,10 +6717,13 @@ const Tabs = ({
6620
6717
  setActiveTab,
6621
6718
  options,
6622
6719
  control,
6623
- register,
6624
6720
  listCode,
6721
+ setValue,
6722
+ getValues,
6723
+ languages,
6625
6724
  formatItem,
6626
6725
  deleteTitle,
6726
+ clearErrors,
6627
6727
  loadOptions,
6628
6728
  customStyles,
6629
6729
  noButtonText,
@@ -6632,9 +6732,10 @@ const Tabs = ({
6632
6732
  itemsPlaceholder,
6633
6733
  formatOptionLabel,
6634
6734
  tabCollectionItems,
6635
- tabNameRequiredText,
6636
6735
  onCollectionItemsIndexChange
6637
6736
  }) => {
6737
+ var _a;
6738
+ const [selectedLanguage, setSelectedLanguage] = useState((_a = languages === null || languages === void 0 ? void 0 : languages[0]) === null || _a === void 0 ? void 0 : _a.code);
6638
6739
  const {
6639
6740
  fields: tabFields,
6640
6741
  append: appendField,
@@ -6644,12 +6745,27 @@ const Tabs = ({
6644
6745
  control
6645
6746
  });
6646
6747
  const addTab = () => {
6647
- appendField({
6648
- name: 'Tab Name',
6748
+ appendField(Object.assign(Object.assign({}, selectedLanguage ? {
6749
+ names: languages === null || languages === void 0 ? void 0 : languages.reduce((acc, lng) => {
6750
+ acc[lng.code] = '';
6751
+ return acc;
6752
+ }, {})
6753
+ } : {
6754
+ name: ''
6755
+ }), {
6649
6756
  collectionItems: []
6650
- });
6757
+ }));
6651
6758
  setActiveTab(tabFields.length);
6652
6759
  };
6760
+ const onTabnameChange = (index, value) => {
6761
+ if (selectedLanguage) {
6762
+ clearErrors(`tabs.${index}.names.${selectedLanguage}`);
6763
+ setValue(`tabs.${index}.names.${selectedLanguage}`, value);
6764
+ } else {
6765
+ clearErrors(`tabs.${index}.name`);
6766
+ setValue(`tabs.${index}.name`, value);
6767
+ }
6768
+ };
6653
6769
  return /*#__PURE__*/React.createElement("div", {
6654
6770
  className: "khb_tabs-container"
6655
6771
  }, /*#__PURE__*/React.createElement(Tabs$1, {
@@ -6658,8 +6774,18 @@ const Tabs = ({
6658
6774
  className: "khb-tabs"
6659
6775
  }, /*#__PURE__*/React.createElement(TabList, {
6660
6776
  className: "khb_tabs-list"
6661
- }, tabFields === null || tabFields === void 0 ? void 0 : tabFields.map((field, index) => {
6662
- var _a, _b, _c;
6777
+ }, Array.isArray(languages) && languages.length > 0 && /*#__PURE__*/React.createElement("div", {
6778
+ className: "khb_input-wrapper"
6779
+ }, /*#__PURE__*/React.createElement("select", {
6780
+ title: "Change Language",
6781
+ value: selectedLanguage,
6782
+ className: "khb_input khb_input-sm h-full",
6783
+ onChange: e => setSelectedLanguage(e.target.value)
6784
+ }, languages.map(lng => /*#__PURE__*/React.createElement("option", {
6785
+ value: lng.code,
6786
+ key: lng.code
6787
+ }, lng.name)))), tabFields === null || tabFields === void 0 ? void 0 : tabFields.map((field, index) => {
6788
+ var _a, _b, _c, _d, _e, _f, _g;
6663
6789
  return /*#__PURE__*/React.createElement(Tab, {
6664
6790
  key: field.id,
6665
6791
  className: classNames('khb_tabs-item', {
@@ -6668,14 +6794,18 @@ const Tabs = ({
6668
6794
  }, /*#__PURE__*/React.createElement(TabItem, {
6669
6795
  key: field.id,
6670
6796
  deleteTitle: deleteTitle,
6671
- register: register(`tabs.${index}.name`, {
6672
- required: tabNameRequiredText
6673
- }),
6797
+ register: {
6798
+ value: getValues(`tabs.${index}.names.${selectedLanguage}`),
6799
+ onChange: e => onTabnameChange(index, e.target.value || '')
6800
+ },
6674
6801
  onRemoveTab: () => {
6675
6802
  removeField(index);
6676
6803
  setActiveTab(index === 0 ? 0 : index - 1);
6677
6804
  },
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,
6805
+ 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 => {
6806
+ var _a, _b, _c, _d;
6807
+ 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;
6808
+ }).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
6809
  noButtonText: noButtonText,
6680
6810
  yesButtonText: yesButtonText,
6681
6811
  showDelete: (tabFields === null || tabFields === void 0 ? void 0 : tabFields.length) > 1
@@ -6768,6 +6898,7 @@ const WidgetForm = ({
6768
6898
  itemsTypes,
6769
6899
  widgetTypes,
6770
6900
  loading,
6901
+ languages,
6771
6902
  onWidgetFormSubmit,
6772
6903
  getCollectionData,
6773
6904
  collectionData,
@@ -6902,6 +7033,32 @@ const WidgetForm = ({
6902
7033
  setTabCollectionItems(value[constants.tabsAccessor].map(tabItem => tabItem[constants.tabCollectionItemsAccessor]));
6903
7034
  }
6904
7035
  }, [getFirstItemTypeValue, itemsTypes, widgetTypes]);
7036
+ const validateTabs = tabsData => {
7037
+ const isLanguagesProvided = Array.isArray(languages) && languages.length > 0;
7038
+ let isTabsValid = true;
7039
+ if (Array.isArray(tabsData) && tabsData.length > 0) {
7040
+ tabsData.forEach((tabItem, index) => {
7041
+ if (isLanguagesProvided) {
7042
+ languages.forEach(lang => {
7043
+ if (!tabItem.names[lang.code]) {
7044
+ setError(`tabs.${index}.names.${lang.code}`, {
7045
+ type: 'manual',
7046
+ message: `${t('widget.tabNameRequired')} (${lang.name})`
7047
+ });
7048
+ isTabsValid = false;
7049
+ }
7050
+ });
7051
+ } else if (!tabItem.name) {
7052
+ setError(`tabs.${index}.name`, {
7053
+ type: 'manual',
7054
+ message: t('widget.tabNameRequired')
7055
+ });
7056
+ isTabsValid = false;
7057
+ }
7058
+ });
7059
+ }
7060
+ return isTabsValid;
7061
+ };
6905
7062
  const onFormSubmit = data => {
6906
7063
  var _a, _b;
6907
7064
  const formData = Object.assign({}, data);
@@ -6911,9 +7068,14 @@ const WidgetForm = ({
6911
7068
  }
6912
7069
  // setting tabs data if widgetType tab is selected
6913
7070
  const tabsData = getValues('tabs');
7071
+ if (Array.isArray(tabsData) && tabsData.length > 0) {
7072
+ const isTabsValid = validateTabs(tabsData);
7073
+ if (!isTabsValid) return;
7074
+ }
6914
7075
  if (Array.isArray(tabsData) && (formData[constants.widgetTypeAccessor] === constants.tabsWidgetTypeValue || formState === 'UPDATE')) {
6915
7076
  formData[constants.tabsAccessor] = tabsData.map(tabItem => ({
6916
7077
  name: tabItem.name,
7078
+ names: tabItem.names,
6917
7079
  collectionItems: tabItem.collectionItems.map(item => typeof item == 'string' ? item : item.value)
6918
7080
  }));
6919
7081
  } else formData[constants.tabsAccessor] = [];
@@ -7000,7 +7162,19 @@ const WidgetForm = ({
7000
7162
  required: t('widget.codeRequired')
7001
7163
  },
7002
7164
  wrapperClassName: 'khb_grid-item-1of2 khb_padding-left-1 khb_align-top khb_margin-top-0'
7003
- }, {
7165
+ }, Array.isArray(languages) && languages.length > 0 ? {
7166
+ label: `${t('widget.widgetTitle')}`,
7167
+ accessor: 'widgetTitles',
7168
+ required: true,
7169
+ type: customInputs && customInputs['widgetTitle'] ? undefined : 'text',
7170
+ validations: {
7171
+ required: t('widget.widgetTitleRequired')
7172
+ },
7173
+ info: t('widget.widgetTitleInfo'),
7174
+ placeholder: t('widget.widgetTitlePlaceholder'),
7175
+ onInput: handleCapitalize,
7176
+ Input: customInputs && customInputs['widgetTitle'] ? customInputs['widgetTitle'] : undefined
7177
+ } : {
7004
7178
  label: `${t('widget.widgetTitle')}`,
7005
7179
  accessor: 'widgetTitle',
7006
7180
  required: true,
@@ -7116,15 +7290,18 @@ const WidgetForm = ({
7116
7290
  handleSubmit: handleSubmit,
7117
7291
  setValue: setValue,
7118
7292
  control: control,
7119
- setError: setError
7293
+ setError: setError,
7294
+ languages: languages
7120
7295
  }), (selectedWidgetType === null || selectedWidgetType === void 0 ? void 0 : selectedWidgetType.value) === 'Tabs' ? /*#__PURE__*/React.createElement(Tabs, {
7296
+ clearErrors: clearErrors,
7297
+ getValues: getValues,
7298
+ setValue: setValue,
7121
7299
  control: control,
7122
- register: register,
7300
+ languages: languages,
7123
7301
  deleteTitle: t('widget.tabDeleteTitle'),
7124
7302
  yesButtonText: t('yesButtonText'),
7125
7303
  noButtonText: t('cancelButtonText'),
7126
7304
  errors: errors,
7127
- tabNameRequiredText: t('widget.tabNameRequired'),
7128
7305
  itemsPlaceholder: `Select ${selectedCollectionType === null || selectedCollectionType === void 0 ? void 0 : selectedCollectionType.label}...`,
7129
7306
  loadOptions: onChangeSearch,
7130
7307
  isItemsLoading: collectionDataLoading,
@@ -7142,6 +7319,7 @@ const WidgetForm = ({
7142
7319
  formatItem: formatListItem,
7143
7320
  listCode: selectedCollectionType === null || selectedCollectionType === void 0 ? void 0 : selectedCollectionType.value
7144
7321
  }), itemsEnabled && (selectedWidgetType === null || selectedWidgetType === void 0 ? void 0 : selectedWidgetType.value) !== 'Tabs' && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ItemsAccordian, {
7322
+ languages: languages,
7145
7323
  clearError: clearErrors,
7146
7324
  collapseId: constants.webItems,
7147
7325
  title: t('widget.webItems'),
@@ -7158,6 +7336,7 @@ const WidgetForm = ({
7158
7336
  addText: t('addButtonText'),
7159
7337
  deleteText: t('deleteButtonText')
7160
7338
  }), /*#__PURE__*/React.createElement(ItemsAccordian, {
7339
+ languages: languages,
7161
7340
  clearError: clearErrors,
7162
7341
  collapseId: constants.mobileItems,
7163
7342
  title: t('widget.mobileItems'),
@@ -7332,6 +7511,7 @@ const Widget = ({
7332
7511
  totalRecords,
7333
7512
  currentPage,
7334
7513
  pageSize,
7514
+ languages,
7335
7515
  setCurrentPage
7336
7516
  } = useWidget({
7337
7517
  canList: derivedPermissions.list,
@@ -7343,6 +7523,7 @@ const Widget = ({
7343
7523
  return /*#__PURE__*/React.createElement(WidgetContextProvider, {
7344
7524
  loading: loading,
7345
7525
  list: list,
7526
+ languages: languages,
7346
7527
  imageBaseUrl: imageBaseUrl,
7347
7528
  onChangeFormState: onChangeFormState,
7348
7529
  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.1",
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;