@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 +175 -24
- package/index.css +1 -0
- package/index.js +175 -24
- package/package.json +1 -1
- package/src/lib/api/list.d.ts +4 -0
- package/src/lib/components/Widget/Form/ItemsAccordian.d.ts +1 -1
- package/src/lib/components/Widget/Form/Tabs/Tabs.d.ts +1 -1
- package/src/lib/components/common/Form/SimpleForm.d.ts +3 -2
- package/src/lib/context/WidgetContext.d.ts +1 -1
- package/src/lib/hooks/useWidget.d.ts +3 -2
- package/src/lib/types/api.d.ts +1 -1
- package/src/lib/types/common.d.ts +4 -0
- package/src/lib/types/components.d.ts +7 -4
- package/src/lib/types/context.d.ts +2 -1
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
|
-
|
|
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(
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
},
|
|
6674
|
-
|
|
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:
|
|
6684
|
-
|
|
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:
|
|
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
|
-
|
|
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
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
|
-
|
|
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(
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
-
},
|
|
6662
|
-
|
|
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:
|
|
6672
|
-
|
|
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:
|
|
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
|
-
|
|
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
package/src/lib/api/list.d.ts
CHANGED
|
@@ -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,
|
|
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;
|
package/src/lib/types/api.d.ts
CHANGED
|
@@ -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;
|
|
@@ -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;
|