@eturnity/eturnity_reusable_components 8.26.10 → 8.26.11-EPDM-15023.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.
@@ -22,7 +22,7 @@
22
22
  <!-- For stacked bar chart -->
23
23
  <template v-if="seriesData.length">
24
24
  <InputRow
25
- v-for="series in seriesData"
25
+ v-for="(series, seriesIndex) in seriesData"
26
26
  :key="series.name"
27
27
  :data-series-name="series.name"
28
28
  >
@@ -36,8 +36,10 @@
36
36
  :allow-negative="false"
37
37
  :default-number="0"
38
38
  :disabled="isInputsDisabled"
39
+ :error-message="getInputErrorMessage(series.data, item.label)"
39
40
  input-height="36px"
40
41
  :is-disabled-styled-only="true"
42
+ :is-error="getIsError(series.data, item.label)"
41
43
  :is-info-border="
42
44
  fieldMode === 'percentage'
43
45
  ? calculatePercentageTotal(item.label) !== 100
@@ -117,8 +119,10 @@
117
119
  <InputNumber
118
120
  :allow-negative="false"
119
121
  :disabled="isInputsDisabled"
122
+ :error-message="item.errorMessage"
120
123
  input-height="36px"
121
124
  :is-disabled-styled-only="true"
125
+ :is-error="item.isError"
122
126
  :min-decimals="0"
123
127
  :number-precision="0"
124
128
  text-align="center"
@@ -142,6 +146,11 @@
142
146
  </InfoCardBody>
143
147
  </InfoCard>
144
148
  </InfoCardContainer>
149
+ <InfoCardContainer v-if="hasInputErrors" :y-axis-width="yAxisWidth">
150
+ <InfoCard align-items="center" type="error_minor">
151
+ <InfoCardBody> {{ inputErrorMessage }} </InfoCardBody>
152
+ </InfoCard>
153
+ </InfoCardContainer>
145
154
  </template>
146
155
 
147
156
  <script setup>
@@ -204,6 +213,10 @@
204
213
  type: String,
205
214
  default: '',
206
215
  },
216
+ inputErrorMessage: {
217
+ type: String,
218
+ default: '',
219
+ },
207
220
  })
208
221
 
209
222
  const seriesData = ref([])
@@ -229,6 +242,8 @@
229
242
  label: d.label,
230
243
  value: d.value,
231
244
  percentage: d.percentage,
245
+ isError: d.isError,
246
+ errorMessage: d.errorMessage,
232
247
  originalValue: currentSeriesData.length
233
248
  ? currentSeriesData[itemIndex].data[dIndex].originalValue
234
249
  : d.value,
@@ -275,7 +290,7 @@
275
290
  }
276
291
  }
277
292
 
278
- const getDisplayValue = (data, label, shouldRound = true) => {
293
+ const getDisplayValue = (data, label) => {
279
294
  if (props.fieldMode === 'absolute') {
280
295
  return data.find((d) => d.label === label)?.value
281
296
  }
@@ -283,6 +298,13 @@
283
298
  return data.find((d) => d.label === label)?.percentage
284
299
  }
285
300
 
301
+ const getIsError = (data, label) => {
302
+ return data.find((d) => d.label === label)?.isError
303
+ }
304
+ const getInputErrorMessage = (data, label) => {
305
+ return data.find((d) => d.label === label)?.errorMessage
306
+ }
307
+
286
308
  const calculatePercentageTotal = (label) => {
287
309
  const percentageTotal = seriesData.value.reduce((sum, series) => {
288
310
  const percentage =
@@ -336,6 +358,14 @@
336
358
  return calculatePercentageTotal(d.label) !== 100
337
359
  })
338
360
  })
361
+ const hasInputErrors = computed(() => {
362
+ if (seriesData.value.length) {
363
+ return seriesData.value.some((serie) =>
364
+ serie.data.some((item) => item.isError)
365
+ )
366
+ }
367
+ return props.data.some((item) => item.isError)
368
+ })
339
369
 
