@knovator/pagecreator-admin 1.2.9 → 1.3.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.
Files changed (167) hide show
  1. package/index.cjs +7878 -0
  2. package/index.css +2 -0
  3. package/index.js +7864 -0
  4. package/package.json +42 -38
  5. package/src/{index.ts → index.d.ts} +0 -1
  6. package/src/lib/api/index.d.ts +10 -0
  7. package/src/lib/api/list.d.ts +56 -0
  8. package/src/lib/components/Page/AddButton/AddButton.d.ts +3 -0
  9. package/src/lib/components/Page/AddButton/{index.ts → index.d.ts} +0 -1
  10. package/src/lib/components/Page/Form/PageForm.d.ts +4 -0
  11. package/src/lib/components/Page/Form/{index.ts → index.d.ts} +0 -1
  12. package/src/lib/components/Page/Page/Page.d.ts +13 -0
  13. package/src/lib/components/Page/Page/{index.ts → index.d.ts} +0 -1
  14. package/src/lib/components/Page/PageFormActions/PageFormActions.d.ts +4 -0
  15. package/src/lib/components/Page/PageFormActions/{index.ts → index.d.ts} +0 -1
  16. package/src/lib/components/Page/PageFormWrapper/PageFormWrapper.d.ts +4 -0
  17. package/src/lib/components/Page/PageFormWrapper/{index.ts → index.d.ts} +0 -1
  18. package/src/lib/components/Page/Pagination/PagePagination.d.ts +3 -0
  19. package/src/lib/components/Page/Pagination/{index.ts → index.d.ts} +0 -1
  20. package/src/lib/components/Page/Search/PageSearch.d.ts +3 -0
  21. package/src/lib/components/Page/Search/{index.tsx → index.d.ts} +0 -1
  22. package/src/lib/components/Page/Table/PageTable.d.ts +4 -0
  23. package/src/lib/components/Page/Table/{index.ts → index.d.ts} +0 -1
  24. package/src/lib/components/Page/{index.ts → index.d.ts} +0 -1
  25. package/src/lib/components/Widget/AddButton/AddButton.d.ts +3 -0
  26. package/src/lib/components/Widget/AddButton/{index.ts → index.d.ts} +0 -1
  27. package/src/lib/components/Widget/Form/ItemsAccordian.d.ts +4 -0
  28. package/src/lib/components/Widget/Form/Tabs/TabItem.d.ts +4 -0
  29. package/src/lib/components/Widget/Form/Tabs/Tabs.d.ts +4 -0
  30. package/src/lib/components/Widget/Form/Tabs/{index.ts → index.d.ts} +0 -1
  31. package/src/lib/components/Widget/Form/WidgetForm.d.ts +4 -0
  32. package/src/lib/components/Widget/Form/{index.ts → index.d.ts} +0 -1
  33. package/src/lib/components/Widget/Pagination/WidgetPagination.d.ts +3 -0
  34. package/src/lib/components/Widget/Pagination/{index.ts → index.d.ts} +0 -1
  35. package/src/lib/components/Widget/Search/WidgetSearch.d.ts +3 -0
  36. package/src/lib/components/Widget/Search/{index.tsx → index.d.ts} +0 -1
  37. package/src/lib/components/Widget/Table/WidgetTable.d.ts +4 -0
  38. package/src/lib/components/Widget/Table/{index.ts → index.d.ts} +0 -1
  39. package/src/lib/components/Widget/Widget/Widget.d.ts +13 -0
  40. package/src/lib/components/Widget/Widget/{index.ts → index.d.ts} +0 -1
  41. package/src/lib/components/Widget/WidgetFormActions/WidgetFormActions.d.ts +4 -0
  42. package/src/lib/components/Widget/WidgetFormActions/{index.ts → index.d.ts} +0 -1
  43. package/src/lib/components/Widget/WidgetFormWrapper/WidgetFormWrapper.d.ts +4 -0
  44. package/src/lib/components/Widget/WidgetFormWrapper/{index.ts → index.d.ts} +0 -1
  45. package/src/lib/components/Widget/{index.tsx → index.d.ts} +0 -1
  46. package/src/lib/components/common/Accordian/Accordian.d.ts +13 -0
  47. package/src/lib/components/common/Accordian/{index.ts → index.d.ts} +0 -1
  48. package/src/lib/components/common/Button/Button.d.ts +4 -0
  49. package/src/lib/components/common/Button/{index.ts → index.d.ts} +0 -1
  50. package/src/lib/components/common/ConfirmPopover/ConfirmPopover.d.ts +4 -0
  51. package/src/lib/components/common/ConfirmPopover/{index.ts → index.d.ts} +0 -1
  52. package/src/lib/components/common/DNDItemsList/DNDItemsList.d.ts +4 -0
  53. package/src/lib/components/common/DNDItemsList/{index.ts → index.d.ts} +0 -1
  54. package/src/lib/components/common/DeleteModal/DeleteModal.d.ts +4 -0
  55. package/src/lib/components/common/DeleteModal/index.d.ts +2 -0
  56. package/src/lib/components/common/Drawer/Drawer.d.ts +9 -0
  57. package/src/lib/components/common/Drawer/{index.ts → index.d.ts} +0 -1
  58. package/src/lib/components/common/Form/Form.d.ts +15 -0
  59. package/src/lib/components/common/Form/SimpleForm.d.ts +18 -0
  60. package/src/lib/components/common/Form/{index.ts → index.d.ts} +0 -1
  61. package/src/lib/components/common/FormActions/FormActions.d.ts +10 -0
  62. package/src/lib/components/common/FormActions/{index.ts → index.d.ts} +0 -1
  63. package/src/lib/components/common/ImageUpload/ImageUpload.d.ts +4 -0
  64. package/src/lib/components/common/ImageUpload/index.d.ts +2 -0
  65. package/src/lib/components/common/Input/Checkbox.d.ts +4 -0
  66. package/src/lib/components/common/Input/Input.d.ts +4 -0
  67. package/src/lib/components/common/Input/ReactSelect.d.ts +4 -0
  68. package/src/lib/components/common/Input/Select.d.ts +4 -0
  69. package/src/lib/components/common/Input/SrcSet.d.ts +4 -0
  70. package/src/lib/components/common/Input/index.d.ts +12 -0
  71. package/src/lib/components/common/Modal/Modal.d.ts +8 -0
  72. package/src/lib/components/common/Modal/index.d.ts +2 -0
  73. package/src/lib/components/common/Pagination/Pagination.d.ts +4 -0
  74. package/src/lib/components/common/Pagination/{index.ts → index.d.ts} +0 -1
  75. package/src/lib/components/common/Table/Table.d.ts +4 -0
  76. package/src/lib/components/common/Table/{index.ts → index.d.ts} +0 -1
  77. package/src/lib/components/common/Toggle/Toggle.d.ts +4 -0
  78. package/src/lib/components/common/Toggle/{index.ts → index.d.ts} +0 -1
  79. package/src/lib/constants/common.d.ts +122 -0
  80. package/src/lib/context/PageContext.d.ts +7 -0
  81. package/src/lib/context/ProviderContext.d.ts +5 -0
  82. package/src/lib/context/WidgetContext.d.ts +7 -0
  83. package/src/lib/helper/utils.d.ts +10 -0
  84. package/src/lib/hooks/usePage.d.ts +37 -0
  85. package/src/lib/hooks/usePagination.d.ts +15 -0
  86. package/src/lib/hooks/useWidget.d.ts +46 -0
  87. package/src/lib/icons/chevronDown.d.ts +4 -0
  88. package/src/lib/icons/chevronLeft.d.ts +4 -0
  89. package/src/lib/icons/chevronRight.d.ts +4 -0
  90. package/src/lib/icons/chevronUp.d.ts +4 -0
  91. package/src/lib/icons/close.d.ts +4 -0
  92. package/src/lib/icons/pencil.d.ts +4 -0
  93. package/src/lib/icons/plus.d.ts +4 -0
  94. package/src/lib/icons/settings.d.ts +4 -0
  95. package/src/lib/icons/trash.d.ts +4 -0
  96. package/src/lib/types/api.d.ts +34 -0
  97. package/src/lib/types/common.d.ts +30 -0
  98. package/src/lib/types/components.d.ts +422 -0
  99. package/src/lib/types/context.d.ts +135 -0
  100. package/index.d.ts +0 -1
  101. package/src/lib/api/index.ts +0 -70
  102. package/src/lib/api/list.ts +0 -59
  103. package/src/lib/components/Page/AddButton/AddButton.tsx +0 -16
  104. package/src/lib/components/Page/Form/PageForm.tsx +0 -194
  105. package/src/lib/components/Page/Page/Page.tsx +0 -151
  106. package/src/lib/components/Page/PageFormActions/PageFormActions.tsx +0 -50
  107. package/src/lib/components/Page/PageFormWrapper/PageFormWrapper.tsx +0 -16
  108. package/src/lib/components/Page/Pagination/PagePagination.tsx +0 -26
  109. package/src/lib/components/Page/Search/PageSearch.tsx +0 -32
  110. package/src/lib/components/Page/Table/PageTable.tsx +0 -36
  111. package/src/lib/components/Widget/AddButton/AddButton.tsx +0 -16
  112. package/src/lib/components/Widget/Form/ItemsAccordian.tsx +0 -354
  113. package/src/lib/components/Widget/Form/Tabs/TabItem.tsx +0 -43
  114. package/src/lib/components/Widget/Form/Tabs/Tabs.tsx +0 -190
  115. package/src/lib/components/Widget/Form/WidgetForm.tsx +0 -771
  116. package/src/lib/components/Widget/Pagination/WidgetPagination.tsx +0 -26
  117. package/src/lib/components/Widget/Search/WidgetSearch.tsx +0 -32
  118. package/src/lib/components/Widget/Table/WidgetTable.tsx +0 -70
  119. package/src/lib/components/Widget/Widget/Widget.tsx +0 -173
  120. package/src/lib/components/Widget/WidgetFormActions/WidgetFormActions.tsx +0 -50
  121. package/src/lib/components/Widget/WidgetFormWrapper/WidgetFormWrapper.tsx +0 -16
  122. package/src/lib/components/common/Accordian/Accordian.tsx +0 -56
  123. package/src/lib/components/common/Button/Button.tsx +0 -45
  124. package/src/lib/components/common/ConfirmPopover/ConfirmPopover.tsx +0 -47
  125. package/src/lib/components/common/DNDItemsList/DNDItemsList.tsx +0 -77
  126. package/src/lib/components/common/DeleteModal/DeleteModal.tsx +0 -72
  127. package/src/lib/components/common/DeleteModal/index.tsx +0 -3
  128. package/src/lib/components/common/Drawer/Drawer.tsx +0 -79
  129. package/src/lib/components/common/Form/Form.tsx +0 -256
  130. package/src/lib/components/common/Form/SimpleForm.tsx +0 -314
  131. package/src/lib/components/common/FormActions/FormActions.tsx +0 -37
  132. package/src/lib/components/common/ImageUpload/ImageUpload.tsx +0 -113
  133. package/src/lib/components/common/ImageUpload/index.tsx +0 -3
  134. package/src/lib/components/common/Input/Checkbox.tsx +0 -25
  135. package/src/lib/components/common/Input/Input.tsx +0 -51
  136. package/src/lib/components/common/Input/ReactSelect.tsx +0 -61
  137. package/src/lib/components/common/Input/Select.tsx +0 -47
  138. package/src/lib/components/common/Input/SrcSet.tsx +0 -143
  139. package/src/lib/components/common/Input/index.ts +0 -20
  140. package/src/lib/components/common/Modal/Modal.tsx +0 -57
  141. package/src/lib/components/common/Modal/index.tsx +0 -3
  142. package/src/lib/components/common/Pagination/Pagination.tsx +0 -88
  143. package/src/lib/components/common/Table/Table.tsx +0 -133
  144. package/src/lib/components/common/Toggle/Toggle.tsx +0 -23
  145. package/src/lib/constants/common.ts +0 -145
  146. package/src/lib/context/PageContext.tsx +0 -100
  147. package/src/lib/context/ProviderContext.tsx +0 -52
  148. package/src/lib/context/WidgetContext.tsx +0 -127
  149. package/src/lib/helper/utils.ts +0 -46
  150. package/src/lib/hooks/usePage.tsx +0 -306
  151. package/src/lib/hooks/usePagination.tsx +0 -41
  152. package/src/lib/hooks/useWidget.tsx +0 -503
  153. package/src/lib/icons/chevronDown.tsx +0 -21
  154. package/src/lib/icons/chevronLeft.tsx +0 -20
  155. package/src/lib/icons/chevronRight.tsx +0 -20
  156. package/src/lib/icons/chevronUp.tsx +0 -21
  157. package/src/lib/icons/close.tsx +0 -21
  158. package/src/lib/icons/pencil.tsx +0 -21
  159. package/src/lib/icons/plus.tsx +0 -23
  160. package/src/lib/icons/settings.tsx +0 -35
  161. package/src/lib/icons/trash.tsx +0 -21
  162. package/src/lib/types/api.ts +0 -44
  163. package/src/lib/types/common.ts +0 -31
  164. package/src/lib/types/components.ts +0 -428
  165. package/src/lib/types/context.ts +0 -184
  166. package/src/styles/index.css +0 -481
  167. /package/src/lib/types/{index.ts → index.d.ts} +0 -0
