bfg-common 1.4.800 → 1.4.801

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.
@@ -1,15 +1,6 @@
1
1
  <template>
2
- <div class="graph-content">
3
- <template v-if="chartOptions">
4
- <client-only>
5
- <highchart
6
- :options="chartOptions"
7
- :modules="['exporting', 'export-data']"
8
- class="graph-block"
9
- />
10
- </client-only>
11
- </template>
12
- </div>
2
+ <common-graph-new v-if="isNewView" :chart-options="chartOptions" />
3
+ <common-graph-old v-else :chart-options="chartOptions" />
13
4
  </template>
14
5
 
15
6
  <script setup lang="ts">
@@ -26,6 +17,9 @@ const props = defineProps<{
26
17
  selectedRow?: number[]
27
18
  }>()
28
19
 
20
+ const { $store }: any = useNuxtApp()
21
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
22
+
29
23
  let localChart: any = null
30
24
  const exportChart = (type: string): void => {
31
25
  if (type === 'png') {
@@ -0,0 +1,71 @@
1
+ <template>
2
+ <div class="graph-content">
3
+ <template v-if="props.chartOptions">
4
+ <client-only>
5
+ <highchart
6
+ :options="props.chartOptions"
7
+ :modules="['exporting', 'export-data']"
8
+ class="graph-block"
9
+ />
10
+ </client-only>
11
+ </template>
12
+ </div>
13
+ </template>
14
+
15
+ <script setup lang="ts">
16
+ const props = defineProps<{
17
+ chartOptions: any
18
+ }>()
19
+ </script>
20
+
21
+ <style scoped lang="scss">
22
+ .graph-content {
23
+ width: 100%;
24
+ //height: inherit;
25
+ height: 100%;
26
+
27
+ .graph-block {
28
+ height: 100%;
29
+ border-radius: 8px;
30
+ box-shadow: 0px 1px 4px 0px #00000014;
31
+ }
32
+ }
33
+
34
+ :deep(.highcharts-menu) {
35
+ display: flex;
36
+ flex-direction: column;
37
+ gap: 8px;
38
+ background-color: #ffffff !important;
39
+ box-shadow: 0px 4px 20px 0px #0000001f !important;
40
+ padding: 8px !important;
41
+ border-radius: 8px !important;
42
+
43
+ .highcharts-menu-item {
44
+ display: flex;
45
+ align-items: center;
46
+ gap: 8px;
47
+ font-size: 13px !important;
48
+ font-weight: 500 !important;
49
+ color: #4d5d69 !important;
50
+ padding: 8px !important;
51
+
52
+ &::before {
53
+ content: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14 10V12.6667C14 13.0203 13.8595 13.3594 13.6095 13.6095C13.3594 13.8595 13.0203 14 12.6667 14H3.33333C2.97971 14 2.64057 13.8595 2.39052 13.6095C2.14048 13.3594 2 13.0203 2 12.6667V10' stroke='%234D5D69' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M4.66602 6.66675L7.99935 10.0001L11.3327 6.66675' stroke='%234D5D69' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M8 9.33333V2' stroke='%234D5D69' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A");
54
+ display: inline-block;
55
+ width: 16px;
56
+ height: 16px;
57
+ }
58
+ &:first-child::before {
59
+ content: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_8044_4891)'%3E%3Cpath d='M5.03769 1.33325H2.81547C2.42255 1.33325 2.04573 1.48934 1.7679 1.76717C1.49007 2.045 1.33398 2.42182 1.33398 2.81473V5.03696M14.6673 5.03696V2.81473C14.6673 2.42182 14.5112 2.045 14.2334 1.76717C13.9556 1.48934 13.5788 1.33325 13.1858 1.33325H10.9636M10.9636 14.6666H13.1858C13.5788 14.6666 13.9556 14.5105 14.2334 14.2327C14.5112 13.9548 14.6673 13.578 14.6673 13.1851V10.9629M1.33398 10.9629V13.1851C1.33398 13.578 1.49007 13.9548 1.7679 14.2327C2.04573 14.5105 2.42255 14.6666 2.81547 14.6666H5.03769' stroke='%234D5D69' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_8044_4891'%3E%3Crect width='16' height='16' fill='red'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E");
60
+ }
61
+ &:nth-child(2)::before {
62
+ content: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_8044_4828)'%3E%3Cpath d='M4 5.33342V2.33341C4 1.96522 4.29848 1.66675 4.66667 1.66675H11.3333C11.7015 1.66675 12 1.96522 12 2.33341V5.33342' stroke='%234D5D69' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M4.00065 11.6668H2.66732C1.93094 11.6668 1.33398 11.0699 1.33398 10.3335V6.66683C1.33398 5.93045 1.93094 5.3335 2.66732 5.3335H13.334C14.0704 5.3335 14.6673 5.93045 14.6673 6.66683V10.3335C14.6673 11.0699 14.0704 11.6668 13.334 11.6668H12.0007' stroke='%234D5D69' stroke-width='1.4'/%3E%3Cpath d='M11.3333 9H4.66667C4.29848 9 4 9.29848 4 9.66667V13.6667C4 14.0349 4.29848 14.3333 4.66667 14.3333H11.3333C11.7015 14.3333 12 14.0349 12 13.6667V9.66667C12 9.29848 11.7015 9 11.3333 9Z' stroke='%234D5D69' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_8044_4828'%3E%3Crect width='16' height='16' fill='white'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A");
63
+ }
64
+ }
65
+ hr {
66
+ border-color: #e9ebed;
67
+ border-style: solid;
68
+ margin: 0 8px;
69
+ }
70
+ }
71
+ </style>
@@ -0,0 +1,31 @@
1
+ <template>
2
+ <div class="graph-content">
3
+ <template v-if="props.chartOptions">
4
+ <client-only>
5
+ <highchart
6
+ :options="props.chartOptions"
7
+ :modules="['exporting', 'export-data']"
8
+ class="graph-block"
9
+ />
10
+ </client-only>
11
+ </template>
12
+ </div>
13
+ </template>
14
+
15
+ <script setup lang="ts">
16
+ const props = defineProps<{
17
+ chartOptions: any
18
+ }>()
19
+ </script>
20
+
21
+ <style scoped lang="scss">
22
+ .graph-content {
23
+ width: 100%;
24
+ //height: inherit;
25
+ height: 100%;
26
+
27
+ .graph-block {
28
+ height: 100%;
29
+ }
30
+ }
31
+ </style>
@@ -1,31 +1,16 @@
1
1
  <template>
