bfg-common 1.5.211 → 1.5.213

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 (92) hide show
  1. package/components/common/backup/lib/utils/getBackupOrBackupStorageId.ts +29 -0
  2. package/components/common/backup/storage/actions/add/Add.vue +36 -0
  3. package/components/common/backup/storage/actions/add/temp/Add.vue +508 -0
  4. package/components/common/backup/storage/actions/add/temp/lib/config/stepItems.ts +203 -0
  5. package/components/common/backup/storage/actions/add/temp/lib/models/interfaces.ts +58 -0
  6. package/components/common/backup/storage/actions/add/temp/lib/models/types.ts +14 -0
  7. package/components/common/backup/storage/actions/add/temp/lib/utils.ts +70 -0
  8. package/components/common/backup/storage/actions/add/temp/local/Local.vue +65 -0
  9. package/components/common/backup/storage/actions/add/temp/local/createName/CreateName.vue +158 -0
  10. package/components/common/backup/storage/actions/add/temp/local/createName/lib/config/defaultForm.ts +15 -0
  11. package/components/common/backup/storage/actions/add/temp/nfs/Nfs.vue +106 -0
  12. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/Accessibility.vue +104 -0
  13. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/lib/config/tabsPannel.ts +25 -0
  14. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/lib/models/interfaces.ts +9 -0
  15. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/lib/models/types.ts +5 -0
  16. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/tablesView/TablesView.vue +141 -0
  17. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/tablesView/lib/config/compatibleTable.ts +62 -0
  18. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/tablesView/lib/config/hostsTableItems.ts +53 -0
  19. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/tablesView/lib/config/incompatibleTable.ts +68 -0
  20. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/tablesView/lib/config/tableKeys.ts +15 -0
  21. package/components/common/backup/storage/actions/add/temp/nfs/configuration/Configuration.vue +469 -0
  22. package/components/common/backup/storage/actions/add/temp/nfs/configuration/lib/config/defaultForm.ts +51 -0
  23. package/components/common/backup/storage/actions/add/temp/nfs/configuration/lib/models/interfaces.ts +14 -0
  24. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/DeletePopover.vue +99 -0
  25. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/ServersList.vue +125 -0
  26. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/lib/config/serversListConfig.ts +40 -0
  27. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/lib/config/tableKeys.ts +3 -0
  28. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/lib/models/interfaces.ts +13 -0
  29. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/lib/models/types.ts +1 -0
  30. package/components/common/backup/storage/actions/add/temp/nfs/kerberosAuthentication/KerberosAuthentication.vue +55 -0
  31. package/components/common/backup/storage/actions/add/temp/nfs/kerberosAuthentication/lib/config/radioOptions.ts +27 -0
  32. package/components/common/backup/storage/actions/add/temp/nfs/version/Version.vue +42 -0
  33. package/components/common/backup/storage/actions/add/temp/nfs/version/lib/config/versionOptions.ts +22 -0
  34. package/components/common/backup/storage/actions/add/temp/readyComplete/ReadyComplete.vue +85 -0
  35. package/components/common/backup/storage/actions/add/temp/readyComplete/lib/config/propertiesDetails.ts +139 -0
  36. package/components/common/backup/storage/actions/add/temp/readyComplete/lib/models/interfaces.ts +4 -0
  37. package/components/common/backup/storage/actions/add/temp/samba/Samba.vue +95 -0
  38. package/components/common/backup/storage/actions/add/temp/samba/accessibility/Accessibility.vue +104 -0
  39. package/components/common/backup/storage/actions/add/temp/samba/accessibility/lib/config/tabsPannel.ts +25 -0
  40. package/components/common/backup/storage/actions/add/temp/samba/accessibility/lib/models/interfaces.ts +9 -0
  41. package/components/common/backup/storage/actions/add/temp/samba/accessibility/lib/models/types.ts +5 -0
  42. package/components/common/backup/storage/actions/add/temp/samba/accessibility/tablesView/TablesView.vue +141 -0
  43. package/components/common/backup/storage/actions/add/temp/samba/accessibility/tablesView/lib/config/compatibleTable.ts +62 -0
  44. package/components/common/backup/storage/actions/add/temp/samba/accessibility/tablesView/lib/config/hostsTableItems.ts +53 -0
  45. package/components/common/backup/storage/actions/add/temp/samba/accessibility/tablesView/lib/config/incompatibleTable.ts +68 -0
  46. package/components/common/backup/storage/actions/add/temp/samba/accessibility/tablesView/lib/config/tableKeys.ts +15 -0
  47. package/components/common/backup/storage/actions/add/temp/samba/configuration/Configuration.vue +470 -0
  48. package/components/common/backup/storage/actions/add/temp/samba/configuration/lib/config/defaultForm.ts +51 -0
  49. package/components/common/backup/storage/actions/add/temp/samba/configuration/lib/models/interfaces.ts +14 -0
  50. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/DeletePopover.vue +99 -0
  51. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/ServersList.vue +124 -0
  52. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/lib/config/serversListConfig.ts +40 -0
  53. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/lib/config/tableKeys.ts +3 -0
  54. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/lib/models/interfaces.ts +13 -0
  55. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/lib/models/types.ts +1 -0
  56. package/components/common/backup/storage/actions/add/temp/samba/kerberosAuthentication/KerberosAuthentication.vue +55 -0
  57. package/components/common/backup/storage/actions/add/temp/samba/kerberosAuthentication/lib/config/radioOptions.ts +27 -0
  58. package/components/common/backup/storage/actions/add/temp/sharedStorm/SharedStorm.vue +80 -0
  59. package/components/common/backup/storage/actions/add/temp/sharedStorm/createName/CreateName.vue +156 -0
  60. package/components/common/backup/storage/actions/add/temp/sharedStorm/createName/lib/config/defaultForm.ts +15 -0
  61. package/components/common/backup/storage/actions/add/temp/sharedStorm/storage/Storage.vue +71 -0
  62. package/components/common/backup/storage/actions/add/temp/sharedStorm/storage/lib/config/defaultForm.ts +15 -0
  63. package/components/common/backup/storage/actions/add/temp/types/Types.vue +78 -0
  64. package/components/common/backup/storage/actions/add/temp/types/lib/config/typeOptions.ts +52 -0
  65. package/components/common/backup/storage/actions/delete/Delete.vue +65 -0
  66. package/components/common/backup/storage/actions/delete/lib/models/interfaces.ts +5 -0
  67. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  68. package/components/common/browse/lib/models/interfaces.ts +5 -5
  69. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  70. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  71. package/components/common/diagramMain/lib/models/types.ts +21 -21
  72. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  73. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  74. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  75. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  76. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  77. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  78. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  79. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  80. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  81. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  82. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  83. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  84. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  85. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  86. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  87. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  88. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  89. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  90. package/components/common/diagramMain/port/Ports.vue +47 -47
  91. package/components/common/pages/shortcuts/block/BlockNew.vue +2 -7
  92. package/package.json +2 -2
