@rancher/shell 0.1.2 → 0.1.4
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/brand/suse/dark/rancher-logo.svg +1 -148
- package/assets/brand/suse/rancher-logo.svg +1 -130
- package/assets/images/featured/img1.jpg +0 -0
- package/assets/images/featured.jpg +0 -0
- package/assets/images/generic-plugin.svg +7 -0
- package/assets/styles/themes/_dark.scss +3 -0
- package/assets/styles/themes/_light.scss +3 -0
- package/assets/styles/themes/_suse.scss +1 -1
- package/assets/translations/en-us.yaml +209 -813
- package/assets/translations/zh-hans.yaml +28 -792
- package/components/ActionMenu.vue +3 -3
- package/components/AsyncButton.vue +17 -2
- package/components/ButtonDropdown.vue +4 -0
- package/components/Carousel.vue +291 -0
- package/components/CodeMirror.vue +6 -8
- package/components/CommunityLinks.vue +70 -19
- package/components/ContainerResourceLimit.vue +14 -0
- package/components/CruResource.vue +11 -3
- package/components/Dialog.vue +102 -0
- package/components/ExplorerMembers.vue +121 -0
- package/components/ExplorerProjectsNamespaces.vue +404 -0
- package/components/GrafanaDashboard.vue +17 -2
- package/components/IconMessage.vue +9 -1
- package/components/LocaleSelector.vue +114 -0
- package/components/PromptModal.vue +2 -3
- package/components/ResourceList/index.vue +1 -1
- package/components/ResourceTable.vue +9 -7
- package/components/SimpleBox.vue +6 -4
- package/components/SingleClusterInfo.vue +1 -1
- package/components/SortableTable/index.vue +18 -25
- package/components/SortableTable/selection.js +1 -0
- package/components/Tabbed/Tab.vue +5 -0
- package/components/Tabbed/index.vue +29 -2
- package/components/auth/AzureWarning.vue +5 -1
- package/components/auth/Principal.vue +2 -1
- package/components/auth/RoleDetailEdit.vue +18 -11
- package/components/fleet/FleetBundles.vue +8 -3
- package/components/fleet/FleetRepos.vue +0 -2
- package/components/fleet/FleetSummary.vue +6 -0
- package/components/form/KeyValue.vue +80 -58
- package/components/form/NameNsDescription.vue +12 -8
- package/components/form/NodeScheduling.vue +1 -1
- package/components/form/ResourceTabs/index.vue +5 -1
- package/components/form/WorkloadPorts.vue +1 -1
- package/components/formatter/ClusterLink.vue +3 -7
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/nav/Header.vue +9 -9
- package/components/nav/NamespaceFilter.vue +10 -7
- package/components/nav/TopLevelMenu.vue +10 -65
- package/components/nav/WindowManager/ContainerLogs.vue +1 -1
- package/config/footer.js +13 -14
- package/config/labels-annotations.js +2 -1
- package/config/product/explorer.js +5 -4
- package/config/product/harvester-manager.js +64 -2
- package/config/product/legacy.js +0 -47
- package/config/product/manager.js +9 -0
- package/config/product/multi-cluster-apps.js +0 -12
- package/config/product/settings.js +12 -1
- package/config/product/uiplugins.js +17 -0
- package/config/settings.js +37 -72
- package/config/table-headers.js +0 -1
- package/config/types.js +9 -25
- package/config/uiplugins.js +60 -0
- package/content/docs/en-us/getting-started.md +1 -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 +91 -36
- package/core/types.ts +7 -1
- package/detail/provisioning.cattle.io.cluster.vue +15 -2
- 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/dialog/DiagnosticTimingsDialog.vue +116 -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 +9 -3
- 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 +44 -6
- package/edit/management.cattle.io.project.vue +2 -2
- package/edit/namespace.vue +17 -10
- package/edit/networking.k8s.io.ingress/index.vue +2 -2
- package/edit/persistentvolume/index.vue +3 -0
- package/edit/persistentvolumeclaim.vue +1 -0
- package/edit/pod.vue +27 -0
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
- package/edit/provisioning.cattle.io.cluster/MachinePool.vue +33 -5
- package/edit/provisioning.cattle.io.cluster/rke2.vue +76 -5
- package/edit/service.vue +8 -6
- package/edit/workload/__tests__/Upgrading.test.ts +1 -0
- package/edit/workload/index.vue +375 -15
- package/edit/workload/mixins/workload.js +62 -7
- package/edit/workload/storage/ContainerMountPaths.vue +240 -0
- package/edit/workload/storage/Mount.vue +1 -0
- package/edit/workload/storage/awsElasticBlockStore.vue +20 -1
- package/edit/workload/storage/azureDisk.vue +22 -2
- package/edit/workload/storage/azureFile.vue +20 -2
- package/edit/workload/storage/csi/index.vue +23 -1
- package/edit/workload/storage/gcePersistentDisk.vue +20 -2
- package/edit/workload/storage/index.vue +23 -49
- package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -0
- package/edit/workload/storage/vsphereVolume.vue +11 -1
- package/layouts/default.vue +63 -32
- package/layouts/error.vue +5 -1
- package/layouts/home.vue +14 -5
- package/layouts/plain.vue +10 -5
- package/list/harvesterhci.io.management.cluster.vue +74 -33
- package/list/management.cattle.io.setting.vue +3 -3
- package/list/namespace.vue +3 -5
- package/list/provisioning.cattle.io.cluster.vue +1 -1
- package/machine-config/amazonec2.vue +2 -0
- package/machine-config/harvester.vue +100 -51
- package/middleware/authenticated.js +56 -52
- package/mixins/form-validation.js +1 -1
- package/mixins/resource-fetch.js +3 -1
- package/models/catalog.cattle.io.uiplugin.js +34 -0
- package/models/cluster/node.js +25 -2
- package/models/fleet.cattle.io.bundle.js +27 -20
- package/models/harvesterhci.io.management.cluster.js +200 -5
- package/models/management.cattle.io.cluster.js +1 -1
- package/models/management.cattle.io.clusterroletemplatebinding.js +9 -0
- package/models/management.cattle.io.project.js +23 -2
- package/models/namespace.js +19 -3
- package/models/pod.js +19 -2
- package/models/provisioning.cattle.io.cluster.js +16 -6
- package/models/workload.js +9 -246
- package/models/workload.service.js +314 -0
- package/nuxt.config.js +80 -34
- package/package.json +107 -108
- 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/index.vue +46 -1
- package/pages/c/_cluster/apps/charts/install.vue +10 -9
- package/pages/c/_cluster/explorer/index.vue +72 -9
- package/pages/c/_cluster/explorer/tools/index.vue +12 -5
- package/pages/c/_cluster/mcapps/index.vue +1 -1
- package/pages/c/_cluster/settings/brand.vue +0 -40
- package/pages/c/_cluster/settings/links.vue +200 -0
- package/pages/c/_cluster/settings/performance.vue +19 -16
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +232 -0
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +242 -0
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +284 -0
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +130 -0
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +253 -0
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +115 -0
- package/pages/c/_cluster/uiplugins/index.vue +694 -0
- package/pages/diagnostic.vue +185 -101
- package/pages/docs/_doc.vue +3 -1
- package/pages/fail-whale.vue +1 -10
- package/pages/home.vue +21 -56
- package/pages/index.vue +18 -4
- package/pages/prefs.vue +108 -86
- package/pages/safeMode.vue +17 -0
- package/pages/support/index.vue +23 -15
- package/pkg/auto-import.js +44 -7
- package/pkg/dynamic-importer.lib.js +4 -0
- 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/dashboard-store/model-loader-require.js +12 -0
- package/plugins/dashboard-store/model-loader.js +4 -1
- package/plugins/dashboard-store/resource-class.js +12 -5
- package/plugins/formatters.js +15 -0
- package/plugins/plugin.js +56 -4
- package/plugins/steve/actions.js +1 -1
- package/plugins/steve/index.js +6 -4
- package/plugins/steve/mutations.js +1 -1
- package/plugins/steve/subscribe.js +89 -56
- package/plugins/steve/web-worker.steve-sub-worker.js +24 -15
- package/promptRemove/management.cattle.io.globalrole.vue +47 -0
- package/promptRemove/management.cattle.io.roletemplate.vue +47 -0
- package/promptRemove/mixin/roleDeletionCheck.js +97 -0
- package/rancher-components/Form/Checkbox/Checkbox.test.ts +77 -0
- package/rancher-components/Form/Checkbox/Checkbox.vue +12 -2
- package/scripts/build-pkg.sh +48 -2
- package/scripts/drone-build-pkg.sh +31 -0
- package/scripts/publish-shell.sh +11 -12
- package/scripts/serve-pkgs +17 -10
- package/scripts/sync-shell-deps +37 -0
- package/store/catalog.js +12 -9
- package/store/i18n.js +26 -12
- package/store/index.js +4 -181
- package/store/prefs.js +46 -2
- package/store/type-map.js +47 -33
- package/store/uiplugins.ts +15 -61
- package/utils/__tests__/object.test.ts +0 -24
- package/utils/__tests__/selector.test.ts +1 -1
- package/utils/cluster.js +1 -1
- package/utils/custom-validators.js +1 -12
- package/utils/dynamic-importer.js +5 -1
- package/utils/grafana.js +2 -6
- package/utils/socket.js +41 -20
- package/utils/string.js +1 -7
- package/utils/validators/formRules/__tests__/index.test.ts +108 -0
- package/utils/validators/formRules/index.ts +9 -1
- package/utils/validators/setting.js +0 -35
- package/yarn-error.log +195 -0
- 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/pages/plugins.vue +0 -387
- package/pkg/model-loader.lib.js +0 -3
- package/promptRemove/kubevirt.io.virtualmachine.vue +0 -164
- package/server/verdaccio-middleware.js +0 -56
- 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
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { shallowMount } from '@vue/test-utils';
|
|
2
|
+
import { Checkbox } from './index';
|
|
3
|
+
|
|
4
|
+
describe('Checkbox.vue', () => {
|
|
5
|
+
it('is unchecked by default', () => {
|
|
6
|
+
const wrapper = shallowMount(Checkbox);
|
|
7
|
+
const cbInput = wrapper.find('input[type="checkbox"]').element as HTMLInputElement;
|
|
8
|
+
|
|
9
|
+
expect(cbInput.checked).toBe(false);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('renders a true value', () => {
|
|
13
|
+
const wrapper = shallowMount(Checkbox, { propsData: { value: true } });
|
|
14
|
+
const cbInput = wrapper.find('input[type="checkbox"]').element as HTMLInputElement;
|
|
15
|
+
|
|
16
|
+
expect(cbInput.checked).toBe(true);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('updates from false to true when props change', async () => {
|
|
20
|
+
const wrapper = shallowMount(Checkbox);
|
|
21
|
+
const cbInput = wrapper.find('input[type="checkbox"]').element as HTMLInputElement;
|
|
22
|
+
|
|
23
|
+
expect(cbInput.checked).toBe(false);
|
|
24
|
+
|
|
25
|
+
await wrapper.setProps({ value: true });
|
|
26
|
+
|
|
27
|
+
expect(cbInput.checked).toBe(true);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('emits an input event with a true value', async () => {
|
|
31
|
+
const wrapper = shallowMount(Checkbox);
|
|
32
|
+
const event = {
|
|
33
|
+
target: { tagName: 'input', href: null },
|
|
34
|
+
stopPropagation: () => { },
|
|
35
|
+
preventDefault: () => { }
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
(wrapper.vm as any).clicked(event);
|
|
39
|
+
await wrapper.vm.$nextTick();
|
|
40
|
+
|
|
41
|
+
expect(wrapper.emitted().input?.length).toBe(1);
|
|
42
|
+
expect(wrapper.emitted().input?.[0][0]).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('emits an input event with a custom valueWhenTrue', async () => {
|
|
46
|
+
const valueWhenTrue = 'BIG IF TRUE';
|
|
47
|
+
const event = {
|
|
48
|
+
target: { tagName: 'input', href: null },
|
|
49
|
+
stopPropagation: () => { },
|
|
50
|
+
preventDefault: () => { }
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const wrapper = shallowMount(Checkbox, { propsData: { value: false, valueWhenTrue } });
|
|
54
|
+
|
|
55
|
+
(wrapper.vm as any).clicked(event);
|
|
56
|
+
await wrapper.vm.$nextTick();
|
|
57
|
+
|
|
58
|
+
expect(wrapper.emitted().input?.length).toBe(1);
|
|
59
|
+
expect(wrapper.emitted().input?.[0][0]).toBe(valueWhenTrue);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('updates from valueWhenTrue to falsy', async () => {
|
|
63
|
+
const valueWhenTrue = 'REAL HUGE IF FALSE';
|
|
64
|
+
const event = {
|
|
65
|
+
target: { tagName: 'input', href: null },
|
|
66
|
+
stopPropagation: () => { },
|
|
67
|
+
preventDefault: () => { }
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const wrapper = shallowMount(Checkbox, { propsData: { value: valueWhenTrue, valueWhenTrue } });
|
|
71
|
+
|
|
72
|
+
(wrapper.vm as any).clicked(event);
|
|
73
|
+
await wrapper.vm.$nextTick();
|
|
74
|
+
|
|
75
|
+
expect(wrapper.emitted().input?.[0][0]).toBe(null);
|
|
76
|
+
})
|
|
77
|
+
});
|
|
@@ -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.
|
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,9 +1,12 @@
|
|
|
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
|
-
PUBLISH_ARGS="--no-git-tag-version --access public"
|
|
9
|
+
PUBLISH_ARGS="--no-git-tag-version --access public $PUBLISH_ARGS"
|
|
7
10
|
|
|
8
11
|
echo "Publishing Shell Packages"
|
|
9
12
|
|
|
@@ -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);
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs-extra');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
console.log(__dirname);
|
|
7
|
+
|
|
8
|
+
const dir = path.resolve('.');
|
|
9
|
+
|
|
10
|
+
console.log('Syncing shell dependencies');
|
|
11
|
+
|
|
12
|
+
const topFile = path.join(dir, 'package.json');
|
|
13
|
+
const shellFile = path.join(dir, 'shell', 'package.json');
|
|
14
|
+
|
|
15
|
+
console.log(topFile);
|
|
16
|
+
console.log(shellFile);
|
|
17
|
+
|
|
18
|
+
const mainPkg = JSON.parse(fs.readFileSync(topFile));
|
|
19
|
+
|
|
20
|
+
console.log(mainPkg.version);
|
|
21
|
+
|
|
22
|
+
const shellPkg = JSON.parse(fs.readFileSync(shellFile));
|
|
23
|
+
|
|
24
|
+
console.log(shellPkg.version);
|
|
25
|
+
|
|
26
|
+
Object.keys(shellPkg.dependencies).forEach(k => {
|
|
27
|
+
const version = mainPkg.dependencies[k] || mainPkg.devDependencies[k];
|
|
28
|
+
const current = shellPkg.dependencies[k];
|
|
29
|
+
|
|
30
|
+
if (version) {
|
|
31
|
+
console.log(`Syncing ${ k } -> ${ version } was ${ current }`);
|
|
32
|
+
shellPkg.dependencies[k] = version;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
fs.writeFileSync(shellFile, JSON.stringify(shellPkg, undefined, 2));
|
|
37
|
+
|
package/store/catalog.js
CHANGED
|
@@ -61,6 +61,11 @@ export const getters = {
|
|
|
61
61
|
return [...clustered, ...namespaced];
|
|
62
62
|
},
|
|
63
63
|
|
|
64
|
+
// Raw charts
|
|
65
|
+
rawCharts(state) {
|
|
66
|
+
return state.charts;
|
|
67
|
+
},
|
|
68
|
+
|
|
64
69
|
repo(state, getters) {
|
|
65
70
|
return ({ repoType, repoName }) => {
|
|
66
71
|
const ary = (repoType === 'cluster' ? state.clusterRepos : state.namespacedRepos);
|
|
@@ -250,19 +255,13 @@ export const getters = {
|
|
|
250
255
|
|
|
251
256
|
haveComponent() {
|
|
252
257
|
return (name) => {
|
|
253
|
-
|
|
254
|
-
require.resolve(`@shell/chart/${ name }`);
|
|
255
|
-
|
|
256
|
-
return true;
|
|
257
|
-
} catch (e) {
|
|
258
|
-
return false;
|
|
259
|
-
}
|
|
258
|
+
return getters['type-map/hasCustomChart'](name);
|
|
260
259
|
};
|
|
261
260
|
},
|
|
262
261
|
|
|
263
262
|
importComponent(state, getters) {
|
|
264
263
|
return (name) => {
|
|
265
|
-
return importChart(name);
|
|
264
|
+
return getters['type-map/importChart'](name);
|
|
266
265
|
};
|
|
267
266
|
},
|
|
268
267
|
|
|
@@ -340,6 +339,7 @@ export const actions = {
|
|
|
340
339
|
// Installing an app? This is fine (in cluster store)
|
|
341
340
|
// Fetching list of cluster templates? This is fine (in management store)
|
|
342
341
|
// Installing a cluster template? This isn't fine (in cluster store as per installing app, but if there is no cluster we need to default to management)
|
|
342
|
+
|
|
343
343
|
const inStore = rootGetters['currentCluster'] ? rootGetters['currentProduct'].inStore : 'management';
|
|
344
344
|
|
|
345
345
|
if ( rootGetters[`${ inStore }/schemaFor`](CATALOG.CLUSTER_REPO) ) {
|
|
@@ -517,6 +517,7 @@ function addChart(ctx, map, chart, repo) {
|
|
|
517
517
|
chartName: chart.name,
|
|
518
518
|
chartNameDisplay: chart.annotations?.[CATALOG_ANNOTATIONS.DISPLAY_NAME] || chart.name,
|
|
519
519
|
chartDescription: chart.description,
|
|
520
|
+
featured: chart.annotations?.[CATALOG_ANNOTATIONS.FEATURED],
|
|
520
521
|
repoKey: repo._key,
|
|
521
522
|
versions: [],
|
|
522
523
|
categories: filterCategories(chart.keywords),
|
|
@@ -652,7 +653,9 @@ export function filterAndArrangeCharts(charts, {
|
|
|
652
653
|
const searchTokens = searchQuery.split(/\s*[, ]\s*/).map(x => ensureRegex(x, false));
|
|
653
654
|
|
|
654
655
|
for ( const token of searchTokens ) {
|
|
655
|
-
|
|
656
|
+
const chartDescription = c.chartDescription || '';
|
|
657
|
+
|
|
658
|
+
if ( !c.chartNameDisplay.match(token) && !chartDescription.match(token) ) {
|
|
656
659
|
return false;
|
|
657
660
|
}
|
|
658
661
|
}
|
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';
|
|
@@ -140,6 +139,14 @@ export const getters = {
|
|
|
140
139
|
return state.default;
|
|
141
140
|
},
|
|
142
141
|
|
|
142
|
+
multiWithFallback: (state, getters) => (items, key = 'key') => {
|
|
143
|
+
return items.map((item) => {
|
|
144
|
+
item[key] = getters.withFallback(item[key], null, item[key]);
|
|
145
|
+
|
|
146
|
+
return item;
|
|
147
|
+
});
|
|
148
|
+
},
|
|
149
|
+
|
|
143
150
|
withFallback: (state, getters) => (key, args, fallback, fallbackIsKey = false) => {
|
|
144
151
|
// Support withFallback(key,fallback) when no args
|
|
145
152
|
if ( !fallback && typeof args === 'string' ) {
|
|
@@ -154,7 +161,8 @@ export const getters = {
|
|
|
154
161
|
} else {
|
|
155
162
|
return fallback;
|
|
156
163
|
}
|
|
157
|
-
}
|
|
164
|
+
},
|
|
165
|
+
|
|
158
166
|
};
|
|
159
167
|
|
|
160
168
|
export const mutations = {
|
|
@@ -208,8 +216,10 @@ export const mutations = {
|
|
|
208
216
|
};
|
|
209
217
|
|
|
210
218
|
export const actions = {
|
|
211
|
-
init({
|
|
212
|
-
|
|
219
|
+
init({
|
|
220
|
+
state, commit, dispatch, rootGetters
|
|
221
|
+
}) {
|
|
222
|
+
let selected = rootGetters['prefs/get']('locale');
|
|
213
223
|
|
|
214
224
|
// We might be using a locale that is loaded by a plugin that is no longer loaded
|
|
215
225
|
const exists = !!state.available.find(loc => loc === selected);
|
|
@@ -259,8 +269,11 @@ export const actions = {
|
|
|
259
269
|
state,
|
|
260
270
|
rootState,
|
|
261
271
|
commit,
|
|
262
|
-
dispatch
|
|
272
|
+
dispatch,
|
|
273
|
+
getters
|
|
263
274
|
}, locale) {
|
|
275
|
+
const currentLocale = getters['current']();
|
|
276
|
+
|
|
264
277
|
if ( locale === NONE ) {
|
|
265
278
|
commit('setSelected', locale);
|
|
266
279
|
|
|
@@ -308,13 +321,14 @@ export const actions = {
|
|
|
308
321
|
}
|
|
309
322
|
|
|
310
323
|
commit('setSelected', locale);
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
324
|
+
|
|
325
|
+
// Ony update the preference if the locale changed
|
|
326
|
+
if (currentLocale !== locale) {
|
|
327
|
+
dispatch('prefs/set', {
|
|
328
|
+
key: 'locale',
|
|
329
|
+
value: state.selected
|
|
330
|
+
}, { root: true });
|
|
331
|
+
}
|
|
318
332
|
},
|
|
319
333
|
|
|
320
334
|
toggleNone({ state, dispatch }) {
|