@eturnity/eturnity_reusable_components 8.16.2--EPDM-14330.4 → 8.16.2--EPDM-14330.6

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 (102) hide show
  1. package/package.json +1 -1
  2. package/src/assets/svgIcons/ac_power.svg +4 -0
  3. package/src/assets/svgIcons/arrow_long_left.svg +3 -0
  4. package/src/assets/svgIcons/arrow_long_right.svg +3 -0
  5. package/src/assets/svgIcons/chassis_ground_symbol.svg +27 -0
  6. package/src/assets/svgIcons/dc_power.svg +8 -0
  7. package/src/assets/svgIcons/double_arrow_long.svg +4 -0
  8. package/src/assets/svgIcons/ed_ac.svg +3 -0
  9. package/src/assets/svgIcons/ed_acgrid.svg +4 -0
  10. package/src/assets/svgIcons/ed_arrow_both.svg +7 -0
  11. package/src/assets/svgIcons/ed_arrow_left.svg +7 -0
  12. package/src/assets/svgIcons/ed_arrow_right.svg +7 -0
  13. package/src/assets/svgIcons/ed_battery.svg +10 -0
  14. package/src/assets/svgIcons/ed_batteryacinverter.svg +16 -0
  15. package/src/assets/svgIcons/ed_batteryintegratedinverter.svg +19 -0
  16. package/src/assets/svgIcons/ed_cirquitbreaker.svg +4 -0
  17. package/src/assets/svgIcons/ed_cirquitbreaker_magnetic.svg +6 -0
  18. package/src/assets/svgIcons/ed_cirquitbreaker_thermal.svg +4 -0
  19. package/src/assets/svgIcons/ed_cirquitbreaker_thermal_magnetic.svg +5 -0
  20. package/src/assets/svgIcons/ed_consumption.svg +3 -0
  21. package/src/assets/svgIcons/ed_dc.svg +6 -0
  22. package/src/assets/svgIcons/ed_disconnector.svg +4 -0
  23. package/src/assets/svgIcons/ed_disconnector_fuse.svg +4 -0
  24. package/src/assets/svgIcons/ed_disconnector_fuse_switch.svg +4 -0
  25. package/src/assets/svgIcons/ed_disconnector_loadbreak switch.svg +4 -0
  26. package/src/assets/svgIcons/ed_disconnector_switch.svg +4 -0
  27. package/src/assets/svgIcons/ed_disconnector_switch_auto_release.svg +5 -0
  28. package/src/assets/svgIcons/ed_energymanagement_rectangle.svg +3 -0
  29. package/src/assets/svgIcons/ed_evcharger.svg +19 -0
  30. package/src/assets/svgIcons/ed_flexiblecomponent_circle.svg +3 -0
  31. package/src/assets/svgIcons/ed_flexiblecomponent_square.svg +3 -0
  32. package/src/assets/svgIcons/ed_fuse.svg +3 -0
  33. package/src/assets/svgIcons/ed_ground.svg +5 -0
  34. package/src/assets/svgIcons/ed_heatpump.svg +4 -0
  35. package/src/assets/svgIcons/ed_icon_battery.svg +9 -0
  36. package/src/assets/svgIcons/ed_icon_circle.svg +3 -0
  37. package/src/assets/svgIcons/ed_icon_heatpump.svg +3 -0
  38. package/src/assets/svgIcons/ed_icon_inverter.svg +8 -0
  39. package/src/assets/svgIcons/ed_icon_optimizer.svg +11 -0
  40. package/src/assets/svgIcons/ed_integratedbatteryinverter.svg +10 -0
  41. package/src/assets/svgIcons/ed_inverter-blank.svg +3 -0
  42. package/src/assets/svgIcons/ed_mainsconnection.svg +3 -0
  43. package/src/assets/svgIcons/ed_meter_arrowleft.svg +4 -0
  44. package/src/assets/svgIcons/ed_meter_arrowright.svg +4 -0
  45. package/src/assets/svgIcons/ed_meter_bidirectional.svg +5 -0
  46. package/src/assets/svgIcons/ed_networkandsystemprotection_double.svg +14 -0
  47. package/src/assets/svgIcons/ed_networkandsystemprotection_single.svg +7 -0
  48. package/src/assets/svgIcons/ed_pvpanel.svg +7 -0
  49. package/src/assets/svgIcons/ed_rcd.svg +5 -0
  50. package/src/assets/svgIcons/ed_rcd_simple.svg +3 -0
  51. package/src/assets/svgIcons/ed_spd.svg +6 -0
  52. package/src/assets/svgIcons/ed_stringwithoptimizer.svg +33 -0
  53. package/src/assets/svgIcons/ed_stringwithoutoptimizer.svg +17 -0
  54. package/src/assets/svgIcons/ed_transformer.svg +3 -0
  55. package/src/assets/svgIcons/filter.svg +3 -0
  56. package/src/assets/svgIcons/ground_symbol.svg +28 -0
  57. package/src/assets/svgIcons/move_left.svg +3 -0
  58. package/src/assets/svgIcons/move_right.svg +3 -0
  59. package/src/assets/svgIcons/rectangle.svg +3 -0
  60. package/src/assets/svgIcons/refresh.svg +3 -0
  61. package/src/assets/svgIcons/text_icon.svg +3 -0
  62. package/src/assets/theme.js +17 -1
  63. package/src/components/banner/infoBanner/InfoBanner.spec.js +29 -42
  64. package/src/components/barchart/BottomFields.vue +253 -0
  65. package/src/components/barchart/ChartControls.vue +113 -0
  66. package/src/components/barchart/SelectionBox.vue +150 -0
  67. package/src/components/barchart/composables/index.js +5 -0
  68. package/src/components/barchart/composables/useAxisCalculations.js +104 -0
  69. package/src/components/barchart/composables/useChartData.js +114 -0
  70. package/src/components/barchart/composables/useChartScroll.js +61 -0
  71. package/src/components/barchart/composables/useSelection.js +75 -0
  72. package/src/components/barchart/composables/useTooltip.js +100 -0
  73. package/src/components/barchart/index.vue +385 -0
  74. package/src/components/barchart/styles/bottomFields.js +66 -0
  75. package/src/components/barchart/styles/chart.js +272 -0
  76. package/src/components/barchart/styles/chartControls.js +59 -0
  77. package/src/components/buttons/buttonIcon/index.vue +5 -0
  78. package/src/components/buttons/splitButtons/index.vue +86 -0
  79. package/src/components/collapsableInfoText/index.vue +2 -2
  80. package/src/components/errorMessage/errorMessage.spec.js +34 -0
  81. package/src/components/errorMessage/errorMessage.stories.js +35 -0
  82. package/src/components/filter/filterSettings.vue +2 -0
  83. package/src/components/filterComponent/viewFilter.vue +577 -0
  84. package/src/components/filterComponent/viewSort.vue +242 -12
  85. package/src/components/icon/index.vue +32 -9
  86. package/src/components/infoText/index.vue +2 -2
  87. package/src/components/infoText/infoText.spec.js +6 -1
  88. package/src/components/inputs/inputNumber/index.vue +14 -2
  89. package/src/components/inputs/searchInput/index.vue +18 -2
  90. package/src/components/inputs/select/index.vue +109 -19
  91. package/src/components/inputs/select/option/index.vue +5 -0
  92. package/src/components/modals/actionModal/actionModal.spec.js +52 -0
  93. package/src/components/modals/actionModal/actionModal.stories.js +53 -0
  94. package/src/components/modals/actionModal/index.vue +6 -6
  95. package/src/components/modals/infoModal/index.vue +49 -19
  96. package/src/components/modals/infoModal/infoModal.spec.js +55 -0
  97. package/src/components/modals/infoModal/infoModal.stories.js +47 -0
  98. package/src/components/modals/modal/index.vue +16 -5
  99. package/src/components/pageSubtitle/PageSubtitle.stories.js +0 -1
  100. package/src/helpers/isObjectEqual.js +22 -0
  101. package/src/helpers/translateLang.js +95 -24
  102. package/src/main.js +1 -0