@@ -0,0 +1,203 @@
1
+ import type { UI_I_VerticalStepItem } from '~/components/atoms/lib/models/interfaces'
2
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
3
+ import type {
4
+ UI_T_WizardDatastoreMode,
5
+ UI_T_DatastoreType,
6
+ UI_T_NfsType,
7
+ } from '~/components/common/backup/storage/actions/add/temp/lib/models/types'
8
+
9
+ const stepFromSamba = (
10
+ localization: UI_I_Localization,
11
+ mode: UI_T_WizardDatastoreMode
12
+ ): UI_I_VerticalStepItem[] => {
13
+ const steps = [
14
+ {
15
+ text: localization.common.type,
16
+ disabled: false,
17
+ complete: false,
18
+ testId: 'type',
19
+ },
20
+ {
21
+ text: localization.common.nameAndConfiguration,
22
+ disabled: true,
23
+ complete: false,
24
+ testId: 'name-and-configuration',
25
+ },
26
+ ]
27
+
28
+ if (mode === 'sphere') {
29
+ steps.push({
30
+ text: localization.common.hostsAccessibility,
31
+ disabled: true,
32
+ complete: false,
33
+ testId: 'hosts-accessibility',
34
+ })
35
+ }
36
+
37
+ steps.push({
38
+ text: localization.common.readyComplete,
39
+ disabled: true,
40
+ complete: false,
41
+ testId: 'ready-complete',
42
+ })
43
+
44
+ return steps
45
+ }
46
+
47
+ const stepFromNfs = (
48
+ localization: UI_I_Localization,
49
+ mode: UI_T_WizardDatastoreMode
50
+ ): UI_I_VerticalStepItem[] => {
51
+ const steps = [
52
+ {
53
+ text: localization.common.type,
54
+ disabled: false,
55
+ complete: false,
56
+ testId: 'type',
57
+ },
58
+ // { text: localization.common.nfsVersion, disabled: true, complete: false,
59
+ // testId: 'nfs-version' },
60
+ {
61
+ text: localization.common.nameAndConfiguration,
62
+ disabled: true,
63
+ complete: false,
64
+ testId: 'name-and-configuration'
65
+ },
66
+ ]
67
+
68
+ if (mode === 'sphere') {
69
+ steps.push({
70
+ text: localization.common.hostsAccessibility,
71
+ disabled: true,
72
+ complete: false,
73
+ testId: 'hosts-accessibility'
74
+ })
75
+ }
76
+
77
+ steps.push({
78
+ text: localization.common.readyComplete,
79
+ disabled: true,
80
+ complete: false,
81
+ testId: 'ready-complete'
82
+ })
83
+
84
+ return steps
85
+ }
86
+
87
+ // const stemFromVvol = (localization: UI_I_Localization): UI_I_VerticalStepItem[] => {
88
+ // return [
89
+ // { text: localization.common.type, disabled: false, complete: false },
90
+ // {
91
+ // text: localization.common.nameAndContainerSelection,
92
+ // disabled: true,
93
+ // complete: false,
94
+ // },
95
+ // { text: localization.common.hostsAccessibility, disabled: true, complete: false },
96
+ // { text: localization.common.readyComplete, disabled: true, complete: false },
97
+ // ]
98
+ // }
99
+ const stemFromLocal = (
100
+ localization: UI_I_Localization,
101
+ mode: UI_T_WizardDatastoreMode
102
+ ): UI_I_VerticalStepItem[] => {
103
+ const isModeProcurator = mode === 'procurator'
104
+ return [
105
+ { text: localization.common.type, disabled: false, complete: false, testId: 'type', },
106
+ {
107
+ text: localization.common[
108
+ isModeProcurator ? 'selectDatastoreName' : 'nameAndDeviceSelection'
109
+ ],
110
+ disabled: true,
111
+ complete: false,
112
+ testId: 'datastore-name',
113
+ },
114
+ {
115
+ text: localization.common.readyComplete,
116
+ disabled: true,
117
+ complete: false,
118
+ testId: 'ready-complete'
119
+ },
120
+ ]
121
+ }
122
+ const stemFromSharedStorm = (
123
+ localization: UI_I_Localization,
124
+ ): UI_I_VerticalStepItem[] => {
125
+ return [
126
+ { text: localization.common.type, disabled: false, complete: false, testId: 'type', },
127
+ {
128
+ text: localization.common.selectDatastoreName,
129
+ disabled: true,
130
+ complete: false,
131
+ testId: 'datastore-name',
132
+ },
133
+ {
134
+ text: localization.common.selectStorage,
135
+ disabled: true,
136
+ complete: false,
137
+ testId: 'datastore-storage',
138
+ },
139
+ {
140
+ text: localization.common.readyComplete,
141
+ disabled: true,
142
+ complete: false,
143
+ testId: 'ready-complete'
144
+ },
145
+ ]
146
+ }
147
+
148
+ export const stepItemsFunc = (
149
+ localization: UI_I_Localization,
150
+ type: UI_T_DatastoreType,
151
+ mode: UI_T_WizardDatastoreMode
152
+ ): UI_I_VerticalStepItem[] => {
153
+ const handlers = {
154
+ samba: stepFromSamba,
155
+ nfs: stepFromNfs,
156
+ local: stemFromLocal,
157
+ 'shared-storm': stemFromSharedStorm,
158
+ }
159
+
160
+ return handlers[type](localization, mode)
161
+ }
162
+
163
+ interface SubTitles {
164
+ samba: string[]
165
+ nfs: string[]
166
+ local: string[]
167
+ 'shared-storm': string[]
168
+ }
169
+
170
+ export const subTitleFunc = (
171
+ localization: UI_I_Localization,
172
+ type: UI_T_DatastoreType,
173
+ position: number,
174
+ version?: UI_T_NfsType
175
+ ): string => {
176
+ position = position - 1
177
+
178
+ if (type === 'nfs' && version === 'nfs-3' && position === 2) {
179
+ position = position + 1
180
+ }
181
+
182
+ const descriptionForNfs: string[] = [
183
+ localization.common.selectNfsVersion,
184
+ localization.common.nameAndConfigurationDesc,
185
+ // localization.common.kerberosAuthenticationDesc.replace(
186
+ // '{0}',
187
+ // version?.toUpperCase() || ''
188
+ // ),
189
+ // localization.common.hostsAccessibilityDesc,
190
+ ]
191
+ const descriptionForSamba: string[] = [
192
+ localization.common.nameAndConfigurationDesc,
193
+ ]
194
+
195
+ const subTitles: SubTitles = {
196
+ nfs: descriptionForNfs,
197
+ samba: descriptionForSamba,
198
+ local: [],
199
+ 'shared-storm': [],
200
+ }
201
+
202
+ return subTitles[type][position]
203
+ }
@@ -0,0 +1,58 @@
1
+ import type { UI_T_NfsType } from '~/components/common/backup/storage/actions/add/temp/lib/models/types'
2
+
3
+ // TODO refactoring
4
+ export interface UI_I_NfsPoolNameForm<T = number> {
5
+ server: string
6
+ folder: string
7
+ user: string
8
+ password: string
9
+ version: T
10
+ readonly: boolean
11
+ hosts: string[]
12
+ }
13
+ export interface UI_I_CreateDatastoreBodyRequest {
14
+ name: string
15
+ pool_name: string
16
+ type_code: number
17
+ }
18
+ interface I_NfsForm extends UI_I_NfsPoolNameForm<UI_T_NfsType> {
19
+ name: string
20
+ type_code: number
21
+ }
22
+ interface I_SambaForm {
23
+ name: string
24
+ type_code: number
25
+ server: string
26
+ folder: string
27
+ user: string
28
+ password: string
29
+ readonly: boolean
30
+ hosts: string[]
31
+ }
32
+ interface I_SharedStormForm {
33
+ name: string
34
+ storm_id: string
35
+ type_code: number
36
+ }
37
+
38
+ export interface UI_I_CreateDatastoreForm {
39
+ local: {
40
+ name: string
41
+ hosts: string[]
42
+ type_code: number
43
+ }
44
+ nfs: I_NfsForm
45
+ samba: I_SambaForm
46
+ sharedStorm: I_SharedStormForm
47
+ }
48
+
49
+ export interface UI_I_CreateStorageUuid {
50
+ code: number
51
+ pool_name: string
52
+ }
53
+
54
+ export interface I_SharedStormData {
55
+ name: string
56
+ storm_id: string
57
+ storm_name: string
58
+ }
@@ -0,0 +1,14 @@
1
+ export type UI_T_DatastoreType = 'local' | 'samba' | 'nfs' | 'shared-storm'
2
+ export type UI_T_NfsType = 'nfs-3' | 'nfs-4.1'
3
+ export type UI_T_VmfsType = 'vmfs-6' | 'vmfs-5'
4
+ export type UI_T_KerberosAuthentication =
5
+ | 'dont-use'
6
+ | 'use-only-krb5'
7
+ | 'use-integrity'
8
+
9
+ export type UI_T_WizardDatastoreMode = 'procurator' | 'sphere'
10
+
11
+ export interface UI_I_DatastoreValidityName {
12
+ valid: boolean
13
+ msg: any
14
+ }
@@ -0,0 +1,70 @@
1
+ import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
2
+ import type {
3
+ UI_I_DatastoreValidityName,
4
+ UI_T_WizardDatastoreMode,
5
+ } from '~/components/common/backup/storage/actions/add/temp/lib/models/types'
6
+ // import {
7
+ // UI_I_CreateDatastoreBodyRequest,
8
+ // I_CreateStorageUuid,
9
+ // } from '~/components/common/wizards/datastore/add/lib/models/interfaces'
10
+
11
+ // type T_StoragePoolNameResult = {
12
+ // data: I_CreateStorageUuid
13
+ // msg: API_UI_I_Error
14
+ // }
15
+
16
+ // type T_NullableStoragePoolNameResult = {
17
+ // [K in keyof T_StoragePoolNameResult]: T_StoragePoolNameResult[K] | null
18
+ // }
19
+
20
+ export const checkValidityName = async (
21
+ name: string,
22
+ mode: UI_T_WizardDatastoreMode = 'procurator'
23
+ ): Promise<UI_I_DatastoreValidityName> => {
24
+ // TODO move to projects!!!
25
+
26
+ const kind = 10 // TODO move in global space
27
+ const url =
28
+ mode === 'procurator'
29
+ ? `/ui/ds/validate?name=${encodeURIComponent(name)}`
30
+ : `/ui/object/validate_name?name=${encodeURIComponent(name)}&kind=${kind}`
31
+ // @ts-ignore
32
+ const { error } = await useMyFetch<null, API_UI_I_Error>(url, {
33
+ method: 'GET',
34
+ })
35
+
36
+ if (error.value && error.value.data.error_code !== 0) {
37
+ const existError = error.value.data?.error_message || error.value.data
38
+
39
+ return { valid: false, msg: existError }
40
+ }
41
+
42
+ return { valid: true, msg: null }
43
+ }
44
+
45
+ // export const getStoragePoolName = async <T>(
46
+ // url: string,
47
+ // params: T
48
+ // ): Promise<T_NullableStoragePoolNameResult> => {
49
+ // const { data, error } = await useMyFetch<I_CreateStorageUuid, API_UI_I_Error>(
50
+ // url,
51
+ // {
52
+ // method: 'POST',
53
+ // body: params,
54
+ // }
55
+ // )
56
+ //
57
+ // if (error.value) return { data: null, msg: error.value }
58
+ //
59
+ // return { data: data.value, msg: null }
60
+ // }
61
+
62
+ // export const createDatastore = async <T = UI_I_CreateDatastoreBodyRequest>(
63
+ // params: T
64
+ // ): Promise<API_UI_I_Error> => {
65
+ // const { error } = await useMyFetch<any, API_UI_I_Error>('/api/v1/pn/ds', {
66
+ // method: 'POST',
67
+ // body: params,
68
+ // })
69
+ // return error.value
70
+ // }
@@ -0,0 +1,65 @@
1
+ <template>
2
+ <div class="local-step flex flex-col h-full">
3
+ <span
4
+ v-if="mode === 'sphere' && props.stepPosition === 1"
5
+ class="vmfs-container__desc"
6
+ >
7
+ {{ localization.common.nameAndDeviceSelectionDesc }}
8
+ </span>
9
+
10
+ <common-backup-storage-actions-add-temp-local-create-name
11
+ v-show="mode === 'procurator' && props.stepPosition === 1"
12
+ :local-create-name-submit="props.localCreateNameSubmit"
13
+ test-id="local"
14
+ @loading="(e) => emits('loading', e)"
15
+ @submit="(e) => emits('submit', e)"
16
+ />
17
+
18
+ <common-backup-storage-actions-add-temp-shared-storm-device-selection
19
+ v-show="mode === 'sphere' && props.stepPosition === 1"
20
+ v-model:lun-disk="selectedLunDisk"
21
+ mode="sphere"
22
+ :device-selection-submit="props.localCreateNameSubmit"
23
+ :step-position="props.stepPosition"
24
+ :datastore-type="props.datastoreType"
25
+ :datacenter-hosts="props.datacenterHosts"
26
+ :is-main-filter="props.isMainFilter"
27
+ @loading="(e) => emits('loading', e)"
28
+ @submit="(e) => emits('submit', e)"
29
+ @main-filter="emits('main-filter', $event)"
30
+ />
31
+ </div>
32
+ </template>
33
+
34
+ <script lang="ts" setup>
35
+ import type { UI_T_Project } from '~/lib/models/types'
36
+ import type { UI_I_CreateStorageLunDiskItem } from '~/components/common/wizards/datastore/add/steps/nameAndDevice/table/lib/models/interfaces'
37
+ import type { UI_I_SelectHostOptions } from '~/components/common/wizards/datastore/add/steps/nameAndDevice/lib/models/interfaces'
38
+ import type { UI_T_DatastoreTypeCode } from '~/components/common/wizards/datastore/add/lib/models/types'
39
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
40
+
41
+ const props = defineProps<{
42
+ stepPosition: number
43
+ localCreateNameSubmit: number
44
+ datastoreType: UI_T_DatastoreTypeCode
45
+ mode: UI_T_Project
46
+ datacenterHosts?: UI_I_SelectHostOptions[]
47
+ isMainFilter?: boolean
48
+ }>()
49
+ const emits = defineEmits<{
50
+ (event: 'loading', value: boolean): void
51
+ (event: 'submit', value: string): void
52
+ (event: 'main-filter', value: string): void
53
+ }>()
54
+
55
+ const localization = computed<UI_I_Localization>(() => useLocal())
56
+
57
+ const selectedLunDisk = ref<UI_I_CreateStorageLunDiskItem[]>([])
58
+ </script>
59
+
60
+ <style lang="scss" scoped>
61
+ .local-step {
62
+ overflow-y: auto;
63
+ overflow-x: hidden;
64
+ }
65
+ </style>
@@ -0,0 +1,158 @@
1
+ <template>
2
+ <div class="create-datastore-name">
3
+ <atoms-alert
4
+ v-show="errors.length"
5
+ test-id="datastore-creat-name"
6
+ status="alert-danger"
7
+ :items="errors"
8
+ @remove="onRemoveValidationErrors"
9
+ />
10
+
11
+ <div class="clr-form-control clr-row flex flex-row">
12
+ <label for="datastore-name" class="clr-control-label clr-col-md-2">{{
13
+ localization.common.datastoreName
14
+ }}</label>
15
+
16
+ <div class="clr-control-container" :class="nameErrorText && 'clr-error'">
17
+ <div class="flex-align-center">
18
+ <input
19
+ id="datastore-name"
20
+ v-model.trim="form.name.value"
21
+ :data-id="`${props.testId}-backup-storage-name-input`"
22
+ type="text"
23
+ class="clr-input"
24
+ @blur="onBlurInputName"
25
+ @input="onInputName"
26
+ />
27
+ <atoms-the-icon class="error-icon" name="info-circle" />
28
+ </div>
29
+
30
+ <div class="clr-subtext ng-star-inserted">
31
+ {{ nameErrorText }}
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </template>
37
+
38
+ <script lang="ts" setup>
39
+ import type { UI_I_ValidationTouchResult } from '~/lib/models/plugins/validation/interfaces'
40
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
41
+ import type { UI_I_FormValidationDataStore } from '~/components/common/wizards/datastore/add/sharedStorm/deviceSelection/lib/models/interfaces'
42
+ import { defaultFormFunc } from '~/components/common/backup/storage/actions/add/temp/local/createName/lib/config/defaultForm'
43
+ import { checkValidityName } from '~/components/common/backup/storage/actions/add/temp/lib/utils'
44
+
45
+ const props = defineProps<{
46
+ localCreateNameSubmit: number
47
+ testId: string
48
+ }>()
49
+ const emits = defineEmits<{
50
+ (event: 'loading', value: boolean): void
51
+ (event: 'submit', value: string): void
52
+ }>()
53
+
54
+ const localization = computed<UI_I_Localization>(() => useLocal())
55
+ const { $validation } = useNuxtApp()
56
+
57
+ const validation = $validation.call({})
58
+ const defaultForm: UI_I_FormValidationDataStore = defaultFormFunc(
59
+ localization.value
60
+ )
61
+ const form = ref<UI_I_FormValidationDataStore>(useDeepCopy(defaultForm))
62
+
63
+ const setForm = (): void => {
64
+ form.value = useDeepCopy(defaultForm)
65
+ validation.setForm(form)
66
+ }
67
+ setForm()
68
+
69
+ const validForm = ref<UI_I_ValidationTouchResult | null>(null)
70
+
71
+ /* Validation for Name input */
72
+ const isInitNameValidation = ref<boolean>(false)
73
+ const onBlurInputName = (): void => {
74
+ validForm.value = validation.touch()
75
+ isInitNameValidation.value = true
76
+ }
77
+ const onInputName = (): void => {
78
+ validForm.value = validation.touch()
79
+ }
80
+ const nameErrorText = computed<string>(() => {
81
+ if (!isInitNameValidation.value) return ''
82
+ return validForm.value?.errors?.name?.[0] || ''
83
+ })
84
+ /* Validation Name input end */
85
+
86
+ const errors = ref<string[]>([])
87
+ const showValidationErrors = (data: string[]): void => {
88
+ errors.value = data
89
+ }
90
+ const onRemoveValidationErrors = (): void => {
91
+ errors.value = []
92
+ }
93
+ const submit = async (): Promise<void> => {
94
+ const name = form.value.name.value
95
+
96
+ if (!name) {
97
+ validForm.value = validation.touch()
98
+ isInitNameValidation.value = true
99
+ if (nameErrorText.value) return
100
+ }
101
+
102
+ if (name) {
103
+ emits('loading', true)
104
+
105
+ const { valid, msg } = await checkValidityName(name)
106
+
107
+ emits('loading', false)
108
+
109
+ if (!valid) {
110
+ showValidationErrors([msg])
111
+ return
112
+ }
113
+ }
114
+
115
+ onRemoveValidationErrors()
116
+ emits('submit', name)
117
+ }
118
+ watch(
119
+ () => props.localCreateNameSubmit,
120
+ () => {
121
+ submit()
122
+ }
123
+ )
124
+ </script>
125
+
126
+ <style lang="scss" scoped>
127
+ .create-datastore-name {
128
+ &__alert-info {
129
+ :deep(.alert-text) {
130
+ font-size: 11px;
131
+ letter-spacing: normal;
132
+ }
133
+ }
134
+ .clr-form-control {
135
+ .clr-control-container {
136
+ min-height: 48px;
137
+ input {
138
+ width: 375px;
139
+ }
140
+ &.clr-error {
141
+ .clr-subtext,
142
+ .error-icon {
143
+ display: block;
144
+ }
145
+ }
146
+ .clr-subtext,
147
+ .error-icon {
148
+ display: none;
149
+ }
150
+ .error-icon {
151
+ fill: #db2100;
152
+ width: 24px;
153
+ height: 24px;
154
+ }
155
+ }
156
+ }
157
+ }
158
+ </style>
@@ -0,0 +1,15 @@
1
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
2
+
3
+ export const defaultFormFunc = (localization: UI_I_Localization): any => {
4
+ return {
5
+ name: {
6
+ value: '',
7
+ validations: [
8
+ {
9
+ value: 'required',
10
+ errorText: localization.common.specifyDatastoreName,
11
+ },
12
+ ],
13
+ },
14
+ }
15
+ }
@@ -0,0 +1,106 @@
1
+ <template>
2
+ <div class="nfs-container flex flex-col h-full">
3
+ <span class="nfs-container__desc">{{ stepSubTitle }}</span>
4
+
5
+ <!-- <common-backup-storage-actions-add-temp-nfs-version-->
6
+ <!-- v-show="props.stepPosition === 1"-->
7
+ <!-- v-model:version="nfsVersion"-->
8
+ <!-- />-->
9
+
10
+ <common-backup-storage-actions-add-temp-nfs-configuration
11
+ v-show="props.stepPosition === 1"
12
+ :mode="props.mode"
13
+ :nfs-version="nfsVersion"
14
+ :nfs-configuration-submit="nfsConfigurationSubmit"
15
+ @loading="(e) => emits('loading', e)"
16
+ @next="onChangeConfigurationAndNext"
17
+ />
18
+
19
+ <!-- <templates-home-datastore-actions-add-nfs-kerberos-authentication-->
20
+ <!-- v-show="nfsVersion === 'nfs-4.1' && props.stepPosition === 3"-->
21
+ <!-- :nfs-version="nfsVersion"-->
22
+ <!-- />--><!-- TODO Он будет когда будем делать групповое -->
23
+
24
+ <common-backup-storage-actions-add-temp-nfs-accessibility
25
+ v-if="showHostAccessibility"
26
+ :host-accessibility-submit="props.hostAccessibilitySubmit"
27
+ :hosts="props.hosts"
28
+ @next="onChangeAccessibilityAndNext"
29
+ />
30
+ <!-- TODO Он будет когда будем делать групповое -->
31
+ </div>
32
+ </template>
33
+
34
+ <script lang="ts" setup>
35
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
36
+ import type {
37
+ UI_T_DatastoreType,
38
+ UI_T_NfsType,
39
+ UI_T_WizardDatastoreMode,
40
+ } from '~/components/common/backup/storage/actions/add/temp/lib/models/types'
41
+ import type { UI_I_ConfigurationSendDataNfs } from '~/components/common/backup/storage/actions/add/temp/nfs/configuration/lib/models/interfaces'
42
+ import { subTitleFunc } from '~/components/common/backup/storage/actions/add/temp/lib/config/stepItems'
43
+
44
+ const props = defineProps<{
45
+ mode: UI_T_WizardDatastoreMode
46
+ stepPosition: number
47
+ datastoreType: UI_T_DatastoreType
48
+ nfsConfigurationSubmit: number
49
+ hostAccessibilitySubmit: number
50
+ hosts?: any
51
+ }>()
52
+ const emits = defineEmits<{
53
+ (event: 'loading', value: boolean): void
54
+ (event: 'submit', value: UI_I_ConfigurationSendDataNfs): void
55
+ (event: 'change-nfs-version', value: UI_T_NfsType): void
56
+ }>()
57
+
58
+ const localization = computed<UI_I_Localization>(() => useLocal())
59
+
60
+ const nfsVersion = ref<UI_T_NfsType>('nfs-4.1')
61
+
62
+ const stepSubTitle = computed<string>(() => {
63
+ const { datastoreType, stepPosition } = props
64
+ return subTitleFunc(
65
+ localization.value,
66
+ datastoreType,
67
+ stepPosition,
68
+ nfsVersion.value
69
+ )
70
+ })
71
+
72
+ // const showHostAccessibility = computed<boolean>(() => {
73
+ // return (
74
+ // (props.stepPosition === 4 && nfsVersion.value === 'nfs-4.1') ||
75
+ // (props.stepPosition === 3 && nfsVersion.value === 'nfs-3')
76
+ // )
77
+ // })
78
+ const showHostAccessibility = computed<boolean>(() => {
79
+ return props.mode === 'sphere' && props.stepPosition === 3
80
+ })
81
+
82
+ watch(nfsVersion, (newValue: UI_T_NfsType) => {
83
+ emits('change-nfs-version', newValue)
84
+ })
85
+
86
+ let sendData: any = null
87
+ const onChangeConfigurationAndNext = (
88
+ event: UI_I_ConfigurationSendDataNfs
89
+ ): void => {
90
+ sendData = {
91
+ name: event.name,
92
+ folder: event.folder,
93
+ server: event.server,
94
+ user: event.user,
95
+ password: event.password,
96
+ hosts: [],
97
+ }
98
+ emits('submit', sendData)
99
+ }
100
+ const onChangeAccessibilityAndNext = (hosts: string[]): void => {
101
+ sendData.hosts = hosts
102
+ emits('submit', sendData)
103
+ }
104
+ </script>
105
+
106
+ <style lang="scss" scoped></style>