bfg-common 1.3.497 → 1.3.498

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.
Files changed (49) hide show
  1. package/components/common/vm/actions/editSettings/EditSettings.vue +16 -16
  2. package/components/common/wizards/datastoreNew/add/Add.vue +487 -0
  3. package/components/common/wizards/datastoreNew/add/lib/config/steps.ts +135 -0
  4. package/components/common/wizards/datastoreNew/add/lib/models/enums.ts +5 -0
  5. package/components/common/wizards/datastoreNew/add/lib/models/interfaces.ts +12 -0
  6. package/components/common/wizards/datastoreNew/add/lib/models/types.ts +7 -0
  7. package/components/common/wizards/datastoreNew/add/lib/utils.ts +31 -0
  8. package/components/common/wizards/datastoreNew/add/local/Local.vue +44 -0
  9. package/components/common/wizards/datastoreNew/add/local/createName/CreateName.vue +116 -0
  10. package/components/common/wizards/datastoreNew/add/nfs/Nfs.vue +67 -0
  11. package/components/common/wizards/datastoreNew/add/nfs/accessibility/Accessibility.vue +80 -0
  12. package/components/common/wizards/datastoreNew/add/nfs/accessibility/lib/config/tabsPannel.ts +24 -0
  13. package/components/common/wizards/datastoreNew/add/nfs/accessibility/lib/models/interfaces.ts +9 -0
  14. package/components/common/wizards/datastoreNew/add/nfs/accessibility/lib/models/types.ts +5 -0
  15. package/components/common/wizards/datastoreNew/add/nfs/accessibility/tablesView/TablesView.vue +117 -0
  16. package/components/common/wizards/datastoreNew/add/nfs/accessibility/tablesView/lib/config/compatibleTable.ts +62 -0
  17. package/components/common/wizards/datastoreNew/add/nfs/accessibility/tablesView/lib/config/incompatibleTable.ts +68 -0
  18. package/components/common/wizards/datastoreNew/add/nfs/accessibility/tablesView/lib/config/tableKeys.ts +15 -0
  19. package/components/common/wizards/datastoreNew/add/nfs/configuration/Configuration.vue +293 -0
  20. package/components/common/wizards/datastoreNew/add/nfs/configuration/lib/models/interfaces.ts +5 -0
  21. package/components/common/wizards/datastoreNew/add/nfs/configuration/serversList/DeletePopover.vue +100 -0
  22. package/components/common/wizards/datastoreNew/add/nfs/configuration/serversList/ServersList.vue +124 -0
  23. package/components/common/wizards/datastoreNew/add/nfs/configuration/serversList/lib/config/serversListConfig.ts +41 -0
  24. package/components/common/wizards/datastoreNew/add/nfs/configuration/serversList/lib/config/tableKeys.ts +3 -0
  25. package/components/common/wizards/datastoreNew/add/nfs/configuration/serversList/lib/models/interfaces.ts +3 -0
  26. package/components/common/wizards/datastoreNew/add/nfs/configuration/serversList/lib/models/types.ts +1 -0
  27. package/components/common/wizards/datastoreNew/add/nfs/kerberosAuthentication/KerberosAuthentication.vue +55 -0
  28. package/components/common/wizards/datastoreNew/add/nfs/kerberosAuthentication/lib/config/radioOptions.ts +27 -0
  29. package/components/common/wizards/datastoreNew/add/nfs/version/Version.vue +26 -0
  30. package/components/common/wizards/datastoreNew/add/nfs/version/lib/config/versionOptions.ts +20 -0
  31. package/components/common/wizards/datastoreNew/add/readyComplete/ReadyComplete.vue +88 -0
  32. package/components/common/wizards/datastoreNew/add/readyComplete/lib/config/propertiesDetails.ts +183 -0
  33. package/components/common/wizards/datastoreNew/add/sharedStorm/SharedStorm.vue +85 -0
  34. package/components/common/wizards/datastoreNew/add/sharedStorm/deviceSelection/DeviceSelection.vue +350 -0
  35. package/components/common/wizards/datastoreNew/add/sharedStorm/deviceSelection/lib/config/selectOptions.ts +14 -0
  36. package/components/common/wizards/datastoreNew/add/sharedStorm/deviceSelection/lib/models/interfaces.ts +53 -0
  37. package/components/common/wizards/datastoreNew/add/sharedStorm/deviceSelection/lib/models/types.ts +8 -0
  38. package/components/common/wizards/datastoreNew/add/sharedStorm/deviceSelection/table/Table.vue +134 -0
  39. package/components/common/wizards/datastoreNew/add/sharedStorm/deviceSelection/table/lib/config/hostsTable.ts +87 -0
  40. package/components/common/wizards/datastoreNew/add/sharedStorm/deviceSelection/table/lib/config/tableKeys.ts +11 -0
  41. package/components/common/wizards/datastoreNew/add/sharedStorm/partitionConfiguration/PartitionConfiguration.vue +232 -0
  42. package/components/common/wizards/datastoreNew/add/sharedStorm/partitionConfiguration/graphicTooltip/graphicTooltip.vue +64 -0
  43. package/components/common/wizards/datastoreNew/add/sharedStorm/partitionConfiguration/lib/config/selectOptions.ts +46 -0
  44. package/components/common/wizards/datastoreNew/add/sharedStorm/partitionConfiguration/sizeGraphic/sizeGraphic.vue +225 -0
  45. package/components/common/wizards/datastoreNew/add/sharedStorm/version/Version.vue +39 -0
  46. package/components/common/wizards/datastoreNew/add/sharedStorm/version/lib/config/versionOptions.ts +21 -0
  47. package/components/common/wizards/datastoreNew/add/types/Types.vue +77 -0
  48. package/components/common/wizards/datastoreNew/add/types/lib/config/typeOptions.ts +49 -0
  49. package/package.json +1 -1
