@eturnity/eturnity_reusable_components 1.2.83 → 1.2.85-EPDM-3013.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.
@@ -0,0 +1,132 @@
1
+ <template>
2
+ <page-wrapper ref="dropdown">
3
+ <parent-dropdown
4
+ @on-toggle="onToggleDropdown()"
5
+ :isOpen="isDropdownOpen"
6
+ :dropdownText="activeView ? activeView : 'Default view'"
7
+ :type="filterType"
8
+ />
9
+ <filter-views
10
+ v-if="
11
+ filterType === 'views' &&
12
+ isDropdownOpen &&
13
+ filterData &&
14
+ filterData.length
15
+ "
16
+ :filterData="filterData"
17
+ @on-select="onViewSelect($event)"
18
+ @on-delete="onViewDelete($event)"
19
+ />
20
+ <filter-settings
21
+ v-if="filterType === 'settings' && isDropdownOpen"
22
+ :filterData="filterData"
23
+ :buttonText="buttonText"
24
+ @on-save-new-view="$emit('on-save-new-view')"
25
+ @on-filter-change="onFilterChange($event)"
26
+ @on-cancel-view="onCancelSettings()"
27
+ @on-drag-change="$emit('on-drag-change', $event)"
28
+ @on-save-current-view="onSaveCurrentView()"
29
+ @on-prevent-close="onPreventClose($event)"
30
+ :hasActiveView="hasActiveView"
31
+ :activeLanguage="activeLanguage"
32
+ :settingsTranslations="settingsTranslations"
33
+ />
34
+ </page-wrapper>
35
+ </template>
36
+
37
+ <script>
38
+ import styled from 'vue-styled-components'
39
+ import parentDropdown from './parentDropdown'
40
+ import filterViews from './filterViews'
41
+ import filterSettings from './filterSettings'
42
+
43
+ const PageWrapper = styled.div`
44
+ position: relative;
45
+ `
46
+
47
+ export default {
48
+ name: 'filter-component',
49
+ components: {
50
+ parentDropdown,
51
+ PageWrapper,
52
+ filterViews,
53
+ filterSettings
54
+ },
55
+ props: {
56
+ filterType: {
57
+ required: false,
58
+ default: 'settings' // 'settings', 'views'
59
+ },
60
+ filterData: {
61
+ required: true
62
+ },
63
+ activeView: {
64
+ required: false,
65
+ default: null
66
+ },
67
+ buttonText: {
68
+ required: false
69
+ },
70
+ hasActiveView: {
71
+ required: false
72
+ },
73
+ activeLanguage: {
74
+ required: false,
75
+ default: 'en-us'
76
+ },
77
+ settingsTranslations: {
78
+ required: false
79
+ }
80
+ },
81
+ data() {
82
+ return {
83
+ isDropdownOpen: false,
84
+ activeFilter: null,
85
+ preventOutsideClick: false
86
+ }
87
+ },
88
+ methods: {
89
+ onToggleDropdown() {
90
+ this.isDropdownOpen = !this.isDropdownOpen
91
+ },
92
+ clickOutside(event) {
93
+ if (
94
+ !this.$refs.dropdown.$el.contains(event.target) &&
95
+ !this.preventOutsideClick
96
+ ) {
97
+ this.isDropdownOpen = false
98
+ }
99
+ },
100
+ onPreventClose(value) {
101
+ setTimeout(() => {
102
+ this.preventOutsideClick = value
103
+ }, 100)
104
+ },
105
+ onFilterChange(data) {
106
+ this.$emit('on-filter-settings-change', data)
107
+ },
108
+ onCancelSettings() {
109
+ this.onToggleDropdown()
110
+ this.$emit('on-cancel-view')
111
+ },
112
+ onViewSelect(item) {
113
+ this.onToggleDropdown()
114
+ this.$emit('on-filter-view-select', item)
115
+ },
116
+ onViewDelete(item) {
117
+ this.onToggleDropdown()
118
+ this.$emit('on-filter-view-delete', item)
119
+ },
120
+ onSaveCurrentView() {
121
+ this.onToggleDropdown()
122
+ this.$emit('on-save-current-view')
123
+ }
124
+ },
125
+ mounted() {
126
+ document.addEventListener('click', this.clickOutside)
127
+ },
128
+ beforeDestroy() {
129
+ document.removeEventListener('click', this.clickOutside)
130
+ }
131
+ }
132
+ </script>
@@ -0,0 +1,98 @@
1
+ <template>
2
+ <page-wrapper @click="$emit('on-toggle')">
3
+ <icon-wrapper>
4
+ <icon
5
+ :name="type === 'settings' ? 'settings' : 'show_in_a_new_tab'"
6
+ size="18px"
7
+ />
8
+ </icon-wrapper>
9
+ <title-wrapper :isOpen="isOpen">
10
+ <title-text>
11
+ {{ dropdownText }}
12
+ </title-text>
13
+ <arrow-wrapper>
14
+ <icon
15
+ @click.native.stop="$emit('on-toggle')"
16
+ :name="isOpen ? 'arrow_up' : 'arrow_down'"
17
+ size="12px"
18
+ />
19
+ </arrow-wrapper>
20
+ </title-wrapper>
21
+ </page-wrapper>
22
+ </template>
23
+
24
+ <script>
25
+ import styled from 'vue-styled-components'
26
+ import Icon from '../icon'
27
+
28
+ const PageWrapper = styled.div`
29
+ display: grid;
30
+ grid-template-columns: auto auto;
31
+ cursor: pointer;
32
+ `
33
+
34
+ const IconWrapper = styled.div`
35
+ display: grid;
36
+ align-items: center;
37
+ justify-items: center;
38
+ border: 1px solid ${(props) => props.theme.colors.grey4};
39
+ border-radius: 4px 0px 0px 4px;
40
+ padding: 6px;
41
+ `
42
+
43
+ const TitleAttrs = { isOpen: Boolean }
44
+ const TitleWrapper = styled('div', TitleAttrs)`
45
+ display: grid;
46
+ grid-template-columns: auto auto;
47
+ align-items: center;
48
+ justify-items: center;
49
+ grid-gap: 10px;
50
+ border: 1px solid ${(props) => props.theme.colors.grey4};
51
+ background-color: ${(props) =>
52
+ props.isOpen ? props.theme.colors.grey5 : props.theme.colors.white};
53
+ border-left: none;
54
+ border-radius: 0px 4px 4px 0px;
55
+ padding: 6px 14px;
56
+ user-select: none;
57
+ `
58
+
59
+ const TitleText = styled.div`
60
+ font-size: 13px;
61
+ `
62
+
63
+ const ArrowWrapper = styled.div`
64
+ display: grid;
65
+ align-items: center;
66
+
67
+ div {
68
+ height: auto !important;
69
+ min-height: unset;
70
+ }
71
+ `
72
+
73
+ export default {
74
+ name: 'parent-dropdown',
75
+ components: {
76
+ PageWrapper,
77
+ Icon,
78
+ IconWrapper,
79
+ TitleWrapper,
80
+ TitleText,
81
+ ArrowWrapper
82
+ },
83
+ props: {
84
+ type: {
85
+ required: false,
86
+ default: 'settings' // 'settings', 'views'
87
+ },
88
+ isOpen: {
89
+ required: true,
90
+ default: false
91
+ },
92
+ dropdownText: {
93
+ required: true,
94
+ default: 'View'
95
+ }
96
+ }
97
+ }
98
+ </script>
@@ -1,116 +1,134 @@
1
1
  <template>