2
- <div class="charts-view">
3
- <div v-if="!allData.length" class="content-global-loading">
4
- {{ localization.common.loading }}...
5
- </div>
6
- <template v-else>
7
- <template v-for="(chartData, key) in allData" :key="chartData.title">
8
- <div :class="['chart-container', `graph-${chartData.title}`]">
9
- <div v-if="chartData.loader" class="graphic-loader-block">
10
- <div class="spinner"></div>
11
- <p>{{ localization.inventoryMonitor.retrievingData }}...</p>
12
- </div>
13
- <common-graph
14
- v-else-if="chartData.data"
15
- :data="chartData.data"
16
- :chart="charts[key]"
17
- :update="updateHelper"
18
- />
19
- <div v-else class="graph-empty-block">
20
- <div class="title">{{ chartData.title }}</div>
21
- <div class="body-block">
22
- {{ localization.common.emptyGraphText }}
23
- </div>
24
- </div>
25
- </div>
26
- </template>
27
- </template>
28
- </div>
2
+ <common-monitor-overview-new
3
+ v-if="isNewView"
4
+ :charts="props.charts"
5
+ :all-data="allData"
6
+ :update-helper="updateHelper"
7
+ />
8
+ <common-monitor-overview-old
9
+ v-else
10
+ :charts="props.charts"
11
+ :all-data="allData"
12
+ :update-helper="updateHelper"
13
+ />
29
14
  </template>
30
15
 
31
16
  <script setup lang="ts">
@@ -51,7 +36,8 @@ const props = defineProps<{
51
36
  graphType: string
52
37
  }>()
53
38
 
54
- const { $formattedDatetime } = useNuxtApp()
39
+ const { $formattedDatetime, $store }: any = useNuxtApp()
40
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
55
41
 
56
42
  const localization = computed<UI_I_Localization>(() => useLocal())
57
43
 
