@rancher/shell 0.1.1 → 0.1.3
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.
- package/assets/translations/en-us.yaml +33 -769
- package/assets/translations/zh-hans.yaml +153 -781
- package/components/ActionMenu.vue +3 -3
- package/components/CodeMirror.vue +6 -8
- package/components/CommunityLinks.vue +1 -1
- package/components/ContainerResourceLimit.vue +14 -0
- package/components/ExplorerMembers.vue +123 -0
- package/components/ExplorerProjectsNamespaces.vue +405 -0
- package/components/GrafanaDashboard.vue +17 -2
- package/components/LocaleSelector.vue +81 -0
- package/components/PromptModal.vue +2 -3
- package/components/ResourceList/index.vue +1 -1
- package/components/ResourceTable.vue +3 -6
- package/components/SingleClusterInfo.vue +1 -1
- package/components/SortableTable/index.vue +23 -20
- package/components/SortableTable/selection.js +1 -0
- package/components/auth/AzureWarning.vue +5 -1
- package/components/auth/Principal.vue +1 -1
- package/components/auth/RoleDetailEdit.vue +32 -12
- package/components/fleet/FleetRepos.vue +0 -2
- package/components/form/NameNsDescription.vue +4 -6
- package/components/form/NodeScheduling.vue +1 -1
- package/components/form/ResourceTabs/index.vue +27 -18
- package/components/form/WorkloadPorts.vue +1 -1
- package/components/formatter/ClusterLink.vue +13 -0
- package/components/formatter/PodImages.vue +11 -1
- package/components/formatter/RKETemplateName.vue +37 -0
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/nav/Header.vue +9 -9
- package/components/nav/NamespaceFilter.vue +7 -4
- package/components/nav/TopLevelMenu.vue +6 -43
- package/components/nav/WindowManager/ContainerLogs.vue +1 -1
- package/config/product/harvester-manager.js +64 -2
- package/config/product/manager.js +9 -0
- package/config/settings.js +17 -71
- package/config/table-headers.js +0 -1
- package/config/types.js +8 -26
- package/core/plugin-routes.ts +34 -22
- package/core/plugin.ts +15 -3
- package/core/plugins-loader.js +2 -0
- package/core/plugins.js +79 -36
- package/core/types.ts +7 -1
- package/creators/app/tsconfig.json +6 -1
- package/creators/pkg/init +3 -0
- package/creators/pkg/tsconfig.json +7 -2
- package/detail/provisioning.cattle.io.cluster.vue +23 -0
- package/detail/workload/index.vue +11 -5
- package/{components/dialog → dialog}/AddClusterMemberDialog.vue +0 -0
- package/{components/dialog → dialog}/AddCustomBadgeDialog.vue +0 -0
- package/{components/dialog → dialog}/AddProjectMemberDialog.vue +0 -0
- package/{components/dialog → dialog}/AddonConfigConfirmationDialog.vue +0 -0
- package/{components/dialog → dialog}/DrainNode.vue +0 -0
- package/{components/dialog → dialog}/ForceMachineRemoveDialog.vue +0 -0
- package/{components/dialog → dialog}/GenericPrompt.vue +0 -0
- package/{components/dialog → dialog}/RollbackWorkloadDialog.vue +0 -0
- package/{components/dialog → dialog}/RotateCertificatesDialog.vue +0 -0
- package/{components/dialog → dialog}/RotateEncryptionKeyDialog.vue +0 -0
- package/{components/dialog → dialog}/SaveAsRKETemplateDialog.vue +0 -0
- package/{components/dialog → dialog}/ScaleMachineDownDialog.vue +0 -0
- package/edit/auth/azuread.vue +20 -1
- package/edit/cloudcredential.vue +7 -1
- package/edit/management.cattle.io.project.vue +2 -2
- package/edit/namespace.vue +17 -10
- package/edit/networking.k8s.io.ingress/index.vue +2 -1
- package/edit/persistentvolumeclaim.vue +33 -2
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/MachinePool.vue +34 -6
- package/edit/provisioning.cattle.io.cluster/index.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/rke2.vue +21 -6
- package/edit/service.vue +1 -1
- package/edit/workload/index.vue +363 -15
- package/edit/workload/mixins/workload.js +62 -7
- package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -0
- package/layouts/default.vue +52 -27
- package/layouts/error.vue +5 -1
- package/layouts/home.vue +6 -2
- package/list/harvesterhci.io.management.cluster.vue +74 -33
- package/list/namespace.vue +3 -5
- package/list/provisioning.cattle.io.cluster.vue +6 -0
- package/machine-config/amazonec2.vue +2 -0
- package/machine-config/harvester.vue +96 -49
- package/middleware/authenticated.js +56 -52
- package/mixins/brand.js +3 -4
- package/mixins/create-edit-view/impl.js +0 -8
- package/mixins/form-validation.js +1 -1
- package/mixins/resource-fetch.js +3 -1
- package/models/chart.js +1 -1
- package/models/cluster/node.js +12 -1
- package/models/fleet.cattle.io.bundle.js +26 -19
- package/models/harvesterhci.io.management.cluster.js +194 -5
- package/models/management.cattle.io.cluster.js +1 -1
- package/models/management.cattle.io.clusterroletemplatebinding.js +9 -0
- package/models/management.cattle.io.globalrole.js +0 -19
- package/models/management.cattle.io.project.js +23 -2
- package/models/management.cattle.io.roletemplate.js +2 -21
- package/models/namespace.js +19 -3
- package/models/pod.js +19 -2
- package/models/provisioning.cattle.io.cluster.js +71 -0
- package/models/service.js +5 -1
- package/models/workload.js +4 -243
- package/models/workload.service.js +314 -0
- package/nuxt.config.js +14 -12
- package/package.json +3 -3
- package/pages/auth/login.vue +11 -2
- package/pages/auth/setup.vue +1 -1
- package/pages/c/_cluster/_product/members/index.vue +3 -93
- package/pages/c/_cluster/_product/projectsnamespaces.vue +6 -403
- package/pages/c/_cluster/apps/charts/install.vue +0 -6
- package/pages/c/_cluster/settings/performance.vue +19 -16
- package/pages/fail-whale.vue +1 -10
- package/pages/index.vue +18 -4
- package/pages/plugins.vue +2 -2
- package/pages/prefs.vue +8 -6
- package/pkg/auto-import.js +44 -7
- package/pkg/dynamic-plugin-loader.js +28 -0
- package/pkg/import.js +2 -2
- package/pkg/model-loader-require.lib.js +3 -0
- package/pkg/vue.config.js +9 -6
- package/plugins/console.js +10 -5
- package/plugins/dashboard-store/actions.js +8 -3
- package/plugins/dashboard-store/getters.js +7 -2
- package/plugins/dashboard-store/model-loader-require.js +12 -0
- package/plugins/dashboard-store/model-loader.js +4 -1
- package/plugins/dashboard-store/resource-class.js +10 -3
- package/plugins/steve/actions.js +1 -1
- package/plugins/steve/index.js +6 -4
- package/plugins/steve/steve-description-class.js +32 -0
- package/plugins/steve/subscribe.js +34 -23
- package/rancher-components/Banner/Banner.vue +2 -2
- package/rancher-components/Form/Checkbox/Checkbox.test.ts +77 -0
- package/rancher-components/Form/Checkbox/Checkbox.vue +12 -2
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +0 -2
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +2 -0
- package/rancher-components/Form/Radio/RadioButton.vue +14 -1
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +107 -0
- package/{components/form → rancher-components/Form/ToggleSwitch}/ToggleSwitch.vue +18 -8
- package/rancher-components/Form/ToggleSwitch/index.ts +1 -0
- package/rancher-components/Form/index.ts +1 -0
- package/scripts/build-pkg.sh +48 -2
- package/scripts/drone-build-pkg.sh +31 -0
- package/scripts/publish-shell.sh +10 -11
- package/scripts/serve-pkgs +17 -10
- package/scripts/test-plugins-build.sh +18 -1
- package/store/catalog.js +3 -1
- package/store/i18n.js +16 -11
- package/store/index.js +4 -181
- package/store/prefs.js +30 -2
- package/store/type-map.js +16 -29
- package/types/{index.d.ts → rancher/index.d.ts} +0 -0
- package/utils/cluster.js +1 -1
- package/utils/custom-validators.js +1 -12
- package/utils/dynamic-importer.js +1 -1
- package/utils/validators/setting.js +0 -35
- package/components/FilterLabel.vue +0 -254
- package/components/HarvesterUpgradeProgressBarList.vue +0 -109
- package/components/VMConsoleBar.vue +0 -87
- package/components/dialog/harvester/AddHotplugModal.vue +0 -159
- package/components/dialog/harvester/BackupModal.vue +0 -117
- package/components/dialog/harvester/CloneTemplate.vue +0 -125
- package/components/dialog/harvester/EjectCDROMDialog.vue +0 -157
- package/components/dialog/harvester/ExportImageDialog.vue +0 -152
- package/components/dialog/harvester/MaintenanceDialog.vue +0 -94
- package/components/dialog/harvester/MigrationDialog.vue +0 -154
- package/components/dialog/harvester/RestoreDialog.vue +0 -153
- package/components/dialog/harvester/SupportBundle.vue +0 -217
- package/components/dialog/harvester/UnplugVolume.vue +0 -108
- package/components/form/SerialConsole/index.vue +0 -267
- package/components/formatter/AttachVMWithName.vue +0 -46
- package/components/formatter/CloudInitType.vue +0 -27
- package/components/formatter/HarvesterBackupTargetValidation.vue +0 -43
- package/components/formatter/HarvesterCPUUsed.vue +0 -122
- package/components/formatter/HarvesterDiskState.vue +0 -66
- package/components/formatter/HarvesterHostName.vue +0 -66
- package/components/formatter/HarvesterIpAddress.vue +0 -90
- package/components/formatter/HarvesterMemoryUsed.vue +0 -140
- package/components/formatter/HarvesterMigrationState.vue +0 -85
- package/components/formatter/HarvesterNodeName.vue +0 -49
- package/components/formatter/HarvesterStorageUsed.vue +0 -194
- package/components/formatter/HarvesterVmState.vue +0 -123
- package/components/nav/HarvesterUpgrade.vue +0 -232
- package/components/novnc/NovncConsole.vue +0 -93
- package/components/novnc/NovncConsoleItem.vue +0 -89
- package/components/novnc/NovncConsoleWrapper.vue +0 -243
- package/config/harvester-map.js +0 -44
- package/config/harvester-table-headers.js +0 -27
- package/config/product/harvester.js +0 -305
- package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +0 -364
- package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +0 -200
- package/detail/harvesterhci.io.host/HarvesterHostNetwork.vue +0 -89
- package/detail/harvesterhci.io.host/VirtualMachineInstance.vue +0 -134
- package/detail/harvesterhci.io.host/index.vue +0 -243
- package/detail/harvesterhci.io.virtualmachinebackup/index.vue +0 -221
- package/detail/harvesterhci.io.virtualmachineimage.vue +0 -118
- package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineBasics.vue +0 -279
- package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineEvents.vue +0 -75
- package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineKeypairs.vue +0 -114
- package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineMigration.vue +0 -79
- package/detail/kubevirt.io.virtualmachine/index.vue +0 -213
- package/edit/harvesterhci.io.cloudtemplate.vue +0 -123
- package/edit/harvesterhci.io.host/HarvesterDisk.vue +0 -262
- package/edit/harvesterhci.io.host/index.vue +0 -533
- package/edit/harvesterhci.io.keypair.vue +0 -112
- package/edit/harvesterhci.io.managedchart/index.vue +0 -25
- package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +0 -172
- package/edit/harvesterhci.io.networkattachmentdefinition.vue +0 -210
- package/edit/harvesterhci.io.setting/additional-ca.vue +0 -36
- package/edit/harvesterhci.io.setting/backup-target.vue +0 -182
- package/edit/harvesterhci.io.setting/http-proxy.vue +0 -79
- package/edit/harvesterhci.io.setting/index.vue +0 -201
- package/edit/harvesterhci.io.setting/overcommit-config.vue +0 -94
- package/edit/harvesterhci.io.setting/ssl-certificates.vue +0 -117
- package/edit/harvesterhci.io.setting/ssl-parameters.vue +0 -161
- package/edit/harvesterhci.io.setting/support-bundle-image.vue +0 -134
- package/edit/harvesterhci.io.setting/support-bundle-namespaces.vue +0 -73
- package/edit/harvesterhci.io.setting/vip-pools.vue +0 -244
- package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +0 -81
- package/edit/harvesterhci.io.virtualmachinebackup.vue +0 -256
- package/edit/harvesterhci.io.virtualmachineimage.vue +0 -364
- package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +0 -340
- package/edit/harvesterhci.io.volume.vue +0 -195
- package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +0 -190
- package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +0 -212
- package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue +0 -94
- package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/sshkey.vue +0 -85
- package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +0 -153
- package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +0 -279
- package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +0 -113
- package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +0 -41
- package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +0 -281
- package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue +0 -142
- package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +0 -54
- package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +0 -256
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +0 -391
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +0 -40
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +0 -102
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +0 -117
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +0 -74
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +0 -132
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +0 -303
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +0 -285
- package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +0 -188
- package/edit/kubevirt.io.virtualmachine/index.vue +0 -642
- package/edit/network.harvesterhci.io.clusternetwork/index.vue +0 -19
- package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +0 -134
- package/edit/workload/types/Deployment.vue +0 -377
- package/edit/workload/types/Generic.vue +0 -295
- package/list/harvesterhci.io.cloudtemplate.vue +0 -78
- package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +0 -211
- package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +0 -40
- package/list/harvesterhci.io.dashboard/index.vue +0 -752
- package/list/harvesterhci.io.host/index.vue +0 -186
- package/list/harvesterhci.io.networkattachmentdefinition.vue +0 -167
- package/list/harvesterhci.io.setting.vue +0 -241
- package/list/harvesterhci.io.virtualmachinebackup.vue +0 -172
- package/list/harvesterhci.io.virtualmachineimage.vue +0 -80
- package/list/harvesterhci.io.virtualmachinetemplateversion.vue +0 -173
- package/list/harvesterhci.io.volume.vue +0 -122
- package/list/kubevirt.io.virtualmachine.vue +0 -193
- package/mixins/harvester-vm/impl.js +0 -267
- package/mixins/harvester-vm/index.js +0 -1357
- package/models/harvester/configmap.js +0 -32
- package/models/harvester/harvesterhci.io.blockdevice.js +0 -55
- package/models/harvester/harvesterhci.io.keypair.js +0 -12
- package/models/harvester/harvesterhci.io.setting.js +0 -127
- package/models/harvester/harvesterhci.io.supportbundle.js +0 -35
- package/models/harvester/harvesterhci.io.upgrade.js +0 -226
- package/models/harvester/harvesterhci.io.virtualmachinebackup.js +0 -116
- package/models/harvester/harvesterhci.io.virtualmachineimage.js +0 -255
- package/models/harvester/harvesterhci.io.virtualmachinerestore.js +0 -43
- package/models/harvester/harvesterhci.io.virtualmachinetemplate.js +0 -69
- package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +0 -227
- package/models/harvester/k8s.cni.cncf.io.networkattachmentdefinition.js +0 -32
- package/models/harvester/kubevirt.io.virtualmachine.js +0 -850
- package/models/harvester/kubevirt.io.virtualmachineinstance.js +0 -142
- package/models/harvester/management.cattle.io.managedchart.js +0 -191
- package/models/harvester/management.cattle.io.setting.js +0 -40
- package/models/harvester/network.harvesterhci.io.clusternetwork.js +0 -100
- package/models/harvester/network.harvesterhci.io.nodenetwork.js +0 -34
- package/models/harvester/node.js +0 -255
- package/models/harvester/persistentvolumeclaim.js +0 -166
- package/models/harvester/pod.js +0 -185
- package/pages/c/_cluster/harvester/airgapupgrade/index.vue +0 -309
- package/pages/c/_cluster/harvester/console/_uid/serial.vue +0 -51
- package/pages/c/_cluster/harvester/console/_uid/vnc.vue +0 -52
- package/pages/c/_cluster/harvester/index.vue +0 -24
- package/pages/c/_cluster/harvester/support/index.vue +0 -154
- package/pkg/model-loader.lib.js +0 -3
- package/plugins/lookup.js +0 -50
- package/promptRemove/kubevirt.io.virtualmachine.vue +0 -164
- package/store/harvester-common.js +0 -126
- package/utils/validators/vm-datavolumes.js +0 -38
- package/utils/validators/vm-image.js +0 -32
- package/utils/validators/vm.js +0 -221
- package/yarn-error.log +0 -196
|
@@ -9,7 +9,7 @@ export default Vue.extend({
|
|
|
9
9
|
* The checkbox value.
|
|
10
10
|
*/
|
|
11
11
|
value: {
|
|
12
|
-
type: [Boolean, Array] as PropType<boolean | boolean[]>,
|
|
12
|
+
type: [Boolean, Array, String] as PropType<boolean | boolean[] | string>,
|
|
13
13
|
default: false
|
|
14
14
|
},
|
|
15
15
|
|
|
@@ -169,6 +169,12 @@ export default Vue.extend({
|
|
|
169
169
|
addObject(this.value, this.valueWhenTrue);
|
|
170
170
|
}
|
|
171
171
|
this.$emit('input', this.value);
|
|
172
|
+
} else if (this.isString(this.valueWhenTrue)) {
|
|
173
|
+
if (this.isChecked) {
|
|
174
|
+
this.$emit('input', null);
|
|
175
|
+
} else {
|
|
176
|
+
this.$emit('input', this.valueWhenTrue);
|
|
177
|
+
}
|
|
172
178
|
} else {
|
|
173
179
|
this.$emit('input', !this.value);
|
|
174
180
|
this.$el.dispatchEvent(click);
|
|
@@ -178,10 +184,14 @@ export default Vue.extend({
|
|
|
178
184
|
/**
|
|
179
185
|
* Determines if there are multiple values for the checkbox.
|
|
180
186
|
*/
|
|
181
|
-
isMulti(value: boolean | boolean[]): value is boolean[] {
|
|
187
|
+
isMulti(value: boolean | boolean[] | string): value is boolean[] {
|
|
182
188
|
return Array.isArray(value);
|
|
183
189
|
},
|
|
184
190
|
|
|
191
|
+
isString(value: boolean | number | string): value is boolean {
|
|
192
|
+
return typeof value === 'string';
|
|
193
|
+
},
|
|
194
|
+
|
|
185
195
|
/**
|
|
186
196
|
* Finds the first true value for multiple checkboxes.
|
|
187
197
|
* @param value A collection of values for the checkbox.
|
|
@@ -88,7 +88,14 @@ export default Vue.extend({
|
|
|
88
88
|
muteLabel(): boolean {
|
|
89
89
|
// Don't mute the label if the mode is view and the button is checked
|
|
90
90
|
return this.disabled && !(this.mode === _VIEW && this.isChecked);
|
|
91
|
-
}
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Determines if the description slot is in use.
|
|
95
|
+
*/
|
|
96
|
+
hasDescriptionSlot(): boolean {
|
|
97
|
+
return !!this.$slots.description;
|
|
98
|
+
},
|
|
92
99
|
},
|
|
93
100
|
|
|
94
101
|
watch: {
|
|
@@ -155,6 +162,12 @@ export default Vue.extend({
|
|
|
155
162
|
{{ description }}
|
|
156
163
|
</template>
|
|
157
164
|
</div>
|
|
165
|
+
<div
|
|
166
|
+
v-else-if="hasDescriptionSlot"
|
|
167
|
+
class="radio-button-outer-container-description"
|
|
168
|
+
>
|
|
169
|
+
<slot name="description" />
|
|
170
|
+
</div>
|
|
158
171
|
</div>
|
|
159
172
|
</label>
|
|
160
173
|
</template>
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { shallowMount } from '@vue/test-utils';
|
|
2
|
+
import { ToggleSwitch } from './index';
|
|
3
|
+
|
|
4
|
+
describe('ToggleSwitch.vue', () => {
|
|
5
|
+
it('renders falsy by default', () => {
|
|
6
|
+
const wrapper = shallowMount(ToggleSwitch);
|
|
7
|
+
|
|
8
|
+
const toggleInput = wrapper.find('input[type="checkbox"]').element as HTMLInputElement
|
|
9
|
+
|
|
10
|
+
expect(toggleInput.checked).toBeFalsy();
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it('renders a true value', () => {
|
|
14
|
+
const wrapper = shallowMount(
|
|
15
|
+
ToggleSwitch,
|
|
16
|
+
{
|
|
17
|
+
propsData: {
|
|
18
|
+
value: true
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const toggleInput = wrapper.find('input[type="checkbox"]').element as HTMLInputElement
|
|
23
|
+
|
|
24
|
+
expect(toggleInput.checked).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('updates from falsy to truthy when props change', async () => {
|
|
28
|
+
const wrapper = shallowMount(ToggleSwitch);
|
|
29
|
+
|
|
30
|
+
const toggleInput = wrapper.find('input[type="checkbox"]').element as HTMLInputElement
|
|
31
|
+
|
|
32
|
+
expect(toggleInput.checked).toBe(false);
|
|
33
|
+
|
|
34
|
+
await wrapper.setProps({ value: true });
|
|
35
|
+
|
|
36
|
+
expect(toggleInput.checked).toBe(true);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('emits an input event with a true value', async () => {
|
|
40
|
+
const wrapper = shallowMount(ToggleSwitch);
|
|
41
|
+
|
|
42
|
+
(wrapper.vm as any).toggle(true);
|
|
43
|
+
|
|
44
|
+
await wrapper.vm.$nextTick();
|
|
45
|
+
|
|
46
|
+
expect(wrapper.emitted().input?.length).toBe(1);
|
|
47
|
+
expect(wrapper.emitted().input?.[0][0]).toBe(true);
|
|
48
|
+
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('emits an input event with a false value', async () => {
|
|
52
|
+
const wrapper = shallowMount(
|
|
53
|
+
ToggleSwitch,
|
|
54
|
+
{
|
|
55
|
+
propsData: {
|
|
56
|
+
value: true
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
(wrapper.vm as any).toggle(false);
|
|
62
|
+
|
|
63
|
+
await wrapper.vm.$nextTick();
|
|
64
|
+
|
|
65
|
+
expect(wrapper.emitted().input?.length).toBe(1);
|
|
66
|
+
expect(wrapper.emitted().input?.[0][0]).toBe(false);
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
it('emits an input event with a custom onValue', async () => {
|
|
70
|
+
const onValue = 'THE TRUTH';
|
|
71
|
+
|
|
72
|
+
const wrapper = shallowMount(
|
|
73
|
+
ToggleSwitch,
|
|
74
|
+
{
|
|
75
|
+
propsData: {
|
|
76
|
+
onValue,
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
(wrapper.vm as any).toggle(true);
|
|
81
|
+
|
|
82
|
+
await wrapper.vm.$nextTick();
|
|
83
|
+
|
|
84
|
+
expect(wrapper.emitted().input?.length).toBe(1);
|
|
85
|
+
expect(wrapper.emitted().input?.[0][0]).toBe(onValue);
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('emits an input event with a custom offValue', async () => {
|
|
89
|
+
const offValue = 'NOT THE TRUTH';
|
|
90
|
+
|
|
91
|
+
const wrapper = shallowMount(
|
|
92
|
+
ToggleSwitch,
|
|
93
|
+
{
|
|
94
|
+
propsData: {
|
|
95
|
+
value: true,
|
|
96
|
+
offValue,
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
(wrapper.vm as any).toggle(false);
|
|
101
|
+
|
|
102
|
+
await wrapper.vm.$nextTick();
|
|
103
|
+
|
|
104
|
+
expect(wrapper.emitted().input?.length).toBe(1);
|
|
105
|
+
expect(wrapper.emitted().input?.[0][0]).toBe(offValue);
|
|
106
|
+
})
|
|
107
|
+
});
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Vue from 'vue';
|
|
3
|
+
export default Vue.extend({
|
|
3
4
|
props: {
|
|
4
5
|
value: {
|
|
5
|
-
type:
|
|
6
|
+
type: [Boolean, String, Number],
|
|
6
7
|
default: false
|
|
7
8
|
},
|
|
8
9
|
|
|
9
10
|
offValue: {
|
|
10
|
-
type:
|
|
11
|
+
type: [Boolean, String, Number],
|
|
11
12
|
default: false,
|
|
12
13
|
},
|
|
13
14
|
|
|
14
15
|
onValue: {
|
|
15
|
-
type:
|
|
16
|
+
type: [Boolean, String, Number],
|
|
16
17
|
default: true,
|
|
17
18
|
},
|
|
18
19
|
|
|
@@ -27,16 +28,25 @@ export default {
|
|
|
27
28
|
},
|
|
28
29
|
},
|
|
29
30
|
data() {
|
|
30
|
-
return { state:
|
|
31
|
+
return { state: false as boolean | string | number };
|
|
31
32
|
},
|
|
32
33
|
|
|
33
34
|
methods: {
|
|
34
|
-
toggle(neu) {
|
|
35
|
+
toggle(neu: boolean | string | number) {
|
|
35
36
|
this.state = neu === null ? !this.state : neu;
|
|
36
37
|
this.$emit('input', this.state ? this.onValue : this.offValue);
|
|
37
38
|
}
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
watch: {
|
|
42
|
+
value: {
|
|
43
|
+
handler() {
|
|
44
|
+
this.state = this.value === this.onValue;
|
|
45
|
+
},
|
|
46
|
+
immediate: true
|
|
47
|
+
}
|
|
38
48
|
}
|
|
39
|
-
};
|
|
49
|
+
});
|
|
40
50
|
</script>
|
|
41
51
|
|
|
42
52
|
<template>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as ToggleSwitch } from './ToggleSwitch.vue';
|
package/scripts/build-pkg.sh
CHANGED
|
@@ -4,6 +4,20 @@ SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
|
|
4
4
|
BASE_DIR="$( cd $SCRIPT_DIR && cd ../.. & pwd)"
|
|
5
5
|
SHELL_DIR=$BASE_DIR/shell/
|
|
6
6
|
EXIT_CODE=0
|
|
7
|
+
FORMATS="umd-min"
|
|
8
|
+
|
|
9
|
+
while getopts "df:" opt; do
|
|
10
|
+
case $opt in
|
|
11
|
+
d)
|
|
12
|
+
FORMATS="umd"
|
|
13
|
+
;;
|
|
14
|
+
f)
|
|
15
|
+
FORMATS=$OPTARG
|
|
16
|
+
;;
|
|
17
|
+
esac
|
|
18
|
+
done
|
|
19
|
+
|
|
20
|
+
shift $((OPTIND-1))
|
|
7
21
|
|
|
8
22
|
# Use shell folder in node modules when we have @rancher/shell installed as a node module
|
|
9
23
|
# rather than the use-case of the mono-repo with the shell folder at the top-level
|
|
@@ -12,7 +26,12 @@ if [ ! -d ${SHELL_DIR} ]; then
|
|
|
12
26
|
SHELL_DIR=$(cd -P ${SHELL_DIR} && pwd)
|
|
13
27
|
fi
|
|
14
28
|
|
|
15
|
-
|
|
29
|
+
CREATE_TARBALL=${2}
|
|
30
|
+
|
|
31
|
+
if [ -z "$VERSION" ]; then
|
|
32
|
+
VERSION=$(cd pkg/$1; node -p -e "require('./package.json').version")
|
|
33
|
+
fi
|
|
34
|
+
|
|
16
35
|
NAME=${1}-${VERSION}
|
|
17
36
|
PKG_DIST=${BASE_DIR}/dist-pkg/${NAME}
|
|
18
37
|
|
|
@@ -20,6 +39,7 @@ if [ -d "${BASE_DIR}/pkg/${1}" ]; then
|
|
|
20
39
|
echo "Building UI Package $1"
|
|
21
40
|
echo " Package name: ${NAME}"
|
|
22
41
|
echo " Package version: ${VERSION}"
|
|
42
|
+
echo " Output formats: ${FORMATS}"
|
|
23
43
|
rm -rf ${PKG_DIST}
|
|
24
44
|
mkdir -p ${PKG_DIST}
|
|
25
45
|
|
|
@@ -42,7 +62,11 @@ if [ -d "${BASE_DIR}/pkg/${1}" ]; then
|
|
|
42
62
|
FILE=index.ts
|
|
43
63
|
fi
|
|
44
64
|
|
|
45
|
-
|
|
65
|
+
if [ -n "$COMMIT" ]; then
|
|
66
|
+
echo ${COMMIT} > ${PKG_DIST}/version
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
${BASE_DIR}/node_modules/.bin/vue-cli-service build --name ${NAME} --target lib ${FILE} --dest ${PKG_DIST} --formats ${FORMATS} --filename ${NAME}
|
|
46
70
|
EXIT_CODE=$?
|
|
47
71
|
cp -f ./package.json ${PKG_DIST}/package.json
|
|
48
72
|
node ${SCRIPT_DIR}/pkgfile.js ${PKG_DIST}/package.json
|
|
@@ -52,4 +76,26 @@ if [ -d "${BASE_DIR}/pkg/${1}" ]; then
|
|
|
52
76
|
popd
|
|
53
77
|
fi
|
|
54
78
|
|
|
79
|
+
if [ $EXIT_CODE -ne 0 ]; then
|
|
80
|
+
exit $EXIT_CODE
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
if [ -n "${CREATE_TARBALL}" ]; then
|
|
85
|
+
echo $COMMIT $COMMIT_BRANCH > ${PKG_DIST}/version-commit.txt
|
|
86
|
+
|
|
87
|
+
TARBALL=${NAME}.tar.gz
|
|
88
|
+
|
|
89
|
+
pushd ${PKG_DIST}
|
|
90
|
+
|
|
91
|
+
rm -f ../$TARBALL
|
|
92
|
+
|
|
93
|
+
echo "Compressing to ${TARBALL}..."
|
|
94
|
+
|
|
95
|
+
tar -czf ../${TARBALL} .
|
|
96
|
+
|
|
97
|
+
popd
|
|
98
|
+
|
|
99
|
+
fi
|
|
100
|
+
|
|
55
101
|
exit $EXIT_CODE
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
|
|
3
|
+
yarn --pure-lockfile install
|
|
4
|
+
|
|
5
|
+
source scripts/version
|
|
6
|
+
|
|
7
|
+
if [[ $COMMIT_BRANCH == "master" ]]; then
|
|
8
|
+
VERSION="latest"
|
|
9
|
+
else
|
|
10
|
+
VERSION=$(cd pkg/$1; node -p -e "require('./package.json').version")
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
echo "Drone Build Args"
|
|
14
|
+
echo "COMMIT: ${COMMIT}"
|
|
15
|
+
echo "COMMIT_BRANCH: ${COMMIT_BRANCH}"
|
|
16
|
+
echo "VERSION: ${VERSION}"
|
|
17
|
+
echo ""
|
|
18
|
+
|
|
19
|
+
# package, override version, commit for file in pkg root
|
|
20
|
+
# Note - in the future env vars should be moved to args and build-pkg should use getopts
|
|
21
|
+
COMMIT=$COMMIT COMMIT_BRANCH=$COMMIT_BRANCH VERSION=$VERSION ./shell/scripts/build-pkg.sh ${1} "true"
|
|
22
|
+
EXIT_CODE=$?
|
|
23
|
+
|
|
24
|
+
export PKG_NAME=${1}-${VERSION}
|
|
25
|
+
export PKG_TARBALL=${PKG_NAME}.tar.gz
|
|
26
|
+
|
|
27
|
+
echo "Drone Build Artefacts"
|
|
28
|
+
echo "Package Directory: ${PKG_NAME}"
|
|
29
|
+
echo "Package Tarball: ${PKG_TARBALL}"
|
|
30
|
+
|
|
31
|
+
exit $EXIT_CODE
|
package/scripts/publish-shell.sh
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
|
|
3
|
-
SCRIPT_DIR="$(
|
|
4
|
-
BASE_DIR="$(
|
|
3
|
+
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
|
|
4
|
+
BASE_DIR="$(
|
|
5
|
+
cd $SCRIPT_DIR && cd ../.. &
|
|
6
|
+
pwd
|
|
7
|
+
)"
|
|
5
8
|
SHELL_DIR=$BASE_DIR/shell/
|
|
6
9
|
PUBLISH_ARGS="--no-git-tag-version --access public"
|
|
7
10
|
|
|
@@ -18,10 +21,10 @@ mkdir -p ${PKG_DIST}
|
|
|
18
21
|
rm -rf ${PKG_DIST}/app
|
|
19
22
|
rm -rf ${PKG_DIST}/pkg
|
|
20
23
|
|
|
21
|
-
pushd ${SHELL_DIR}
|
|
24
|
+
pushd ${SHELL_DIR} >/dev/null
|
|
22
25
|
|
|
23
|
-
PKG_VERSION
|
|
24
|
-
popd
|
|
26
|
+
PKG_VERSION=$(node -p "require('./package.json').version")
|
|
27
|
+
popd >/dev/null
|
|
25
28
|
|
|
26
29
|
echo "Publishing version: $PKG_VERSION"
|
|
27
30
|
|
|
@@ -39,7 +42,7 @@ function publish() {
|
|
|
39
42
|
FOLDER=$2
|
|
40
43
|
|
|
41
44
|
echo "Publishing ${NAME} from ${FOLDER}"
|
|
42
|
-
pushd ${FOLDER}
|
|
45
|
+
pushd ${FOLDER} >/dev/null
|
|
43
46
|
|
|
44
47
|
# For now, copy the rancher components into the shell and ship them with it
|
|
45
48
|
if [ "$NAME" == "Shell" ]; then
|
|
@@ -50,11 +53,7 @@ function publish() {
|
|
|
50
53
|
|
|
51
54
|
yarn publish . --new-version ${PKG_VERSION} ${PUBLISH_ARGS}
|
|
52
55
|
RET=$?
|
|
53
|
-
|
|
54
|
-
# Remove the rancher-components folder if we created it
|
|
55
|
-
rm -rf ${SHELL_DIR}/rancher-components
|
|
56
|
-
|
|
57
|
-
popd > /dev/null
|
|
56
|
+
popd >/dev/null
|
|
58
57
|
|
|
59
58
|
if [ $RET -ne 0 ]; then
|
|
60
59
|
echo "Error publishing package ${NAME}"
|
package/scripts/serve-pkgs
CHANGED
|
@@ -9,13 +9,14 @@ const dir = path.resolve('.');
|
|
|
9
9
|
const pkgs = path.join(dir, 'dist-pkg');
|
|
10
10
|
let port = 4500;
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
const express = require('express');
|
|
13
|
+
const serveStatic = require('serve-static');
|
|
14
|
+
|
|
15
|
+
const app = express();
|
|
16
16
|
|
|
17
17
|
function catalog(res) {
|
|
18
18
|
const response = [];
|
|
19
|
+
|
|
19
20
|
fs.readdirSync(pkgs).forEach((f) => {
|
|
20
21
|
const pkgFile = path.join(pkgs, f, 'package.json');
|
|
21
22
|
|
|
@@ -27,7 +28,7 @@ function catalog(res) {
|
|
|
27
28
|
}
|
|
28
29
|
});
|
|
29
30
|
|
|
30
|
-
res.json(response)
|
|
31
|
+
res.json(response);
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
app.use('/', (req, res, next) => {
|
|
@@ -37,7 +38,7 @@ app.use('/', (req, res, next) => {
|
|
|
37
38
|
|
|
38
39
|
return next();
|
|
39
40
|
});
|
|
40
|
-
|
|
41
|
+
|
|
41
42
|
app.use(serveStatic(pkgs));
|
|
42
43
|
|
|
43
44
|
if (process.env.PORT) {
|
|
@@ -47,16 +48,22 @@ if (process.env.PORT) {
|
|
|
47
48
|
const base = `http://127.0.0.1:${ port }`;
|
|
48
49
|
|
|
49
50
|
console.log('');
|
|
50
|
-
console.log(`Serving catalog on ${ base }`)
|
|
51
|
+
console.log(`Serving catalog on ${ base }`);
|
|
51
52
|
console.log('');
|
|
52
53
|
console.log(`Serving packages:`);
|
|
53
54
|
console.log('');
|
|
54
55
|
fs.readdirSync(pkgs).forEach((f) => {
|
|
55
|
-
|
|
56
|
+
let main = `${ f }.umd.min.js`;
|
|
56
57
|
|
|
57
58
|
if (fs.existsSync(path.join(pkgs, f, main))) {
|
|
58
59
|
console.log(` ${ f } available at: ${ base }/${ f }/${ main }`);
|
|
60
|
+
} else {
|
|
61
|
+
main = `${ f }.umd.js`;
|
|
62
|
+
|
|
63
|
+
if (fs.existsSync(path.join(pkgs, f, main))) {
|
|
64
|
+
console.log(` ${ f } available at: ${ base }/${ f }/${ main }`);
|
|
65
|
+
}
|
|
59
66
|
}
|
|
60
67
|
});
|
|
61
|
-
|
|
62
|
-
app.listen(port)
|
|
68
|
+
|
|
69
|
+
app.listen(port);
|
|
@@ -42,6 +42,12 @@ if [ $SKIP_SETUP == "false" ]; then
|
|
|
42
42
|
sleep 10
|
|
43
43
|
|
|
44
44
|
echo "Configuring Verdaccio user"
|
|
45
|
+
|
|
46
|
+
# Remove existing admin if already there
|
|
47
|
+
if [ -f ~/.config/verdaccio/htpasswd ]; then
|
|
48
|
+
sed -i '/^admin:/d' ~/.config/verdaccio/htpasswd
|
|
49
|
+
fi
|
|
50
|
+
|
|
45
51
|
curl -XPUT -H "Content-type: application/json" -d '{ "name": "admin", "password": "admin" }' 'http://localhost:4873/-/user/admin' > login.json
|
|
46
52
|
TOKEN=$(jq -r .token login.json)
|
|
47
53
|
rm login.json
|
|
@@ -54,9 +60,20 @@ EOF
|
|
|
54
60
|
fi
|
|
55
61
|
fi
|
|
56
62
|
|
|
57
|
-
|
|
63
|
+
if [ -d ~/.local/share/verdaccio/storage/@rancher ]; then
|
|
64
|
+
rm -rf ~/.local/share/verdaccio/storage/@rancher/*
|
|
65
|
+
else
|
|
66
|
+
rm -rf ~/.config/verdaccio/storage/@rancher/*
|
|
67
|
+
fi
|
|
58
68
|
|
|
59
69
|
export YARN_REGISTRY=http://localhost:4873
|
|
70
|
+
export NEXT_TELEMETRY_DISABLED=1
|
|
71
|
+
|
|
72
|
+
# We need to patch the version number of the shell, otherwise if we are running
|
|
73
|
+
# with the currently published version, things will fail as those versions
|
|
74
|
+
# are already published and Verdaccio will check, since it is a read-through cache
|
|
75
|
+
sed -i.bak -e "s/\"version\": \"[0-9]*.[0-9]*.[0-9]*\",/\"version\": \"7.7.7\",/g" ${SHELL_DIR}/package.json
|
|
76
|
+
rm ${SHELL_DIR}/package.json.bak
|
|
60
77
|
|
|
61
78
|
# Publish shell
|
|
62
79
|
echo "Publishing shell packages to local registry"
|
package/store/catalog.js
CHANGED
|
@@ -652,7 +652,9 @@ export function filterAndArrangeCharts(charts, {
|
|
|
652
652
|
const searchTokens = searchQuery.split(/\s*[, ]\s*/).map(x => ensureRegex(x, false));
|
|
653
653
|
|
|
654
654
|
for ( const token of searchTokens ) {
|
|
655
|
-
|
|
655
|
+
const chartDescription = c.chartDescription || '';
|
|
656
|
+
|
|
657
|
+
if ( !c.chartNameDisplay.match(token) && !chartDescription.match(token) ) {
|
|
656
658
|
return false;
|
|
657
659
|
}
|
|
658
660
|
}
|
package/store/i18n.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import merge from 'lodash/merge';
|
|
2
2
|
import IntlMessageFormat from 'intl-messageformat';
|
|
3
|
-
import { LOCALE } from '@shell/config/cookies';
|
|
4
3
|
import { get } from '@shell/utils/object';
|
|
5
4
|
import en from '@shell/assets/translations/en-us.yaml';
|
|
6
5
|
import { getProduct, getVendor, DOCS_BASE } from '@shell/config/private-label';
|
|
@@ -208,8 +207,10 @@ export const mutations = {
|
|
|
208
207
|
};
|
|
209
208
|
|
|
210
209
|
export const actions = {
|
|
211
|
-
init({
|
|
212
|
-
|
|
210
|
+
init({
|
|
211
|
+
state, commit, dispatch, rootGetters
|
|
212
|
+
}) {
|
|
213
|
+
let selected = rootGetters['prefs/get']('locale');
|
|
213
214
|
|
|
214
215
|
// We might be using a locale that is loaded by a plugin that is no longer loaded
|
|
215
216
|
const exists = !!state.available.find(loc => loc === selected);
|
|
@@ -259,8 +260,11 @@ export const actions = {
|
|
|
259
260
|
state,
|
|
260
261
|
rootState,
|
|
261
262
|
commit,
|
|
262
|
-
dispatch
|
|
263
|
+
dispatch,
|
|
264
|
+
getters
|
|
263
265
|
}, locale) {
|
|
266
|
+
const currentLocale = getters['current']();
|
|
267
|
+
|
|
264
268
|
if ( locale === NONE ) {
|
|
265
269
|
commit('setSelected', locale);
|
|
266
270
|
|
|
@@ -308,13 +312,14 @@ export const actions = {
|
|
|
308
312
|
}
|
|
309
313
|
|
|
310
314
|
commit('setSelected', locale);
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
315
|
+
|
|
316
|
+
// Ony update the preference if the locale changed
|
|
317
|
+
if (currentLocale !== locale) {
|
|
318
|
+
dispatch('prefs/set', {
|
|
319
|
+
key: 'locale',
|
|
320
|
+
value: state.selected
|
|
321
|
+
}, { root: true });
|
|
322
|
+
}
|
|
318
323
|
},
|
|
319
324
|
|
|
320
325
|
toggleNone({ state, dispatch }) {
|