2
- <Wrapper
3
- :disabled="disabled"
4
- :size="size"
5
- :backgroundColor="backgroundColor"
2
+ <Wrapper
3
+ :disabled="disabled"
4
+ :size="size"
5
+ :backgroundColor="backgroundColor"
6
6
  :borderRadius="borderRadius"
7
7
  :hoveredBackgroundColor="hoveredBackgroundColor"
8
8
  :isHovered="isHovered"
9
- >
10
- <icon :disabled="disabled"
11
- :size="iconSize"
12
- :name="name"
13
- :color="iconColor"
14
- :hoveredColor="hoveredIconColor" />
15
- <caret v-if="hasCaret">
16
- <iconWrapper :disabled="disabled"
17
- size="10px"
18
- name="arrow_down"
19
- :iconColor="iconColor"
20
- :hoveredBackgroundColor="hoveredIconColor"
21
- borderRadius="1px"
22
- />
23
- </caret>
24
- </Wrapper>
25
- </template>
26
-
27
- <script>
28
- // import Icon from "@eturnity/eturnity_reusable_components/src/components/icon"
29
- // How to use:
30
- //<icon
31
- // name="House" //required. a svg file named [name].svg should be present in /assets/svgIcons
32
- // color="red"
33
- // hoveredColor="blue"
34
- // size="60px" by default, this is 30px
35
- // />
36
-
37
- import styled from 'vue-styled-components'
38
- import icon from '../icon'
39
- const wrapperAttrs = { isHovered:Boolean,borderRadius:String,disabled: Boolean, size: String,backgroundColor:String,hoveredBackgroundColor:String }
40
- const Wrapper = styled('div', wrapperAttrs)`
41
- position:relative;
42
- display: inline-flex;
43
- width: ${(props) => props.size};
44
- height: ${(props) => props.size};
45
- justify-content:center;
46
- align-items:center;
47
- cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};
48
- background-color: ${(props)=>props.theme.colors[props.backgroundColor] || props.backgroundColor};
49
- border-radius: ${(props) => props.borderRadius};
50
- ${(props)=>(props.isHovered ? 'background-color:'+props.theme.colors[props.hoveredBackgroundColor] || props.hoveredBackgroundColor : "")};
51
- &:hover{
52
- background-color:${(props)=>props.theme.colors[props.hoveredBackgroundColor] || props.hoveredBackgroundColor};
53
- }
54
- `
55
- const caret=styled.div`
56
- position:absolute;
57
- bottom:3px;
58
- right:2px;
59
- height:10px;
60
- `
9
+ >
10
+ <icon
11
+ :disabled="disabled"
12
+ :size="iconSize"
13
+ :name="name"
14
+ :color="iconColor"
15
+ :hoveredColor="hoveredIconColor"
16
+ />
17
+ <caret v-if="hasCaret">
18
+ <iconWrapper
19
+ :disabled="disabled"
20
+ size="10px"
21
+ name="arrow_down"
22
+ :iconColor="iconColor"
23
+ :hoveredBackgroundColor="hoveredIconColor"
24
+ borderRadius="1px"
25
+ />
26
+ </caret>
27
+ </Wrapper>
28
+ </template>
29
+
30
+ <script>
31
+ // import Icon from "@eturnity/eturnity_reusable_components/src/components/icon"
32
+ // How to use:
33
+ //<icon
34
+ // name="House" //required. a svg file named [name].svg should be present in /assets/svgIcons
35
+ // color="red"
36
+ // hoveredColor="blue"
37
+ // size="60px" by default, this is 30px
38
+ // />
39
+
40
+ import styled from 'vue-styled-components'
41
+ import icon from '../icon'
42
+ const wrapperAttrs = {
43
+ isHovered: Boolean,
44
+ borderRadius: String,
45
+ disabled: Boolean,
46
+ size: String,
47
+ backgroundColor: String,
48
+ hoveredBackgroundColor: String
49
+ }
50
+ const Wrapper = styled('div', wrapperAttrs)`
51
+ position: relative;
52
+ display: inline-flex;
53
+ width: ${(props) => props.size};
54
+ height: ${(props) => props.size};
55
+ justify-content: center;
56
+ align-items: center;
57
+ cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};
58
+ background-color: ${(props) =>
59
+ props.theme.colors[props.backgroundColor] || props.backgroundColor};
60
+ border-radius: ${(props) => props.borderRadius};
61
+ ${(props) =>
62
+ props.isHovered
63
+ ? 'background-color:' +
64
+ props.theme.colors[props.hoveredBackgroundColor] ||
65
+ props.hoveredBackgroundColor
66
+ : ''};
67
+ &:hover {
68
+ background-color: ${(props) =>
69
+ props.theme.colors[props.hoveredBackgroundColor] ||
70
+ props.hoveredBackgroundColor};
71
+ }
72
+ `
73
+ const caret = styled.div`
74
+ position: absolute;
75
+ bottom: 3px;
76
+ right: 2px;
77
+ height: 10px;
78
+ `
61
79
 
