@eturnity/eturnity_reusable_components 6.42.2-qa-16-10.23.0 → 6.43.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eturnity/eturnity_reusable_components",
3
- "version": "6.42.2-qa-16-10.23.0",
3
+ "version": "6.43.0",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "dev": "vue-cli-service serve",
@@ -60,4 +60,4 @@
60
60
  "author": "Aaron Enser",
61
61
  "license": "ISC",
62
62
  "homepage": "https://bitbucket.org/eturnitydevs/eturnity_reusable_components#readme"
63
- }
63
+ }
package/src/App.vue CHANGED
@@ -1,107 +1,109 @@
1
1
  <template>
2
2
  <ThemeProvider :theme="getTheme()" :style="{ height: '100%' }">
3
3
  <page-container>
4
- <br />
5
4
 
6
- {{ alignItems }}
7
- <input-number
8
- :value="value"
9
- :minNumber="0"
10
- unitName="mm"
11
- :numberPrecision="0"
12
- backgroundColor="transparent"
13
- borderColor="eturnityGrey"
14
- inputHeight="34px"
15
- inputWidth="420px"
16
- textAlign="left"
17
- :isInteractive="true"
18
- :interactionStep="1"
19
- @on-input="value = $event"
20
- @input-change="changeHandler"
21
- @input-focus="focusHandler"
22
- @input-blur="blurHandler"
23
- >
24
- <template v-slot:label>
25
- <div>Interactive Label</div>
26
- </template>
27
- </input-number>
28
-
29
- <dropdown-component openingMode="hover" gap="30px">
30
- <template #trigger><i>Click Me</i></template>
31
- <template #dropdown>
32
- <div>
33
- <a href="">test1</a>
34
- <button href="">test2</button><br>
35
- <p>Text</p>
36
- </div>
37
- </template>
38
- </dropdown-component>
39
-
40
- <videoThumbnail src="https://musicart.xboxlive.com/6/cfaf1e9d-0000-0000-0000-000000000009/504/image.jpg?w=1920&h=1080"
41
- playIconColor="red"
42
- playIconSize="20px"
43
- width="400px"
44
- height="600px"
45
- />
5
+ <br/>
6
+ <input-number
7
+ :value="value"
8
+ :minNumber="0"
9
+ unitName="mm"
10
+ :numberPrecision="0"
11
+ backgroundColor="transparent"
12
+ borderColor="eturnityGrey"
13
+ inputHeight="34px"
14
+ inputWidth="420px"
15
+ textAlign="left"
16
+ :isInteractive="true"
17
+ :interactionStep="1"
18
+ @on-input="value = $event"
19
+ @input-change="changeHandler"
20
+ @input-focus="focusHandler"
21
+ @input-blur="blurHandler"
22
+ >
23
+ <template v-slot:label>
24
+ <div>Interactive Label</div>
25
+ </template>
26
+ </input-number>
27
+
28
+ <dropdown-component openingMode="hover" gap="30px">
29
+ <template #trigger><i>Click Me</i></template>
30
+ <template #dropdown>
31
+ <div>
32
+ <a href="">test1</a>
33
+ <button href="">test2</button>
34
+ <br>
35
+ <p>Text</p>
36
+ </div>
37
+ </template>
38
+ </dropdown-component>
39
+
40
+ <videoThumbnail
41
+ src="https://musicart.xboxlive.com/6/cfaf1e9d-0000-0000-0000-000000000009/504/image.jpg?w=1920&h=1080"
42
+ playIconColor="red"
43
+ playIconSize="20px"
44
+ width="400px"
45
+ height="600px"
46
+ />
46
47
 
47
- <SwitchField
48
- @on-switch-change="onInputChange($event)"
49
- :options="[
48
+ <SwitchField
49
+ @on-switch-change="onInputChange($event)"
50
+ :options="[
50
51
  { value: 0, content: 'zero' },
51
52
  { value: 1, content: 'one' },
52
53
  { value: 2, content: 'two' }
53
54
  ]"
