bfg-common 1.5.392 → 1.5.393

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,328 +1,331 @@
1
- <template>
2
- <div class="configuration">
3
- <atoms-alert
4
- v-show="props.alertMessages?.length"
5
- test-id="configure-error-alert"
6
- status="alert-danger"
7
- :items="props.alertMessages"
8
- @remove="onHideAlert"
9
- />
10
-
11
- <atoms-alert
12
- v-show="isShowAlertInfo"
13
- test-id="configure-information-alert"
14
- status="alert-info"
15
- :items="[localization.common.nameAndConfigurationAlertInfo]"
16
- @remove="isShowAlertInfo = false"
17
- />
18
- <h6 class="nd-mt-0">{{ localization.common.nfsShareDetails }}</h6>
19
-
20
- <div class="clr-form-control clr-row">
21
- <label for="" class="clr-control-label clr-col-md-2">
22
- {{ localization.common.name }}
23
- </label>
24
-
25
- <div class="clr-control-container" :class="nameErrorText && 'clr-error'">
26
- <div class="flex-align-center">
27
- <input
28
- id="configuration-name-input"
29
- v-model="formModelLocal.name"
30
- data-id="configuration-name-input"
31
- type="text"
32
- class="clr-input"
33
- @blur="initValidation(true, ['name'])"
34
- @input="initValidation(false, ['name'])"
35
- />
36
- <atoms-the-icon class="error-icon" name="info-circle" />
37
- </div>
38
-
39
- <div class="clr-subtext" data-id="nfs-datastore-name-field-require">
40
- {{ nameErrorText }}
41
- </div>
42
- </div>
43
- </div>
44
-
45
- <div class="clr-form-control clr-row">
46
- <label class="clr-control-label clr-col-md-2">
47
- {{ localization.common.folder }}
48
- </label>
49
-
50
- <div
51
- class="clr-control-container"
52
- :class="folderErrorText && 'clr-error'"
53
- >
54
- <div class="flex-align-center">
55
- <input
56
- id="configuration-folder-input"
57
- v-model="formModelLocal.folder"
58
- data-id="configuration-folder-input"
59
- type="text"
60
- class="clr-input"
61
- @blur="initValidation(true, ['folder'])"
62
- @input="initValidation(false, ['folder'])"
63
- />
64
- <atoms-the-icon class="error-icon" name="info-circle" />
65
- </div>
66
-
67
- <div
68
- v-if="folderErrorText"
69
- class="clr-subtext"
70
- data-id="folder-name-field-require"
71
- >
72
- {{ folderErrorText }}
73
- </div>
74
- <div v-else class="clr-subtext">
75
- {{ localization.common.eg }}: /vols/vol0/datastore-001
76
- </div>
77
- </div>
78
- </div>
79
-
80
- <div class="nd-mt-0 clr-form-control clr-row">
81
- <label class="clr-control-label clr-col-md-2">
82
- {{ localization.common.server }}
83
- </label>
84
-
85
- <div
86
- class="clr-control-container"
87
- :class="serverErrorText && 'clr-error'"
88
- >
89
- <div class="flex-align-center input-action-wrapper">
90
- <input
91
- id="configuration-server-input"
92
- v-model="formModelLocal.server"
93
- data-id="configuration-server-input"
94
- type="text"
95
- class="clr-input"
96
- @blur="initValidation(true, ['server'])"
97
- @input="initValidation(false, ['server'])"
98
- />
99
- <atoms-the-icon class="error-icon" name="info-circle" />
100
- </div>
101
- <div
102
- v-if="serverErrorText"
103
- class="clr-subtext"
104
- data-id="server-name-field-require"
105
- >
106
- {{ serverErrorText }}
107
- </div>
108
- <div v-else class="clr-subtext">
109
- {{ localization.common.eg }}: nas, nas.it.com or 192.168.0.1
110
- </div>
111
- </div>
112
- </div>
113
-
114
- <div class="nd-mt-0 clr-form-control clr-row">
115
- <label class="clr-control-label clr-col-md-2">
116
- {{ localization.auth.username }}
117
- </label>
118
-
119
- <div
120
- class="clr-control-container"
121
- :class="usernameErrorText && 'clr-error'"
122
- >
123
- <div class="flex-align-center input-action-wrapper">
124
- <input
125
- id="configuration-username-input"
126
- v-model="formModelLocal.user"
127
- data-id="configuration-username-input"
128
- type="text"
129
- class="clr-input"
130
- @blur="initValidation(true, ['user'])"
131
- @input="initValidation(false, ['user'])"
132
- />
133
- <atoms-the-icon class="error-icon" name="info-circle" />
134
- </div>
135
- <div
136
- v-if="usernameErrorText"
137
- class="clr-subtext"
138
- data-id="username-name-field-require"
139
- >
140
- {{ usernameErrorText }}
141
- </div>
142
- </div>
143
- </div>
144
-
145
- <div class="nd-mt-0 clr-form-control clr-row">
146
- <label class="clr-control-label clr-col-md-2">
147
- {{ localization.auth.password }}
148
- </label>
149
-
150
- <div
151
- class="clr-control-container"
152
- :class="passwordErrorText && 'clr-error'"
153
- >
154
- <div class="flex-align-center input-action-wrapper">
155
- <input
156
- id="configuration-password-input"
157
- v-model="formModelLocal.password"
158
- data-id="configuration-password-input"
159
- type="password"
160
- class="clr-input"
161
- @blur="initValidation(true, ['password'])"
162
- @input="initValidation(false, ['password'])"
163
- />
164
- <atoms-the-icon class="error-icon" name="info-circle" />
165
- </div>
166
- <div
167
- v-if="passwordErrorText"
168
- class="clr-subtext"
169
- data-id="password-name-field-require"
170
- >
171
- {{ passwordErrorText }}
172
- </div>
173
- </div>
174
- </div>
175
- </div>
176
- </template>
177
-
178
- <script lang="ts" setup>
179
- import type { UI_I_Localization } from '~/lib/models/interfaces'
180
- import type { UI_I_WizardStep } from '~/components/atoms/wizard/lib/models/interfaces'
181
- import type { UI_I_InitialValidationFields } from '~/components/common/backup/storage/actions/add/steps/nameAndConfigure/lib/models/interfaces'
182
- import type { UI_I_CreateDatastoreForm } from '~/components/common/backup/storage/actions/add/lib/models/interfaces'
183
- import { dynamicSteps } from '~/components/common/backup/storage/actions/add/lib/config/steps'
184
- import type {
185
- UI_T_InitialValidationFields
186
- } from "~/components/common/backup/storage/actions/add/steps/nameAndConfigure/lib/models/types";
187
-
188
- const formModelLocal = defineModel<UI_I_CreateDatastoreForm>({ required: true })
189
- const isShowAlertInfo = defineModel<boolean>('alertInfo', { required: true })
190
-
191
- const props = defineProps<{
192
- alertMessages: string[]
193
- messagesFields: UI_I_WizardStep['fields']
194
- }>()
195
- const emits = defineEmits<{
196
- (event: 'hide-alert', value: number): void
197
- }>()
198
-
199
- const localization = computed<UI_I_Localization>(() => useLocal())
200
-
201
- const initValidationFields = ref<UI_I_InitialValidationFields>({
202
- name: false,
203
- folder: false,
204
- server: false,
205
- user: false,
206
- password: false,
207
- })
208
- const initValidation = (onlyBlur = false, types: UI_T_InitialValidationFields[]): void => {
209
- onlyBlur && types.forEach((type) => (initValidationFields.value[type] = true))
210
- }
211
-
212
- /* Validation error text for Name input field */
213
- const nameErrorText = computed<string>(() => {
214
- if (props.messagesFields?.name?.field && !formModelLocal.value.name) {
215
- return props.messagesFields.name.field
216
- }
217
-
218
- if (!initValidationFields.value.name) return ''
219
- return !formModelLocal.value.name
220
- ? localization.value.common.fieldRequired
221
- : ''
222
- })
223
-
224
- /* Validation error text for Folder input field */
225
- const folderErrorText = computed<string>(() => {
226
- if (props.messagesFields.folder?.field && !formModelLocal.value.folder) {
227
- return props.messagesFields.folder.field
228
- }
229
-
230
- if (!initValidationFields.value.folder) return ''
231
- return !formModelLocal.value.folder
232
- ? localization.value.common.fieldRequired
233
- : ''
234
- })
235
-
236
- /* Validation error text for Server input field */
237
- const serverErrorText = computed<string>(() => {
238
- if (props.messagesFields.server?.field && !formModelLocal.value.server) {
239
- return props.messagesFields.server.field
240
- }
241
-
242
- if (!initValidationFields.value.server) return ''
243
- return !formModelLocal.value.server
244
- ? localization.value.common.fieldRequired
245
- : ''
246
- })
247
-
248
- /* Validation error text for Username input field */
249
- const usernameErrorText = computed<string>(() => {
250
- if (props.messagesFields.user?.field && !formModelLocal.value.user) {
251
- return props.messagesFields.user.field
252
- }
253
-
254
- if (!initValidationFields.value.user) return ''
255
- return !formModelLocal.value.user
256
- ? localization.value.common.fieldRequired
257
- : ''
258
- })
259
-
260
- /* Validation error text for Password input field */
261
- const passwordErrorText = computed<string>(() => {
262
- if (props.messagesFields.password?.field && !formModelLocal.value.password) {
263
- return props.messagesFields.password.field
264
- }
265
-
266
- if (!initValidationFields.value.password) return ''
267
- return !formModelLocal.value.password
268
- ? localization.value.common.fieldRequired
269
- : ''
270
- })
271
-
272
- const onHideAlert = (): void =>
273
- emits('hide-alert', dynamicSteps.nameAndConfigure)
274
- </script>
275
-
276
- <style lang="scss" scoped>
277
- @import 'assets/scss/common/mixins.scss';
278
- .configuration {
279
- @include flex($dir: column, $just: space-between);
280
- & > h6 {
281
- font-weight: 500;
282
- font-size: 14px;
283
- padding-top: 6px;
284
- margin-bottom: 10px;
285
- }
286
-
287
- &__alert-info {
288
- :deep(.alert-text) {
289
- font-size: 11px;
290
- letter-spacing: normal;
291
- }
292
- }
293
- .clr-form-control {
294
- margin-top: 0;
295
- display: flex;
296
- flex-direction: row;
297
-
298
- .clr-control-container {
299
- min-height: 48px;
300
- &.clr-error {
301
- .clr-subtext,
302
- .error-icon {
303
- display: block;
304
- }
305
- }
306
- .error-icon {
307
- display: none;
308
- }
309
- .error-icon {
310
- fill: #db2100;
311
- width: 24px;
312
- height: 24px;
313
- }
314
- }
315
- }
316
- &__servers-list {
317
- height: 170px;
318
- }
319
- }
320
- .flex-align-center {
321
- &.input-action-wrapper {
322
- width: 260px;
323
- }
324
- input {
325
- width: 210px;
326
- }
327
- }
328
- </style>
1
+ <template>
2
+ <div class="configuration">
3
+ <atoms-alert
4
+ v-show="props.alertMessages?.length"
5
+ test-id="configure-error-alert"
6
+ status="alert-danger"
7
+ :items="props.alertMessages"
8
+ @remove="onHideAlert"
9
+ />
10
+
11
+ <atoms-alert
12
+ v-show="isShowAlertInfo"
13
+ test-id="configure-information-alert"
14
+ status="alert-info"
15
+ :items="[localization.common.nameAndConfigurationAlertInfo]"
16
+ @remove="isShowAlertInfo = false"
17
+ />
18
+ <h6 class="nd-mt-0">{{ localization.common.nfsShareDetails }}</h6>
19
+
20
+ <div class="clr-form-control clr-row">
21
+ <label for="" class="clr-control-label clr-col-md-2">
22
+ {{ localization.common.name }}
23
+ </label>
24
+
25
+ <div class="clr-control-container" :class="nameErrorText && 'clr-error'">
26
+ <div class="flex-align-center">
27
+ <input
28
+ id="configuration-name-input"
29
+ v-model="formModelLocal.name"
30
+ data-id="configuration-name-input"
31
+ type="text"
32
+ class="clr-input"
33
+ @blur="initValidation(true, ['name'])"
34
+ @input="initValidation(false, ['name'])"
35
+ />
36
+ <atoms-the-icon class="error-icon" name="info-circle" />
37
+ </div>
38
+
39
+ <div class="clr-subtext" data-id="nfs-datastore-name-field-require">
40
+ {{ nameErrorText }}
41
+ </div>
42
+ </div>
43
+ </div>
44
+
45
+ <div class="clr-form-control clr-row">
46
+ <label class="clr-control-label clr-col-md-2">
47
+ {{ localization.common.folder }}
48
+ </label>
49
+
50
+ <div
51
+ class="clr-control-container"
52
+ :class="folderErrorText && 'clr-error'"
53
+ >
54
+ <div class="flex-align-center">
55
+ <input
56
+ id="configuration-folder-input"
57
+ v-model="formModelLocal.folder"
58
+ data-id="configuration-folder-input"
59
+ type="text"
60
+ class="clr-input"
61
+ @blur="initValidation(true, ['folder'])"
62
+ @input="initValidation(false, ['folder'])"
63
+ />
64
+ <atoms-the-icon class="error-icon" name="info-circle" />
65
+ </div>
66
+
67
+ <div
68
+ v-if="folderErrorText"
69
+ class="clr-subtext"
70
+ data-id="folder-name-field-require"
71
+ >
72
+ {{ folderErrorText }}
73
+ </div>
74
+ <div v-else class="clr-subtext">
75
+ {{ localization.common.eg }}: /vols/vol0/datastore-001
76
+ </div>
77
+ </div>
78
+ </div>
79
+
80
+ <div class="nd-mt-0 clr-form-control clr-row">
81
+ <label class="clr-control-label clr-col-md-2">
82
+ {{ localization.common.server }}
83
+ </label>
84
+
85
+ <div
86
+ class="clr-control-container"
87
+ :class="serverErrorText && 'clr-error'"
88
+ >
89
+ <div class="flex-align-center input-action-wrapper">
90
+ <input
91
+ id="configuration-server-input"
92
+ v-model="formModelLocal.server"
93
+ data-id="configuration-server-input"
94
+ type="text"
95
+ class="clr-input"
96
+ @blur="initValidation(true, ['server'])"
97
+ @input="initValidation(false, ['server'])"
98
+ />
99
+ <atoms-the-icon class="error-icon" name="info-circle" />
100
+ </div>
101
+ <div
102
+ v-if="serverErrorText"
103
+ class="clr-subtext"
104
+ data-id="server-name-field-require"
105
+ >
106
+ {{ serverErrorText }}
107
+ </div>
108
+ <div v-else class="clr-subtext">
109
+ {{ localization.common.eg }}: nas, nas.it.com or 192.168.0.1
110
+ </div>
111
+ </div>
112
+ </div>
113
+
114
+ <!-- PC-2542-->
115
+ <!-- <div class="nd-mt-0 clr-form-control clr-row">-->
116
+ <!-- <label class="clr-control-label clr-col-md-2">-->
117
+ <!-- {{ localization.auth.username }}-->
118
+ <!-- </label>-->
119
+
120
+ <!-- <div-->
121
+ <!-- class="clr-control-container"-->
122
+ <!-- :class="usernameErrorText && 'clr-error'"-->
123
+ <!-- >-->
124
+ <!-- <div class="flex-align-center input-action-wrapper">-->
125
+ <!-- <input-->
126
+ <!-- id="configuration-username-input"-->
127
+ <!-- v-model="formModelLocal.user"-->
128
+ <!-- data-id="configuration-username-input"-->
129
+ <!-- type="text"-->
130
+ <!-- class="clr-input"-->
131
+ <!-- @blur="initValidation(true, ['user'])"-->
132
+ <!-- @input="initValidation(false, ['user'])"-->
133
+ <!-- />-->
134
+ <!-- <atoms-the-icon class="error-icon" name="info-circle" />-->
135
+ <!-- </div>-->
136
+ <!-- <div-->
137
+ <!-- v-if="usernameErrorText"-->
138
+ <!-- class="clr-subtext"-->
139
+ <!-- data-id="username-name-field-require"-->
140
+ <!-- >-->
141
+ <!-- {{ usernameErrorText }}-->
142
+ <!-- </div>-->
143
+ <!-- </div>-->
144
+ <!-- </div>-->
145
+
146
+ <!-- PC-2542-->
147
+ <!-- <div class="nd-mt-0 clr-form-control clr-row">-->
148
+ <!-- <label class="clr-control-label clr-col-md-2">-->
149
+ <!-- {{ localization.auth.password }}-->
150
+ <!-- </label>-->
151
+
152
+ <!-- <div-->
153
+ <!-- class="clr-control-container"-->
154
+ <!-- :class="passwordErrorText && 'clr-error'"-->
155
+ <!-- >-->
156
+ <!-- <div class="flex-align-center input-action-wrapper">-->
157
+ <!-- <input-->
158
+ <!-- id="configuration-password-input"-->
159
+ <!-- v-model="formModelLocal.password"-->
160
+ <!-- data-id="configuration-password-input"-->
161
+ <!-- type="password"-->
162
+ <!-- class="clr-input"-->
163
+ <!-- @blur="initValidation(true, ['password'])"-->
164
+ <!-- @input="initValidation(false, ['password'])"-->
165
+ <!-- />-->
166
+ <!-- <atoms-the-icon class="error-icon" name="info-circle" />-->
167
+ <!-- </div>-->
168
+ <!-- <div-->
169
+ <!-- v-if="passwordErrorText"-->
170
+ <!-- class="clr-subtext"-->
171
+ <!-- data-id="password-name-field-require"-->
172
+ <!-- >-->
173
+ <!-- {{ passwordErrorText }}-->
174
+ <!-- </div>-->
175
+ <!-- </div>-->
176
+ <!-- </div>-->
177
+ </div>
178
+ </template>
179
+
180
+ <script lang="ts" setup>
181
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
182
+ import type { UI_I_WizardStep } from '~/components/atoms/wizard/lib/models/interfaces'
183
+ import type { UI_I_InitialValidationFields } from '~/components/common/backup/storage/actions/add/steps/nameAndConfigure/lib/models/interfaces'
184
+ import type { UI_I_CreateDatastoreForm } from '~/components/common/backup/storage/actions/add/lib/models/interfaces'
185
+ import type { UI_T_InitialValidationFields } from '~/components/common/backup/storage/actions/add/steps/nameAndConfigure/lib/models/types'
186
+ import { dynamicSteps } from '~/components/common/backup/storage/actions/add/lib/config/steps'
187
+
188
+ const formModelLocal = defineModel<UI_I_CreateDatastoreForm>({ required: true })
189
+ const isShowAlertInfo = defineModel<boolean>('alertInfo', { required: true })
190
+
191
+ const props = defineProps<{
192
+ alertMessages: string[]
193
+ messagesFields: UI_I_WizardStep['fields']
194
+ }>()
195
+ const emits = defineEmits<{
196
+ (event: 'hide-alert', value: number): void
197
+ }>()
198
+
199
+ const localization = computed<UI_I_Localization>(() => useLocal())
200
+
201
+ const initValidationFields = ref<UI_I_InitialValidationFields>({
202
+ name: false,
203
+ folder: false,
204
+ server: false,
205
+ user: false,
206
+ password: false,
207
+ })
208
+ const initValidation = (
209
+ onlyBlur = false,
210
+ types: UI_T_InitialValidationFields[]
211
+ ): void => {
212
+ onlyBlur && types.forEach((type) => (initValidationFields.value[type] = true))
213
+ }
214
+
215
+ /* Validation error text for Name input field */
216
+ const nameErrorText = computed<string>(() => {
217
+ if (props.messagesFields?.name?.field && !formModelLocal.value.name) {
218
+ return props.messagesFields.name.field
219
+ }
220
+
221
+ if (!initValidationFields.value.name) return ''
222
+ return !formModelLocal.value.name
223
+ ? localization.value.common.fieldRequired
224
+ : ''
225
+ })
226
+
227
+ /* Validation error text for Folder input field */
228
+ const folderErrorText = computed<string>(() => {
229
+ if (props.messagesFields.folder?.field && !formModelLocal.value.folder) {
230
+ return props.messagesFields.folder.field
231
+ }
232
+
233
+ if (!initValidationFields.value.folder) return ''
234
+ return !formModelLocal.value.folder
235
+ ? localization.value.common.fieldRequired
236
+ : ''
237
+ })
238
+
239
+ /* Validation error text for Server input field */
240
+ const serverErrorText = computed<string>(() => {
241
+ if (props.messagesFields.server?.field && !formModelLocal.value.server) {
242
+ return props.messagesFields.server.field
243
+ }
244
+
245
+ if (!initValidationFields.value.server) return ''
246
+ return !formModelLocal.value.server
247
+ ? localization.value.common.fieldRequired
248
+ : ''
249
+ })
250
+
251
+ /* Validation error text for Username input field */
252
+ const usernameErrorText = computed<string>(() => {
253
+ if (props.messagesFields.user?.field && !formModelLocal.value.user) {
254
+ return props.messagesFields.user.field
255
+ }
256
+
257
+ if (!initValidationFields.value.user) return ''
258
+ return !formModelLocal.value.user
259
+ ? localization.value.common.fieldRequired
260
+ : ''
261
+ })
262
+
263
+ /* Validation error text for Password input field */
264
+ const passwordErrorText = computed<string>(() => {
265
+ if (props.messagesFields.password?.field && !formModelLocal.value.password) {
266
+ return props.messagesFields.password.field
267
+ }
268
+
269
+ if (!initValidationFields.value.password) return ''
270
+ return !formModelLocal.value.password
271
+ ? localization.value.common.fieldRequired
272
+ : ''
273
+ })
274
+
275
+ const onHideAlert = (): void =>
276
+ emits('hide-alert', dynamicSteps.nameAndConfigure)
277
+ </script>
278
+
279
+ <style lang="scss" scoped>
280
+ @import 'assets/scss/common/mixins.scss';
281
+ .configuration {
282
+ @include flex($dir: column, $just: space-between);
283
+ & > h6 {
284
+ font-weight: 500;
285
+ font-size: 14px;
286
+ padding-top: 6px;
287
+ margin-bottom: 10px;
288
+ }
289
+
290
+ &__alert-info {
291
+ :deep(.alert-text) {
292
+ font-size: 11px;
293
+ letter-spacing: normal;
294
+ }
295
+ }
296
+ .clr-form-control {
297
+ margin-top: 0;
298
+ display: flex;
299
+ flex-direction: row;
300
+
301
+ .clr-control-container {
302
+ min-height: 48px;
303
+ &.clr-error {
304
+ .clr-subtext,
305
+ .error-icon {
306
+ display: block;
307
+ }
308
+ }
309
+ .error-icon {
310
+ display: none;
311
+ }
312
+ .error-icon {
313
+ fill: #db2100;
314
+ width: 24px;
315
+ height: 24px;
316
+ }
317
+ }
318
+ }
319
+ &__servers-list {
320
+ height: 170px;
321
+ }
322
+ }
323
+ .flex-align-center {
324
+ &.input-action-wrapper {
325
+ width: 260px;
326
+ }
327
+ input {
328
+ width: 210px;
329
+ }
330
+ }
331
+ </style>