@eturnity/eturnity_reusable_components 6.43.9-EPDM-6751.1 → 6.43.9-qa-16-11.6.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eturnity/eturnity_reusable_components",
3
- "version": "6.43.9-EPDM-6751.1",
3
+ "version": "6.43.9-qa-16-11.06.1",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "dev": "vue-cli-service serve",
@@ -63,4 +63,4 @@
63
63
  "author": "Aaron Enser",
64
64
  "license": "ISC",
65
65
  "homepage": "https://bitbucket.org/eturnitydevs/eturnity_reusable_components#readme"
66
- }
66
+ }
@@ -338,7 +338,7 @@ const DragContainer = styled.div`
338
338
 
339
339
  const RowContainer = styled('div', TitleAttrs)`
340
340
  padding: 10px 14px;
341
- min-width: 300px;
341
+ width: 300px;
342
342
 
343
343
  ${({ showBorder, theme }) =>
344
344
  showBorder &&
@@ -613,7 +613,7 @@ export default {
613
613
  return type === 'multi_select_integer' || type === 'multi_select_string'
614
614
  },
615
615
  isRangeSelector(type) {
616
- return type === 'integer_range' || type === 'number_range'
616
+ return type === 'integer_range'
617
617
  },
618
618
  isDateSelector(type) {
619
619
  return type === 'datetime'
@@ -120,11 +120,10 @@ export default {
120
120
  isStriked:{
121
121
  required:false,
122
122
  default:false
123
-
124
- }
125
- },
126
- data() {
127
- return {}
128
123
  }
124
+ },
125
+ data() {
126
+ return {}
129
127
  }
128
+ }
130
129
  </script>
@@ -2,7 +2,6 @@
2
2
  <page-container :withDate="!!date">
3
3
  <marker-container
4
4
  v-if="markerData"
5
- :hasBorderRadius="hasBorderRadius"
6
5
  :backgroundColor="markerData.color"
7
6
  :hasIcon="!!iconName"
8
7
  :isEditionAllowed="editionAllowed"
@@ -120,7 +119,6 @@ const CtaContainer = styled.div`
120
119
  `
121
120
 
122
121
  const MarkerAttrs = {
123
- hasBorderRadius: Boolean,
124
122
  backgroundColor: String,
125
123
  hasIcon: Boolean,
126
124
  isEditionAllowed: Boolean,
@@ -138,7 +136,7 @@ const MarkerContainer = styled('div', MarkerAttrs)`
138
136
  color: ${(props) => props.theme.colors.white};
139
137
  background-color: ${(props) =>
140
138
  props.backgroundColor ? props.backgroundColor : props.theme.colors.grey3};
141
- border-radius: ${(props) => (props.hasBorderRadius ? '4px' : '0')};
139
+ border-radius: 4px;
142
140
  white-space: nowrap;
143
141
  cursor: ${(props) => props.isEditionAllowed ? 'pointer' : props.cursor};
144
142
 
@@ -244,10 +242,6 @@ export default {
244
242
  cursor: {
245
243
  required: false,
246
244
  default: 'default'
247
- },
248
- hasBorderRadius: {
249
- required: false,
250
- default: true
251
245
  }
252
246
  },
253
247
  data() {
@@ -104,12 +104,7 @@
104
104
  :src="require('../../assets/icons/collapse_arrow_icon.svg')"
105
105
  />
106
106
  </arrow-wrapper>
107
- <options-container
108
- v-if="isOpen"
109
- :top="getItemLocation('top')"
110
- :left="getItemLocation('left')"
111
- ref="optionsContainer"
112
- >
107
+ <options-container v-if="isOpen" ref="optionsContainer">
113
108
  <options-wrapper @click.prevent.stop>
114
109
  <search-container @click.prevent.stop>
115
110
  <search-input
@@ -288,8 +283,7 @@ const OptionsContainer = styled('div', optionsAttrs)`
288
283
  position: absolute;
289
284
  display: grid;
290
285
  grid-template-rows: 1fr auto;
291
- top: ${(props) => props.top + 'px'};
292
- left: ${(props) => props.left + 'px'};
286
+ left: 20px;
293
287
  width: auto;
294
288
  max-height: 360px;
295
289
  min-height: 200px;
@@ -510,8 +504,13 @@ export default {
510
504
  }
511
505
  },