@@ -0,0 +1,138 @@
1
+ <template>
2
+ <div class="charts-view">
3
+ <div v-if="!props.allData.length" class="content-global-loading">
4
+ {{ localization.common.loading }}...
5
+ </div>
6
+ <template v-else>
7
+ <template v-for="(chartData, key) in props.allData" :key="chartData.title">
8
+ <div :class="['chart-container', `graph-${chartData.title}`]">
9
+ <div v-if="chartData.loader" class="graphic-loader-block">
10
+ <div class="spinner"></div>
11
+ <p>{{ localization.inventoryMonitor.retrievingData }}...</p>
12
+ </div>
13
+ <common-graph
14
+ v-else-if="chartData.data"
15
+ :data="chartData.data"
16
+ :chart="props.charts[key]"
17
+ :update="props.updateHelper"
18
+ />
19
+ <div v-else class="graph-empty-block">
20
+ <div class="title">{{ chartData.title }}</div>
21
+ <div class="body-block">
22
+ {{ localization.common.emptyGraphText }}
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </template>
27
+ </template>
28
+ </div>
29
+ </template>
30
+
31
+ <script setup lang="ts">
32
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
33
+ import type { UI_I_GraphDataSettingItem } from '~/components/common/monitor/lib/models/interfaces'
34
+
35
+ const props = defineProps<{
36
+ charts: (UI_I_GraphDataSettingItem | null)[]
37
+ allData: UI_I_GraphDataSettingItem[]
38
+ updateHelper: number
39
+ }>()
40
+
41
+ const localization = computed<UI_I_Localization>(() => useLocal())
42
+
43
+ </script>
44
+
45
+ <style>
46
+ :root {
47
+ --loader-bg-color: #ffffff;
48
+ }
49
+ :root.dark-theme {
50
+ --loader-bg-color: #22343c;
51
+ }
52
+ </style>
53
+
54
+ <style scoped lang="scss">
55
+ .charts-view {
56
+ position: relative;
57
+ display: flex;
58
+ flex-direction: row;
59
+ flex-wrap: wrap;
60
+ justify-content: space-between;
61
+ overflow: auto;
62
+ height: 100%;
63
+ gap: 16px;
64
+
65
+ .graphic-loader-block {
66
+ background-color: var(--loader-bg-color);
67
+ height: 100%;
68
+ display: flex;
69
+ flex-direction: column;
70
+ align-items: center;
71
+ justify-content: center;
72
+ }
73
+
74
+ .graph-empty-block {
75
+ display: flex;
76
+ flex-direction: column;
77
+ height: 100%;
78
+ background-color: var(--loader-bg-color);
79
+
80
+ .title {
81
+ text-align: center;
82
+ font-size: 18px;
83
+ margin-top: 10px;
84
+ color: var(--global-font-color);
85
+ }
86
+
87
+ .body-block {
88
+ height: 100%;
89
+ display: flex;
90
+ justify-content: center;
91
+ text-align: center;
92
+ align-items: center;
93
+ color: var(--global-font-color);
94
+ }
95
+ }
96
+
97
+ .chart-container {
98
+ box-sizing: border-box;
99
+ flex-grow: 1;
100
+ padding: 5px;
101
+ min-height: 300px;
102
+ height: 100%;
103
+ min-width: 300px;
104
+ width: 100%;
105
+ position: relative;
106
+
107
+ &:first-child:last-child {
108
+ height: 100%;
109
+ width: 100%;
110
+ }
111
+
112
+ &:first-child:nth-last-child(2),
113
+ &:nth-child(2):last-child {
114
+ width: 50%;
115
+ height: 100%;
116
+ }
117
+ }
118
+
119
+ .content-global-loading {
120
+ width: 100%;
121
+ height: 100%;
122
+ display: flex;
123
+ align-items: center;
124
+ justify-content: center;
125
+ color: var(--global-font-color);
126
+ }
127
+ }
128
+ @media (min-width: 1280px) {
129
+ .charts-view .chart-container {
130
+ width: 50%;
131
+ }
132
+ }
133
+ @media (min-height: 800px) {
134
+ .charts-view .chart-container {
135
+ height: 50%;
136
+ }
137
+ }
138
+ </style>
@@ -0,0 +1,137 @@
1
+ <template>
2
+ <div class="charts-view">
3
+ <div v-if="!props.allData.length" class="content-global-loading">
4
+ {{ localization.common.loading }}...
5
+ </div>
6
+ <template v-else>
7
+ <template v-for="(chartData, key) in props.allData" :key="chartData.title">
8
+ <div :class="['chart-container', `graph-${chartData.title}`]">
9
+ <div v-if="chartData.loader" class="graphic-loader-block">
10
+ <div class="spinner"></div>
11
+ <p>{{ localization.inventoryMonitor.retrievingData }}...</p>
12
+ </div>
13
+ <common-graph
14
+ v-else-if="chartData.data"
15
+ :data="chartData.data"
16
+ :chart="props.charts[key]"
17
+ :update="props.updateHelper"
18
+ />
19
+ <div v-else class="graph-empty-block">
20
+ <div class="title">{{ chartData.title }}</div>
21
+ <div class="body-block">
22
+ {{ localization.common.emptyGraphText }}
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </template>
27
+ </template>
28
+ </div>
29
+ </template>
30
+
31
+ <script setup lang="ts">
32
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
33
+ import type { UI_I_GraphDataSettingItem } from '~/components/common/monitor/lib/models/interfaces'
34
+
35
+ const props = defineProps<{
36
+ charts: (UI_I_GraphDataSettingItem | null)[]
37
+ allData: UI_I_GraphDataSettingItem[]
38
+ updateHelper: number
39
+ }>()
40
+
41
+ const localization = computed<UI_I_Localization>(() => useLocal())
42
+
43
+ </script>
44
+
45
+ <style>
46
+ :root {
47
+ --loader-bg-color: #ffffff;
48
+ }
49
+ :root.dark-theme {
50
+ --loader-bg-color: #22343c;
51
+ }
52
+ </style>
53
+
54
+ <style scoped lang="scss">
55
+ .charts-view {
56
+ position: relative;
57
+ display: flex;
58
+ flex-direction: row;
59
+ flex-wrap: wrap;
60
+ justify-content: space-between;
61
+ overflow: auto;
62
+ height: 100%;
63
+
64
+ .graphic-loader-block {
65
+ background-color: var(--loader-bg-color);
66
+ height: 100%;
67
+ display: flex;
68
+ flex-direction: column;
69
+ align-items: center;
70
+ justify-content: center;
71
+ }
72
+
73
+ .graph-empty-block {
74
+ display: flex;
75
+ flex-direction: column;
76
+ height: 100%;
77
+ background-color: var(--loader-bg-color);
78
+
79
+ .title {
80
+ text-align: center;
81
+ font-size: 18px;
82
+ margin-top: 10px;
83
+ color: var(--global-font-color);
84
+ }
85
+
86
+ .body-block {
87
+ height: 100%;
88
+ display: flex;
89
+ justify-content: center;
90
+ text-align: center;
91
+ align-items: center;
92
+ color: var(--global-font-color);
93
+ }
94
+ }
95
+
96
+ .chart-container {
97
+ box-sizing: border-box;
98
+ flex-grow: 1;
99
+ padding: 5px;
100
+ min-height: 300px;
101
+ height: 100%;
102
+ min-width: 300px;
103
+ width: 100%;
104
+ position: relative;
105
+
106
+ &:first-child:last-child {
107
+ height: 100%;
108
+ width: 100%;
109
+ }
110
+
111
+ &:first-child:nth-last-child(2),
112
+ &:nth-child(2):last-child {
113
+ width: 50%;
114
+ height: 100%;
115
+ }
116
+ }
117
+
118
+ .content-global-loading {
119
+ width: 100%;
120
+ height: 100%;
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: center;
124
+ color: var(--global-font-color);
125
+ }
126
+ }
127
+ @media (min-width: 1280px) {
128
+ .charts-view .chart-container {
129
+ width: 50%;
130
+ }
131
+ }
132
+ @media (min-height: 800px) {
133
+ .charts-view .chart-container {
134
+ height: 50%;
135
+ }
136
+ }
137
+ </style>
@@ -1,64 +1,39 @@
1
1
  <template>