@@ -0,0 +1,293 @@
1
+ <template>
2
+ <div class="configuration">
3
+ <div>
4
+ <atoms-alert
5
+ v-show="props.alertMessages?.length"
6
+ test-id="configuration-error"
7
+ status="alert-danger"
8
+ :items="props.alertMessages"
9
+ @remove="onHideAlert"
10
+ />
11
+
12
+ <atoms-alert
13
+ v-show="alertInfo"
14
+ test-id="configuration-info"
15
+ status="alert-info"
16
+ :items="[localization.nameAndConfigurationAlertInfo]"
17
+ @remove="alertInfo = false"
18
+ />
19
+ <h6 class="nd-mt-0">{{ localization.nfsShareDetails }}</h6>
20
+
21
+ <div class="clr-form-control clr-row">
22
+ <label for="" class="clr-control-label clr-col-md-2">
23
+ {{ localization.name }}
24
+ </label>
25
+
26
+ <div
27
+ class="clr-control-container"
28
+ :class="nameErrorText && 'clr-error'"
29
+ >
30
+ <div class="flex-align-center">
31
+ <input
32
+ id="configuration-name-input"
33
+ v-model="model.name"
34
+ data-id="configuration-name-input"
35
+ type="text"
36
+ class="clr-input"
37
+ @blur="initValidation(true, ['name'])"
38
+ @input="initValidation(false, ['name'])"
39
+ />
40
+ <atoms-the-icon class="error-icon" name="info-circle" />
41
+ </div>
42
+
43
+ <div class="clr-subtext ng-star-inserted">
44
+ {{ nameErrorText }}
45
+ </div>
46
+ </div>
47
+ </div>
48
+
49
+ <div class="clr-form-control clr-row">
50
+ <label class="clr-control-label clr-col-md-2">
51
+ {{ localization.folder }}
52
+ </label>
53
+
54
+ <div
55
+ class="clr-control-container"
56
+ :class="folderErrorText && 'clr-error'"
57
+ >
58
+ <div class="flex-align-center">
59
+ <input
60
+ id="configuration-folder-input"
61
+ v-model="model.folder"
62
+ data-id="configuration-folder-input"
63
+ type="text"
64
+ class="clr-input"
65
+ @blur="initValidation(true, ['folder'])"
66
+ @input="initValidation(false, ['folder'])"
67
+ />
68
+ <atoms-the-icon class="error-icon" name="info-circle" />
69
+ </div>
70
+
71
+ <div v-if="folderErrorText" class="clr-subtext">
72
+ {{ folderErrorText }}
73
+ </div>
74
+ <div v-else class="clr-subtext">E.g: /vols/vol0/datastore-001</div>
75
+ </div>
76
+ </div>
77
+
78
+ <div class="nd-mt-0 clr-form-control clr-row">
79
+ <label class="clr-control-label clr-col-md-2">
80
+ {{ localization.server }}
81
+ </label>
82
+
83
+ <div
84
+ class="clr-control-container"
85
+ :class="serverErrorText && 'clr-error'"
86
+ >
87
+ <div class="flex-align-center input-action-wrapper">
88
+ <input
89
+ id="configuration-folder-input"
90
+ v-model="model.server"
91
+ data-id="configuration-folder-input"
92
+ type="text"
93
+ class="clr-input"
94
+ @blur="initValidation(true, ['server'])"
95
+ @input="initValidation(false, ['server'])"
96
+ />
97
+ <atoms-the-icon class="error-icon" name="info-circle" />
98
+ </div>
99
+ <div v-if="serverErrorText" class="clr-subtext">
100
+ {{ serverErrorText }}
101
+ </div>
102
+ <div v-else class="clr-subtext">
103
+ E.g: nas, nas.it.com or 192.168.0.1
104
+ </div>
105
+ </div>
106
+
107
+ <!-- <button-->
108
+ <!-- v-show="props.nfsVersion === 'nfs-4.1' && false"-->
109
+ <!-- class="btn btn-sm nd-mt-0"-->
110
+ <!-- @click="onAddServerToList"-->
111
+ <!-- >-->
112
+ <!-- {{ localization.add }}-->
113
+ <!-- </button>-->
114
+ </div>
115
+
116
+ <div
117
+ v-show="model.nfsVersion === 'nfs-4.1' && false"
118
+ class="configuration__servers-list"
119
+ >
120
+ <common-wizards-datastore-add-nfs-configuration-servers-list
121
+ v-model:data-table="dataServers"
122
+ />
123
+ </div>
124
+ </div>
125
+
126
+ <div v-if="false" class="clr-form-control clr-row mt-1">
127
+ <label for="" class="clr-control-label clr-col-md-2">
128
+ {{ localization.accessMode }}
129
+ </label>
130
+
131
+ <div class="clr-col-md-10 clr-col-12 clr-checkbox-wrapper">
132
+ <input
133
+ id="playback-compression"
134
+ v-model="accessMode"
135
+ data-id="playback-compression-checkbox"
136
+ type="checkbox"
137
+ />
138
+ <label for="playback-compression" class="clr-control-label">
139
+ {{ localization.mountNfsReadOnly }}
140
+ </label>
141
+ </div>
142
+ </div>
143
+ </div>
144
+ </template>
145
+
146
+ <script lang="ts" setup>
147
+ import type { UI_T_Project } from '~/lib/models/types'
148
+ import type {
149
+ UI_I_Localization,
150
+ UI_I_ArbitraryObject,
151
+ } from '~/lib/models/interfaces'
152
+ import type { UI_I_ErrorFields } from '~/components/atoms/wizard/lib/models/interfaces'
153
+ import type { UI_I_DataServersListItem } from '~/components/common/wizards/datastoreNew/add/nfs/configuration/serversList/lib/models/interfaces'
154
+ import type { UI_I_InitialValidationFields } from '~/components/common/wizards/datastoreNew/add/nfs/configuration/lib/models/interfaces'
155
+
156
+ const props = defineProps<{
157
+ project: UI_T_Project
158
+ alertMessages: string[]
159
+ messagesFields: UI_I_ArbitraryObject<UI_I_ErrorFields>
160
+ }>()
161
+ const model = defineModel<any>()
162
+ const emits = defineEmits<{
163
+ (event: 'hide-alert', value: number): void
164
+ }>()
165
+
166
+ const localization = computed<UI_I_Localization>(() => useLocal())
167
+
168
+ const initValidationFields = ref<UI_I_InitialValidationFields>({
169
+ name: false,
170
+ folder: false,
171
+ server: false,
172
+ })
173
+ const initValidation = (onlyBlur = false, types: string[]): void => {
174
+ onlyBlur && types.forEach((type) => (initValidationFields.value[type] = true))
175
+ }
176
+
177
+ /* Validation error text for Name input field */
178
+ const nameErrorText = computed<string>(() => {
179
+ if (props.messagesFields?.name?.field && !model.value.name) {
180
+ return props.messagesFields.name.field
181
+ }
182
+
183
+ if (!initValidationFields.value.name) return ''
184
+ return !model.value.name ? localization.value.specifyDatastoreName : ''
185
+ })
186
+
187
+ /* Validation error text for Folder input field */
188
+ const folderErrorText = computed<string>(() => {
189
+ if (props.messagesFields.folder?.field && !model.value.folder) {
190
+ return props.messagesFields.folder.field
191
+ }
192
+
193
+ if (!initValidationFields.value.folder) return ''
194
+ return !model.value.folder ? localization.value.specifyFolderName : ''
195
+ })
196
+
197
+ /* Validation error text for Server input field */
198
+ const serverErrorText = computed<string>(() => {
199
+ if (props.messagesFields.server?.field && !model.value.server) {
200
+ return props.messagesFields.server.field
201
+ }
202
+
203
+ // if (!initValidationFields.value.server || dataServers.value.length) return ''
204
+ if (!initValidationFields.value.server) return ''
205
+ return !model.value.server ? localization.value.specifyServerName : ''
206
+ })
207
+
208
+ const accessMode = ref<boolean>(false)
209
+ const dataServers = ref<UI_I_DataServersListItem[]>([])
210
+ // const onAddServerToList = (): void => {
211
+ // const { server } = form.value
212
+ // // const { nfsVersion } = props
213
+ //
214
+ // if (!dataServers.value.length && !server.value) {
215
+ // validForm.value = validation.touch()
216
+ // isInitServerValidation.value = true
217
+ //
218
+ // return
219
+ // }
220
+ //
221
+ // // if (dataServers.value.length && !server.value) return
222
+ //
223
+ // const data: UI_I_DataServersListItem = {
224
+ // server_name: server.value,
225
+ // }
226
+ //
227
+ // const hasEqualItem = !!dataServers.value.find(
228
+ // (server: UI_I_DataServersListItem) => server.server_name === data.server_name
229
+ // )
230
+ //
231
+ // !hasEqualItem && dataServers.value.push(data)
232
+ //
233
+ // // if (nfsVersion === 'nfs-4.1') server.value = ''
234
+ // }
235
+ const onHideAlert = (): void => {
236
+ emits('hide-alert', 5)
237
+ }
238
+ const alertInfo = ref<boolean>(props.project === 'procurator')
239
+ </script>
240
+
241
+ <style lang="scss" scoped>
242
+ @import '~/assets/scss/common/mixins.scss';
243
+ .configuration {
244
+ @include flex($dir: column, $just: space-between);
245
+ height: 100%;
246
+ & > h6 {
247
+ font-weight: 500;
248
+ font-size: 14px;
249
+ padding-top: 6px;
250
+ }
251
+
252
+ &__alert-info {
253
+ :deep(.alert-text) {
254
+ font-size: 11px;
255
+ letter-spacing: normal;
256
+ }
257
+ }
258
+ .clr-form-control {
259
+ margin-top: 0;
260
+ display: flex;
261
+ flex-direction: row;
262
+
263
+ .clr-control-container {
264
+ min-height: 48px;
265
+ &.clr-error {
266
+ .clr-subtext,
267
+ .error-icon {
268
+ display: block;
269
+ }
270
+ }
271
+ .error-icon {
272
+ display: none;
273
+ }
274
+ .error-icon {
275
+ fill: #db2100;
276
+ width: 24px;
277
+ height: 24px;
278
+ }
279
+ }
280
+ }
281
+ &__servers-list {
282
+ height: 170px;
283
+ }
284
+ }
285
+ .flex-align-center {
286
+ &.input-action-wrapper {
287
+ width: 260px;
288
+ }
289
+ input {
290
+ width: 210px;
291
+ }
292
+ }
293
+ </style>
@@ -0,0 +1,5 @@
1
+ export interface UI_I_InitialValidationFields {
2
+ name: boolean
3
+ folder: boolean
4
+ server: boolean
5
+ }
@@ -0,0 +1,100 @@
1
+ <template>
2
+ <div class="popover">
3
+ <slot>
4
+ <span
5
+ class="popover__item"
6
+ data-id="delete-popover-text"
7
+ @click="onClickItem"
8
+ >{{ localization.removeMember }}</span
9
+ >
10
+ </slot>
11
+ </div>
12
+ </template>
13
+
14
+ <script lang="ts" setup>
15
+ import { UI_I_Localization } from '~/lib/models/interfaces'
16
+
17
+ const emits = defineEmits<{
18
+ (event: 'hide'): void
19
+ (event: 'click-item'): void
20
+ }>()
21
+
22
+ const localization = computed<UI_I_Localization>(() => useLocal())
23
+ const onClickItem = (): void => {
24
+ emits('click-item')
25
+ }
26
+ const hide = (): void => {
27
+ emits('hide')
28
+ }
29
+ const windowClick = (): void => {
30
+ hide()
31
+ }
32
+
33
+ onMounted(() => {
34
+ setTimeout(() => {
35
+ window.addEventListener('click', windowClick)
36
+ })
37
+ })
38
+ onUnmounted(() => {
39
+ window.removeEventListener('click', windowClick)
40
+ })
41
+ </script>
42
+
43
+ <style lang="scss" scoped>
44
+ @import '~/assets/scss/common/mixins.scss';
45
+
46
+ .popover {
47
+ @include flex($align: center, $just: space-between);
48
+ height: 38px;
49
+ background: var(--block-view-bg-color2);
50
+ padding: 0.3rem;
51
+ margin-left: 0.3rem;
52
+ border: 0.05rem solid var(--block-border-color);
53
+ box-shadow: 0 0.05rem 0.15rem hsl(0deg 0% 55% / 25%);
54
+ transform: translateY(-50%);
55
+ border-radius: 0.15rem;
56
+ font-weight: 400;
57
+ white-space: nowrap;
58
+ z-index: 600;
59
+ &:before,
60
+ &:after {
61
+ content: '';
62
+ position: absolute;
63
+ top: 50%;
64
+ right: 100%;
65
+ width: 0;
66
+ height: 0;
67
+ }
68
+ &:before {
69
+ margin-top: -0.3rem;
70
+ border-bottom: 0.3rem solid transparent;
71
+ border-top: 0.3rem solid transparent;
72
+ border-left: 0;
73
+ border-right: 0.3rem solid var(--block-border-color);
74
+ }
75
+ &:after {
76
+ margin-top: -0.25rem;
77
+ border-right: 0.25rem solid var(--block-view-bg-color2);
78
+ border-top: 0.25rem solid transparent;
79
+ border-bottom: 0.25rem solid transparent;
80
+ }
81
+ &__item {
82
+ @include text($fs: 14px, $c: var(--global-font-color3));
83
+ line-height: 1.15rem;
84
+ padding: 0.05rem 1.2rem 0;
85
+ &:hover {
86
+ background-color: var(--popover-hover-bg-color);
87
+ cursor: pointer;
88
+ }
89
+ }
90
+ }
91
+ </style>
92
+
93
+ <style>
94
+ :root {
95
+ --popover-hover-bg-color: #e8e8e8;
96
+ }
97
+ :root.dark-theme {
98
+ --popover-hover-bg-color: #28404d;
99
+ }
100
+ </style>
@@ -0,0 +1,124 @@
1
+ <template>
2
+ <div class="servers-list">
3
+ <atoms-table-data-grid
4
+ v-model:selected-row="selectedDisk"
5
+ v-model:page-size="pagination.pageSize"
6
+ v-model:page="pagination.page"
7
+ type="any"
8
+ class="data-table"
9
+ test-id="servers-list-table"
10
+ :head-items="headItems"
11
+ :body-items="bodyItems"
12
+ :total-items="1"
13
+ :total-pages="1"
14
+ off-select-by-row
15
+ :loading="loading"
16
+ hide-footer
17
+ >
18
+ <template #type="{ item }">
19
+ <div class="data-table__action-icon">
20
+ <atoms-popover
21
+ test-id="servers-list"
22
+ @click="onShowTooltipForRemove(item)"
23
+ >
24
+ <template #elem>
25
+ <atoms-the-icon name="ellipsis-vertical" />
26
+ </template>
27
+ <template #content>
28
+ <common-wizards-datastore-add-nfs-configuration-servers-list-delete-popover
29
+ v-if="showTooltip && item[0].id === selectedServerForRemove"
30
+ class="data-table__popover"
31
+ @hide="showTooltip = false"
32
+ @click-item="onRemoveServerFromList(item)"
33
+ />
34
+ </template>
35
+ </atoms-popover>
36
+ </div>
37
+ </template>
38
+ </atoms-table-data-grid>
39
+ </div>
40
+ </template>
41
+
42
+ <script lang="ts" setup>
43
+ import {
44
+ UI_I_HeadItem,
45
+ UI_I_BodyItem,
46
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
47
+ import { UI_I_Localization } from '~/lib/models/interfaces'
48
+ import { UI_I_Pagination } from '~/lib/models/table/interfaces'
49
+ import { UI_I_DataServersListItem } from '~/components/common/wizards/datastore/add/nfs/configuration/serversList/lib/models/interfaces'
50
+ import * as serversTable from '~/components/common/wizards/datastore/add/nfs/configuration/serversList/lib/config/serversListConfig'
51
+
52
+ const props = defineProps<{
53
+ dataTable: UI_I_DataServersListItem[] | []
54
+ loading?: boolean
55
+ }>()
56
+ const emits = defineEmits<{
57
+ (event: 'update:data-table', value: UI_I_DataServersListItem[]): void
58
+ }>()
59
+
60
+ const localization = computed<UI_I_Localization>(() => useLocal())
61
+
62
+ const selectedDisk = ref<number | null>(null)
63
+
64
+ const pagination = ref<UI_I_Pagination>({
65
+ page: 1,
66
+ pageSize: 34,
67
+ })
68
+
69
+ // const columnKeys = ref<UI_I_ColumnKey[]>(serversTable.columnKeys(localization.value))
70
+ const headItems = computed<UI_I_HeadItem[]>(() =>
71
+ serversTable.headItems(localization.value)
72
+ )
73
+
74
+ const bodyItems = ref<UI_I_BodyItem[][]>([])
75
+ watch(
76
+ () => props.dataTable,
77
+ (newValue) => {
78
+ if (!newValue?.length) {
79
+ bodyItems.value = []
80
+ return
81
+ }
82
+
83
+ bodyItems.value = serversTable.bodyItems(newValue)
84
+ },
85
+ { deep: true, immediate: true }
86
+ )
87
+
88
+ const selectedServerForRemove = ref<number | null>(null)
89
+ const showTooltip = ref<boolean>(false)
90
+ const onShowTooltipForRemove = (server: UI_I_BodyItem[]): void => {
91
+ selectedServerForRemove.value = server[0].id
92
+ showTooltip.value = true
93
+ }
94
+ const onRemoveServerFromList = (removeItem: UI_I_BodyItem[]): void => {
95
+ const { text } = removeItem[0]
96
+
97
+ const serverList = props.dataTable.filter(
98
+ (server: UI_I_DataServersListItem) => server.server_name !== text
99
+ )
100
+ emits('update:data-table', serverList)
101
+ showTooltip.value = false
102
+ }
103
+ </script>
104
+
105
+ <style lang="scss" scoped>
106
+ .servers-list {
107
+ height: inherit;
108
+ .data-table {
109
+ &__action-icon {
110
+ width: 16px;
111
+ height: 16px;
112
+ cursor: pointer;
113
+ position: relative;
114
+ fill: var(--ellipsis-vertical-icon-color);
115
+ }
116
+
117
+ height: inherit;
118
+ :deep(.datagrid-outer-wrapper) {
119
+ height: inherit;
120
+ padding-top: 0;
121
+ }
122
+ }
123
+ }
124
+ </style>
@@ -0,0 +1,41 @@
1
+ import {
2
+ UI_I_HeadItem,
3
+ UI_I_BodyItem,
4
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
5
+ import {
6
+ constructHeadItem,
7
+ } from '~/components/atoms/table/dataGrid/lib/utils/constructDataTable'
8
+ import { UI_I_Localization } from '~/lib/models/interfaces'
9
+ import { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
10
+ import { serversTableItemsKeys } from '~/components/common/wizards/datastore/add/nfs/configuration/serversList/lib/config/tableKeys'
11
+
12
+ const getItems = (
13
+ localization: UI_I_Localization
14
+ ): [string, boolean, string, string][] => {
15
+ return [
16
+ [localization.serversToBeAdded, true, '96px', serversTableItemsKeys[0]],
17
+ ]
18
+ }
19
+
20
+ export const headItems = (localization: UI_I_Localization): UI_I_HeadItem[] => {
21
+ const result: UI_I_HeadItem[] = []
22
+ getItems(localization).forEach((item) => {
23
+ const col = 'type'
24
+ result.push(constructHeadItem(col, item[0], item[3], false, item[2]))
25
+ })
26
+ return result
27
+ }
28
+
29
+ export const bodyItems = (data: any[]): UI_I_BodyItem[][] => {
30
+ const bodyItems: UI_I_BodyItem[][] = []
31
+ data.forEach((server, key) => {
32
+ bodyItems.push([
33
+ {
34
+ key: 'col0',
35
+ text: server[serversTableItemsKeys[0]],
36
+ id: key,
37
+ },
38
+ ])
39
+ })
40
+ return bodyItems
41
+ }
@@ -0,0 +1,3 @@
1
+ import { T_ServersTableItemsTuple } from '~/components/common/wizards/datastore/add/nfs/configuration/serversList/lib/models/types'
2
+
3
+ export const serversTableItemsKeys: T_ServersTableItemsTuple = ['server_name']
@@ -0,0 +1,3 @@
1
+ export interface UI_I_DataServersListItem {
2
+ server_name: string
3
+ }
@@ -0,0 +1 @@
1
+ export type T_ServersTableItemsTuple = ['server_name']
@@ -0,0 +1,55 @@
1
+ <template>
2
+ <div class="kerberos-auth">
3
+ <atoms-alert
4
+ v-show="isShowAlert"
5
+ test-id="kerberos-authentication"
6
+ status="alert-warning"
7
+ :items="[localization.kerberosAuthenticationAlert]"
8
+ @remove="isShowAlert = false"
9
+ />
10
+
11
+ <div class="kerberos-auth__inner">
12
+ <div v-for="item in kerberosTypes" :key="item.value" class="radio">
13
+ <input
14
+ :id="item.label"
15
+ v-model="kerberosType"
16
+ :data-id="item.testId"
17
+ type="radio"
18
+ :value="item.value"
19
+ />
20
+ <label :for="item.label">
21
+ {{ item.label }}
22
+ </label>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </template>
27
+
28
+ <script lang="ts" setup>
29
+ import { UI_I_Localization } from '~/lib/models/interfaces'
30
+ import { UI_I_RadioOption } from '~/components/common/select/radio/lib/models/interfaces'
31
+ import { UI_T_KerberosAuthentication } from '~/components/common/wizards/datastore/add/lib/models/types'
32
+ import { kerberosOptionsFunc } from '~/components/common/wizards/datastore/add/nfs/kerberosAuthentication/lib/config/radioOptions'
33
+
34
+ const localization = computed<UI_I_Localization>(() => useLocal())
35
+
36
+ const kerberosType = ref<UI_T_KerberosAuthentication>('dont-use')
37
+ const isShowAlert = ref<boolean>(true)
38
+
39
+ const kerberosTypes = readonly<UI_I_RadioOption[]>(
40
+ kerberosOptionsFunc(localization.value)
41
+ )
42
+ </script>
43
+
44
+ <style lang="scss" scoped>
45
+ .kerberos-auth {
46
+ &__inner {
47
+ margin-top: 12px;
48
+ }
49
+ }
50
+
51
+ input[type='radio']:focus:checked + label::before,
52
+ input[type='radio']:focus + label::before {
53
+ box-shadow: inset 0 0 0 0.25rem #0094d2;
54
+ }
55
+ </style>
@@ -0,0 +1,27 @@
1
+ import { UI_I_Localization } from '~/lib/models/interfaces'
2
+ import { UI_I_RadioOption } from '~/components/common/select/radio/lib/models/interfaces'
3
+
4
+ export const kerberosOptionsFunc = (
5
+ localization: UI_I_Localization
6
+ ): UI_I_RadioOption[] => {
7
+ return [
8
+ {
9
+ label: localization.dontUseKerberosAuthentication,
10
+ value: 'dont-use',
11
+ disabled: false,
12
+ testId: 'dont-use-value',
13
+ },
14
+ {
15
+ label: localization.useKerberosAuthenticationKrb5,
16
+ value: 'use-only-krb5',
17
+ disabled: false,
18
+ testId: 'use-only-krb5-value',
19
+ },
20
+ {
21
+ label: localization.useKerberosAuthenticationIntegrity,
22
+ value: 'use-integrity',
23
+ disabled: false,
24
+ testId: 'use-integrity-value',
25
+ },
26
+ ]
27
+ }
@@ -0,0 +1,26 @@
1
+ <template>
2
+ <section class="nfs-version">
3
+ <common-select-radio-group
4
+ v-model="selectedNfsVersionLocal"
5
+ :options="nfsVersion"
6
+ />
7
+ </section>
8
+ </template>
9
+
10
+ <script lang="ts" setup>
11
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
12
+ import type { UI_I_RadioOption } from '~/components/common/select/radio/lib/models/interfaces'
13
+ import type { UI_T_NfsType } from '~/components/common/wizards/datastore/add/lib/models/types'
14
+ import { nfsVersionFunc } from '~/components/common/wizards/datastore/add/nfs/version/lib/config/versionOptions'
15
+
16
+ const selectedNfsVersionLocal = defineModel<UI_T_NfsType>()
17
+
18
+ const localization = computed<UI_I_Localization>(() => useLocal())
19
+
20
+ const nfsVersion = ref<UI_I_RadioOption[]>(nfsVersionFunc(localization.value))
21
+ </script>
22
+
23
+ <style lang="scss" scoped>
24
+ .nfs-version {
25
+ }
26
+ </style>