340
370
  const handleFieldsScroll = (event) => {
341
371
  emit('sync-scroll', event.target.scrollLeft)
@@ -166,6 +166,7 @@
166
166
  :is-inputs-disabled="isLoading"
167
167
  :is-scrollable="isScrollable"
168
168
  :percentage-error-message="percentageErrorMessage"
169
+ :input-error-message="inputErrorMessage"
169
170
  :series="series"
170
171
  :y-axis-width="yAxisWidth"
171
172
  @input-blur="handleInputBlur"
@@ -307,6 +308,10 @@
307
308
  type: String,
308
309
  default: '',
309
310
  },
311
+ inputErrorMessage: {
312
+ type: String,
313
+ default: '',
314
+ },
310
315
  })
311
316
 
312
317
  const generateChartId = () =>
@@ -7,11 +7,13 @@
7
7
  :data-id="dataId"
8
8
  :data-qa-id="dataQaId"
9
9
  :height="height"
10
+ :is-active="isActive"
10
11
  :is-disabled="isDisabled"
11
12
  :min-width="minWidth"
12
13
  :no-wrap="noWrap"
13
14
  :type="type"
14
15
  :variant="variant"
16
+ :width="width"
15
17
  >
16
18
  <LabelComponent :has-icon="Boolean(icon)">
17
19
  <Icon
@@ -50,11 +52,13 @@
50
52
  type: String,
51
53
  isDisabled: Boolean,
52
54
  minWidth: String,
55
+ width: String,
53
56
  noWrap: Boolean,
54
57
  height: String,
55
58
  variant: String,
56
59
  buttonSize: String,
57
60
  appTheme: String,
61
+ isActive: Boolean,
58
62
  }
