@rancher/shell 3.0.0-rc.4 → 3.0.0-rc.6

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.
@@ -141,7 +141,7 @@
141
141
  .v-popper__popper.v-popper--theme-dropdown {
142
142
  z-index: z-index('tooltip');
143
143
 
144
- &.containerLogsDropdown {
144
+ &.containerLogsDropdown, &.fleet-summary-tooltip{
145
145
  .v-popper__arrow-container {
146
146
  display: none;
147
147
  }
@@ -360,8 +360,8 @@ addClusterMemberDialog:
360
360
  title: Add Cluster Member
361
361
 
362
362
  addonConfigConfirmation:
363
- title: Add-On Config Reset
364
- body: Changing the Kubernetes Version can reset the Add-On Config values. You should check that the values are as expected before continuing.
363
+ title: Add-On Reset
364
+ body: Changing the Kubernetes Version can reset Add-On values. You should check that the values are as expected before continuing.
365
365
 
366
366
  addProjectMemberDialog:
367
367
  title: Add Project Member
@@ -1071,8 +1071,8 @@ catalog:
1071
1071
  placeholder: 'e.g. https://charts.rancher.io'
1072
1072
  oci:
1073
1073
  urlLabel: OCI Repository Host URL
1074
- placeholder: 'e.g. oci://test.azure.io/test-namespace:test-tag'
1075
- info: For better performance, add OCI URLs that contain ONLY helm charts. For example oci://test.rancher.io/charts or oci://test.rancher.io/charts/mychart. The list of charts available from the repository is updated every 6 hours. Scanning directories with a large number of artifacts may degrade performance considerably.
1074
+ placeholder: 'e.g. oci://<registry-host>/<namespace>/<chart-name>:<tag>'
1075
+ info: Add OCI URLs that contain ONLY helm charts. For large repositories containing many charts consider targeting a specific namespace or chart to improve performance, for example with oci://<registry-host>/<namespace> or oci://<registry-host>/<namespace>/<chart-name>. The list of charts available from the repository is updated every 6 hours.
1076
1076
  skipTlsVerifications: Skip TLS Verifications
1077
1077
  insecurePlainHttp: Insecure Plain Http
1078
1078
  exponentialBackOff:
@@ -1194,38 +1194,38 @@ cluster:
1194
1194
  <code>Cluster Management > Advanced > JWT Authentication</code>"
1195
1195
  addonChart:
1196
1196
  rancher-vsphere-cpi:
1197
- label: vSphere CPI
1198
- configuration: vSphere CPI Configuration
1197
+ label: "Add-on: vSphere CPI"
1198
+ configuration: vSphere CPI
1199
1199
  rancher-vsphere-csi:
1200
- label: vSphere CSI
1201
- configuration: vSphere CSI Configuration
1200
+ label: "Add-on: vSphere CSI"
1201
+ configuration: vSphere CSI
1202
1202
  rke2-calico:
1203
- label: Calico
1204
- configuration: Calico Configuration
1203
+ label: "Add-on: Calico"
1204
+ configuration: Calico
1205
1205
  rke2-calico-crd:
1206
- label: Calico
1207
- configuration: Calico Configuration
1206
+ label: "Add-on: Calico"
1207
+ configuration: Calico
1208
1208
  rke2-canal:
1209
- label: Canal
1210
- configuration: Canal Configuration
1209
+ label: "Add-on: Canal"
1210
+ configuration: Canal
1211
1211
  rke2-cilium:
1212
- label: Cilium
1213
- configuration: Cilium Configuration
1212
+ label: "Add-on: Cilium"
1213
+ configuration: Cilium
1214
1214
  rke2-coredns:
1215
- label: CoreDNS
1216
- configuration: CoreDNS Configuration
1215
+ label: "Add-on: CoreDNS"
1216
+ configuration: CoreDNS
1217
1217
  rke2-ingress-nginx:
1218
- label: NGINX
1219
- configuration: NGINX Ingress Configuration
1218
+ label: "Add-on: NGINX"
1219
+ configuration: NGINX Ingress
1220
1220
  rke2-kube-proxy:
1221
- label: Kube Proxy
1222
- configuration: Kube Proxy Configuration
1221
+ label: "Add-on: Kube Proxy"
1222
+ configuration: Kube Proxy
1223
1223
  rke2-metrics-server:
1224
- label: Metrics Server
1225
- configuration: Metrics Server Configuration
1224
+ label: "Add-on: Metrics Server"
1225
+ configuration: Metrics Server
1226
1226
  rke2-multus:
1227
- label: Multus
1228
- configuration: Multus Configuration
1227
+ label: "Add-on: Multus"
1228
+ configuration: Multus
1229
1229
  agentEnvVars:
1230
1230
  label: Agent Environment
1231
1231
  detail: Add additional environment variables to the agent container. This is most commonly useful for configuring a HTTP proxy.
@@ -1241,7 +1241,7 @@ cluster:
1241
1241
  label: Google
1242
1242
  rancher-vsphere:
1243
1243
  label: vSphere
1244
- note: '<b>Important:</b> Configure the vSphere Cloud Provider and Storage Provider options in the tabs on the left.'
1244
+ note: '<b>Important:</b> Configure the vSphere Cloud Provider and Storage Provider options in the Add-on tabs.'
1245
1245
  harvester:
1246
1246
  label: Harvester
1247
1247
  copyConfig: Copy KubeConfig to Clipboard
@@ -1758,7 +1758,7 @@ cluster:
1758
1758
  serverOs:
1759
1759
  label: OS
1760
1760
  addOns:
1761
- dependencyBanner: Add-On Configurations can vary between Kubernetes versions. Changing the Kubernetes version may reset the values below.
1761
+ dependencyBanner: Add-On Configuration can vary between Kubernetes versions. Changing the Kubernetes version may reset the values below.
1762
1762
  additionalManifest:
1763
1763
  title: Additional Manifest
1764
1764
  tooltip: 'Additional Kubernetes Manifest YAML to be applied to the cluster on startup.'
@@ -3,14 +3,15 @@ import Loading from '@shell/components/Loading';
3
3
  import CreateEditView from '@shell/mixins/create-edit-view';
4
4
  import { LabeledInput } from '@components/Form/LabeledInput';
5
5
  import LabeledSelect from '@shell/components/form/LabeledSelect';
6
+ import FormValidation from '@shell/mixins/form-validation';
6
7
 
7
8
  export default {
8
- emits: ['validationChanged'],
9
+ emits: ['validationChanged', 'valueChanged'],
9
10
 
10
11
  components: {
11
12
  Loading, LabeledInput, LabeledSelect
12
13
  },
13
- mixins: [CreateEditView],
14
+ mixins: [CreateEditView, FormValidation],
14
15
 
15
16
  async fetch() {
16
17
  let cur = (this.value.decodedData.defaultRegion || '').toLowerCase();
@@ -28,21 +29,19 @@ export default {
28
29
  },
29
30
 
30
31
  data() {
31
- return { knownRegions: null };
32
+ return {
33
+ knownRegions: null,
34
+ fvFormRuleSets: [
35
+ { path: 'decodedData.accessKey', rules: ['required'] },
36
+ { path: 'decodedData.secretKey', rules: ['required'] },
37
+ ]
38
+ };
32
39
  },
33
40
 
34
41
  watch: {
35
- 'value.decodedData.accessKey'(neu) {
36
- this.$emit('validationChanged', !!neu);
37
- },
38
-
39
- 'value.decodedData.secretKey'(neu) {
40
- this.$emit('validationChanged', !!neu);
41
- },
42
-
43
- 'value.decodedData.defaultRegion'(neu) {
44
- this.$emit('validationChanged', !!neu);
45
- },
42
+ fvFormIsValid(newValue) {
43
+ this.$emit('validationChanged', !!newValue);
44
+ }
46
45
  },
47
46
 
48
47
  methods: {
@@ -76,8 +75,10 @@ export default {
76
75
  label-key="cluster.credential.aws.accessKey.label"
77
76
  placeholder-key="cluster.credential.aws.accessKey.placeholder"
78
77
  type="text"
78
+ :rules="fvGetAndReportPathRules('decodedData.accessKey')"
79
79
  :mode="mode"
80
- @update:value="value.setData('accessKey', $event);"
80
+ :required="true"
81
+ @update:value="$emit('valueChanged', 'accessKey', $event)"
81
82
  />
82
83
  <LabeledInput
83
84
  :value="value.decodedData.secretKey"
@@ -85,8 +86,10 @@ export default {
85
86
  label-key="cluster.credential.aws.secretKey.label"
86
87
  placeholder-key="cluster.credential.aws.secretKey.placeholder"
87
88
  type="password"
89
+ :rules="fvGetAndReportPathRules('decodedData.secretKey')"
88
90
  :mode="mode"
89
- @update:value="value.setData('secretKey', $event);"
91
+ :required="true"
92
+ @update:value="$emit('valueChanged', 'secretKey', $event)"
90
93
  />
91
94
  <LabeledSelect
92
95
  :value="value.decodedData.defaultRegion"
@@ -96,7 +99,7 @@ export default {
96
99
  :mode="mode"
97
100
  :taggable="true"
98
101
  :options="knownRegions"
99
- @update:value="value.setData('defaultRegion', $event);"
102
+ @update:value="$emit('valueChanged', 'defaultRegion', $event)"
100
103
  />
101
104
  <p
102
105
  v-clean-html="t('cluster.credential.aws.defaultRegion.help', {}, true)"
@@ -4,34 +4,33 @@ import { LabeledInput } from '@components/Form/LabeledInput';
4
4
  import { azureEnvironments } from '@shell/machine-config/azure';
5
5
  import { parseAzureError } from '@shell/utils/azure';
6
6
  import LabeledSelect from '@shell/components/form/LabeledSelect';
7
+ import FormValidation from '@shell/mixins/form-validation';
7
8
 
8
9
  export default {
9
- emits: ['validationChanged'],
10
+ emits: ['validationChanged', 'valueChanged'],
10
11
 
11
12
  components: { LabeledInput, LabeledSelect },
12
- mixins: [CreateEditView],
13
+ mixins: [CreateEditView, FormValidation],
13
14
 
14
15
  data() {
15
16
  if ( !this.value.decodedData.environment ) {
16
17
  this.value.setData('environment', 'AzurePublicCloud');
17
18
  }
18
19
 
19
- return { azureEnvironments };
20
+ return {
21
+ azureEnvironments,
22
+ fvFormRuleSets: [
23
+ { path: 'decodedData.clientId', rules: ['required'] },
24
+ { path: 'decodedData.clientSecret', rules: ['required'] },
25
+ { path: 'decodedData.subscriptionId', rules: ['required'] },
26
+ ]
27
+ };
20
28
  },
21
29
 
22
30
  watch: {
23
- 'value.decodedData.clientId'(neu) {
24
- this.$emit('validationChanged', !!neu);
25
- },
26
- 'value.decodedData.clientSecret'(neu) {
27
- this.$emit('validationChanged', !!neu);
28
- },
29
- 'value.decodedData.subscriptionId'(neu) {
30
- this.$emit('validationChanged', !!neu);
31
- },
32
- 'value.decodedData.environment'(neu) {
33
- this.$emit('validationChanged', !!neu);
34
- },
31
+ fvFormIsValid(newValue) {
32
+ this.$emit('validationChanged', !!newValue);
33
+ }
35
34
  },
36
35
 
37
36
  methods: {
@@ -85,10 +84,9 @@ export default {
85
84
  option-key="value"
86
85
  option-label="value"
87
86
  :searchable="false"
88
- :required="true"
89
87
  :label="t('cluster.credential.azure.environment.label')"
90
88
  data-testid="azure-cloud-credentials-environment"
91
- @update:value="value.setData('environment', $event)"
89
+ @update:value="$emit('valueChanged', 'environment', $event)"
92
90
  />
93
91
  </div>
94
92
  <div class="col span-6">
@@ -98,8 +96,9 @@ export default {
98
96
  type="text"
99
97
  :mode="mode"
100
98
  :required="true"
99
+ :rules="fvGetAndReportPathRules('decodedData.subscriptionId')"
101
100
  data-testid="azure-cloud-credentials-subscription-id"
102
- @update:value="value.setData('subscriptionId', $event)"
101
+ @update:value="$emit('valueChanged', 'subscriptionId', $event)"
103
102
  />
104
103
  </div>
105
104
  </div>
@@ -111,8 +110,9 @@ export default {
111
110
  type="text"
112
111
  :mode="mode"
113
112
  :required="true"
113
+ :rules="fvGetAndReportPathRules('decodedData.clientId')"
114
114
  data-testid="azure-cloud-credentials-client-id"
115
- @update:value="value.setData('clientId', $event)"
115
+ @update:value="$emit('valueChanged', 'clientId', $event)"
116
116
  />
117
117
  </div>
118
118
  <div class="col span-6">
@@ -122,8 +122,9 @@ export default {
122
122
  type="password"
123
123
  :mode="mode"
124
124
  :required="true"
125
+ :rules="fvGetAndReportPathRules('decodedData.clientSecret')"
125
126
  data-testid="azure-cloud-credentials-client-secret"
126
- @update:value="value.setData('clientSecret', $event)"
127
+ @update:value="$emit('valueChanged', 'clientSecret', $event)"
127
128
  />
128
129
  </div>
129
130
  </div>
@@ -1,16 +1,20 @@
1
1
  <script>
2
2
  import CreateEditView from '@shell/mixins/create-edit-view';
3
3
  import { LabeledInput } from '@components/Form/LabeledInput';
4
+ import FormValidation from '@shell/mixins/form-validation';
4
5
 
5
6
  export default {
6
- emits: ['validationChanged'],
7
+ emits: ['validationChanged', 'valueChanged'],
7
8
 
8
9
  components: { LabeledInput },
9
- mixins: [CreateEditView],
10
+ mixins: [CreateEditView, FormValidation],
10
11
 
12
+ data() {
13
+ return { fvFormRuleSets: [{ path: 'decodedData.accessToken', rules: ['required'] }] };
14
+ },
11
15
  watch: {
12
- 'value.decodedData.accessToken'(neu) {
13
- this.$emit('validationChanged', !!neu);
16
+ fvFormIsValid(newValue) {
17
+ this.$emit('validationChanged', !!newValue);
14
18
  }
15
19
  },
16
20
 
@@ -39,7 +43,9 @@ export default {
39
43
  placeholder-key="cluster.credential.digitalocean.accessToken.placeholder"
40
44
  type="password"
41
45
  :mode="mode"
42
- @update:value="value.setData('accessToken', $event);"
46
+ :required="true"
47
+ :rules="fvGetAndReportPathRules('decodedData.accessToken')"
48
+ @update:value="$emit('valueChanged', 'accessToken', $event)"
43
49
  />
44
50
  <p
45
51
  v-clean-html="t('cluster.credential.digitalocean.accessToken.help', {}, true)"
@@ -2,22 +2,29 @@
2
2
  import CreateEditView from '@shell/mixins/create-edit-view';
3
3
  import { LabeledInput } from '@components/Form/LabeledInput';
4
4
  import FileSelector from '@shell/components/form/FileSelector';
5
+ import FormValidation from '@shell/mixins/form-validation';
5
6
 
6
7
  export default {
7
- emits: ['validationChanged'],
8
+ emits: ['validationChanged', 'valueChanged'],
8
9
 
9
10
  components: { LabeledInput, FileSelector },
10
- mixins: [CreateEditView],
11
+ mixins: [CreateEditView, FormValidation],
11
12
 
13
+ data() {
14
+ return {
15
+ fvFormRuleSets: [
16
+ { path: 'decodedData.authEncodedJson', rules: ['required'] }]
17
+ };
18
+ },
12
19
  watch: {
13
- 'value.decodedData.authEncodedJson'(neu) {
14
- this.$emit('validationChanged', !!neu);
20
+ fvFormIsValid(newValue) {
21
+ this.$emit('validationChanged', !!newValue);
15
22
  }
16
23
  },
17
24
 
18
25
  methods: {
19
26
  onFileSelected(data) {
20
- this.value.setData('authEncodedJson', data);
27
+ this.$emit('valueChanged', 'authEncodedJson', data);
21
28
  },
22
29
 
23
30
  async test() {
@@ -58,7 +65,9 @@ export default {
58
65
  placeholder-key="cluster.credential.gcp.authEncodedJson.placeholder"
59
66
  type="multiline"
60
67
  :mode="mode"
61
- @update:value="value.setData('authEncodedJson', $event);"
68
+ :required="true"
69
+ :rules="fvGetAndReportPathRules('decodedData.authEncodedJson')"
70
+ @update:value="$emit('valueChanged', 'authEncodedJson', $event)"
62
71
  />
63
72
  <FileSelector
64
73
  class="role-primary btn-sm mt-20 mb-20"
@@ -1,16 +1,23 @@
1
1
  <script>
2
2
  import CreateEditView from '@shell/mixins/create-edit-view';
3
3
  import { LabeledInput } from '@components/Form/LabeledInput';
4
+ import FormValidation from '@shell/mixins/form-validation';
4
5
 
5
6
  export default {
6
- emits: ['validationChanged'],
7
+ emits: ['validationChanged', 'valueChanged'],
7
8
 
8
9
  components: { LabeledInput },
9
- mixins: [CreateEditView],
10
+ mixins: [CreateEditView, FormValidation],
10
11
 
12
+ data() {
13
+ return {
14
+ fvFormRuleSets: [
15
+ { path: 'decodedData.token', rules: ['required'] }]
16
+ };
17
+ },
11
18
  watch: {
12
- 'value.decodedData.token'(neu) {
13
- this.$emit('validationChanged', !!neu);
19
+ fvFormIsValid(newValue) {
20
+ this.$emit('validationChanged', !!newValue);
14
21
  }
15
22
  },
16
23
 
@@ -39,7 +46,9 @@ export default {
39
46
  placeholder-key="cluster.credential.linode.accessToken.placeholder"
40
47
  type="password"
41
48
  :mode="mode"
42
- @update:value="value.setData('token', $event);"
49
+ :required="true"
50
+ :rules="fvGetAndReportPathRules('decodedData.token')"
51
+ @update:value="$emit('valueChanged', 'token', $event)"
43
52
  />
44
53
  <p
45
54
  v-clean-html="t('cluster.credential.linode.accessToken.help', {}, true)"
@@ -2,19 +2,25 @@
2
2
  import CreateEditView from '@shell/mixins/create-edit-view';
3
3
  import { LabeledInput } from '@components/Form/LabeledInput';
4
4
  import { base64Encode } from '@shell/utils/crypto';
5
+ import FormValidation from '@shell/mixins/form-validation';
5
6
 
6
7
  export default {
7
- emits: ['validationChanged'],
8
+ emits: ['validationChanged', 'valueChanged'],
8
9
 
9
10
  components: { LabeledInput },
10
- mixins: [CreateEditView],
11
+ mixins: [CreateEditView, FormValidation],
11
12
 
13
+ data() {
14
+ return {
15
+ fvFormRuleSets: [
16
+ { path: 'decodedData.clientIdentifier', rules: ['required'] },
17
+ { path: 'decodedData.clientSecret', rules: ['required'] }
18
+ ]
19
+ };
20
+ },
12
21
  watch: {
13
- 'value.decodedData.clientIdentifier'(neu) {
14
- this.$emit('validationChanged', !!neu);
15
- },
16
- 'value.decodedData.clientSecret'(neu) {
17
- this.$emit('validationChanged', !!neu);
22
+ fvFormIsValid(newValue) {
23
+ this.$emit('validationChanged', !!newValue);
18
24
  }
19
25
  },
20
26
 
@@ -58,7 +64,9 @@ export default {
58
64
  placeholder-key="cluster.credential.pnap.clientIdentifier.placeholder"
59
65
  type="text"
60
66
  :mode="mode"
61
- @update:value="value.setData('clientIdentifier', $event);"
67
+ :required="true"
68
+ :rules="fvGetAndReportPathRules('decodedData.clientIdentifier')"
69
+ @update:value="$emit('valueChanged', 'clientIdentifier', $event)"
62
70
  />
63
71
  </div>
64
72
  <div class="col span-6">
@@ -68,7 +76,9 @@ export default {
68
76
  placeholder-key="cluster.credential.pnap.clientSecret.placeholder"
69
77
  type="text"
70
78
  :mode="mode"
71
- @update:value="value.setData('clientSecret', $event);"
79
+ :required="true"
80
+ :rules="fvGetAndReportPathRules('decodedData.clientSecret')"
81
+ @update:value="$emit('valueChanged', 'clientSecret', $event)"
72
82
  />
73
83
  </div>
74
84
  </div>
@@ -4,14 +4,15 @@ import CreateEditView from '@shell/mixins/create-edit-view';
4
4
  import { Checkbox } from '@components/Form/Checkbox';
5
5
  import { LabeledInput } from '@components/Form/LabeledInput';
6
6
  import LabeledSelect from '@shell/components/form/LabeledSelect';
7
+ import FormValidation from '@shell/mixins/form-validation';
7
8
 
8
9
  export default {
9
- emits: ['validationChanged'],
10
+ emits: ['validationChanged', 'valueChanged'],
10
11
 
11
12
  components: {
12
13
  Loading, Checkbox, LabeledInput, LabeledSelect
13
14
  },
14
- mixins: [CreateEditView],
15
+ mixins: [CreateEditView, FormValidation],
15
16
 
16
17
  async fetch() {
17
18
  let cur = (this.value.decodedData.defaultRegion || '').toLowerCase();
@@ -29,35 +30,18 @@ export default {
29
30
  },
30
31
 
31
32
  data() {
32
- return { knownRegions: null };
33
+ return {
34
+ knownRegions: null,
35
+ fvFormRuleSets: [
36
+ { path: 'decodedData.accessKey', rules: ['required'] },
37
+ { path: 'decodedData.secretKey', rules: ['required'] }]
38
+ };
33
39
  },
34
-
35
40
  watch: {
36
- 'value.decodedData.accessKey'(neu) {
37
- this.$emit('validationChanged', !!neu);
38
- },
39
- 'value.decodedData.secretKey'(neu) {
40
- this.$emit('validationChanged', !!neu);
41
- },
42
- 'value.decodedData.defaultBucket'(neu) {
43
- this.$emit('validationChanged', !!neu);
44
- },
45
- 'value.decodedData.defaultFolder'(neu) {
46
- this.$emit('validationChanged', !!neu);
47
- },
48
- 'value.decodedData.defaultRegion'(neu) {
49
- this.$emit('validationChanged', !!neu);
50
- },
51
- 'value.decodedData.defaultEndpointCA'(neu) {
52
- this.$emit('validationChanged', !!neu);
53
- },
54
- 'value.decodedData.defaultEndpoint'(neu) {
55
- this.$emit('validationChanged', !!neu);
56
- },
57
- 'value.decodedData.defaulSkipSSLVerify'(neu) {
58
- this.$emit('validationChanged', !!neu);
59
- },
60
- },
41
+ fvFormIsValid(newValue) {
42
+ this.$emit('validationChanged', !!newValue);
43
+ }
44
+ }
61
45
  };
62
46
  </script>
63
47
 
@@ -76,7 +60,8 @@ export default {
76
60
  placeholder-key="cluster.credential.s3.accessKey.placeholder"
77
61
  type="text"
78
62
  :mode="mode"
79
- @update:value="value.setData('accessKey', $event);"
63
+ :rules="fvGetAndReportPathRules('decodedData.accessKey')"
64
+ @update:value="$emit('valueChanged', 'accessKey', $event)"
80
65
  />
81
66
  </div>
82
67
  <div class="col span-6">
@@ -87,7 +72,8 @@ export default {
87
72
  placeholder-key="cluster.credential.s3.secretKey.placeholder"
88
73
  type="password"
89
74
  :mode="mode"
90
- @update:value="value.setData('secretKey', $event);"
75
+ :rules="fvGetAndReportPathRules('decodedData.secretKey')"
76
+ @update:value="$emit('valueChanged', 'secretKey', $event)"
91
77
  />
92
78
  </div>
93
79
  </div>
@@ -2,19 +2,26 @@
2
2
  import CreateEditView from '@shell/mixins/create-edit-view';
3
3
  import { LabeledInput } from '@components/Form/LabeledInput';
4
4
  import { NORMAN } from '@shell/config/types';
5
+ import FormValidation from '@shell/mixins/form-validation';
5
6
 
6
7
  export default {
7
- emits: ['validationChanged'],
8
+ emits: ['validationChanged', 'valueChanged'],
8
9
 
9
10
  components: { LabeledInput },
10
- mixins: [CreateEditView],
11
-
11
+ mixins: [CreateEditView, FormValidation],
12
+ data() {
13
+ return {
14
+ fvFormRuleSets: [
15
+ { path: 'decodedData.vcenter', rules: ['required', 'wildcardHostname'] },
16
+ { path: 'decodedData.vcenterPort', rules: ['required', 'portNumber', 'requiredInt'] },
17
+ { path: 'decodedData.username', rules: ['required'] },
18
+ { path: 'decodedData.password', rules: ['required'] },
19
+ ]
20
+ };
21
+ },
12
22
  watch: {
13
- value: {
14
- deep: true,
15
- handler(neu) {
16
- this.$emit('validationChanged', !!neu);
17
- }
23
+ fvFormIsValid(newValue) {
24
+ this.$emit('validationChanged', !!newValue);
18
25
  }
19
26
  },
20
27
 
@@ -57,7 +64,8 @@ export default {
57
64
  placeholder-key="cluster.credential.vmwarevsphere.server.placeholder"
58
65
  :required="true"
59
66
  :mode="mode"
60
- @update:value="value.setData('vcenter', $event);"
67
+ :rules="fvGetAndReportPathRules('decodedData.vcenter')"
68
+ @update:value="$emit('valueChanged', 'vcenter', $event)"
61
69
  />
62
70
  </div>
63
71
  <div class="col span-6">
@@ -65,11 +73,9 @@ export default {
65
73
  :value="value.decodedData.vcenterPort"
66
74
  label-key="cluster.credential.vmwarevsphere.port.label"
67
75
  :required="true"
68
- type="number"
69
- min="1"
70
- max="65535"
71
76
  :mode="mode"
72
- @update:value="value.setData('vcenterPort', $event);"
77
+ :rules="fvGetAndReportPathRules('decodedData.vcenterPort')"
78
+ @update:value="$emit('valueChanged', 'vcenterPort', $event)"
73
79
  />
74
80
  </div>
75
81
  </div>
@@ -80,7 +86,8 @@ export default {
80
86
  label-key="cluster.credential.vmwarevsphere.username.label"
81
87
  :required="true"
82
88
  :mode="mode"
83
- @update:value="value.setData('username', $event);"
89
+ :rules="fvGetAndReportPathRules('decodedData.username')"
90
+ @update:value="$emit('valueChanged', 'username', $event)"
84
91
  />
85
92
  </div>
86
93
  <div class="col span-6">
@@ -90,7 +97,8 @@ export default {
90
97
  :required="true"
91
98
  type="password"
92
99
  :mode="mode"
93
- @update:value="value.setData('password', $event);"
100
+ :rules="fvGetAndReportPathRules('decodedData.password')"
101
+ @update:value="$emit('valueChanged', 'password', $event)"
94
102
  />
95
103
  </div>
96
104
  </div>
@@ -477,24 +477,24 @@ export default {
477
477
  <template
478
478
  v-for="(project, i) in projectsWithoutNamespaces"
479
479
  :key="i"
480
- v-slot:[slotName(project)]
480
+ #[slotName(project)]="{ fullColspan }"
481
481
  >
482
482
  <tr
483
483
  class="main-row"
484
484
  >
485
485
  <td
486
486
  class="empty text-center"
487
- colspan="5"
487
+ :colspan="fullColspan"
488
488
  >
489
489
  {{ t('projectNamespaces.noNamespaces') }}
490
490
  </td>
491
491
  </tr>
492
492
  </template>
493
- <template #main-row:fake-empty>
493
+ <template #main-row:fake-empty="{ fullColspan }">
494
494
  <tr class="main-row">
495
495
  <td
496
496
  class="empty text-center"
497
- colspan="5"
497
+ :colspan="fullColspan"
498
498
  >
499
499
  {{ t('projectNamespaces.noProjectNoNamespaces') }}
500
500
  </td>