@@ -1,354 +0,0 @@
1
- import React, { useEffect, useState } from 'react';
2
- import { Controller, useFieldArray } from 'react-hook-form';
3
-
4
- import Input from '../../common/Input';
5
- import Button from '../../common/Button';
6
- import Accordian from '../../common/Accordian';
7
- import ImageUpload from '../../common/ImageUpload';
8
- import { ItemsAccordianProps } from '../../../types';
9
- import ConfirmPopover from '../../common/ConfirmPopover';
10
- import { useWidgetState } from '../../../context/WidgetContext';
11
- import { useProviderState } from '../../../context/ProviderContext';
12
-
13
- interface ImageInputProps {
14
- label: string;
15
- control: any;
16
- name: string;
17
- error: any;
18
- baseUrl: string;
19
- imageMaxSize: number;
20
- onImageUpload: (file: File) => Promise<void | {
21
- fileUrl: string;
22
- fileId: string;
23
- fileUri: string;
24
- }>;
25
- text: string | JSX.Element;
26
- onImageRemove: (fileId: string) => Promise<void>;
27
- setError: (name: string, error: any) => void;
28
- clearError: (name: string) => void;
29
- }
30
-
31
- const ImageInput = ({
32
- label,
33
- control,
34
- name,
35
- text,
36
- error,
37
- baseUrl,
38
- setError,
39
- clearError,
40
- onImageRemove,
41
- imageMaxSize,
42
- onImageUpload,
43
- }: ImageInputProps) => {
44
- return (
45
- <div className="kms_input-wrapper">
46
- <label className="kms_input-label">{label}</label>
47
- <Controller
48
- control={control}
49
- name={name}
50
- render={({ field }) => (
51
- <ImageUpload
52
- imgId={field.value}
53
- clearError={() => clearError(name)}
54
- maxSize={imageMaxSize}
55
- onError={(msg) =>
56
- setError(name, {
57
- type: 'custom',
58
- message: msg,
59
- })
60
- }
61
- error={error}
62
- setImgId={(value) => {
63
- field.onChange(value);
64
- }}
65
- baseUrl={baseUrl}
66
- text={text}
67
- onImageUpload={onImageUpload}
68
- onImageRemove={onImageRemove}
69
- className="khb_img-upload-wrapper-3"
70
- />
71
- )}
72
- />
73
- </div>
74
- );
75
- };
76
-
77
- const ItemsAccordian = ({
78
- show,
79
- title,
80
- id,
81
- collapseId,
82
- toggleShow,
83
- loading,
84
- name,
85
- errors,
86
- control,
87
- register,
88
- setError,
89
- itemType,
90
- languages,
91
- clearError,
92
- addText = 'Add',
93
- deleteText = 'Delete',
94
- }: ItemsAccordianProps) => {
95
- const { baseUrl, commonTranslations } = useProviderState();
96
- const {
97
- onImageUpload,
98
- onImageRemove,
99
- imageBaseUrl,
100
- imageMaxSize,
101
- widgetTranslations,
102
- } = useWidgetState();
103
- const [itemsShow, setItemsShow] = useState<boolean[]>([]);
104
- const {
105
- fields: items,
106
- append: appendItem,
107
- remove: removeItem,
108
- } = useFieldArray({ name, control });
109
-
110
- const onItemsToggleClick = (index: number, status?: boolean) => {
111
- const newItemsShow: boolean[] = [...itemsShow];
112
- const newStatus = errors?.[name]?.[index]
113
- ? true
114
- : typeof status === 'undefined'
115
- ? !newItemsShow[index]
116
- : status;
117
- newItemsShow[index] = newStatus;
118
- setItemsShow(newItemsShow);
119
- };
120
-
121
- useEffect(() => {
122
- if (errors && errors?.[name]?.length > 0) {
123
- errors?.[name]?.forEach((errorItem: any, index: number) => {
124
- if (errorItem) onItemsToggleClick(index, true);
125
- });
126
- }
127
- // eslint-disable-next-line react-hooks/exhaustive-deps
128
- }, [errors, name, errors?.[name]]);
129
-
130
- const addTab = (index: number) => {
131
- appendItem({
132
- altText: '',
133
- link: '',
134
- img: '',
135
- srcset: [],
136
- itemType,
137
- sequence: index,
138
- });
139
- };
140
-
141
- return (
142
- <Accordian
143
- open={show}
144
- onToggle={() => toggleShow(!show)}
145
- title={title}
146
- collapseId={collapseId}
147
- id={id}
148
- footerContent={
149
- <Button
150
- size="sm"
151
- disabled={loading}
152
- onClick={() => addTab(items.length)}
153
- >
154
- {addText}
155
- </Button>
156
- }
157
- >
158
- <div className="khb_item-items">
159
- {items?.map((field, index) => (
160
- <Accordian
161
- key={index}
162
- open={itemsShow[index]}
163
- onToggle={() => onItemsToggleClick(index)}
164
- title={`Item ${index + 1}`}
165
- collapseId={`${id}-item-content-${index}`}
166
- id={`${id}-item-${index}`}
167
- footerContent={
168
- <ConfirmPopover
169
- onConfirm={() => removeItem(index)}
170
- title={widgetTranslations.deleteTitle}
171
- confirmText={commonTranslations.yes}
172
- cancelText={commonTranslations.cancel}
173
- >
174
- <Button type="danger" size="sm" disabled={loading}>
175
- {deleteText}
176
- </Button>
177
- </ConfirmPopover>
178
- }
179
- >
180
- <div className="khb-form-items">
181
- {Array.isArray(languages) && languages.length > 0 ? (
182
- <>
183
- {languages.map((lang) => (
184
- <Input
185
- rest={register(`${name}.${index}.titles.${lang.code}`)}
186
- label={commonTranslations.title + ` (${lang.name})`}
187
- error={
188
- errors[name]?.[index]?.['titles']?.[lang.code]
189
- ? errors[name]?.[index]?.['titles']?.[
190
- lang.code
191
- ]?.message?.toString() + ` (${lang.name})`
192
- : ''
193
- }
194
- type="text"
195
- className="w-full p-2"
196
- placeholder={
197
- commonTranslations.titlePlaceholder + ` (${lang.name})`
198
- }
199
-
200
- />
201
- ))}
202
- </>
203
- ) : (
204
- <Input
205
- rest={register(`${name}.${index}.title`)}
206
- label={commonTranslations.title}
207
- error={errors[name]?.[index]?.['title']?.message?.toString()}
208
- type="text"
209
- className="w-full p-2"
210
- placeholder={commonTranslations.titlePlaceholder}
211
-
212
- />
213
- )}
214
- {Array.isArray(languages) && languages.length > 0 ? (
215
- <>
216
- {languages.map((lang) => (
217
- <Input
218
- rest={register(`${name}.${index}.subtitles.${lang.code}`)}
219
- label={widgetTranslations.subtitle + ` (${lang.name})`}
220
- type="text"
221
- className="w-full p-2"
222
- placeholder={
223
- widgetTranslations.subTitlePlaceholder +
224
- ` (${lang.name})`
225
- }
226
- />
227
- ))}
228
- </>
229
- ) : (
230
- <Input
231
- rest={register(`${name}.${index}.subtitle`)}
232
- label={widgetTranslations.subtitle}
233
- type="text"
234
- className="w-full p-2"
235
- placeholder={widgetTranslations.subTitlePlaceholder}
236
- />
237
- )}
238
- {Array.isArray(languages) && languages.length > 0 ? (
239
- <>
240
- {languages.map((lang) => (
241
- <Input
242
- rest={register(`${name}.${index}.altTexts.${lang.code}`)}
243
- label={widgetTranslations.altText + ` (${lang.name})`}
244
- type="text"
245
- className="w-full p-2"
246
- placeholder={
247
- widgetTranslations.altTextPlaceholder +
248
- ` (${lang.name})`
249
- }
250
- />
251
- ))}
252
- </>
253
- ) : (
254
- <Input
255
- rest={register(`${name}.${index}.altText`)}
256
- label={widgetTranslations.altText}
257
- type="text"
258
- className="w-full p-2"
259
- placeholder={widgetTranslations.altTextPlaceholder}
260
- />
261
- )}
262
- <Input
263
- rest={register(`${name}.${index}.link`)}
264
- label={widgetTranslations.link}
265
- type="url"
266
- className="w-full p-2"
267
- placeholder={widgetTranslations.linkPlaceholder}
268
- />
269
- <Input.SrcSet
270
- control={control}
271
- register={register}
272
- label={widgetTranslations.srcset}
273
- name={`${name}.${index}.srcset`}
274
- errors={errors[name]?.[index]?.['srcset']}
275
- screenSizeRequired={widgetTranslations.screenSizeRequired}
276
- heightRequired={widgetTranslations.heightRequired}
277
- minHeight={widgetTranslations.minHeight}
278
- minScreenSize={widgetTranslations.minScreenSize}
279
- minWidth={widgetTranslations.minWidth}
280
- widthRequired={widgetTranslations.widthRequired}
281
- />
282
- {Array.isArray(languages) && languages.length > 0 ? (
283
- <>
284
- {languages.map((lang) => (
285
- <ImageInput
286
- key={lang.code}
287
- label={widgetTranslations.image + ` (${lang.name})`}
288
- control={control}
289
- name={`${name}.${index}.imgs.${lang.code}`}
290
- error={errors[name]?.[index]?.['imgs']?.[
291
- lang.code
292
- ]?.message?.toString()}
293
- baseUrl={imageBaseUrl ? imageBaseUrl : baseUrl}
294
- setError={setError}
295
- clearError={clearError}
296
- onImageRemove={onImageRemove}
297
- imageMaxSize={imageMaxSize}
298
- onImageUpload={onImageUpload}
299
- text={
300
- <>
301
- <div className="khb_img-text-wrapper">
302
- <div className="khb_img-text-label">
303
- <span>{widgetTranslations.uploadFile}</span>
304
- </div>
305
- <p className="khb_img-text-1">
306
- {widgetTranslations.dragDrop}
307
- </p>
308
- </div>
309
- <p className="khb_img-text-2">
310
- {widgetTranslations.allowedFormat}
311
- </p>
312
- </>
313
- }
314
- />
315
- ))}
316
- </>
317
- ) : (
318
- <ImageInput
319
- label={widgetTranslations.image}
320
- control={control}
321
- name={`${name}.${index}.img`}
322
- error={errors[name]?.[index]?.['img']?.message?.toString()}
323
- baseUrl={imageBaseUrl ? imageBaseUrl : baseUrl}
324
- setError={setError}
325
- clearError={clearError}
326
- onImageRemove={onImageRemove}
327
- imageMaxSize={imageMaxSize}
328
- onImageUpload={onImageUpload}
329
- text={
330
- <>
331
- <div className="khb_img-text-wrapper">
332
- <div className="khb_img-text-label">
333
- <span>{widgetTranslations.uploadFile}</span>
334
- </div>
335
- <p className="khb_img-text-1">
336
- {widgetTranslations.dragDrop}
337
- </p>
338
- </div>
339
- <p className="khb_img-text-2">
340
- {widgetTranslations.allowedFormat}
341
- </p>
342
- </>
343
- }
344
- />
345
- )}
346
- </div>
347
- </Accordian>
348
- ))}
349
- </div>
350
- </Accordian>
351
- );
352
- };
353
-
354
- export default ItemsAccordian;
@@ -1,43 +0,0 @@
1
- import React from 'react';
2
- import Trash from '../../../../icons/trash';
3
- import { TabItemProps } from '../../../../types';
4
- import ConfirmPopover from '../../../common/ConfirmPopover';
5
-
6
- const TabItem = ({
7
- showDelete,
8
- isDisabled,
9
- deleteTitle,
10
- onRemoveTab,
11
- register,
12
- error,
13
- noButtonText,
14
- yesButtonText,
15
- }: TabItemProps) => {
16
- return (
17
- <>
18
- <input
19
- type="text"
20
- className="khb_tabs-input"
21
- autoFocus
22
- style={{ display: 'block' }}
23
- disabled={isDisabled}
24
- {...(register || {})}
25
- />
26
- {error && <p className="khb_input-error ">{error}</p>}
27
- {showDelete ? (
28
- <ConfirmPopover
29
- onConfirm={onRemoveTab}
30
- title={deleteTitle}
31
- confirmText={yesButtonText}
32
- cancelText={noButtonText}
33
- >
34
- <Trash className="khb_tabs-remove" />
35
- </ConfirmPopover>
36
- ) : (
37
- ''
38
- )}
39
- </>
40
- );
41
- };
42
-
43
- export default TabItem;
@@ -1,190 +0,0 @@
1
- import React, { useState } from 'react';
2
- import classNames from 'classnames';
3
- import {
4
- TabList,
5
- Tabs as PkgTabs,
6
- Tab as PkgTab,
7
- TabPanel as PkgTabPanel,
8
- } from 'react-tabs';
9
- import { useFieldArray, Controller } from 'react-hook-form';
10
- import { OptionType, TabsProps } from '../../../../types';
11
-
12
- import Plus from '../../../../icons/plus';
13
- import Button from '../../../common/Button';
14
- import TabItem from './TabItem';
15
- import CustomReactSelect from '../../../common/Input/ReactSelect';
16
- import DNDItemsList from '../../../common/DNDItemsList';
17
-
18
- const Tabs = ({
19
- errors,
20
- activeTab,
21
- setActiveTab,
22
- options,
23
- control,
24
- listCode,
25
- setValue,
26
- getValues,
27
- languages,
28
- formatItem,
29
- deleteTitle,
30
- clearErrors,
31
- loadOptions,
32
- customStyles,
33
- noButtonText,
34
- yesButtonText,
35
- isItemsLoading,
36
- itemsPlaceholder,
37
- formatOptionLabel,
38
- tabCollectionItems,
39
- onCollectionItemsIndexChange,
40
- }: TabsProps) => {
41
- const [selectedLanguage, setSelectedLanguage] = useState<string | undefined>(
42
- languages?.[0]?.code
43
- );
44
- const {
45
- fields: tabFields,
46
- append: appendField,
47
- remove: removeField,
48
- } = useFieldArray({ name: 'tabs', control });
49
-
50
- const addTab = () => {
51
- appendField({
52
- ...(selectedLanguage
53
- ? {
54
- names: languages?.reduce((acc, lng) => {
55
- acc[lng.code] = '';
56
- return acc;
57
- }, {} as any),
58
- }
59
- : {
60
- name: '',
61
- }),
62
- collectionItems: [],
63
- });
64
- setActiveTab(tabFields.length);
65
- };
66
- const onTabnameChange = (index: number, value: string) => {
67
- if (selectedLanguage) {
68
- clearErrors(`tabs.${index}.names.${selectedLanguage}`);
69
- setValue(`tabs.${index}.names.${selectedLanguage}`, value);
70
- } else {
71
- clearErrors(`tabs.${index}.name`);
72
- setValue(`tabs.${index}.name`, value);
73
- }
74
- };
75
-
76
- return (
77
- <div className="khb_tabs-container">
78
- <PkgTabs
79
- selectedIndex={activeTab}
80
- onSelect={setActiveTab}
81
- className="khb-tabs"
82
- >
83
- <TabList className="khb_tabs-list">
84
- {Array.isArray(languages) && languages.length > 0 && (
85
- <div className="khb_input-wrapper">
86
- <select
87
- title="Change Language"
88
- value={selectedLanguage}
89
- className="khb_input khb_input-sm h-full"
90
- onChange={(e) => setSelectedLanguage(e.target.value)}
91
- >
92
- {languages.map((lng) => (
93
- <option value={lng.code} key={lng.code}>
94
- {lng.name}
95
- </option>
96
- ))}
97
- </select>
98
- </div>
99
- )}
100
- {tabFields?.map((field, index) => {
101
- return (
102
- <PkgTab
103
- key={field.id}
104
- className={classNames('khb_tabs-item', {
105
- 'khb_tabs-item-selected': activeTab === index,
106
- })}
107
- >
108
- <TabItem
109
- key={field.id}
110
- deleteTitle={deleteTitle}
111
- register={{
112
- value: getValues(`tabs.${index}.names.${selectedLanguage}`),
113
- onChange: (e: any) =>
114
- onTabnameChange(index, e.target.value || ''),
115
- }}
116
- onRemoveTab={() => {
117
- removeField(index);
118
- setActiveTab(index === 0 ? 0 : index - 1);
119
- }}
120
- error={
121
- selectedLanguage
122
- ? errors?.['tabs']?.[index]?.names
123
- ? Object.keys(errors?.['tabs']?.[index]?.names)
124
- .map(
125
- (key) =>
126
- errors?.['tabs']?.[index]?.names?.[key]?.message
127
- )
128
- .join(', ')
129
- : ''
130
- : errors?.['tabs']?.[index]?.name?.message
131
- }
132
- noButtonText={noButtonText}
133
- yesButtonText={yesButtonText}
134
- showDelete={tabFields?.length > 1}
135
- />
136
- </PkgTab>
137
- );
138
- })}
139
- <Button className="khb_tabs-add" onClick={addTab}>
140
- <Plus />
141
- </Button>
142
- </TabList>
143
- <div className="khb_tabs-body">
144
- {tabFields?.map((field, index) => (
145
- <PkgTabPanel key={field.id}>
146
- <Controller
147
- control={control}
148
- name={`tabs.${index}.collectionItems`}
149
- render={({ field: { value, onChange } }) => (
150
- <CustomReactSelect
151
- options={options || []}
152
- onChange={(value: OptionType | OptionType[] | null) => {
153
- if (value) {
154
- if (Array.isArray(value)) onChange(value);
155
- else onChange([value]);
156
- }
157
- }}
158
- selectKey={`tabs.${index}.collectionItems-${JSON.stringify(
159
- Array.isArray(value) && value.length > 0
160
- ? value[0] || ''
161
- : listCode
162
- )}`}
163
- selectedOptions={value}
164
- isMulti={true}
165
- isSearchable={true}
166
- loadOptions={loadOptions}
167
- isLoading={isItemsLoading}
168
- placeholder={itemsPlaceholder}
169
- listCode={listCode}
170
- customStyles={customStyles}
171
- // wrapperClassName={schema.wrapperClassName}
172
- formatOptionLabel={formatOptionLabel}
173
- />
174
- )}
175
- />
176
- </PkgTabPanel>
177
- ))}
178
- </div>
179
- </PkgTabs>
180
- <DNDItemsList
181
- items={tabCollectionItems[activeTab]}
182
- onDragEnd={(result) => onCollectionItemsIndexChange(activeTab, result)}
183
- formatItem={formatItem}
184
- listCode={listCode}
185
- />
186
- </div>
187
- );
188
- };
189
-
190
- export default Tabs;