bfg-common 1.5.682 → 1.5.684

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,227 +1,232 @@
1
- <template>
2
- <div class="name-and-device">
3
- <div class="name-and-device__row row">
4
- <div class="row__title">
5
- <span class="row__title-text">
6
- {{ localization.common.name }}
7
- </span>
8
- </div>
9
- <div class="row__content">
10
- <ui-input
11
- id="device-selection-input"
12
- v-model="formModelLocal.name"
13
- :placeholder="localization.common.name"
14
- :error="nameErrorText"
15
- test-id="device-selection-input"
16
- @blur="initValidation(true)"
17
- @input="initValidation(false)"
18
- />
19
- </div>
20
- </div>
21
-
22
- <ui-alert
23
- v-if="isShowInfoAlert"
24
- :messages="[alertInfoDescription]"
25
- test-id="device-selection-information-alert"
26
- type="info"
27
- size="md"
28
- class="name-and-device__alert"
29
- />
30
-
31
- <div class="name-and-device__row row">
32
- <div class="row__title">
33
- <span class="row__title-text">
34
- {{ selectedHostLabel }}
35
- </span>
36
-
37
- <common-tooltip-help
38
- v-if="props.isShowSelectHost"
39
- :title="localization.common.information"
40
- :help-text="localization.common.selectHostToViewAccessible"
41
- test-id="device-select-host-tooltip"
42
- help-id="device-select-host-tooltip"
43
- dropdown-width="272px"
44
- dropdown-left
45
- dropdown-top
46
- />
47
- </div>
48
- <div v-if="props.isShowSelectHost" class="row__content">
49
- <ui-select
50
- v-model="selectedHostLocal"
51
- :items="props.hostOptions"
52
- :placeholder="localization.common.selectHost"
53
- select-width="100%"
54
- show-text
55
- test-id="device-host-select"
56
- size="md"
57
- theme="light"
58
- @change="onSelectHost"
59
- />
60
- </div>
61
-
62
- <div v-else class="row__host-name">
63
- <span class="icon vsphere-icon-host" />
64
- {{ props.selectedHostName }}
65
- </div>
66
- </div>
67
-
68
- <div class="name-and-device__disk-list">
69
- <common-wizards-datastore-add-steps-name-and-device-table
70
- v-model="formModelLocal.dev_names"
71
- :lun-disks-data="props.lunDisksData"
72
- :pagination="props.pagination"
73
- :loading="props.loading"
74
- :is-main-filter="props.isMainFilter"
75
- @sort="emits('sort', $event)"
76
- @main-filter="emits('main-filter', $event)"
77
- />
78
- </div>
79
- </div>
80
- </template>
81
-
82
- <script lang="ts" setup>
83
- import type { UI_I_ErrorFields } from '~/node_modules/bfg-uikit/components/ui/wizard/lib/models/interfaces'
84
- import type {
85
- UI_I_Localization,
86
- UI_I_ArbitraryObject,
87
- } from '~/lib/models/interfaces'
88
- import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
89
- import type { UI_I_SelectHostOptions } from '~/components/common/wizards/datastore/add/steps/nameAndDevice/lib/models/interfaces'
90
- import type { UI_I_CreateDatastoreForm } from '~/components/common/wizards/datastore/add/lib/models/interfaces'
91
- import type { UI_I_CreateStorageLunDisks } from '~/components/common/wizards/datastore/add/steps/nameAndDevice/table/lib/models/interfaces'
92
-
93
- const formModelLocal = defineModel<UI_I_CreateDatastoreForm>({ required: true })
94
- const isShowInfoAlert = defineModel<boolean>('isShowInfoAlert', {
95
- required: true,
96
- })
97
- const props = withDefaults(
98
- defineProps<{
99
- selectedHostName: string
100
- lunDisksData: UI_I_CreateStorageLunDisks
101
- hostOptions: UI_I_SelectHostOptions[]
102
- alertMessages: string[]
103
- messagesFields: UI_I_ArbitraryObject<UI_I_ErrorFields>
104
- pagination: UI_I_Pagination
105
- isShowSelectHost: boolean
106
- loading: boolean
107
- isMainFilter?: boolean
108
- }>(),
109
- {
110
- isMainFilter: undefined,
111
- }
112
- )
113
- const emits = defineEmits<{
114
- (event: 'select-host'): void
115
- (event: 'main-filter', value: string): void
116
- (event: 'sort', value: string): void
117
- }>()
118
-
119
- const localization = computed<UI_I_Localization>(() => useLocal())
120
-
121
- const selectedHostLocal = ref<string>(formModelLocal.value.hosts[0] || '')
122
-
123
- const isInitDatastoreNameValidation = ref<boolean>(false)
124
- const initValidation = (onlyBlur: boolean): void => {
125
- onlyBlur && (isInitDatastoreNameValidation.value = true)
126
- }
127
-
128
- const alertInfoDescription = computed<string>(() =>
129
- props.isShowSelectHost
130
- ? localization.value.common.nameAndDeviceSelectionAlertInfo
131
- : localization.value.common.nameAndDeviceSelectionHostAlertInfo
132
- )
133
- const selectedHostLabel = computed<string>(() =>
134
- props.isShowSelectHost
135
- ? localization.value.common.selectHost
136
- : localization.value.common.host
137
- )
138
-
139
- const nameErrorText = computed<string>(() => {
140
- if (
141
- props.messagesFields?.datastoreName?.field &&
142
- !formModelLocal.value.name
143
- ) {
144
- return props.messagesFields.datastoreName.field
145
- }
146
-
147
- if (!isInitDatastoreNameValidation.value) return ''
148
- return !formModelLocal.value.name
149
- ? localization.value.common.fieldRequired
150
- : ''
151
- })
152
-
153
- const onSelectHost = (event: string): void => {
154
- formModelLocal.value.hosts = [event]
155
- emits('select-host')
156
- }
157
- </script>
158
-
159
- <style lang="scss" scoped>
160
- .name-and-device {
161
- display: flex;
162
- flex-direction: column;
163
- row-gap: 16px;
164
- margin: 16px 0 10px 2px;
165
-
166
- &__alert {
167
- align-items: flex-start;
168
- }
169
-
170
- &__row {
171
- width: 100%;
172
- min-height: 36px;
173
- display: flex;
174
- align-items: center;
175
- column-gap: 16px;
176
- border-bottom: 1px solid var(--wizard-content-line);
177
- padding-bottom: 16px;
178
- }
179
- .row {
180
- &__title {
181
- max-width: 240px;
182
- width: 100%;
183
- display: flex;
184
- align-items: center;
185
- column-gap: 8px;
186
- color: var(--wizard-content-title);
187
- font-weight: 400;
188
- font-size: 13px;
189
- line-height: 20px;
190
- white-space: nowrap;
191
- text-overflow: ellipsis;
192
- overflow: hidden;
193
-
194
- &-text {
195
- display: block;
196
- white-space: nowrap;
197
- text-overflow: ellipsis;
198
- overflow: hidden;
199
- }
200
- }
201
- &__content {
202
- max-width: 480px;
203
- width: 100%;
204
- color: var(--wizard-content-value);
205
- font-weight: 400;
206
- font-size: 13px;
207
- line-height: 20px;
208
- letter-spacing: 0;
209
- vertical-align: middle;
210
- }
211
- &__host-name {
212
- font-family: 'Inter', sans-serif;
213
- height: 36px;
214
- display: flex;
215
- align-items: center;
216
- column-gap: 8px;
217
- color: var(--wizard-content-value);
218
- font-size: 13px;
219
- font-weight: 400;
220
- .icon {
221
- width: 20px;
222
- height: 20px;
223
- }
224
- }
225
- }
226
- }
227
- </style>
1
+ <template>
2
+ <div class="name-and-device">
3
+ <div class="name-and-device__row row">
4
+ <div class="row__title">
5
+ <span class="row__title-text">
6
+ {{ localization.common.name }}
7
+ </span>
8
+ </div>
9
+ <div class="row__content">
10
+ <ui-input
11
+ id="device-selection-input"
12
+ v-model="formModelLocal.name"
13
+ :placeholder="localization.common.name"
14
+ :error="nameErrorText"
15
+ test-id="device-selection-input"
16
+ @blur="initValidation(true)"
17
+ @input="initValidation(false)"
18
+ />
19
+ </div>
20
+ </div>
21
+
22
+ <ui-alert
23
+ v-if="isShowInfoAlert"
24
+ :messages="[alertInfoDescription]"
25
+ test-id="device-selection-information-alert"
26
+ type="info"
27
+ size="md"
28
+ class="name-and-device__alert"
29
+ />
30
+
31
+ <div class="name-and-device__row row">
32
+ <div class="row__title">
33
+ <span class="row__title-text">
34
+ {{ selectedHostLabel }}
35
+ </span>
36
+
37
+ <common-tooltip-help
38
+ v-if="props.isShowSelectHost"
39
+ :title="localization.common.information"
40
+ :help-text="localization.common.selectHostToViewAccessible"
41
+ test-id="device-select-host-tooltip"
42
+ help-id="device-select-host-tooltip"
43
+ dropdown-width="272px"
44
+ dropdown-left
45
+ dropdown-top
46
+ />
47
+ </div>
48
+ <div v-if="props.isShowSelectHost" class="row__content">
49
+ <ui-select
50
+ v-model="selectedHostLocal"
51
+ :items="props.hostOptions"
52
+ :placeholder="localization.common.selectHost"
53
+ select-width="100%"
54
+ show-text
55
+ test-id="device-host-select"
56
+ size="md"
57
+ theme="light"
58
+ @change="onSelectHost"
59
+ />
60
+ </div>
61
+
62
+ <div v-else class="row__host-name">
63
+ <span class="icon vsphere-icon-host" />
64
+ {{ props.selectedHostName }}
65
+ </div>
66
+ </div>
67
+
68
+ <div class="name-and-device__disk-list">
69
+ <common-wizards-datastore-add-steps-name-and-device-table
70
+ v-model="formModelLocal.dev_names"
71
+ :lun-disks-data="props.lunDisksData"
72
+ :pagination="props.pagination"
73
+ :loading="props.loading"
74
+ :is-main-filter="props.isMainFilter"
75
+ @sort="emits('sort', $event)"
76
+ @main-filter="emits('main-filter', $event)"
77
+ />
78
+ </div>
79
+
80
+ <common-wizards-datastore-add-steps-name-and-device-advanced-options
81
+ v-model="formModelLocal.level"
82
+ :dev-names-count="formModelLocal.dev_names.length"
83
+ />
84
+ </div>
85
+ </template>
86
+
87
+ <script lang="ts" setup>
88
+ import type { UI_I_ErrorFields } from '~/node_modules/bfg-uikit/components/ui/wizard/lib/models/interfaces'
89
+ import type {
90
+ UI_I_Localization,
91
+ UI_I_ArbitraryObject,
92
+ } from '~/lib/models/interfaces'
93
+ import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
94
+ import type { UI_I_SelectHostOptions } from '~/components/common/wizards/datastore/add/steps/nameAndDevice/lib/models/interfaces'
95
+ import type { UI_I_CreateDatastoreForm } from '~/components/common/wizards/datastore/add/lib/models/interfaces'
96
+ import type { UI_I_CreateStorageLunDisks } from '~/components/common/wizards/datastore/add/steps/nameAndDevice/table/lib/models/interfaces'
97
+
98
+ const formModelLocal = defineModel<UI_I_CreateDatastoreForm>({ required: true })
99
+ const isShowInfoAlert = defineModel<boolean>('isShowInfoAlert', {
100
+ required: true,
101
+ })
102
+ const props = withDefaults(
103
+ defineProps<{
104
+ selectedHostName: string
105
+ lunDisksData: UI_I_CreateStorageLunDisks
106
+ hostOptions: UI_I_SelectHostOptions[]
107
+ alertMessages: string[]
108
+ messagesFields: UI_I_ArbitraryObject<UI_I_ErrorFields>
109
+ pagination: UI_I_Pagination
110
+ isShowSelectHost: boolean
111
+ loading: boolean
112
+ isMainFilter?: boolean
113
+ }>(),
114
+ {
115
+ isMainFilter: undefined,
116
+ }
117
+ )
118
+ const emits = defineEmits<{
119
+ (event: 'select-host'): void
120
+ (event: 'main-filter', value: string): void
121
+ (event: 'sort', value: string): void
122
+ }>()
123
+
124
+ const localization = computed<UI_I_Localization>(() => useLocal())
125
+
126
+ const selectedHostLocal = ref<string>(formModelLocal.value.hosts[0] || '')
127
+
128
+ const isInitDatastoreNameValidation = ref<boolean>(false)
129
+ const initValidation = (onlyBlur: boolean): void => {
130
+ onlyBlur && (isInitDatastoreNameValidation.value = true)
131
+ }
132
+
133
+ const alertInfoDescription = computed<string>(() =>
134
+ props.isShowSelectHost
135
+ ? localization.value.common.nameAndDeviceSelectionAlertInfo
136
+ : localization.value.common.nameAndDeviceSelectionHostAlertInfo
137
+ )
138
+ const selectedHostLabel = computed<string>(() =>
139
+ props.isShowSelectHost
140
+ ? localization.value.common.selectHost
141
+ : localization.value.common.host
142
+ )
143
+
144
+ const nameErrorText = computed<string>(() => {
145
+ if (
146
+ props.messagesFields?.datastoreName?.field &&
147
+ !formModelLocal.value.name
148
+ ) {
149
+ return props.messagesFields.datastoreName.field
150
+ }
151
+
152
+ if (!isInitDatastoreNameValidation.value) return ''
153
+ return !formModelLocal.value.name
154
+ ? localization.value.common.fieldRequired
155
+ : ''
156
+ })
157
+
158
+ const onSelectHost = (event: string): void => {
159
+ formModelLocal.value.hosts = [event]
160
+ emits('select-host')
161
+ }
162
+ </script>
163
+
164
+ <style lang="scss" scoped>
165
+ .name-and-device {
166
+ display: flex;
167
+ flex-direction: column;
168
+ row-gap: 16px;
169
+ margin: 16px 0 10px 2px;
170
+
171
+ &__alert {
172
+ align-items: flex-start;
173
+ }
174
+
175
+ &__row {
176
+ width: 100%;
177
+ min-height: 36px;
178
+ display: flex;
179
+ align-items: center;
180
+ column-gap: 16px;
181
+ border-bottom: 1px solid var(--wizard-content-line);
182
+ padding-bottom: 16px;
183
+ }
184
+ .row {
185
+ &__title {
186
+ max-width: 240px;
187
+ width: 100%;
188
+ display: flex;
189
+ align-items: center;
190
+ column-gap: 8px;
191
+ color: var(--wizard-content-title);
192
+ font-weight: 400;
193
+ font-size: 13px;
194
+ line-height: 20px;
195
+ white-space: nowrap;
196
+ text-overflow: ellipsis;
197
+ overflow: hidden;
198
+
199
+ &-text {
200
+ display: block;
201
+ white-space: nowrap;
202
+ text-overflow: ellipsis;
203
+ overflow: hidden;
204
+ }
205
+ }
206
+ &__content {
207
+ max-width: 480px;
208
+ width: 100%;
209
+ color: var(--wizard-content-value);
210
+ font-weight: 400;
211
+ font-size: 13px;
212
+ line-height: 20px;
213
+ letter-spacing: 0;
214
+ vertical-align: middle;
215
+ }
216
+ &__host-name {
217
+ font-family: 'Inter', sans-serif;
218
+ height: 36px;
219
+ display: flex;
220
+ align-items: center;
221
+ column-gap: 8px;
222
+ color: var(--wizard-content-value);
223
+ font-size: 13px;
224
+ font-weight: 400;
225
+ .icon {
226
+ width: 20px;
227
+ height: 20px;
228
+ }
229
+ }
230
+ }
231
+ }
232
+ </style>