54
- :value="value"
55
- label="label"
56
- toggleColor="red"
57
- size="large"
58
- backgroundColor="blue"
59
- labelAlign="left"
60
- fontColor="black"
61
- :disabled="false"
62
- />
63
- <icon
64
- name="opacity"
65
- color="red"
66
- hoveredColor="blue"
67
- size="60px"
68
- cursor="default"
69
- isStriked = "true"
70
- />
71
- <Select
72
- :value="value"
73
- selectWidth="100%"
74
- optionWidth="50%"
75
- label="that is a label"
76
- alignItems="vertical"
77
- colorMode="dark"
78
- isSearchable="true"
79
- @input-change="value = $event"
80
- @search-change="searchValue = $event"
55
+ :value="value"
56
+ label="label"
57
+ toggleColor="red"
58
+ size="large"
59
+ backgroundColor="blue"
60
+ labelAlign="left"
61
+ fontColor="black"
62
+ :disabled="false"
63
+ />
64
+ <icon
65
+ name="opacity"
66
+ color="red"
67
+ hoveredColor="blue"
68
+ size="60px"
69
+ cursor="default"
70
+ isStriked="true"
71
+ />
72
+ <Select
73
+ :value="value"
74
+ selectWidth="100%"
75
+ optionWidth="50%"
76
+ label="that is a label"
77
+ alignItems="vertical"
78
+ colorMode="dark"
79
+ isSearchable="true"
80
+ @input-change="value = $event"
81
+ @search-change="searchValue = $event"
82
+ >
83
+ <template #selector="{ selectedValue }">
84
+ value selected: {{ selectedValue }}
85
+ </template>
86
+ <template #dropdown>
87
+ <Option
88
+ v-for="opt in filteredOptionList"
89
+ :key="opt.id"
90
+ :value="opt.val"
91
+ >{{ opt.lookFor }}
92
+ </Option
81
93
  >
82
- <template #selector="{ selectedValue }">
83
- value selected: {{ selectedValue }}
84
- </template>
85
- <template #dropdown>
86
- <Option
87
- v-for="opt in filteredOptionList"
88
- :key="opt.id"
89
- :value="opt.val"
90
- >{{ opt.lookFor }}</Option
91
- >
92
- </template>
93
- </Select>
94
-
95
-
96
- {{ filteredOptionList }}
97
-
98
- <iconCollection color="red" />
94
+ </template>
95
+ </Select>
96
+
97
+
98
+ {{ filteredOptionList }}
99
+
100
+ <iconCollection color="red"/>
99
101
  </page-container>
100
102
  </ThemeProvider>
101
103
  </template>
102
104
 
103
105
  <script>
104
- import { ThemeProvider } from 'vue-styled-components'
106
+ import {ThemeProvider} from 'vue-styled-components'
105
107
  import theme from './assets/theme'
106
108
  import styled from 'vue-styled-components'
107
109
  import InputNumber from '@/components/inputs/inputNumber'
@@ -144,14 +146,14 @@ export default {
144
146
  value2: 42,
145
147
  companyName: 'toto',
146
148
  optionList: [
147
- { id: 'a', val: 'A', lookFor: 'babababa' },
148
- { id: 'b', val: 'B', lookFor: 'abab' },
149
- { id: 'c', val: 'C', lookFor: 'ccc' },
150
- { id: 'd', val: 'D', lookFor: 'ddd' },
151
- { id: 'e', val: 'E', lookFor: 'dddee' },
152
- { id: 'f', val: 'F', lookFor: 'ddfff' },
153
- { id: 'g', val: 'G', lookFor: 'dggg' },
154
- { id: 'h', val: 'H', lookFor: 'dddhhh' },
149
+ {id: 'a', val: 'A', lookFor: 'babababa'},
150
+ {id: 'b', val: 'B', lookFor: 'abab'},
151
+ {id: 'c', val: 'C', lookFor: 'ccc'},
152
+ {id: 'd', val: 'D', lookFor: 'ddd'},
153
+ {id: 'e', val: 'E', lookFor: 'dddee'},
154
+ {id: 'f', val: 'F', lookFor: 'ddfff'},
155
+ {id: 'g', val: 'G', lookFor: 'dggg'},
156
+ {id: 'h', val: 'H', lookFor: 'dddhhh'},
155
157
  ],
156
158
  searchValue: ''
157
159
  }
@@ -159,7 +161,7 @@ export default {
159
161
  computed: {
160
162
  filteredOptionList() {
161
163
  return this.optionList.filter((opt) =>
162
- opt.lookFor.includes(this.searchValue)
164
+ opt.lookFor.includes(this.searchValue)
163
165
  )
164
166
  }
165
167
  },
@@ -222,7 +224,7 @@ export default {
222
224
  ]
223
225
  return items
224
226
  },