512
506
  methods: {
513
- toggleOpen() {
514
- if (this.disabled) {
507
+ toggleOpen(event) {
508
+ if (
509
+ this.disabled ||
510
+ (event &&
511
+ !(event.target === this.$el) &&
512
+ !this.$el.contains(event.target))
513
+ ) {
515
514
  return
516
515
  }
517
516
  this.wasClicked = false
@@ -558,14 +557,6 @@ export default {
558
557
  this.inputText = value
559
558
  this.$emit('dropdown-search', value)
560
559
  },
561
- getItemLocation(value) {
562
- let ref = this.$refs.dropdownItem[0]
563
- let location = ref.$el.getBoundingClientRect()[value]
564
- if (value === 'top') {
565
- location = location + window.scrollY + 40
566
- }
567
- return location
568
- },
569
560
  clickOutside(event) {
570
561
  if (event.target === this.$el || this.$el.contains(event.target)) {
571
562
  return
@@ -1,9 +1,15 @@
1
1
  <template>
2
- <page-container>
2
+ <page-container
3
+ :tableHeight="tableHeight"
4
+ :shouldSetCustomHeight="doesTableContainDraggables"
5
+ >
3
6
  <table-title v-if="titleText">
4
7
  {{ titleText }}
5
8
  </table-title>
6
- <table-scroll>
9
+ <table-scroll
10
+ ref="tableRef"
11
+ :isPositionAbsolute="doesTableContainDraggables"
12
+ >
7
13
  <table-wrapper :fullWidth="fullWidth">
8
14
  <spinner-wrapper v-if="isLoading">
9
15
  <spinner />
@@ -26,7 +32,15 @@
26
32
  import styled from 'vue-styled-components'
27
33
  import Spinner from '../../spinner'
28
34
 
29
- const PageContainer = styled.div``
35
+ const pageContainerProps = {
36
+ tableHeight: String,
37
+ shouldSetCustomHeight: Boolean
38
+ }
39
+ const PageContainer = styled('div', pageContainerProps)`
40
+ position: relative;
41
+ height: ${(props) =>
42
+ props.shouldSetCustomHeight ? props.tableHeight : 'auto'};
43
+ `
30
44
 
31
45
  const TableTitle = styled.div`
32
46
  margin-bottom: 16px;
@@ -35,15 +49,27 @@ const TableTitle = styled.div`
35
49
  text-transform: uppercase;
36
50
  `
37
51
 
38
- const TableScroll = styled.div`
52
+ const tableScrollProps = {
53
+ isPositionAbsolute: Boolean
54
+ }
55
+
56
+ const TableScroll = styled('div', tableScrollProps)`
39
57
  max-width: 100%;
58
+ height: auto;
59
+ ${(props) =>
60
+ props.isPositionAbsolute &&
61
+ `
62
+ position: absolute;
63
+ left: -20px;
64
+ `}
40
65
  `
41
66
 
42
67
  const wrapperAttrs = { fullWidth: Boolean }
43
68
  const TableWrapper = styled('div', wrapperAttrs)`
44
69
  width: ${(props) => (props.fullWidth ? '100%' : 'fit-content')};
45
70
  max-width: 100%;
46
- overflow: auto;
71
+ overflow-x: auto;
72
+ overflow-y: hidden;
47
73
 
48
74
  ::-webkit-scrollbar {
49
75
  height: 5px; //height of the whole scrollbar area
@@ -67,7 +93,11 @@ const SpinnerWrapper = styled.div`
67
93
  justify-items: center;
68
94
  `
69
95
 
70
- const containerAttrs = { cellPaddings: String, tableCursor: String }
96
+ const containerAttrs = {
97
+ cellPaddings: String,
98
+ tableCursor: String
99
+ }
100
+
71
101
  const TableContainer = styled('table', containerAttrs)`
72
102
  width: 100%;
73
103
  border-collapse: collapse;
@@ -378,6 +408,39 @@ export default {
378
408
  tableCursor: {
379
409
  required: false
380
410
  }
411
+ },
412
+ data() {
413
+ return {
414
+ tableHeight: 'auto',
415
+ doesTableContainDraggables: false
416
+ }
417
+ },
418
+ mounted() {
419
+ this.observeTableHeight()
420
+ },
421
+ beforeDestroy() {
422
+ if (this.resizeObserver) {
423
+ this.resizeObserver.disconnect()
424
+ }
425
+ },
426
+ methods: {
427
+ observeTableHeight() {
428
+ if (!this.$refs.tableRef) return
429
+
430
+ const tableElement = this.$refs.tableRef.$el
431
+
432
+ this.resizeObserver = new ResizeObserver(() => {
433
+ const newTableHeight = this.titleText
434
+ ? tableElement.offsetHeight + 33
435
+ : tableElement.offsetHeight
436
+ this.tableHeight = `${newTableHeight}px`
437
+ this.doesTableContainDraggables = Boolean(
438
+ tableElement.querySelector('.drag-container')
439
+ )
440
+ })
441
+
442
+ this.resizeObserver.observe(tableElement)
443
+ }
381
444
  }
382
445
  }
383
446
  </script>
@@ -8,8 +8,6 @@
8
8
  <dropdown-container
9
9
  v-if="isOpen"
10
10
  @click.stop
11
- :top="getItemLocation('top')"
12
- :right="getItemLocation('right')"
13
11
  :containerWidth="childOpen ? 440 : 240"
14
12
  ref="dropdownContainer"
15
13
  >
@@ -130,6 +128,7 @@ const PageContainer = styled.div`
130
128
  justify-items: center;
131
129
  width: 30px;
132
130
  height: 30px;
131
+ position: relative;
133
132
 
134
133
  &:hover {
135
134
  background-color: ${(props) => props.theme.colors.grey5};
@@ -158,12 +157,15 @@ const DotItem = styled.div`
158
157
  border-radius: 50%;
159
158
  `
160
159
 
161
- const dropdownAttrs = { top: Number, right: Number, containerWidth: Number }
160
+ const dropdownAttrs = {
161
+ containerWidth: Number
162
+ }
162
163
  const DropdownContainer = styled('div', dropdownAttrs)`
163
164
  z-index: 99;
164
165
  height: 200px;
165
- top: ${(props) => props.top + 'px'};
166
- left: ${(props) => props.right - props.containerWidth + 'px'};
166
+ top: 0;
167
+ right: 27px;
168
+
167
169
  position: absolute;
168
170
  display: grid;
169
171
  grid-template-columns: auto auto;
@@ -299,14 +301,6 @@ export default {
299
301
  document.removeEventListener('click', this.clickOutside)
300
302
  }
301
303
  },
302
- getItemLocation(value) {
303
- let ref = this.$refs.dropdownItem
304
- let location = ref.$el.getBoundingClientRect()[value]
305
- if (value === 'top') {
306
- location = location + window.scrollY
307
- }
308
- return location
309
- },
310
304
  hasChildren(item) {
311
305
  return !!item.children && !!item.children.length
312
306
  },
@@ -1,3 +0,0 @@
1
- <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M17 10H1C0.45 10 0 10.45 0 11V17C0 17.55 0.45 18 1 18H17C17.55 18 18 17.55 18 17V11C18 10.45 17.55 10 17 10ZM4 16C2.9 16 2 15.1 2 14C2 12.9 2.9 12 4 12C5.1 12 6 12.9 6 14C6 15.1 5.1 16 4 16ZM17 0H1C0.45 0 0 0.45 0 1V7C0 7.55 0.45 8 1 8H17C17.55 8 18 7.55 18 7V1C18 0.45 17.55 0 17 0ZM4 6C2.9 6 2 5.1 2 4C2 2.9 2.9 2 4 2C5.1 2 6 2.9 6 4C6 5.1 5.1 6 4 6Z" fill="white"/>
3
- </svg>
@@ -1,3 +0,0 @@
1
- <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M0 10H8V0H0V10ZM0 18H8V12H0V18ZM10 18H18V8H10V18ZM10 0V6H18V0H10Z" fill="white"/>
3
- </svg>
@@ -1,3 +0,0 @@
1
- <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M0 12H8V10H0V12ZM0 16H8V14H0V16ZM0 8H8V6H0V8ZM0 2V4H8V2H0ZM10 2H18V16H10V2Z" fill="white"/>
3
- </svg>
@@ -1,262 +0,0 @@
1
- <template>
2
- <page-container>
3
- <spinner-container v-if="!tabsData.length">
4
- <spinner />
5
- </spinner-container>
6
- <list-container v-else>
7
- <template v-for="(item, idx) in tabsData">
8
- <list-item
9
- v-if="!item.children"
10
- :key="idx"
11
- :isActive="activeTab === item.key"
12
- @click="$emit('tab-click', { activeKey: item.key })"
13
- >
14
- <icon-container :isActive="activeTab === item.key">
15
- <icon :name="item.icon" color="#fff" cursor="pointer" size="18px" />
16
- </icon-container>
17
- <list-text>{{ $gettext(item.label) }}</list-text>
18
- </list-item>
19
- <collapse-wrapper v-else :key="idx + item.key">
20
- <collapse-container @click="toggleActiveDropdown(item.key)">
21
- <icon-container :isActive="activeParentTab === item.key">
22
- <icon
23
- :name="item.icon"
24
- color="#fff"
25
- cursor="pointer"
26
- size="18px"
27
- />
28
- </icon-container>
29
- <list-text>{{ $gettext(item.label) }}</list-text>
30
- <arrow-container>
31
- <icon
32
- :name="activeDropdown === item.key ? 'arrow_up' : 'arrow_down'"
33
- color="white"
34
- size="10px"
35
- />
36
- </arrow-container>
37
- </collapse-container>
38
- <template v-if="activeDropdown === item.key">
39
- <sub-router
40
- v-for="subItem in item.children"
41
- :key="subItem.key"
42
- :isActive="activeTab === subItem.key"
43
- @click="
44
- $emit('tab-click', {
45
- activeKey: subItem.key,
46
- parentKey: item.key
47
- })
48
- "
49
- >
50
- {{ $gettext(subItem.label) }}
51
- </sub-router>
52
- </template>
53
- </collapse-wrapper>
54
- </template>
55
- </list-container>
56
- <bottom-section v-if="hasLogout">
57
- <icon-container
58
- :isActive="false"
59
- :isButton="true"
60
- @click="$emit('on-logout')"
61
- >
62
- <rotate-icon
63
- name="initial_situation"
64
- color="#fff"
65
- cursor="pointer"
66
- size="18px"
67
- />
68
- </icon-container>
69
- <app-version>{{ appVersion }}</app-version>
70
- </bottom-section>
71
- </page-container>
72
- </template>
73
-
74
- <script>
75
- import styled from 'vue-styled-components'
76
- import Icon from '../icon'
77
- import Spinner from '../spinner'
78
-
79
- const PageContainer = styled.div`
80
- background-color: ${(props) => props.theme.colors.grey6};
81
- padding: 14px 12px;
82
- min-width: 220px;
83
- display: flex;
84
- flex-direction: column;
85
- justify-content: space-between;
86
- `
87
-
88
- const ListContainer = styled.div`
89
- display: grid;
90
- grid-gap: 6px;
91
- `
92
-
93
- const IconAttrs = { isActive: Boolean, isButton: Boolean }
94
-
95
- const ListItem = styled('div', IconAttrs)`
96
- display: grid;
97
- align-items: center;
98
- grid-template-columns: auto 1fr;
99
- grid-gap: 20px;
100
- cursor: pointer;
101
- padding: 4px;
102
- border-radius: 6px;
103
- background-color: ${(props) =>
104
- props.isActive ? 'rgba(255, 255, 255, 0.1)' : ''};
105
-
106
- :hover {
107
- background-color: rgba(255, 255, 255, 0.1);
108
- }
109
- `
110
-
111
- const ListText = styled.div`
112
- font-size: 16px;
113
- font-weight: 700;
114
- color: ${(props) => props.theme.colors.white};
115
- `
116
-
117
- const IconContainer = styled('div', IconAttrs)`
118
- display: grid;
119
- align-items: center;
120
- justify-items: center;
121
- width: 32px;
122
- height: 32px;
123
- background-color: ${(props) =>
124
- props.isActive ? props.theme.colors.red : 'rgba(255, 255, 255, 0.2)'};
125
- border-radius: 6px;
126
-
127
- ${({ isButton = false }) =>
128
- isButton &&
129
- `
130
- cursor: pointer;
131
- &:hover {
132
- background-color: rgba(255, 255, 255, 0.3);
133
- }
134
- `}
135
- `
136
-
137
- const SpinnerContainer = styled.div`
138
- margin-top: 30px;
139
- `
140
-
141
- const BottomSection = styled.div`
142
- display: flex;
143
- justify-content: space-between;
144
- align-items: center;
145
- `
146
-
147
- const RotateIcon = styled(Icon)`
148
- transform: rotate(-90deg);
149
- `
150
-
151
- const AppVersion = styled.p`
152
- font-size: 11px;
153
- line-height: 13px;
154
- color: ${(props) => props.theme.colors.white};
155
- margin-right: 6px;
156
- `
157
-
158
- const SubRouter = styled('div', IconAttrs)`
159
- display: grid;
160
- grid-template-columns: 1fr;
161
- grid-gap: 10px;
162
- align-items: center;
163
- justify-items: flex-start;
164
- cursor: pointer;
165
- margin-left: 65px;
166
- padding: 8px;
167
- border-radius: 6px;
168
- color: ${(props) => props.theme.colors.white};
169
- font-weight: 700;
170
- ${({ isActive }) =>
171
- isActive &&
172
- `
173
- background: rgba(255, 255, 255, 0.1);
174
- `}
175
-
176
- &:hover {
177
- background: rgba(255, 255, 255, 0.1);
178
- }
179
- `
180
-
181
- const CollapseContainer = styled.div`
182
- display: grid;
183
- grid-template-columns: auto 1fr auto;
184
- grid-gap: 20px;
185
- padding: 4px;
186
- border-radius: 6px;
187
- align-items: center;
188
- cursor: pointer;
189
- &:hover {
190
- background: rgba(255, 255, 255, 0.1);
191
- }
192
- `
193
-
194
- const CollapseWrapper = styled.div`
195
- display: grid;
196
- grid-template-columns: 1fr;
197
- grid-gap: 10px;
198
- user-select: none;
199
- margin-bottom: 2px;
200
- `
201
-
202
- const ArrowContainer = styled.div`
203
- padding-bottom: 5px;
204
- `
205
-
206
- export default {
207
- name: 'SideMenu',
208
- components: {
209
- PageContainer,
210
- ListContainer,
211
- ListItem,
212
- ListText,
213
- Icon,
214
- IconContainer,
215
- Spinner,
216
- SpinnerContainer,
217
- BottomSection,
218
- RotateIcon,
219
- AppVersion,
220
- CollapseWrapper,
221
- CollapseContainer,
222
- SubRouter,
223
- ArrowContainer
224
- },
225
- data() {
226
- return {
227
- activeDropdown: null
228
- }
229
- },
230
- mounted() {
231
- this.activeDropdown = this.activeParentTab
232
- },
233
- props: {
234
- tabsData: {
235
- required: true
236
- },
237
- activeTab: {
238
- required: true
239
- },
240
- activeParentTab: {
241
- required: false
242
- },
243
- hasLogout: {
244
- required: false,
245
- default: true
246
- },
247
- appVersion: {
248
- required: false,
249
- type: String
250
- }
251
- },
252
- methods: {
253
- toggleActiveDropdown(value) {
254
- if (this.activeDropdown === value) {
255
- this.activeDropdown = null
256
- } else {
257
- this.activeDropdown = value
258
- }
259
- }
260
- }
261
- }
262
- </script>