62
- export default {
63
- name: 'iconWrapper',
64
- components: {
65
- Wrapper,
66
- icon,
67
- caret
80
+ export default {
81
+ name: 'iconWrapper',
82
+ components: {
83
+ Wrapper,
84
+ icon,
85
+ caret
86
+ },
87
+ props: {
88
+ disabled: {
89
+ required: false,
90
+ default: false
91
+ },
92
+ name: {
93
+ required: true
94
+ },
95
+ iconColor: {
96
+ required: false,
97
+ default: 'white'
98
+ },
99
+ hoveredIconColor: {
100
+ required: false
101
+ },
102
+ backgroundColor: {
103
+ required: false
104
+ },
105
+ hoveredBackgroundColor: {
106
+ required: false,
107
+ default: 'transparentWhite1'
108
+ },
109
+ size: {
110
+ required: false,
111
+ default: '32px'
112
+ },
113
+ iconSize: {
114
+ required: false,
115
+ default: '18px'
116
+ },
117
+ hasCaret: {
118
+ required: false,
119
+ default: false
68
120
  },
69
- props: {
70
- disabled: {
71
- required: false,
72
- default: false
73
- },
74
- name: {
75
- required: true
76
- },
77
- iconColor: {
78
- required: false,
79
- default: 'white'
80
- },
81
- hoveredIconColor: {
82
- required: false
83
- },
84
- backgroundColor: {
85
- required: false,
86
- },
87
- hoveredBackgroundColor: {
88
- required: false,
89
- default:"transparentWhite1"
90
- },
91
- size: {
92
- required: false,
93
- default: '32px'
94
- },
95
- iconSize:{
96
- required: false,
97
- default:'18px'
98
- },
99
- hasCaret:{
100
- required: false,
101
- default: false
102
- },
103
- borderRadius:{
104
- required:false,
105
- default:'6px'
106
- },
107
- isHovered:{
108
- required:false,
109
- default:false
110
- }
121
+ borderRadius: {
122
+ required: false,
123
+ default: '6px'
111
124
  },
112
- data() {
113
- return {}
125
+ isHovered: {
126
+ required: false,
127
+ default: false
114
128
  }
129
+ },
130
+ data() {
131
+ return {}
115
132
  }
116
- </script>
133
+ }
134
+ </script>
@@ -149,9 +149,9 @@ const InputContainer = styled('input', inputProps)`
149
149
  ? '1px solid ' + props.theme.colors[props.borderColor]
150
150
  : '1px solid ' + props.borderColor
151
151
  : '1px solid ' + props.theme.colors.grey4};
152
- padding-top: 11px;
153
- padding-bottom: 11px;
154
- padding-left: 10px;
152
+ height: ${(props) => props.inputHeight};
153
+ max-height: ${(props) => props.inputHeight};
154
+ padding: 0 10px;
155
155
  padding-right: ${({ slotSize, isError, showLinearUnitName }) =>
156
156
  slotSize
157
157
  ? isError && !showLinearUnitName
@@ -160,7 +160,10 @@ const InputContainer = styled('input', inputProps)`
160
160
  : isError && !showLinearUnitName
161
161
  ? '24px'
162
162
  : '5px'};
163
- border-radius: ${props=>props.isInteractive && props.alignItems!="vertical" ? "0 4px 4px 0" : "4px"};
163
+ border-radius: ${(props) =>
164
+ props.isInteractive && props.alignItems != 'vertical'
165
+ ? '0 4px 4px 0'
166
+ : '4px'};
164
167
  text-align: ${(props) => props.textAlign};
165
168
  cursor: ${(props) => (props.isDisabled ? 'not-allowed' : 'auto')};
166
169
  font-size: ${(props) => (props.fontSize ? props.fontSize : '13px')};
@@ -182,7 +185,7 @@ const InputContainer = styled('input', inputProps)`
182
185
  background-color: ${(props) =>
183
186
  props.isDisabled ? props.theme.colors.grey5 : '#fff'};
184
187
  box-sizing: border-box;
185
- max-height: ${(props) => props.inputHeight};
188
+
186
189
  &::placeholder {
187
190
  color: ${(props) => props.theme.colors.grey2};
188
191
  }
@@ -253,8 +256,8 @@ const LabelSlotWrapper = styled('div', inputProps)`
253
256
  align-items: center;
254
257
  cursor: ${(props) => (props.isInteractive ? 'ew-resize' : 'auto')};
255
258
  border: ${(props) =>
256
- props.alignItems=="vertical"
257
- ? "none"
259
+ props.alignItems == 'vertical'
260
+ ? 'none'
258
261
  : props.isError
259
262
  ? '1px solid ' + props.theme.colors.red
260
263
  : props.noBorder
@@ -265,7 +268,7 @@ const LabelSlotWrapper = styled('div', inputProps)`
265
268
  : '1px solid ' + props.borderColor
266
269
  : '1px solid ' + props.theme.colors.grey4};
267
270
  border-radius: 4px 0 0 4px;
268
- border-right:none;
271
+ border-right: none;
269
272
  `
270
273
 
271
274
  const LabelText = styled('div', inputProps)`
@@ -330,7 +333,7 @@ export default {
330
333
  },
331
334
  inputHeight: {
332
335
  required: false,
333
- default: null
336
+ default: '40px'
334
337
  },
335
338
  value: {
336
339
  required: true,
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <container>
2
+ <container :inputWidth="inputWidth">
3
3
  <input-wrapper>
4
4
  <input-container
5
5
  ref="inputElement"
@@ -9,6 +9,7 @@
9
9
  :disabled="disabled"
10
10
  :isDisabled="disabled"
11
11
  :inputWidth="inputWidth"
12
+ :isFilter="isFilter"
12
13
  :hasFocus="hasFocus"
13
14
  />
14
15
  <img
@@ -28,18 +29,24 @@
28
29
  // :disabled="true"
29
30
  // inputWidth="250px"
30
31
  // @on-change="function($event)"
32
+ // :isFilter="true" // to set the height at 30px
31
33
  // />
32
34
  import styled from 'vue-styled-components'
33
35
 
34
- const Container = styled.div`
35
- width: 100%;
36
+ const inputAttrs = {
37
+ isDisabled: Boolean,
38
+ inputWidth: String,
39
+ isFilter: Boolean
40
+ }
41
+ const Container = styled('div', inputAttrs)`
42
+ width: ${(props) => (props.inputWidth ? props.inputWidth : '100%')};
36
43
  position: relative;
37
44
  `
38
45
 
39
- const inputAttrs = { isDisabled: Boolean, inputWidth: String }
40
46
  const InputContainer = styled('input', inputAttrs)`
41
- border: 1px solid ${(props) => props.theme.colors.mediumGray};
42
- padding: 11px 30px 11px 10px;
47
+ border: 1px solid ${(props) => props.theme.colors.grey4};
48
+ padding: ${(props) =>
49
+ props.isFilter ? '7px 30px 7px 10px' : '11px 30px 11px 10px'};
43
50
  border-radius: 4px;
44
51
  font-size: 13px;
45
52
  color: ${(props) => props.theme.colors.black};
@@ -90,6 +97,10 @@ export default {
90
97
  required: false,
91
98
  default: null
92
99
  },
100
+ isFilter: {
101
+ required: false,
102
+ default: false
103
+ },
93
104
  hasFocus: {
94
105
  required: false,
95
106
  default: false
@@ -99,10 +110,10 @@ export default {
99
110
  onChangeHandler(event) {
100
111
  this.$emit('on-change', event)
101
112
  },
102
- focusInputElement(){
113
+ focusInputElement() {
103
114
  this.$nextTick(() => {
104
- this.$refs.inputElement.$el.focus();
105
- });
115
+ this.$refs.inputElement.$el.focus()
116
+ })
106
117
  }
107
118
  },
108
119
  watch: {
@@ -112,6 +123,5 @@ export default {
112
123
  }
113
124
  }
114
125
  }
115
-
116
126
  }
117
127
  </script>
@@ -247,8 +247,9 @@ const selectDropdown = styled('div', selectDropdownAttrs)`
247
247
  props.theme.colors[props.fontColor]
248
248
  ? props.theme.colors[props.fontColor]
249
249
  : props.fontColor};
250
- max-height:300px;
251
- overflow-y:auto;
250
+ max-height: 300px;
251
+ min-height: 39px;
252
+ overflow-y: auto;
252
253
  & [data-value="${(props) => props.selectedValue}"]{
253
254
  backdrop-filter: brightness(1.4);
254
255
  }