2
- <div class="horizontal-flex-container overview-chart-title-bar">
3
- <div class="horizontal-flex-container">
4
- <label for="periodSelect" class="label-select"
5
- >{{ localization.inventoryMonitor.period }}:</label
6
- >
7
- <div v-if="!disabledPeriodOptions" class="select">
8
- <select
9
- id="periodSelect"
10
- v-model="selectedPeriod"
11
- data-id="period-select"
12
- >
13
- <option
14
- v-for="(item, index) in periodOptions"
15
- :key="index"
16
- :value="item.value"
17
- >
18
- {{ item.text }}
19
- </option>
20
- </select>
21
- </div>
22
- <span v-else class="single-option">{{ periodOptions[0].text }}</span>
23
- </div>
24
- <div v-show="isShowCustomIntervalButton">
25
- <a
26
- id="show-interval-modal-button"
27
- data-id="show-interval-modal-button"
28
- @click="onShowIntervalModal"
29
- >{{ localization.inventoryMonitor.changeCustomInterval }}</a
30
- >
31
- </div>
32
- <div v-if="!disabledPeriodOptions" class="chart-title">
33
- {{ chartTitleDate }}
34
- </div>
35
- <div class="view-select-label horizontal-flex-container">
36
- <label for="viewSelect" class="label-select"
37
- >{{ localization.common.view }}:</label
38
- >
39
- <div class="select">
40
- <select id="viewSelect" v-model="selectedView" data-id="view-select">
41
- <option
42
- v-for="(item, index) in viewOptions"
43
- :key="index"
44
- :value="item.value"
45
- >
46
- {{ item.text }}
47
- </option>
48
- </select>
49
- </div>
50
- </div>
51
- </div>
52
-
53
- <common-monitor-overview-filters-custom-interval-modal
54
- v-if="props.validDateEnd"
55
- v-show="isShowIntervalModal"
2
+ <common-monitor-overview-filters-new
3
+ v-if="isNewView"
4
+ v-model:selected-period="selectedPeriod"
5
+ v-model:selected-view="selectedView"
6
+ :disabled-period-options="disabledPeriodOptions"
7
+ :period-options="periodOptions"
8
+ :is-show-custom-interval-button="isShowCustomIntervalButton"
9
+ :chart-title-date="chartTitleDate"
10
+ :view-options="viewOptions"
11
+ :valid-date-end="props.validDateEnd"
12
+ :is-show-interval-modal="isShowIntervalModal"
56
13
  :selected-periods="props.selectedPeriods"