@@ -0,0 +1,577 @@
1
+ <template>
2
+ <PageContainer>
3
+ <ButtonIcon
4
+ ref="buttonIcon"
5
+ class="button-icon"
6
+ fill-type="stroke"
7
+ icon-name="filter"
8
+ :text="$gettext('filter')"
9
+ type="filter"
10
+ @click="toggleOptions"
11
+ />
12
+ <ButtonWrapper v-if="isOptionsVisible">
13
+ <BoxContainer ref="boxContainer" class="box-container">
14
+ <BoxTitle>{{ $gettext('filter') }}</BoxTitle>
15
+ <SortOptionsContainer>
16
+ <template v-if="selectedSort.length > 0">
17
+ <SortDropdownContainer
18
+ v-for="(item, index) in selectedSort"
19
+ :key="index"
20
+ >
21
+ <LeadingText>{{ $gettext('where') }}</LeadingText>
22
+ <SelectComponent
23
+ ref="selectSortDropdown"
24
+ align-items="vertical"
25
+ class="sort-dropdown"
26
+ :dropdown-auto-close="false"
27
+ select-height="40px"
28
+ @click.stop
29
+ @input-change="
30
+ onSelectFilter({
31
+ type: 'column',
32
+ value: $event,
33
+ index: index,
34
+ })
35
+ "
36
+ >
37
+ <template #selector>
38
+ <SelectedText>{{
39
+ getSelectedLabel({
40
+ type: 'column',
41
+ value: item.column,
42
+ index,
43
+ }) || $gettext('category')
44
+ }}</SelectedText>
45
+ </template>
46
+ <template #dropdown>
47
+ <SelectOption
48
+ v-for="category in filterCategories"
49
+ :key="category.name"
50
+ :value="category.name"
51
+ >
52
+ {{ $gettext(category.text) }}
53
+ </SelectOption>
54
+ </template>
55
+ </SelectComponent>
56
+ <SelectComponent
57
+ ref="selectSortDropdown"
58
+ align-items="vertical"
59
+ class="sort-dropdown"
60
+ :disabled="!item.column"
61
+ :dropdown-auto-close="false"
62
+ select-height="40px"
63
+ @click.stop
64
+ @input-change="
65
+ onSelectFilter({
66
+ type: 'constraint',
67
+ value: $event,
68
+ index: index,
69
+ })
70
+ "
71
+ >
72
+ <template #selector>
73
+ <SelectedText>{{
74
+ getSelectedLabel({
75
+ type: 'constraint',
76
+ value: item.constraint,
77
+ index,
78
+ }) || $gettext('constraint')
79
+ }}</SelectedText>
80
+ </template>
81
+ <template #dropdown>
82
+ <SelectOption
83
+ v-for="(item, index) in constraintOptions(index)"
84
+ :key="item.value"
85
+ :value="item.value"
86
+ >
87
+ {{ item.label }}
88
+ </SelectOption>
89
+ </template>
90
+ </SelectComponent>
91
+ <template v-if="item.column === 'updated'">
92
+ <DatePickerContainer>
93
+ <VueDatePicker
94
+ :auto-apply="true"
95
+ :clearable="true"
96
+ :disabled="!item.constraint"
97
+ :enable-time-picker="false"
98
+ :format="datePickerFormat"
99
+ :input-class-name="'dp-input'"
100
+ :locale="datePickerLocale"
101
+ model-type="format"
102
+ :model-value="item.selectedDate"
103
+ :placeholder="$gettext('Select')"
104
+ :range="false"
105
+ :single-picker="true"
106
+ text-input
107
+ @update:model-value="
108
+ onSelectFilter({
109
+ type: 'selectedDate',
110
+ value: $event,
111
+ index: index,
112
+ constraint: item.constraint,
113
+ })
114
+ "
115
+ />
116
+ </DatePickerContainer>
117
+ </template>
118
+ <SelectComponent
119
+ v-else
120
+ ref="selectSortDropdown"
121
+ align-items="vertical"
122
+ class="sort-dropdown"
123
+ :disabled="!item.column || !item.constraint"
124
+ :dropdown-auto-close="false"
125
+ :is-searchable="false"
126
+ option-width="max-content"
127
+ select-height="40px"
128
+ @click.stop
129
+ @input-change="
130
+ onSelectFilter({
131
+ type: 'selectedOptions',
132
+ value: $event,
133
+ index: index,
134
+ })
135
+ "
136
+ >
137
+ <template #selector>
138
+ <SelectedText>{{
139
+ getSelectedLabel({
140
+ type: 'selectedOptions',
141
+ value: item.constraint,
142
+ index,
143
+ }) || $gettext('Options')
144
+ }}</SelectedText>
145
+ </template>
146
+ <template #dropdown>
147
+ <OptionsContainer class="options-container">
148
+ <SelectOption
149
+ v-for="option in optionsList(index)"
150
+ :key="option.value"
151
+ :value="option.value"
152
+ @click="
153
+ onSelectFilter({
154
+ type: 'selectedOptions',
155
+ value: option.value,
156
+ index: index,
157
+ })
158
+ "
159
+ >
160
+ <RcCheckbox
161
+ :is-checked="
162
+ selectedSort[index].selectedOptions?.includes(
163
+ option.value
164
+ )
165
+ "
166
+ :label="$gettext(option.label)"
167
+ size="small"
168
+ @on-event-handler="
169
+ onSelectFilter({
170
+ type: 'selectedOptions',
171
+ value: option.value,
172
+ index: index,
173
+ })
174
+ "
175
+ />
176
+ </SelectOption>
177
+ </OptionsContainer>
178
+ </template>
179
+ </SelectComponent>
180
+ <IconContainer>
181
+ <RCIcon
182
+ :color="theme.semanticColors.teal[800]"
183
+ cursor="pointer"
184
+ name="close"
185
+ size="14px"
186
+ @click.stop="removeItem(index)"
187
+ />
188
+ </IconContainer>
189
+ </SortDropdownContainer>
190
+ </template>
191
+ <template v-else>
192
+ <SortDropdownContainer>
193
+ <LeadingText>{{ $gettext('where') }}</LeadingText>
194
+ <SelectComponent
195
+ ref="selectSortDropdown"
196
+ align-items="vertical"
197
+ class="sort-dropdown"
198
+ :dropdown-auto-close="false"
199
+ select-height="40px"
200
+ @click.stop
201
+ @input-change="
202
+ onSelectFilter({
203
+ type: 'column',
204
+ value: $event,
205
+ index: 0,
206
+ })
207
+ "
208
+ >
209
+ <template #selector>
210
+ <SelectedText>{{ $gettext('category') }}</SelectedText>
211
+ </template>
212
+ <template #dropdown>
213
+ <SelectOption
214
+ v-for="item in filterCategories"
215
+ :key="item.name"
216
+ :value="item.name"
217
+ >
218
+ {{ $gettext(item.text) }}
219
+ </SelectOption>
220
+ </template>
221
+ </SelectComponent>
222
+ <SelectComponent
223
+ ref="selectSortDropdown"
224
+ align-items="vertical"
225
+ class="sort-dropdown"
226
+ :disabled="true"
227
+ :dropdown-auto-close="false"
228
+ select-height="40px"
229
+ @click.stop
230
+ >
231
+ <template #selector>
232
+ <SelectedText>{{ $gettext('constraint') }}</SelectedText>
233
+ </template>
234
+ </SelectComponent>
235
+ <SelectComponent
236
+ ref="selectSortDropdown"
237
+ align-items="vertical"
238
+ class="sort-dropdown"
239
+ :disabled="true"
240
+ :dropdown-auto-close="false"
241
+ select-height="40px"
242
+ @click.stop
243
+ >
244
+ <template #selector>
245
+ <SelectedText>{{ $gettext('Options') }}</SelectedText>
246
+ </template>
247
+ </SelectComponent>
248
+ </SortDropdownContainer>
249
+ </template>
250
+ </SortOptionsContainer>
251
+ <BottomContainer>
252
+ <PlaceholderText>{{ $gettext('where') }}</PlaceholderText>
253
+ <ButtonIcon
254
+ icon-name="plus_button"
255
+ :text="$gettext('add_filter')"
256
+ type="ghost"
257
+ @click="onAddFilter"
258
+ />
259
+ </BottomContainer>
260
+ </BoxContainer>
261
+ </ButtonWrapper>
262
+ </PageContainer>
263
+ </template>
264
+
265
+ <script>
266
+ import styled from 'vue3-styled-components'
267
+ import theme from '../../assets/theme'
268
+ import ButtonIcon from '../buttons/buttonIcon/index.vue'
269
+ import SelectComponent from '../inputs/select/index.vue'
270
+ import SelectOption from '../inputs/select/option/index.vue'
271
+ import RcCheckbox from '../inputs/checkbox/index.vue'
272
+ import RCIcon from '../icon'
273
+ import VueDatePicker from '@vuepic/vue-datepicker'
274
+ import { datePickerLang, getDateFormat } from '../../helpers/translateLang'
275
+
276
+ const PageContainer = styled.div``
277
+
278
+ const ButtonWrapper = styled.div`
279
+ position: relative;
280
+ `
281
+
282
+ const BoxContainer = styled.div`
283
+ position: absolute;
284
+ z-index: 99;
285
+ top: 8px;
286
+ left: 50%;
287
+ transform: translateX(-50%);
288
+ width: max-content;
289
+ max-width: calc(100vw - 32px);
290
+ background-color: ${(props) => props.theme.colors.white};
291
+ border: 1px solid ${(props) => props.theme.semanticColors.grey[300]};
292
+ border-radius: 4px;
293
+ padding: 24px;
294
+ `
295
+
296
+ const BoxTitle = styled.div`
297
+ font-size: 14px;
298
+ font-weight: 500;
299
+ color: ${(props) => props.theme.semanticColors.teal[800]};
300
+ margin-bottom: 16px;
301
+ `
302
+
303
+ const SortOptionsContainer = styled.div`
304
+ display: flex;
305
+ flex-direction: column;
306
+ gap: 16px;
307
+ white-space: nowrap;
308
+ `
309
+
310
+ const SortDropdownContainer = styled.div`
311
+ display: grid;
312
+ grid-template-columns: auto repeat(3, 1fr) auto;
313
+ grid-gap: 8px;
314
+ align-items: center;
315
+ `
316
+
317
+ const SelectedText = styled.div`
318
+ font-size: 14px;
319
+ font-weight: 400;
320
+ color: ${(props) => props.theme.semanticColors.grey[800]};
321
+ `
322
+
323
+ const IconContainer = styled.div`
324
+ margin-left: 12px;
325
+ `
326
+
327
+ const LeadingText = styled.div`
328
+ font-size: 14px;
329
+ font-weight: 400;
330
+ color: ${(props) => props.theme.semanticColors.teal[800]};
331
+ `
332
+
333
+ const BottomContainer = styled.div`
334
+ display: flex;
335
+ margin-top: 16px;
336
+ `
337
+
338
+ const PlaceholderText = styled.div`
339
+ visibility: hidden;
340
+ `
341
+
342
+ const OptionsContainer = styled.div`
343
+ width: max-content;
344
+ display: flex;
345
+ flex-direction: column;
346
+ `
347
+
348
+ const DatePickerContainer = styled.div`
349
+ height: 40px;
350
+ display: flex;
351
+ align-items: center;
352
+ min-width: 150px;
353
+ `
354
+
355
+ export default {
356
+ name: 'ViewSettings',
357
+ components: {
358
+ PageContainer,
359
+ ButtonIcon,
360
+ ButtonWrapper,
361
+ BoxContainer,
362
+ BoxTitle,
363
+ SortOptionsContainer,
364
+ SortDropdownContainer,
365
+ SelectComponent,
366
+ SelectOption,
367
+ SelectedText,
368
+ RCIcon,
369
+ IconContainer,
370
+ LeadingText,
371
+ BottomContainer,
372
+ PlaceholderText,
373
+ RcCheckbox,
374
+ OptionsContainer,
375
+ VueDatePicker,
376
+ DatePickerContainer,
377
+ },
378
+ props: {
379
+ sortOptions: {
380
+ type: Array,
381
+ required: true,
382
+ },
383
+ selectedSort: {
384
+ type: Array,
385
+ required: true,
386
+ },
387
+ filterCategories: {
388
+ type: Array,
389
+ required: true,
390
+ },
391
+ activeLanguage: {
392
+ type: String,
393
+ required: false,
394
+ default: 'en-us',
395
+ },
396
+ },
397
+ data() {
398
+ return {
399
+ isOptionsVisible: false,
400
+ }
401
+ },
402
+ computed: {
403
+ theme() {
404
+ return theme
405
+ },
406
+ datePickerLocale() {
407
+ return datePickerLang(this.activeLanguage)
408
+ },
409
+ datePickerFormat() {
410
+ return getDateFormat(this.activeLanguage)
411
+ },
412
+ },
413
+ beforeUnmount() {
414
+ document.removeEventListener('click', this.handleClickOutside)
415
+ },
416
+ methods: {
417
+ handleClickOutside(event) {
418
+ const isClickInSelect =
419
+ event.target.closest('.sort-dropdown') ||
420
+ event.target.closest('.rc-select-dropdown') ||
421
+ event.target.closest('.select-button') ||
422
+ event.target.closest('.caret_dropdown')
423
+
424
+ if (
425
+ !this.$refs.buttonIcon.$el.contains(event.target) &&
426
+ !this.$refs.boxContainer.$el.contains(event.target) &&
427
+ !isClickInSelect
428
+ ) {
429
+ this.isOptionsVisible = false
430
+ document.removeEventListener('click', this.handleClickOutside)
431
+ }
432
+ },
433
+ toggleOptions() {
434
+ this.isOptionsVisible = !this.isOptionsVisible
435
+ if (this.isOptionsVisible) {
436
+ document.addEventListener('click', this.handleClickOutside)
437
+ } else {
438
+ document.removeEventListener('click', this.handleClickOutside)
439
+ }
440
+ },
441
+ constraintOptions(index) {
442
+ const generalOptions = [
443
+ {
444
+ value: 'contains_any',
445
+ label: this.$gettext('contains_any'),
446
+ },
447
+ {
448
+ value: 'contains_all',
449
+ label: this.$gettext('contains_all'),
450
+ },
451
+ {
452
+ value: 'contains_none',
453
+ label: this.$gettext('contains_none'),
454
+ },
455
+ ]
456
+
457
+ const dateOptions = [
458
+ {
459
+ value: 'is_before',
460
+ label: this.$gettext('is_before'),
461
+ },
462
+ {
463
+ value: 'is_before_or_on',
464
+ label: this.$gettext('is_before_or_on'),
465
+ },
466
+ {
467
+ value: 'is_after',
468
+ label: this.$gettext('is_after'),
469
+ },
470
+ {
471
+ value: 'is_after_or_on',
472
+ label: this.$gettext('is_after_or_on'),
473
+ },
474
+ ]
475
+ if (this.selectedSort?.[index]?.column === 'updated') {
476
+ return dateOptions
477
+ }
478
+
479
+ return generalOptions
480
+ },
481
+ getSelectedLabel({ type, value, index }) {
482
+ if (!value) return
483
+ if (type === 'column') {
484
+ const categoryName = this.filterCategories.find(
485
+ (option) => option.name === value
486
+ ).text
487
+ return this.$gettext(categoryName) || '-'
488
+ } else if (type === 'constraint') {
489
+ return this.constraintOptions(index).find(
490
+ (option) => option.value === value
491
+ ).label
492
+ } else if (type === 'selectedOptions') {
493
+ const selectedOptions =
494
+ this.selectedSort[index]?.selectedOptions || []
495
+ if (selectedOptions.length === 0) return this.$gettext('Options')
496
+
497
+ const optionsList = this.optionsList(index)
498
+ const selectedLabels = selectedOptions
499
+ .map((optionValue) => {
500
+ const option = optionsList.find(
501
+ (opt) => opt.value === optionValue
502
+ )
503
+ return option ? option.label : optionValue
504
+ })
505
+ .join(', ')
506
+
507
+ return selectedLabels.length > 15
508
+ ? `${selectedLabels.substring(0, 15)}...`
509
+ : selectedLabels
510
+ }
511
+ },
512
+ onSelectFilter({ type, value, index, constraint }) {
513
+ if (
514
+ type === 'constraint' &&
515
+ (value === 'contains_all' || value === 'contains_none')
516
+ ) {
517
+ const options = this.optionsList(index)
518
+ const allValues = options.map((option) => option.value)
519
+
520
+ this.$emit('on-filter-change', {
521
+ type: 'selectedOptions',
522
+ value: value === 'contains_all' ? allValues : [],
523
+ index,
524
+ })
525
+ }
526
+
527
+ this.$emit('on-filter-change', {
528
+ type,
529
+ value,
530
+ index,
531
+ constraint,
532
+ })
533
+ if (type === 'column') {
534
+ this.$emit('on-filter-change', {
535
+ type: 'constraint',
536
+ value: '',
537
+ index,
538
+ })
539
+ }
540
+ this.isOptionsVisible = true
541
+ },
542
+ removeItem(index) {
543
+ this.$emit('on-filter-change', {
544
+ type: 'remove',
545
+ index,
546
+ })
547
+ },
548
+ onAddFilter() {
549
+ this.$emit('on-add-filter', {
550
+ type: 'add',
551
+ index: this.selectedSort.length,
552
+ })
553
+ },
554
+ optionsList(index) {
555
+ if (!this.selectedSort[index].column) return []
556
+ const findIndex = this.filterCategories.findIndex(
557
+ (category) => category.name === this.selectedSort[index].column
558
+ )
559
+ const selectedItem = this.filterCategories[findIndex]
560
+ return this.filterCategories[findIndex].options.choices.map(
561
+ (option) => ({
562
+ ...option,
563
+ value: option[selectedItem.valueSelector],
564
+ label: option[selectedItem.labelSelector],
565
+ })
566
+ )
567
+ },
568
+ },
569
+ }
570
+ </script>
571
+
572
+ <style>
573
+ .dp-input {
574
+ height: 40px !important;
575
+ min-width: 150px !important;
576
+ }
577
+ </style>