59
63
  const ButtonContainer = styled('div', ButtonAttrs)`
60
64
  display: flex;
@@ -73,6 +77,9 @@
73
77
  props.isDisabled
74
78
  ? props.theme.mainButton[props.appTheme][props.type][props.variant]
75
79
  .disabled.backgroundColor
80
+ : props.isActive
81
+ ? props.theme.mainButton[props.appTheme][props.type][props.variant]
82
+ .active.backgroundColor
76
83
  : props.theme.mainButton[props.appTheme][props.type][props.variant]
77
84
  .default.backgroundColor};
78
85
  border: ${(props) => {
@@ -91,7 +98,7 @@
91
98
  ${(props) => (props.noWrap ? `white-space: nowrap;` : '')};
92
99
  height: ${(props) => props.height};
93
100
  line-height: 1;
94
-
101
+ width: ${(props) => props.width};
95
102
  &:hover {
96
103
  background-color: ${(props) =>
97
104
  props.isDisabled
@@ -170,6 +177,11 @@
170
177
  default: false,
171
178
  type: Boolean,
172
179
  },
180
+ isActive: {
181
+ required: false,
182
+ default: false,
183
+ type: Boolean,
184
+ },
173
185
  icon: {
174
186
  required: false,
175
187
  default: null,
@@ -204,6 +216,11 @@
204
216
  default: null,
205
217
  type: String,
206
218
  },
219
+ width: {
220
+ required: false,
221
+ default: 'auto',
222
+ type: String,
223
+ },
207
224
  height: {
208
225
  required: false,
209
226
  default: 'auto',
@@ -49,7 +49,10 @@
49
49
  <slot name="trigger"></slot>
50
50
  </IconWrapper>
51
51
  </div>
52
- <Teleport v-if="isVisible && (!!text || $slots.default)" to="body">
52
+ <Teleport
53
+ v-if="!hideInfoText && isVisible && (!!text || $slots.default)"
54
+ to="body"
55
+ >
53
56
  <TextWrapper data-test-id="info_text_wrapper" :style="wrapperStyle">
54
57
  <TextOverlay
55
58
  ref="infoBox"
@@ -799,6 +799,10 @@
799
799
  type: Boolean,
800
800
  default: false,
801
801
  },
802
+ hasSpaceBetweenUnit: {
803
+ type: Boolean,
804
+ default: true,
805
+ },
802
806
  },
803
807
  data() {
804
808
  return {
@@ -812,8 +816,12 @@
812
816
  displayedPlaceholder() {
813
817
  if (this.placeholder) return this.placeholder
814
818
  if (this.defaultNumber)
815
- return `${this.defaultNumber} ${this.unitName ? this.unitName : ''}`
816
- return `${this.minNumber || 0} ${this.unitName ? this.unitName : ''}`
819
+ return `${this.defaultNumber}${this.hasSpaceBetweenUnit ? ' ' : ''}${
820
+ this.unitName ? this.unitName : ''
821
+ }`
822
+ return `${this.minNumber || 0}${this.hasSpaceBetweenUnit ? ' ' : ''}${
823
+ this.unitName ? this.unitName : ''
824
+ }`
817
825
  },
818
826
  hasSlot() {
819
827
  return !!this.$slots.default
@@ -1027,8 +1035,9 @@
1027
1035
  return
1028
1036
  }
1029
1037
  this.textInput = this.formatWithCurrency(this.value)
1038
+ const textInputWithoutUnit = this.formatWithoutUnit(this.value)
1030
1039
  this.enteredValue = stringToNumber({
1031
- value: this.textInput,
1040
+ value: textInputWithoutUnit,
1032
1041
  numberPrecision: this.numberPrecision,
1033
1042
  minDecimals: this.minDecimals,
1034
1043
  })
@@ -1049,6 +1058,38 @@
1049
1058
  this.$refs.inputField1.$el.blur()
1050
1059
  })
1051
1060
  },
1061
+ formatWithoutUnit(value) {
1062
+ let adjustedMinValue =
1063
+ value || value === 0
1064
+ ? value
1065
+ : this.defaultNumber
1066
+ ? this.defaultNumber
1067
+ : this.minNumber || this.minNumber === 0
1068
+ ? this.minNumber
1069
+ : ''
1070
+ if (adjustedMinValue || adjustedMinValue === 0) {
1071
+ let input = this.numberToStringEnabled
1072
+ ? numberToString({
1073
+ value: adjustedMinValue,
1074
+ numberPrecision: this.numberPrecision,
1075
+ minDecimals: this.minDecimals,
1076
+ })
1077
+ : adjustedMinValue
1078
+ return input
1079
+ } else if (!adjustedMinValue && adjustedMinValue !== 0) {
1080
+ return ''
1081
+ } else if (this.isFocused) {
1082
+ return value
1083
+ } else {
1084
+ return this.numberToStringEnabled
1085
+ ? numberToString({
1086
+ value: adjustedMinValue,
1087
+ numberPrecision: this.numberPrecision,
1088
+ minDecimals: this.minDecimals,
1089
+ })
1090
+ : adjustedMinValue
1091
+ }
1092
+ },
1052
1093
  formatWithCurrency(value) {
1053
1094
  let adjustedMinValue =
1054
1095
  value || value === 0
@@ -1069,7 +1110,7 @@
1069
1110
  let unit = this.showLinearUnitName ? '' : this.unitName
1070
1111
  //return input + ' ' + unit
1071
1112
  if (unit) {
1072
- return input + ' ' + unit
1113
+ return `${input}${this.hasSpaceBetweenUnit ? ' ' : ''}${unit}`
1073
1114
  }
1074
1115
  return input
1075
1116
  } else if (!adjustedMinValue && adjustedMinValue !== 0) {
@@ -11,8 +11,8 @@
11
11
  >
12
12
  <RcIcon
13
13
  v-if="stepIndex < currentStepIndex"
14
- color="white"
15
- hovered-color="white"
14
+ :color="theme.semanticColors.purple[500]"
15
+ :hovered-color="theme.semanticColors.purple[500]"
16
16
  name="checkmark_thin"
17
17
  size="16px"
18
18
  />
@@ -44,6 +44,7 @@
44
44
  // />
45
45
  import styled from 'vue3-styled-components'
46
46
  import RcIcon from '../icon'
47
+ import theme from '@/assets/theme.js'
47
48
 
48
49
  const StyledComponents = {
49
50
  ProgressionStepContainer: styled('div', { numberOfSteps: Number })`
@@ -115,6 +116,11 @@
115
116
  required: true,
116
117
  },
117
118
  },
119
+ data() {
120
+ return {
121
+ theme,
122
+ }
123
+ },
118
124
  computed: {
119
125
  currentStepIndex() {
120
126
  return this.progressionSteps.findIndex(