57
14
  :format-date="props.formatDate"
58
15
  :current-lang="props.currentLang"
16
+ @submit-interval-modal="onSubmitIntervalModal"
17
+ @show-interval-modal="onShowIntervalModal"
18
+ @hide-interval-modal="onHideIntervalModal"
19
+ />
20
+ <common-monitor-overview-filters-old
21
+ v-else
22
+ v-model:selected-period="selectedPeriod"
23
+ v-model:selected-view="selectedView"
24
+ :disabled-period-options="disabledPeriodOptions"
25
+ :period-options="periodOptions"
26
+ :is-show-custom-interval-button="isShowCustomIntervalButton"
27
+ :chart-title-date="chartTitleDate"
28
+ :view-options="viewOptions"
59
29
  :valid-date-end="props.validDateEnd"
60
- @hide="onHideIntervalModal"
61
- @submit="onSubmitIntervalModal"
30
+ :is-show-interval-modal="isShowIntervalModal"
31
+ :selected-periods="props.selectedPeriods"
32
+ :format-date="props.formatDate"
33
+ :current-lang="props.currentLang"
34
+ @submit-interval-modal="onSubmitIntervalModal"
35
+ @show-interval-modal="onShowIntervalModal"
36
+ @hide-interval-modal="onHideIntervalModal"
62
37
  />
63
38
  </template>
64
39
 
@@ -73,8 +48,8 @@ import {
73
48
  } from '~/components/common/monitor/overview/filters/lib/config/filterOptions'
74
49
  import { getValidDateByOptionFunc } from '~/components/common/monitor/lib/config/getValidDateByOption'
75
50
 
76
- const localization = computed<UI_I_Localization>(() => useLocal())
77
- const { $formattedDatetime } = useNuxtApp()
51
+ const { $formattedDatetime, $store }: any = useNuxtApp()
52
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
78
53
 
