@itfin/components 1.3.100 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/components/button/Button.vue +4 -2
- package/src/components/card/BentoCard.vue +70 -19
- package/src/components/card/BentoGrid.vue +21 -8
- package/src/components/filter/FilterAmountRange.vue +50 -42
- package/src/components/filter/FilterBadge.vue +27 -22
- package/src/components/filter/FilterFacetsList.vue +21 -17
- package/src/components/filter/FilterPanel.vue +143 -45
- package/src/components/filter/index.stories.js +0 -2
- package/src/components/form/Label.vue +19 -2
- package/src/components/icon/Icon.vue +4 -2
- package/src/components/icon/components/fi_fingerprint.vue +4 -0
- package/src/components/icon/components/nomi-ai.vue +6 -0
- package/src/components/icon/components/nomi-arrow-down.vue +4 -0
- package/src/components/icon/components/nomi-arrow-right-top.vue +4 -0
- package/src/components/icon/components/nomi-arrow-up.vue +4 -0
- package/src/components/icon/components/nomi-arrow_down.vue +4 -0
- package/src/components/icon/components/nomi-arrow_up.vue +4 -0
- package/src/components/icon/components/nomi-arrows.vue +7 -0
- package/src/components/icon/components/nomi-calendar-alt.vue +4 -0
- package/src/components/icon/components/nomi-calendar-alt2.vue +4 -0
- package/src/components/icon/components/nomi-calendar.vue +11 -0
- package/src/components/icon/components/nomi-card.vue +4 -0
- package/src/components/icon/components/nomi-clear.vue +4 -0
- package/src/components/icon/components/nomi-close.vue +5 -0
- package/src/components/icon/components/nomi-counterparty.vue +4 -0
- package/src/components/icon/components/nomi-dashboard.vue +4 -0
- package/src/components/icon/components/nomi-expand.vue +7 -0
- package/src/components/icon/components/nomi-export.vue +4 -0
- package/src/components/icon/components/nomi-eye-close.vue +4 -0
- package/src/components/icon/components/nomi-eye-open.vue +4 -0
- package/src/components/icon/components/nomi-eye.vue +4 -0
- package/src/components/icon/components/nomi-filter.vue +4 -0
- package/src/components/icon/components/nomi-help.vue +5 -0
- package/src/components/icon/components/nomi-hide.vue +4 -0
- package/src/components/icon/components/nomi-lock.vue +4 -0
- package/src/components/icon/components/nomi-logout.vue +5 -0
- package/src/components/icon/components/nomi-money.vue +4 -0
- package/src/components/icon/components/nomi-move-left.vue +4 -0
- package/src/components/icon/components/nomi-move-right.vue +4 -0
- package/src/components/icon/components/nomi-pen.vue +5 -0
- package/src/components/icon/components/nomi-person.vue +5 -0
- package/src/components/icon/components/nomi-pin.vue +7 -0
- package/src/components/icon/components/nomi-project.vue +4 -0
- package/src/components/icon/components/nomi-recurrence.vue +2 -0
- package/src/components/icon/components/nomi-repeat.vue +7 -0
- package/src/components/icon/components/nomi-report.vue +4 -0
- package/src/components/icon/components/nomi-scissors.vue +4 -0
- package/src/components/icon/components/nomi-settings.vue +4 -0
- package/src/components/icon/components/nomi-sort-asc.vue +7 -0
- package/src/components/icon/components/nomi-sort-desc.vue +7 -0
- package/src/components/icon/components/nomi-table-view.vue +4 -0
- package/src/components/icon/components/nomi-tag.vue +4 -0
- package/src/components/icon/components/nomi-target.vue +4 -0
- package/src/components/icon/components/nomi-text.vue +6 -0
- package/src/components/icon/components/nomi-transactions.vue +8 -0
- package/src/components/icon/components/nomi-trash.vue +4 -0
- package/src/components/icon/components/nomi-unpin.vue +7 -0
- package/src/components/icon/components/nomi-user.vue +5 -0
- package/src/components/icon/convert-icons.js +11 -0
- package/src/components/icon/icons.js +332 -286
- package/src/components/icon/new-icons/ai.svg +5 -0
- package/src/components/icon/new-icons/arrow-down.svg +3 -0
- package/src/components/icon/new-icons/arrow-right-top.svg +3 -0
- package/src/components/icon/new-icons/arrow-up.svg +3 -0
- package/src/components/icon/new-icons/arrow_down.svg +3 -0
- package/src/components/icon/new-icons/arrow_up.svg +3 -0
- package/src/components/icon/new-icons/arrows.svg +6 -0
- package/src/components/icon/new-icons/calendar-alt.svg +3 -0
- package/src/components/icon/new-icons/calendar-alt2.svg +3 -0
- package/src/components/icon/new-icons/calendar.svg +10 -0
- package/src/components/icon/new-icons/card.svg +3 -0
- package/src/components/icon/new-icons/clear.svg +3 -0
- package/src/components/icon/new-icons/close.svg +4 -0
- package/src/components/icon/new-icons/counterparty.svg +3 -0
- package/src/components/icon/new-icons/dashboard.svg +3 -0
- package/src/components/icon/new-icons/expand.svg +6 -0
- package/src/components/icon/new-icons/eye-close.svg +3 -0
- package/src/components/icon/new-icons/eye-open.svg +3 -0
- package/src/components/icon/new-icons/eye.svg +3 -0
- package/src/components/icon/new-icons/filter.svg +3 -0
- package/src/components/icon/new-icons/help.svg +4 -0
- package/src/components/icon/new-icons/hide.svg +3 -0
- package/src/components/icon/new-icons/logout.svg +4 -0
- package/src/components/icon/new-icons/money.svg +3 -0
- package/src/components/icon/new-icons/move-left.svg +3 -0
- package/src/components/icon/new-icons/move-right.svg +3 -0
- package/src/components/icon/new-icons/pen.svg +4 -0
- package/src/components/icon/new-icons/person.svg +4 -0
- package/src/components/icon/new-icons/pin.svg +6 -0
- package/src/components/icon/new-icons/project.svg +3 -0
- package/src/components/icon/new-icons/recurrence.svg +1 -0
- package/src/components/icon/new-icons/repeat.svg +6 -0
- package/src/components/icon/new-icons/report.svg +3 -0
- package/src/components/icon/new-icons/scissors.svg +3 -0
- package/src/components/icon/new-icons/settings.svg +3 -0
- package/src/components/icon/new-icons/sort-asc.svg +6 -0
- package/src/components/icon/new-icons/sort-desc.svg +6 -0
- package/src/components/icon/new-icons/table-view.svg +3 -0
- package/src/components/icon/new-icons/tag.svg +3 -0
- package/src/components/icon/new-icons/target.svg +3 -0
- package/src/components/icon/new-icons/text.svg +5 -0
- package/src/components/icon/new-icons/transactions.svg +7 -0
- package/src/components/icon/new-icons/trash.svg +3 -0
- package/src/components/icon/new-icons/unpin.svg +6 -0
- package/src/components/icon/new-icons/user.svg +4 -0
- package/src/components/modal/DeleteConfirmModal.vue +0 -2
- package/src/components/modal/ItemEditor.vue +1 -5
- package/src/components/pagination/Pagination.vue +3 -2
- package/src/components/pagination/Pagination2.vue +179 -0
- package/src/components/panels/Panel.vue +23 -7
- package/src/components/panels/PanelItemEdit.vue +62 -0
- package/src/components/panels/PanelLink.vue +26 -6
- package/src/components/panels/PanelList.vue +27 -26
- package/src/components/panels/helpers.spec.ts +27 -0
- package/src/components/panels/helpers.ts +37 -0
- package/src/components/popover/NoticePopout.vue +1 -1
- package/src/components/select/Select.vue +1 -1
- package/src/components/sortable/draggable.js +2 -1
- package/src/components/table/Table2.vue +37 -8
- package/src/components/table/TableBody.vue +10 -18
- package/src/components/table/TableGroup.vue +31 -12
- package/src/components/table/TableHeader.vue +118 -64
- package/src/components/table/TableRowToggle.vue +51 -0
- package/src/components/table/TableRows.vue +20 -29
- package/src/components/table/index.stories.js +22 -200
- package/src/components/table/table2.scss +237 -68
- package/src/components/text-field/MoneyField.vue +23 -21
- package/src/components/tree/TreeEditor.vue +615 -0
- package/src/components/view/View.vue +265 -0
- package/src/components/view/index.stories.js +588 -0
- package/src/helpers/formatters.js +14 -1
- package/src/helpers/tree/cdbl.js +32 -0
- package/src/helpers/tree/cint.js +43 -0
- package/src/helpers/tree/domDrag.js +911 -0
- package/src/helpers/tree/domFinds.js +20 -0
- package/src/helpers/tree/domGetPointFromEvent.js +53 -0
- package/src/helpers/tree/domIsClientXYIn.js +65 -0
- package/src/helpers/tree/domRemove.js +50 -0
- package/src/helpers/tree/evem.js +27 -0
- package/src/helpers/tree/genID.js +56 -0
- package/src/helpers/tree/isEle.js +28 -0
- package/src/helpers/tree/isestr.js +35 -0
- package/src/helpers/tree/isint.js +40 -0
- package/src/helpers/tree/isnbr.js +24 -0
- package/src/helpers/tree/isnum.js +38 -0
- package/src/helpers/tree/ispint.js +41 -0
- package/src/helpers/tree/isstr.js +27 -0
- package/src/helpers/tree.js +30 -0
- package/src/helpers/vuetifyColor.js +136 -0
- package/src/locales/en.js +17 -0
- package/src/locales/uk.js +17 -0
- package/src/components/table/TableRow.vue +0 -221
package/src/locales/en.js
CHANGED
|
@@ -75,6 +75,7 @@ module.exports = {
|
|
|
75
75
|
yesDelete: 'Yes, delete',
|
|
76
76
|
areYouSureToDeleteThis: 'Are you sure want to delete this?',
|
|
77
77
|
confirmDelete: 'Confirm delete',
|
|
78
|
+
confirmRestore: 'Confirm restore',
|
|
78
79
|
},
|
|
79
80
|
customize: {
|
|
80
81
|
editProperty: 'Edit property',
|
|
@@ -103,6 +104,8 @@ module.exports = {
|
|
|
103
104
|
sortAscending: 'Sort ascending',
|
|
104
105
|
sortDescending: 'Sort descending',
|
|
105
106
|
groupBy: 'Group by',
|
|
107
|
+
sorting: 'Sorting',
|
|
108
|
+
actions: 'Actions',
|
|
106
109
|
hideColumn: 'Hide in view',
|
|
107
110
|
freezeColumn: 'Freeze up to column',
|
|
108
111
|
unfreezeColumn: 'Unfreeze column',
|
|
@@ -120,6 +123,14 @@ module.exports = {
|
|
|
120
123
|
calculateCountNotEmpty: 'Count not empty',
|
|
121
124
|
calculatePercentEmpty: 'Percent empty',
|
|
122
125
|
calculatePercentNotEmpty: 'Percent not empty',
|
|
126
|
+
filter: 'Filter',
|
|
127
|
+
moveRight: 'Move right',
|
|
128
|
+
moveLeft: 'Move left',
|
|
129
|
+
columns: 'Columns',
|
|
130
|
+
resetTableSettings: 'Reset table settings',
|
|
131
|
+
search: 'Search',
|
|
132
|
+
selectedItems: '{n} item selected|{n} items selected',
|
|
133
|
+
cancelSelected: 'Cancel',
|
|
123
134
|
},
|
|
124
135
|
pagination: {
|
|
125
136
|
itemsPerPage: 'Items per page',
|
|
@@ -135,5 +146,11 @@ module.exports = {
|
|
|
135
146
|
noResults: 'No results',
|
|
136
147
|
showMore: 'show all ({count})',
|
|
137
148
|
hideMore: 'hide',
|
|
149
|
+
exact: 'Exact',
|
|
150
|
+
range: 'Range',
|
|
151
|
+
filterBy: 'Filter',
|
|
152
|
+
from: 'From',
|
|
153
|
+
to: 'To',
|
|
154
|
+
value: 'Value',
|
|
138
155
|
}
|
|
139
156
|
};
|
package/src/locales/uk.js
CHANGED
|
@@ -75,6 +75,7 @@ module.exports = {
|
|
|
75
75
|
yesDelete: 'Так, видалити',
|
|
76
76
|
areYouSureToDeleteThis: 'Ви впевнені, що хочете видалити це?',
|
|
77
77
|
confirmDelete: 'Підтвердження видалення',
|
|
78
|
+
confirmRestore: 'Підтвердження відновлення',
|
|
78
79
|
},
|
|
79
80
|
customize: {
|
|
80
81
|
editProperty: 'Редагувати поле',
|
|
@@ -108,6 +109,8 @@ module.exports = {
|
|
|
108
109
|
sortAscending: 'Сортувати за зростанням',
|
|
109
110
|
sortDescending: 'Сортувати за спаданням',
|
|
110
111
|
groupBy: 'Групувати',
|
|
112
|
+
sorting: 'Сортування',
|
|
113
|
+
actions: 'Дії',
|
|
111
114
|
hideColumn: 'Приховати колонку',
|
|
112
115
|
freezeColumn: 'Закріпити колонку',
|
|
113
116
|
unfreezeColumn: 'Відкріпити колонку',
|
|
@@ -125,6 +128,14 @@ module.exports = {
|
|
|
125
128
|
calculateCountNotEmpty: 'Кількість не порожніх',
|
|
126
129
|
calculatePercentEmpty: 'Відсоток порожніх',
|
|
127
130
|
calculatePercentNotEmpty: 'Відсоток не порожніх',
|
|
131
|
+
filter: 'Фільтрувати',
|
|
132
|
+
moveRight: 'Посунути вправо',
|
|
133
|
+
moveLeft: 'Посунути вліво',
|
|
134
|
+
columns: 'Колонки',
|
|
135
|
+
resetTableSettings: 'Скинути налаштування таблиці',
|
|
136
|
+
search: 'Пошук',
|
|
137
|
+
selectedItems: '{n} елемент вибрано|{n} елементи вибрано|{n} елементів вибрано',
|
|
138
|
+
cancelSelected: 'Скасувати',
|
|
128
139
|
},
|
|
129
140
|
filter: {
|
|
130
141
|
search: 'Пошук',
|
|
@@ -135,5 +146,11 @@ module.exports = {
|
|
|
135
146
|
noResults: 'Немає результатів',
|
|
136
147
|
showMore: 'показати всі ({count})',
|
|
137
148
|
hideMore: 'сховати',
|
|
149
|
+
exact: 'Точне значення',
|
|
150
|
+
range: 'Діапазон',
|
|
151
|
+
filterBy: 'Фільтрувати за',
|
|
152
|
+
from: 'Від',
|
|
153
|
+
to: 'До',
|
|
154
|
+
value: 'Значення',
|
|
138
155
|
}
|
|
139
156
|
};
|
|
@@ -1,221 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
|
|
3
|
-
<div
|
|
4
|
-
class="table-row-template flex items-stretch" view-settings="[object Object]">
|
|
5
|
-
<div accept-group="items" class="table-view-body-space"
|
|
6
|
-
></div>
|
|
7
|
-
<div class="bg-light dark:bg-light-invert shadow-area">
|
|
8
|
-
<div class="toggler-wrapper"><!----></div>
|
|
9
|
-
<div class="handle-wrapper hover-only"><a
|
|
10
|
-
href="" class="context-menu-toggle table-item-options-menu"
|
|
11
|
-
>
|
|
12
|
-
<div class="v-popper--has-tooltip drag-handle"><i
|
|
13
|
-
data-test="table-item-options"
|
|
14
|
-
class="ic-drag"></i>
|
|
15
|
-
</div> <!----></a></div>
|
|
16
|
-
</div>
|
|
17
|
-
<div class="indicator">
|
|
18
|
-
<div class="fill on-rest table-view-row-count"><span
|
|
19
|
-
>1</span></div>
|
|
20
|
-
<div class="fill on-hover"><a
|
|
21
|
-
href=""
|
|
22
|
-
data-test="table-item-expand"><i
|
|
23
|
-
class="ic-expand"></i></a>
|
|
24
|
-
<div class="top"><a
|
|
25
|
-
data-test="table-row-generator" href=""><i
|
|
26
|
-
class="ic-plus"></i></a>
|
|
27
|
-
</div>
|
|
28
|
-
<div class=""><a
|
|
29
|
-
data-test="table-row-generator"
|
|
30
|
-
href=""><i
|
|
31
|
-
class="ic-plus"></i></a></div>
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
<div accept-group="items" class="hbox table-item-inner">
|
|
35
|
-
<div data-column="0" class="sticky last-sticky-column"
|
|
36
|
-
style="width: 240px; left: 83px;">
|
|
37
|
-
<div
|
|
38
|
-
class="table-view-item-value flex relative h-full border-b border-r border-gray bg-white dark:bg-white-invert dark:border-gray-invert hover:bg-light dark:hover:bg-gray-invert items-stretch"
|
|
39
|
-
>
|
|
40
|
-
<div
|
|
41
|
-
class="flex-auto flex gap-2 items-start p-3 show-hidden-hover overflow-hidden">
|
|
42
|
-
<a href=""
|
|
43
|
-
class="context-menu-toggle h-full line-overflow cursor-pointer flex-auto"><span>
|
|
44
|
-
Jun 30th
|
|
45
|
-
</span> <!----></a> <!---->
|
|
46
|
-
<div class="flex items-center justify-end hover-show"><a href="" tabindex="0"
|
|
47
|
-
class="text-sm p-2 ic-exit"></a>
|
|
48
|
-
</div>
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
<div data-column="1" class="" style="width: 400px;">
|
|
53
|
-
<div
|
|
54
|
-
class="table-view-item-value flex relative h-full border-b border-r border-gray bg-white dark:bg-white-invert dark:border-gray-invert hover:bg-light dark:hover:bg-gray-invert items-stretch"
|
|
55
|
-
><textarea
|
|
56
|
-
data-test="table-text-value" rows="2" type="text"
|
|
57
|
-
wrap="hard"
|
|
58
|
-
class="h-full px-3 input-inline text-value w-full hide-scrollbar !leading-[35px] whitespace-nowrap"></textarea>
|
|
59
|
-
</div>
|
|
60
|
-
</div>
|
|
61
|
-
<div data-column="2" class="" style="width: 240px;">
|
|
62
|
-
<div
|
|
63
|
-
class="table-view-item-value flex relative h-full border-b border-r border-gray bg-white dark:bg-white-invert dark:border-gray-invert hover:bg-light dark:hover:bg-gray-invert items-stretch"
|
|
64
|
-
>
|
|
65
|
-
<div
|
|
66
|
-
class="flex-auto flex gap-2 items-start p-3 show-hidden-hover overflow-hidden">
|
|
67
|
-
<a href=""
|
|
68
|
-
class="context-menu-toggle h-full line-overflow cursor-pointer flex-auto"><span>
|
|
69
|
-
Jul 13th
|
|
70
|
-
</span> <!----></a> <!---->
|
|
71
|
-
<div class="flex items-center justify-end hover-show"><a href="" tabindex="0"
|
|
72
|
-
class="text-sm p-2 ic-exit"></a>
|
|
73
|
-
</div>
|
|
74
|
-
</div>
|
|
75
|
-
</div>
|
|
76
|
-
</div>
|
|
77
|
-
<div data-column="3" class="" style="width: 120px;">
|
|
78
|
-
<div
|
|
79
|
-
class="table-view-item-value flex relative h-full border-b border-r border-gray bg-white dark:bg-white-invert dark:border-gray-invert hover:bg-light dark:hover:bg-gray-invert items-stretch"
|
|
80
|
-
><a href=""
|
|
81
|
-
class="context-menu-toggle table-value-label flex flex-auto p-3 w-full"><span
|
|
82
|
-
class="table-value-label-selected w-full h-full vbox"><span
|
|
83
|
-
class="flex gap-2 hide-scrollbar overflow-auto"><span
|
|
84
|
-
title="Upcoming"
|
|
85
|
-
class="label-value"
|
|
86
|
-
style="--label-color: #A7E6FF; --label-text: #4C4E69;">
|
|
87
|
-
Upcoming
|
|
88
|
-
<!----></span></span></span> <!----></a></div>
|
|
89
|
-
</div>
|
|
90
|
-
<div
|
|
91
|
-
class="extra border-b border-r border-gray dark:border-gray-invert"></div>
|
|
92
|
-
<div class="boundary top"></div>
|
|
93
|
-
<div class="boundary right"></div>
|
|
94
|
-
<div class="boundary bottom"></div>
|
|
95
|
-
<div class="boundary left"></div> <!----></div>
|
|
96
|
-
</div>
|
|
97
|
-
|
|
98
|
-
</template>
|
|
99
|
-
<script>
|
|
100
|
-
import { Vue, Component, Prop, PropSync } from 'vue-property-decorator';
|
|
101
|
-
import itfButton from '../button/Button.vue';
|
|
102
|
-
import itfIcon from '../icon/Icon.vue';
|
|
103
|
-
|
|
104
|
-
export default @Component({
|
|
105
|
-
name: 'itfTable',
|
|
106
|
-
components: {
|
|
107
|
-
itfButton,
|
|
108
|
-
itfIcon,
|
|
109
|
-
}
|
|
110
|
-
})
|
|
111
|
-
class itfTable extends Vue {
|
|
112
|
-
@PropSync('sorting', { type: Object, default: () => ({}) }) sortedColumns;
|
|
113
|
-
@Prop({ required: true, type: Array }) columns;
|
|
114
|
-
@Prop({ required: true, type: Array }) rows;
|
|
115
|
-
@Prop({ default: false, type: Boolean }) stickyHeader;
|
|
116
|
-
@Prop({ default: false, type: Boolean }) stickyColumn;
|
|
117
|
-
@Prop({ default: false, type: Boolean }) stickyLastColumn;
|
|
118
|
-
@Prop({ default: false, type: Boolean }) loading;
|
|
119
|
-
@Prop({ default: false, type: Boolean }) striped;
|
|
120
|
-
@Prop({ default: false, type: Boolean }) hoverable;
|
|
121
|
-
@Prop({ default: false, type: Boolean }) small;
|
|
122
|
-
|
|
123
|
-
sortDirection = 'asc';
|
|
124
|
-
scrolledX = false;
|
|
125
|
-
scrolledEnd = false;
|
|
126
|
-
scrolledY = false;
|
|
127
|
-
stickyObserver = null;
|
|
128
|
-
|
|
129
|
-
scrollFunc = null;
|
|
130
|
-
|
|
131
|
-
mounted() {
|
|
132
|
-
if (this.$refs.scrollContainer && this.$refs.scrollContainer2) {
|
|
133
|
-
this.scrollFunc = initSyncScroll(this.$refs.scrollContainer, this.$refs.scrollContainer2, (isEnd) => {
|
|
134
|
-
this.scrolledX = true;
|
|
135
|
-
this.scrolledEnd = isEnd;
|
|
136
|
-
}, () => {
|
|
137
|
-
this.scrolledX = false;
|
|
138
|
-
});
|
|
139
|
-
} else {
|
|
140
|
-
setTimeout(() => {
|
|
141
|
-
this.scrollFunc = initSyncScroll(this.$refs.scrollContainer, this.$refs.scrollContainer2, (isEnd) => {
|
|
142
|
-
this.scrolledX = true;
|
|
143
|
-
this.scrolledEnd = isEnd;
|
|
144
|
-
}, () => {
|
|
145
|
-
this.scrolledX = false;
|
|
146
|
-
});
|
|
147
|
-
}, 1000);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
if (this.$refs.stickyHeader) {
|
|
151
|
-
this.stickyObserver = new IntersectionObserver(([e]) => {
|
|
152
|
-
return this.scrolledY = e.intersectionRatio < 1;
|
|
153
|
-
}, {
|
|
154
|
-
rootMargin: `-${this.$refs.stickyHeader.offsetHeight + 5}px 0px 0px 0px`,
|
|
155
|
-
threshold: [1]
|
|
156
|
-
});
|
|
157
|
-
this.stickyObserver.observe(this.$refs.stickyHeader);
|
|
158
|
-
}
|
|
159
|
-
function initSyncScroll(el1, el2, stuck, unstuck) {
|
|
160
|
-
function isScrolledEnd(el) {
|
|
161
|
-
return el.scrollWidth === el.getBoundingClientRect().width // якщо контейнер менший ширини екрану
|
|
162
|
-
|| el.scrollLeft === el.scrollWidth - el.getBoundingClientRect().width; // якщо контейнер більший ширини екрану
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
function func1() {
|
|
166
|
-
el2.scrollLeft = el1.scrollLeft;
|
|
167
|
-
if (el1.scrollLeft > 0) {
|
|
168
|
-
stuck(isScrolledEnd(el1));
|
|
169
|
-
} else {
|
|
170
|
-
unstuck();
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
function func2() {
|
|
175
|
-
el1.scrollLeft = el2.scrollLeft;
|
|
176
|
-
if (el2.scrollLeft > 0) {
|
|
177
|
-
stuck(isScrolledEnd(el2));
|
|
178
|
-
} else {
|
|
179
|
-
unstuck();
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
if (isScrolledEnd(el1)) {
|
|
184
|
-
stuck(true);
|
|
185
|
-
unstuck();
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
el1.addEventListener('scroll', func1);
|
|
189
|
-
el2.addEventListener('scroll', func2);
|
|
190
|
-
|
|
191
|
-
return [func1, func2];
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
beforeDestroy() {
|
|
196
|
-
if (this.scrollFunc) {
|
|
197
|
-
const [func1, func2] = this.scrollFunc;
|
|
198
|
-
this.$refs.scrollContainer.removeEventListener('scroll', func1);
|
|
199
|
-
this.$refs.scrollContainer2.removeEventListener('scroll', func2);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
get columnsGridStyle() {
|
|
204
|
-
return this.columns.map((column) => {
|
|
205
|
-
if (column.min) {
|
|
206
|
-
return `minmax(${column.min}px, ${column.max ? `${column.max}px` : 'auto'})`;
|
|
207
|
-
}
|
|
208
|
-
return `${column.fraction || 1}fr`;
|
|
209
|
-
}).join(' ');
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
sortBy(column, index) {
|
|
213
|
-
if (!column.sortable) {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
const { name } = this.columns[index];
|
|
217
|
-
const direction = this.sortedColumns[name] === 'asc' ? 'desc' : 'asc';
|
|
218
|
-
this.sortedColumns = { [name]: direction };
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
</script>
|