225
- getComponentInfo({ row, value }) {
227
+ getComponentInfo({row, value}) {
226
228
  let item
227
229
  if (row.selectedValue && row.selectedValue[value]) {
228
230
  item = row.selectedValue[value]
@@ -433,6 +433,10 @@ export default {
433
433
  labelFontColor: {
434
434
  required: false,
435
435
  default: 'eturnityGrey'
436
+ },
437
+ focus:{
438
+ required: false,
439
+ default: false
436
440
  }
437
441
  },
438
442
  computed: {
@@ -574,7 +578,7 @@ export default {
574
578
  }
575
579
  this.isFocused = true
576
580
  this.$nextTick(() => {
577
- this.$refs.inputField1.$el.select()
581
+ this.$refs.inputField1.$el.focus()
578
582
  })
579
583
  this.$emit('input-focus')
580
584
  },
@@ -660,7 +664,17 @@ export default {
660
664
  })
661
665
  }
662
666
  },
667
+ mounted(){
668
+ if(this.focus){
669
+ this.focusInput()
670
+ }
671
+ },
663
672
  watch: {
673
+ focus(value){
674
+ if(value){
675
+ this.focusInput()
676
+ }
677
+ },
664
678
  clearInput: function (value) {
665
679
  if (value) {
666
680
  // If the value is typed, then we should clear the textInput on Continue
@@ -32,6 +32,7 @@
32
32
  ref="select"
33
33
  @click="toggleDropdown"
34
34
  :selectHeight="selectHeight"
35
+ :height="height"
35
36
  :selectMinHeight="selectMinHeight"
36
37
  :bgColor="
37
38
  buttonBgColor || colorMode == 'dark' ? 'transparentBlack1' : 'white'
@@ -143,9 +144,7 @@ const Caret = styled.div`
143
144
  justify-content: center;
144
145
  width: 30px;
145
146
  min-width: 30px;
146
- height: 100%;
147
- align-items: stretch
148
- padding-top: 5px;
147
+ padding-top: 3px;
149
148
  cursor: pointer;
150
149
  margin-left: auto;
151
150
  `
@@ -193,6 +192,7 @@ const selectButtonAttrs = {
193
192
  hasError: Boolean,
194
193
  disabled: Boolean,
195
194
  selectHeight: String,
195
+ height: String,
196
196
  selectMinHeight: String,
197
197
  isSearchBarVisible: Boolean,
198
198
  showBorder: Boolean
@@ -208,6 +208,7 @@ const selectButton = styled('div', selectButtonAttrs)`
208
208
  display: flex;
209
209
  align-items: center;
210
210
  max-height: ${(props) => props.selectHeight};
211
+ ${(props) => (props.height ? `height: ${props.height}` : '')};
211
212
  ${({ showBorder, theme, hasError }) =>
212
213
  showBorder &&
213
214
  `
@@ -309,6 +310,10 @@ export default {
309
310
  required: false,
310
311
  default: null
311
312
  },
313
+ height: {
314
+ required: false,
315
+ default: null
316
+ },
312
317
  selectMinHeight: {
313
318
  required: false,
314
319
  default: '36px'
@@ -104,7 +104,12 @@
104
104
  :src="require('../../assets/icons/collapse_arrow_icon.svg')"
105
105
  />
106
106
  </arrow-wrapper>
107
- <options-container v-if="isOpen" ref="optionsContainer">
107
+ <options-container
108
+ v-if="isOpen"
109
+ :top="getItemLocation('top')"
110
+ :left="getItemLocation('left')"
111
+ ref="optionsContainer"
112
+ >
108
113
  <options-wrapper @click.prevent.stop>
109
114
  <search-container @click.prevent.stop>
110
115
  <search-input
@@ -283,7 +288,8 @@ const OptionsContainer = styled('div', optionsAttrs)`
283
288
  position: absolute;
284
289
  display: grid;
285
290
  grid-template-rows: 1fr auto;
286
- left: 20px;
291
+ top: ${(props) => props.top + 'px'};
292
+ left: ${(props) => props.left + 'px'};
287
293
  width: auto;
288
294
  max-height: 360px;
289
295
  min-height: 200px;
@@ -504,13 +510,8 @@ export default {
504
510
  }
505
511
  },
506
512
  methods: {
507
- toggleOpen(event) {
508
- if (
509
- this.isDisabled ||
510
- (event &&
511
- !(event.target === this.$el) &&
512
- !this.$el.contains(event.target))
513
- ) {
513
+ toggleOpen() {
514
+ if (this.disabled) {
514
515
  return
515
516
  }
516
517
  this.wasClicked = false
@@ -557,6 +558,14 @@ export default {
557
558
  this.inputText = value
558
559
  this.$emit('dropdown-search', value)
559
560
  },
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
+ },
560
569
  clickOutside(event) {
561
570
  if (event.target === this.$el || this.$el.contains(event.target)) {
562
571
  return
@@ -1,15 +1,9 @@
1
1
  <template>
2
- <page-container
3
- :tableHeight="tableHeight"
4
- :shouldSetCustomHeight="doesTableContainDraggables"
5
- >
2
+ <page-container>
6
3
  <table-title v-if="titleText">
7
4
  {{ titleText }}
8
5
  </table-title>
9
- <table-scroll
10
- ref="tableRef"
11
- :isPositionAbsolute="doesTableContainDraggables"
12
- >
6
+ <table-scroll>
13
7
  <table-wrapper :fullWidth="fullWidth">
14
8
  <spinner-wrapper v-if="isLoading">
15
9
  <spinner />
@@ -32,15 +26,7 @@
32
26
  import styled from 'vue-styled-components'
33
27
  import Spinner from '../../spinner'
34
28
 
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
- `
29
+ const PageContainer = styled.div``
44
30
 
45
31
  const TableTitle = styled.div`
46
32
  margin-bottom: 16px;
@@ -49,27 +35,15 @@ const TableTitle = styled.div`
49
35
  text-transform: uppercase;
50
36
  `
51
37
 
52
- const tableScrollProps = {
53
- isPositionAbsolute: Boolean
54
- }
55
-
56
- const TableScroll = styled('div', tableScrollProps)`
38
+ const TableScroll = styled.div`
57
39
  max-width: 100%;
58
- height: auto;
59
- ${(props) =>
60
- props.isPositionAbsolute &&
61
- `
62
- position: absolute;
63
- left: -20px;
64
- `}
65
40
  `
66
41
 
67
42
  const wrapperAttrs = { fullWidth: Boolean }
68
43
  const TableWrapper = styled('div', wrapperAttrs)`
69
44
  width: ${(props) => (props.fullWidth ? '100%' : 'fit-content')};
70
45
  max-width: 100%;
71
- overflow-x: auto;
72
- overflow-y: hidden;
46
+ overflow: auto;
73
47
 
74
48
  ::-webkit-scrollbar {
75
49
  height: 5px; //height of the whole scrollbar area
@@ -93,11 +67,7 @@ const SpinnerWrapper = styled.div`
93
67
  justify-items: center;
94
68
  `
95
69
 
96
- const containerAttrs = {
97
- cellPaddings: String,
98
- tableCursor: String
99
- }
100
-
70
+ const containerAttrs = { cellPaddings: String, tableCursor: String }
101
71
  const TableContainer = styled('table', containerAttrs)`
102
72
  width: 100%;
103
73
  border-collapse: collapse;
@@ -408,39 +378,6 @@ export default {
408
378
  tableCursor: {
409
379
  required: false
410
380
  }
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
- }
444
381
  }
445
382
  }
446
383
  </script>
@@ -8,6 +8,8 @@
8
8
  <dropdown-container
9
9
  v-if="isOpen"
10
10
  @click.stop
11
+ :top="getItemLocation('top')"
12
+ :right="getItemLocation('right')"
11
13
  :containerWidth="childOpen ? 440 : 240"
12
14
  ref="dropdownContainer"
13
15
  >
@@ -128,7 +130,6 @@ const PageContainer = styled.div`
128
130
  justify-items: center;
129
131
  width: 30px;
130
132
  height: 30px;
131
- position: relative;
132
133
 
133
134
  &:hover {
134
135
  background-color: ${(props) => props.theme.colors.grey5};
@@ -157,15 +158,12 @@ const DotItem = styled.div`
157
158
  border-radius: 50%;
158
159
  `
159
160
 
160
- const dropdownAttrs = {
161
- containerWidth: Number
162
- }
161
+ const dropdownAttrs = { top: Number, right: Number, containerWidth: Number }
163
162
  const DropdownContainer = styled('div', dropdownAttrs)`
164
163
  z-index: 99;
165
164
  height: 200px;
166
- top: 0;
167
- right: 27px;
168
-
165
+ top: ${(props) => props.top + 'px'};
166
+ left: ${(props) => props.right - props.containerWidth + 'px'};
169
167
  position: absolute;
170
168
  display: grid;
171
169
  grid-template-columns: auto auto;
@@ -301,6 +299,14 @@ export default {
301
299
  document.removeEventListener('click', this.clickOutside)
302
300
  }
303
301
  },
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
+ },
304
310
  hasChildren(item) {
305
311
  return !!item.children && !!item.children.length
306
312
  },