79
54
  const props = defineProps<{
80
55
  startDate: number
@@ -93,6 +68,8 @@ const emits = defineEmits<{
93
68
  (event: 'update-custom-date', value: number[]): void
94
69
  }>()
95
70
 
71
+ const localization = computed<UI_I_Localization>(() => useLocal())
72
+
96
73
  const selectedPeriod = ref<string>('')
97
74
  const periodOptions = computed<UI_I_OptionItem[]>(() =>
98
75
  periodFunc(localization.value)
@@ -187,49 +164,4 @@ watch(
187
164
  </script>
188
165
 
189
166
  <style scoped lang="scss">
190
- .horizontal-flex-container {
191
- display: flex;
192
- flex-direction: row;
193
- align-items: center;
194
- line-height: 20px;
195
- flex-shrink: 0;
196
- padding-top: 5px;
197
-
198
- .select {
199
- position: relative;
200
-
201
- select {
202
- height: 20px;
203
- margin: 5px;
204
- color: var(--global-font-color);
205
- }
206
- }
207
- .single-option {
208
- margin-left: 5px;
209
- }
210
-
211
- .chart-title {
212
- color: var(--global-font-color);
213
- text-overflow: ellipsis;
214
- white-space: nowrap;
215
- overflow: hidden;
216
- margin: 6px;
217
- font-weight: 700;
218
- text-transform: uppercase;
219
- }
220
-
221
- #show-interval-modal-button {
222
- cursor: pointer;
223
- color: var(--dropdown-item-color);
224
- }
225
-
226
- .view-select-label {
227
- margin-left: auto;
228
- padding-right: 7px;
229
- padding-left: 7px;
230
- text-overflow: ellipsis;
231
- white-space: nowrap;
232
- align-items: center;
233
- }
234
- }
235
167
  </style>
@@ -0,0 +1,122 @@
1
+ <template>
2
+ <div class="overview-filters">
3
+ <div class="period-select-wrap">
4
+ <label for="period-select" class="label-select"
5
+ >{{ localization.inventoryMonitor.period }}:</label
6
+ >
7
+
8
+ <ui-select
9
+ v-if="!props.disabledPeriodOptions"
10
+ v-model="selectedPeriod"
11
+ :items="props.periodOptions"
12
+ test-id="period-select"
13
+ />
14
+ <span v-else class="single-option">{{
15
+ props.periodOptions[0].text
16
+ }}</span>
17
+ <a
18
+ v-show="props.isShowCustomIntervalButton"
19
+ id="show-interval-modal-button"
20
+ class="chart-text"
21
+ data-id="show-interval-modal-button"
22
+ @click="onShowIntervalModal"
23
+ >{{ localization.inventoryMonitor.changeCustomInterval }}</a
24
+ >
25
+ <div v-if="!props.disabledPeriodOptions" class="chart-text">
26
+ {{ props.chartTitleDate }}
27
+ </div>
28
+ </div>
29
+
30
+ <div class="view-select-wrap">
31
+ <label for="view-select" class="label-select"
32
+ >{{ localization.common.view }}:</label
33
+ >
34
+ <ui-select
35
+ v-model="selectedView"
36
+ :items="props.viewOptions"
37
+ test-id="view-select"
38
+ />
39
+ </div>
40
+ </div>
41
+
42
+ <common-monitor-overview-filters-custom-interval-modal
43
+ v-if="props.validDateEnd"
44
+ v-show="props.isShowIntervalModal"
45
+ :selected-periods="props.selectedPeriods"
46
+ :format-date="props.formatDate"
47
+ :current-lang="props.currentLang"
48
+ :valid-date-end="props.validDateEnd"
49
+ @hide="onHideIntervalModal"
50
+ @submit="onSubmitIntervalModal"
51
+ />
52
+ </template>
53
+
54
+ <script setup lang="ts">
55
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
56
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
57
+
58
+ const selectedPeriod = defineModel<string>('selected-period')
59
+ const selectedView = defineModel<string>('selected-view')
60
+
61
+ const props = defineProps<{
62
+ disabledPeriodOptions: boolean
63
+ periodOptions: UI_I_OptionItem[]
64
+ isShowCustomIntervalButton: boolean
65
+ chartTitleDate: string
66
+ viewOptions: UI_I_OptionItem[]
67
+ validDateEnd: number
68
+ isShowIntervalModal: boolean
69
+ selectedPeriods: number[]
70
+ formatDate: string
71
+ currentLang: string
72
+ }>()
73
+ const emits = defineEmits<{
74
+ (event: 'submit-interval-modal', value: number[]): void
75
+ (event: 'show-interval-modal'): void
76
+ (event: 'hide-interval-modal'): void
77
+ }>()
78
+
79
+ const localization = computed<UI_I_Localization>(() => useLocal())
80
+
81
+ const onShowIntervalModal = (): void => {
82
+ emits('show-interval-modal')
83
+ }
84
+ const onHideIntervalModal = (): void => {
85
+ emits('hide-interval-modal')
86
+ }
87
+ const onSubmitIntervalModal = (data: number[]): void => {
88
+ emits('submit-interval-modal', data)
89
+ }
90
+ </script>
91
+
92
+ <style scoped lang="scss">
93
+ .overview-filters {
94
+ display: flex;
95
+ justify-content: space-between;
96
+ align-items: center;
97
+ padding: 12px 16px 16px 16px;
98
+
99
+ .period-select-wrap {
100
+ display: flex;
101
+ align-items: center;
102
+
103
+ .chart-text {
104
+ font-size: 13px;
105
+ color: #4d5d69;
106
+ margin-left: 12px;
107
+ }
108
+ }
109
+
110
+ .view-select-wrap {
111
+ display: flex;
112
+ align-items: center;
113
+ }
114
+
115
+ .label-select {
116
+ font-size: 13px;
117
+ font-weight: 500;
118
+ color: #4d5d69;
119
+ margin-right: 12px;
120
+ }
121
+ }
122
+ </style>
@@ -0,0 +1,151 @@
1
+ <template>
2
+ <div class="horizontal-flex-container overview-chart-title-bar">
3
+ <div class="horizontal-flex-container">
4
+ <label for="periodSelect" class="label-select"
5
+ >{{ localization.inventoryMonitor.period }}:</label
6
+ >
7
+ <div v-if="!props.disabledPeriodOptions" class="select">
8
+ <select
9
+ id="periodSelect"
10
+ v-model="selectedPeriod"
11
+ data-id="period-select"
12
+ >
13
+ <option
14
+ v-for="(item, index) in props.periodOptions"
15
+ :key="index"
16
+ :value="item.value"
17
+ >
18
+ {{ item.text }}
19
+ </option>
20
+ </select>
21
+ </div>
22
+ <span v-else class="single-option">{{
23
+ props.periodOptions[0].text
24
+ }}</span>
25
+ </div>
26
+ <div v-show="props.isShowCustomIntervalButton">
27
+ <a
28
+ id="show-interval-modal-button"
29
+ data-id="show-interval-modal-button"
30
+ @click="onShowIntervalModal"
31
+ >{{ localization.inventoryMonitor.changeCustomInterval }}</a
32
+ >
33
+ </div>
34
+ <div v-if="!props.disabledPeriodOptions" class="chart-title">
35
+ {{ props.chartTitleDate }}
36
+ </div>
37
+ <div class="view-select-label horizontal-flex-container">
38
+ <label for="viewSelect" class="label-select"
39
+ >{{ localization.common.view }}:</label
40
+ >
41
+ <div class="select">
42
+ <select id="viewSelect" v-model="selectedView" data-id="view-select">
43
+ <option
44
+ v-for="(item, index) in props.viewOptions"
45
+ :key="index"
46
+ :value="item.value"
47
+ >
48
+ {{ item.text }}
49
+ </option>
50
+ </select>
51
+ </div>
52
+ </div>
53
+ </div>
54
+
55
+ <common-monitor-overview-filters-custom-interval-modal
56
+ v-if="props.validDateEnd"
57
+ v-show="props.isShowIntervalModal"
58
+ :selected-periods="props.selectedPeriods"
59
+ :format-date="props.formatDate"
60
+ :current-lang="props.currentLang"
61
+ :valid-date-end="props.validDateEnd"
62
+ @hide="onHideIntervalModal"
63
+ @submit="onSubmitIntervalModal"
64
+ />
65
+ </template>
66
+
67
+ <script setup lang="ts">
68
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
69
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
70
+
71
+ const selectedPeriod = defineModel<string>('selected-period')
72
+ const selectedView = defineModel<string>('selected-view')
73
+
74
+ const props = defineProps<{
75
+ disabledPeriodOptions: boolean
76
+ periodOptions: UI_I_OptionItem[]
77
+ isShowCustomIntervalButton: boolean
78
+ chartTitleDate: string
79
+ viewOptions: UI_I_OptionItem[]
80
+ validDateEnd: number
81
+ isShowIntervalModal: boolean
82
+ selectedPeriods: number[]
83
+ formatDate: string
84
+ currentLang: string
85
+ }>()
86
+ const emits = defineEmits<{
87
+ (event: 'submit-interval-modal', value: number[]): void
88
+ (event: 'show-interval-modal'): void
89
+ (event: 'hide-interval-modal'): void
90
+ }>()
91
+
92
+ const localization = computed<UI_I_Localization>(() => useLocal())
93
+
94
+ const onShowIntervalModal = (): void => {
95
+ emits('show-interval-modal')
96
+ }
97
+ const onHideIntervalModal = (): void => {
98
+ emits('hide-interval-modal')
99
+ }
100
+ const onSubmitIntervalModal = (data: number[]): void => {
101
+ emits('submit-interval-modal', data)
102
+ }
103
+ </script>
104
+
105
+ <style scoped lang="scss">
106
+ .horizontal-flex-container {
107
+ display: flex;
108
+ flex-direction: row;
109
+ align-items: center;
110
+ line-height: 20px;
111
+ flex-shrink: 0;
112
+ padding-top: 5px;
113
+
114
+ .select {
115
+ position: relative;
116
+
117
+ select {
118
+ height: 20px;
119
+ margin: 5px;
120
+ color: var(--global-font-color);
121
+ }
122
+ }
123
+ .single-option {
124
+ margin-left: 5px;
125
+ }
126
+
127
+ .chart-title {
128
+ color: var(--global-font-color);
129
+ text-overflow: ellipsis;
130
+ white-space: nowrap;
131
+ overflow: hidden;
132
+ margin: 6px;
133
+ font-weight: 700;
134
+ text-transform: uppercase;
135
+ }
136
+
137
+ #show-interval-modal-button {
138
+ cursor: pointer;
139
+ color: var(--dropdown-item-color);
140
+ }
141
+
142
+ .view-select-label {
143
+ margin-left: auto;
144
+ padding-right: 7px;
145
+ padding-left: 7px;
146
+ text-overflow: ellipsis;
147
+ white-space: nowrap;
148
+ align-items: center;
149
+ }
150
+ }
151
+ </style>
@@ -455,7 +455,7 @@ const onTogglePortlet = (id: string): void => {
455
455
  --input-border: #d3d6da;
456
456
  --input-color: #4d5d69;
457
457
  --input-caret-color: #000000;
458
- --input-bg: #ffffff;
458
+ --input-bg-common: #ffffff;
459
459
  --hide-row-icon: #4d5d69;
460
460
  --hide-row-icon-hover: #213444;
461
461
  --create-row-icon: #008fd6;
@@ -466,7 +466,7 @@ const onTogglePortlet = (id: string): void => {
466
466
  --input-border: #e9ebed3d;
467
467
  --input-color: #d3d6da;
468
468
  --input-caret-color: #ffffff;
469
- --input-bg: transparent;
469
+ --input-bg-common: transparent;
470
470
  --hide-row-icon: #e9eaec;
471
471
  --hide-row-icon-hover: #ffffff;
472
472
  --create-row-icon: #2ba2de;
@@ -549,7 +549,7 @@ const onTogglePortlet = (id: string): void => {
549
549
 
550
550
  .table-input {
551
551
  height: 28px;
552
- background-color: var(--input-bg);
552
+ background-color: var(--input-bg-common);
553
553
  border: 1px solid var(--input-border);
554
554
  font-size: 12px;
555
555
  font-weight: 500;
@@ -580,7 +580,7 @@ const onTogglePortlet = (id: string): void => {
580
580
 
581
581
  :deep(.ui-select-toggle-button) {
582
582
  height: 28px;
583
- background-color: var(--input-bg);
583
+ background-color: var(--input-bg-common);
584
584
 
585
585
  &:disabled {
586
586
  background: var(--select-bg-disabled);
@@ -412,7 +412,7 @@ const onCreateCategory = (data: UI_I_CreateCategoryData): void => {
412
412
  --input-border: #d3d6da;
413
413
  --input-color: #4d5d69;
414
414
  --input-caret-color: #000000;
415
- --input-bg: #ffffff;
415
+ --input-bg-common: #ffffff;
416
416
  --hide-row-icon: #4d5d69;
417
417
  --hide-row-icon-hover: #213444;
418
418
  --create-row-icon: #008fd6;
@@ -423,7 +423,7 @@ const onCreateCategory = (data: UI_I_CreateCategoryData): void => {
423
423
  --input-border: #e9ebed3d;
424
424
  --input-color: #d3d6da;
425
425
  --input-caret-color: #ffffff;
426
- --input-bg: transparent;
426
+ --input-bg-common: transparent;
427
427
  --hide-row-icon: #e9eaec;
428
428
  --hide-row-icon-hover: #ffffff;
429
429
  --create-row-icon: #2ba2de;
@@ -512,7 +512,7 @@ const onCreateCategory = (data: UI_I_CreateCategoryData): void => {
512
512
 
513
513
  .table-input {
514
514
  height: 28px;
515
- background-color: var(--input-bg);
515
+ background-color: var(--input-bg-common);
516
516
  border: 1px solid var(--input-border);
517
517
  font-size: 12px;
518
518
  font-weight: 500;
@@ -543,7 +543,7 @@ const onCreateCategory = (data: UI_I_CreateCategoryData): void => {
543
543
 
544
544
  :deep(.ui-select-toggle-button) {
545
545
  height: 28px;
546
- background-color: var(--input-bg);
546
+ background-color: var(--input-bg-common);
547
547
  }
548
548
 
549
549
  :deep(.ui-placeholder) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.4.800",
4
+ "version": "1.4.801",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",
@@ -35,7 +35,7 @@
35
35
  "@vueuse/components": "^10.1.2",
36
36
  "date-fns": "^2.29.3",
37
37
  "bfg-nuxt-3-graph": "1.0.17",
38
- "bfg-uikit": "1.0.333",
38
+ "bfg-uikit": "1.0.334",
39
39
  "html2canvas": "^1.4.1",
40
40
  "prettier-eslint": "^15.0.1"
41
41
  }