@eturnity/eturnity_reusable_components 6.48.0-EPDM-8891.3 → 6.48.0-EPDM-8148.9

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.48.0-EPDM-8891.3",
3
+ "version": "6.48.0-EPDM-8148.9",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "dev": "vue-cli-service serve",
@@ -0,0 +1,3 @@
1
+ <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M10 0H11H16C17.1046 0 18 0.895431 18 2V12H12C10.8954 12 10 11.1046 10 10V4L0 4V2C0 0.89543 0.895431 0 2 0H10ZM0 6H6C7.10457 6 8 6.89543 8 8V14H18V16C18 17.1046 17.1046 18 16 18H8H7H2C0.895431 18 0 17.1046 0 16V6Z" fill="white"/>
3
+ </svg>
@@ -8,63 +8,85 @@
8
8
  :color="iconColor"
9
9
  :hoveredBackgroundColor="hoveredBackgroundColor"
10
10
  :isHovered="isHovered"
11
- >
12
- <icon :disabled="disabled"
13
- :size="iconSize"
14
- :name="name"
15
- :color="iconColor"
16
- :hoveredColor="hoveredIconColor"
17
- :isStriked="isStriked"
18
- />
19
-
20
- <caret v-if="hasCaret">
21
- <iconWrapper :disabled="disabled"
22
- size="10px"
23
- name="arrow_down"
24
- :iconColor="iconColor"
25
- :hoveredBackgroundColor="hoveredIconColor"
26
- borderRadius="1px"
27
- />
28
- </caret>
29
- </Wrapper>
30
- </template>
31
-
32
- <script>
33
- // import Icon from "@eturnity/eturnity_reusable_components/src/components/icon"
34
- // How to use:
35
- //<icon
36
- // name="House" //required. a svg file named [name].svg should be present in /assets/svgIcons
37
- // color="red"
38
- // hoveredColor="blue"
39
- // size="60px" by default, this is 30px
40
- // />
41
-
42
- import styled from 'vue-styled-components'
43
- import icon from '../icon'
44
- const wrapperAttrs = { color: String, isHovered:Boolean,borderRadius:String,disabled: Boolean, size: String,backgroundColor:String,hoveredBackgroundColor:String,hasBorder:Boolean }
45
- const Wrapper = styled('div', wrapperAttrs)`
46
- position:relative;
47
- display: inline-flex;
48
- width: ${(props) => props.size};
49
- height: ${(props) => props.size};
50
- border: ${(props) => props.hasBorder? 'solid 1px '+props.theme.colors[props.color] || props.color : ""};
51
- justify-content:center;
52
- align-items:center;
53
- cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};
54
- background-color: ${(props)=>props.theme.colors[props.backgroundColor] || props.backgroundColor};
55
- border-radius: ${(props) => props.borderRadius};
56
- ${(props)=>(props.isHovered ? 'background-color:'+props.theme.colors[props.hoveredBackgroundColor] || props.hoveredBackgroundColor : "")};
57
- &:hover{
58
- background-color:${(props)=>props.theme.colors[props.hoveredBackgroundColor] || props.hoveredBackgroundColor};
59
- }
60
- `
61
- const caret=styled.div`
62
- position:absolute;
63
- bottom:3px;
64
- right:2px;
65
- height:10px;
66
- `
67
-
11
+ >
12
+ <icon
13
+ :disabled="disabled"
14
+ :size="iconSize"
15
+ :name="name"
16
+ :color="iconColor"
17
+ :hoveredColor="hoveredIconColor"
18
+ :isStriked="isStriked"
19
+ />
20
+
21
+ <caret v-if="hasCaret">
22
+ <iconWrapper
23
+ :disabled="disabled"
24
+ size="10px"
25
+ name="arrow_down"
26
+ :iconColor="iconColor"
27
+ :hoveredBackgroundColor="hoveredIconColor"
28
+ borderRadius="1px"
29
+ />
30
+ </caret>
31
+ </Wrapper>
32
+ </template>
33
+
34
+ <script>
35
+ // import Icon from "@eturnity/eturnity_reusable_components/src/components/icon"
36
+ // How to use:
37
+ //<icon
38
+ // name="House" //required. a svg file named [name].svg should be present in /assets/svgIcons
39
+ // color="red"
40
+ // hoveredColor="blue"
41
+ // size="60px" by default, this is 30px
42
+ // />
43
+
44
+ import styled from 'vue-styled-components'
45
+ import icon from '../icon'
46
+ const wrapperAttrs = {
47
+ color: String,
48
+ isHovered: Boolean,
49
+ borderRadius: String,
50
+ disabled: Boolean,
51
+ size: String,
52
+ backgroundColor: String,
53
+ hoveredBackgroundColor: String,
54
+ hasBorder: Boolean
55
+ }
56
+ const Wrapper = styled('div', wrapperAttrs)`
57
+ position: relative;
58
+ display: inline-flex;
59
+ width: ${(props) => props.size};
60
+ height: ${(props) => props.size};
61
+ border: ${(props) =>
62
+ props.hasBorder
63
+ ? 'solid 1px ' + props.theme.colors[props.color] || props.color
64
+ : ''};
65
+ justify-content: center;
66
+ align-items: center;
67
+ cursor: ${(props) => (props.disabled ? 'not-allowed' : 'pointer')};
68
+ background-color: ${(props) =>
69
+ props.theme.colors[props.backgroundColor] || props.backgroundColor};
70
+ border-radius: ${(props) => props.borderRadius};
71
+ ${(props) =>
72
+ props.isHovered
73
+ ? 'background-color:' +
74
+ props.theme.colors[props.hoveredBackgroundColor] ||
75
+ props.hoveredBackgroundColor
76
+ : ''};
77
+ &:hover {
78
+ background-color: ${(props) =>
79
+ props.theme.colors[props.hoveredBackgroundColor] ||
80
+ props.hoveredBackgroundColor};
81
+ }
82
+ `
83
+ const caret = styled.div`
84
+ position: absolute;
85
+ bottom: 3px;
86
+ right: 2px;
87
+ height: 10px;
88
+ `
89
+
68
90
  export default {
69
91
  name: 'iconWrapper',
70
92
  components: {
@@ -83,6 +83,7 @@
83
83
  // inputWidth="150px" //by default, this is 100%
84
84
  // minWidth="100px"
85
85
  // :numberPrecision="3"
86
+ // minDecimals="2"
86
87
  // unitName="pc"
87
88
  // :value="inputValue" //required -- String
88
89
  // @input-change="onInputChange($event)" //required
@@ -357,6 +358,10 @@ export default {
357
358
  required: false,
358
359
  default: 0
359
360
  },
361
+ minDecimals: {
362
+ required: false,
363
+ default: 0
364
+ },
360
365
  unitName: {
361
366
  required: false,
362
367
  default: ''
@@ -497,7 +502,8 @@ export default {
497
502
  } else {
498
503
  let num = stringToNumber({
499
504
  value: item,
500
- numberPrecision: false
505
+ numberPrecision: false,
506
+ minDecimals: this.minDecimals
501
507
  })
502
508
  return num
503
509
  }
@@ -508,7 +514,8 @@ export default {
508
514
  if (typeof evaluated === 'string') {
509
515
  evaluated = stringToNumber({
510
516
  value: evaluated,
511
- numberPrecision: this.numberPrecision
517
+ numberPrecision: this.numberPrecision,
518
+ minDecimals: this.minDecimals
512
519
  })
513
520
  } else if (typeof evaluated === 'number') {
514
521
  evaluated = evaluated.toFixed(this.numberPrecision)
@@ -568,7 +575,8 @@ export default {
568
575
  : this.defaultNumber
569
576
  ? this.defaultNumber
570
577
  : this.minNumber,
571
- numberPrecision: this.numberPrecision
578
+ numberPrecision: this.numberPrecision,
579
+ minDecimals: this.minDecimals
572
580
  })
573
581
  }
574
582
  let adjustedMinValue =
@@ -613,7 +621,8 @@ export default {
613
621
  let input = this.numberToStringEnabled
614
622
  ? numberToString({
615
623
  value: adjustedMinValue,
616
- numberPrecision: this.numberPrecision
624
+ numberPrecision: this.numberPrecision,
625
+ minDecimals: this.minDecimals
617
626
  })
618
627
  : adjustedMinValue
619
628
  let unit = this.showLinearUnitName ? '' : this.unitName
@@ -625,7 +634,8 @@ export default {
625
634
  return this.numberToStringEnabled
626
635
  ? numberToString({
627
636
  value: adjustedMinValue,
628
- numberPrecision: this.numberPrecision
637
+ numberPrecision: this.numberPrecision,
638
+ minDecimals: this.minDecimals
629
639
  })
630
640
  : adjustedMinValue
631
641
  }
@@ -644,7 +654,8 @@ export default {
644
654
 
645
655
  this.textInput = numberToString({
646
656
  value: value && value.length ? value : this.minNumber,
647
- numberPrecision: this.numberPrecision
657
+ numberPrecision: this.numberPrecision,
658
+ minDecimals: this.minDecimals
648
659
  })
649
660
  //this.value=value
650
661
  },
@@ -659,17 +670,20 @@ export default {
659
670
  if (this.value) {
660
671
  this.textInput = numberToString({
661
672
  value: this.value,
662
- numberPrecision: this.numberPrecision
673
+ numberPrecision: this.numberPrecision,
674
+ minDecimals: this.minDecimals
663
675
  })
664
676
  } else if (this.defaultNumber !== null) {
665
677
  this.textInput = numberToString({
666
678
  value: this.defaultNumber,
667
- numberPrecision: this.numberPrecision
679
+ numberPrecision: this.numberPrecision,
680
+ minDecimals: this.minDecimals
668
681
  })
669
682
  } else if (this.minNumber !== null) {
670
683
  this.textInput = numberToString({
671
684
  value: this.minNumber,
672
- numberPrecision: this.numberPrecision
685
+ numberPrecision: this.numberPrecision,
686
+ minDecimals: this.minDecimals
673
687
  })
674
688
  }
675
689
  },
@@ -492,10 +492,14 @@ export default {
492
492
  this.toggleDropdown()
493
493
  },
494
494
  clickOutside(event) {
495
+ const dropdownRef = this.$refs.dropdown
496
+ // we need to prevent closing on selecting an option, because in the case of
497
+ // a disabled option, we don't want to close the dropdown
495
498
  if (!this.isClickOutsideActive) return
496
499
  if (
497
500
  this.$refs.select.$el == event.target ||
498
- this.$refs.select.$el.contains(event.target)
501
+ this.$refs.select.$el.contains(event.target) ||
502
+ event.target.parentNode === dropdownRef.$el
499
503
  ) {
500
504
  return
501
505
  } else {
@@ -537,15 +541,7 @@ export default {
537
541
  computed: {
538
542
  optionLength() {
539
543
  if (this.isDropdownOpen) {
540
- // this filterRef is needed to check for the # of children on Filter dropdowns
541
- const filterRef =
542
- this.$refs.dropdown.$children &&
543
- this.$refs.dropdown.$children.length > 1
544
- ? this.$refs.dropdown.$children
545
- : this.$refs.dropdown.$children[0].$children
546
- ? this.$refs.dropdown.$children[0].$children
547
- : this.$refs.dropdown.$children
548
- return filterRef.length
544
+ return this.$refs.dropdown.$children.length
549
545
  } else {
550
546
  return 0
551
547
  }
@@ -1,10 +1,18 @@
1
1
  <template>
2
2
  <optionContainer
3
3
  :data-value="value"
4
- :hoveredBgColor="colorMode == 'dark' ? '#000000' : 'hoveredBgColor'"
5
- :backgroundColor="colorMode == 'dark' ? 'eturnityGrey' : '#fff'"
4
+ :hoveredBgColor="
5
+ colorMode == 'dark'
6
+ ? '#000000'
7
+ : hoveredBgColor
8
+ ? hoveredBgColor
9
+ : 'grey5'
10
+ "
6
11
  @click="clickHandler"
7
12
  @mouseover="hoverHandler"
13
+ :cursorType="cursorType"
14
+ :backgroundColor="colorMode == 'dark' ? '#000000' : backgroundColor"
15
+ :title="hoverText"
8
16
  >
9
17
  <slot></slot>
10
18
  </optionContainer>
@@ -14,18 +22,29 @@
14
22
  // import selectButton from './selectButton'
15
23
  // import selectDropdown from './selectDropDown'
16
24
  import styled from 'vue-styled-components'
17
- const optionProps = { hoveredBgColor: String, backgroundColor: String }
25
+ const optionProps = {
26
+ hoveredBgColor: String,
27
+ cursorType: String,
28
+ backgroundColor: String
29
+ }
18
30
  const optionContainer = styled('div', optionProps)`
19
31
  display: flex;
20
- cursor: pointer;
32
+ cursor: ${(props) => props.cursorType};
21
33
  flex-direction: row;
22
34
  justify-content: space-between;
23
35
  align-items: center;
24
36
  padding: 12px 10px;
25
37
  gap: 14px;
26
38
  width: 100%;
27
- background-color: ${(props) => props.theme.colors[props.backgroundColor]?props.theme.colors[props.backgroundColor]:props.backgroundColor};
39
+ background-color: ${(props) =>
40
+ props.theme.colors[props.backgroundColor]
41
+ ? props.theme.colors[props.backgroundColor]
42
+ : props.backgroundColor};
28
43
  box-sizing: inherit;
44
+ background-color: ${(props) =>
45
+ props.theme.colors[props.backgroundColor]
46
+ ? props.theme.colors[props.backgroundColor]
47
+ : props.backgroundColor};
29
48
  &:hover {
30
49
  background-color: ${(props) =>
31
50
  props.theme.colors[props.hoveredBgColor]
@@ -47,6 +66,21 @@ export default {
47
66
  colorMode: {
48
67
  required: false,
49
68
  default: 'light'
69
+ },
70
+ cursorType: {
71
+ required: false,
72
+ default: 'cursor'
73
+ },
74
+ backgroundColor: {
75
+ required: false,
76
+ default: 'white'
77
+ },
78
+ hoverText: {
79
+ required: false
80
+ },
81
+ isDisabled: {
82
+ required: false,
83
+ default: false
50
84
  }
51
85
  },
52
86
 
@@ -57,7 +91,12 @@ export default {
57
91
  },
58
92
  methods: {
59
93
  clickHandler() {
60
- this.$parent.$emit('option-selected', this.value)
94
+ if (this.isDisabled) {
95
+ // prevent emitter if the option is disabled
96
+ return
97
+ } else {
98
+ this.$parent.$emit('option-selected', this.value)
99
+ }
61
100
  },
62
101
  hoverHandler() {
63
102
  this.$parent.$emit('option-hovered', this.value)
@@ -37,7 +37,7 @@ const ContentContainer = styled('div', contentAttrs)`
37
37
  visibility: ${(props) => (props.visible ? 'inherit' : 'hidden')};
38
38
  `
39
39
 
40
- const pageAttrs = { isOpen: Boolean, backdrop: String,position:String }
40
+ const pageAttrs = { isOpen: Boolean, backdrop: String, position: String }
41
41
  const PageWrapper = styled('div', pageAttrs)`
42
42
  position: ${(props) => props.position}
43
43
  display: grid;
@@ -134,11 +134,13 @@
134
134
  {{ !!item[option] ? item[option] : '-' }}
135
135
  </span>
136
136
  <template-button
137
+ :key="idx"
137
138
  @click.stop="onTemplateClick(item)"
138
139
  v-else-if="option === 'template' && item.has_template"
139
140
  >{{ $gettext('Use template...') }}</template-button
140
141
  >
141
142
  <no-template
143
+ :key="idx"
142
144
  v-else-if="option === 'template' && !item.has_template"
143
145
  >
144
146
  {{ $gettext('No main component template') }}
@@ -91,19 +91,11 @@ export const stringToNumber = ({
91
91
  return parseFloat(newVal)
92
92
  }
93
93
 
94
- export const numberToString = ({ value, numberPrecision = 0 }) => {
94
+ export const numberToString = ({ value, numberPrecision, minDecimals }) => {
95
+ const minimumRounding = minDecimals ? minDecimals : 0
95
96
  value = parseFloat(value)
96
- let minNumberPrecision
97
- let maxNumberPrecision
98
- if (typeof numberPrecision === 'number') {
99
- minNumberPrecision = numberPrecision
100
- maxNumberPrecision = numberPrecision
101
- } else {
102
- minNumberPrecision = numberPrecision[0]
103
- maxNumberPrecision = numberPrecision[1]
104
- }
105
97
  return value.toLocaleString(langForLocaleString(), {
106
- minimumFractionDigits: minNumberPrecision,
107
- maximumFractionDigits: maxNumberPrecision
98
+ minimumFractionDigits: minimumRounding, // removing this for now. Why do we need this to be a minimum amount?
99
+ maximumFractionDigits: numberPrecision
108
100
  })
109
101
  }