@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.
Files changed (294) hide show
  1. package/assets/translations/en-us.yaml +33 -769
  2. package/assets/translations/zh-hans.yaml +153 -781
  3. package/components/ActionMenu.vue +3 -3
  4. package/components/CodeMirror.vue +6 -8
  5. package/components/CommunityLinks.vue +1 -1
  6. package/components/ContainerResourceLimit.vue +14 -0
  7. package/components/ExplorerMembers.vue +123 -0
  8. package/components/ExplorerProjectsNamespaces.vue +405 -0
  9. package/components/GrafanaDashboard.vue +17 -2
  10. package/components/LocaleSelector.vue +81 -0
  11. package/components/PromptModal.vue +2 -3
  12. package/components/ResourceList/index.vue +1 -1
  13. package/components/ResourceTable.vue +3 -6
  14. package/components/SingleClusterInfo.vue +1 -1
  15. package/components/SortableTable/index.vue +23 -20
  16. package/components/SortableTable/selection.js +1 -0
  17. package/components/auth/AzureWarning.vue +5 -1
  18. package/components/auth/Principal.vue +1 -1
  19. package/components/auth/RoleDetailEdit.vue +32 -12
  20. package/components/fleet/FleetRepos.vue +0 -2
  21. package/components/form/NameNsDescription.vue +4 -6
  22. package/components/form/NodeScheduling.vue +1 -1
  23. package/components/form/ResourceTabs/index.vue +27 -18
  24. package/components/form/WorkloadPorts.vue +1 -1
  25. package/components/formatter/ClusterLink.vue +13 -0
  26. package/components/formatter/PodImages.vue +11 -1
  27. package/components/formatter/RKETemplateName.vue +37 -0
  28. package/components/formatter/WorkloadHealthScale.vue +1 -1
  29. package/components/nav/Header.vue +9 -9
  30. package/components/nav/NamespaceFilter.vue +7 -4
  31. package/components/nav/TopLevelMenu.vue +6 -43
  32. package/components/nav/WindowManager/ContainerLogs.vue +1 -1
  33. package/config/product/harvester-manager.js +64 -2
  34. package/config/product/manager.js +9 -0
  35. package/config/settings.js +17 -71
  36. package/config/table-headers.js +0 -1
  37. package/config/types.js +8 -26
  38. package/core/plugin-routes.ts +34 -22
  39. package/core/plugin.ts +15 -3
  40. package/core/plugins-loader.js +2 -0
  41. package/core/plugins.js +79 -36
  42. package/core/types.ts +7 -1
  43. package/creators/app/tsconfig.json +6 -1
  44. package/creators/pkg/init +3 -0
  45. package/creators/pkg/tsconfig.json +7 -2
  46. package/detail/provisioning.cattle.io.cluster.vue +23 -0
  47. package/detail/workload/index.vue +11 -5
  48. package/{components/dialog → dialog}/AddClusterMemberDialog.vue +0 -0
  49. package/{components/dialog → dialog}/AddCustomBadgeDialog.vue +0 -0
  50. package/{components/dialog → dialog}/AddProjectMemberDialog.vue +0 -0
  51. package/{components/dialog → dialog}/AddonConfigConfirmationDialog.vue +0 -0
  52. package/{components/dialog → dialog}/DrainNode.vue +0 -0
  53. package/{components/dialog → dialog}/ForceMachineRemoveDialog.vue +0 -0
  54. package/{components/dialog → dialog}/GenericPrompt.vue +0 -0
  55. package/{components/dialog → dialog}/RollbackWorkloadDialog.vue +0 -0
  56. package/{components/dialog → dialog}/RotateCertificatesDialog.vue +0 -0
  57. package/{components/dialog → dialog}/RotateEncryptionKeyDialog.vue +0 -0
  58. package/{components/dialog → dialog}/SaveAsRKETemplateDialog.vue +0 -0
  59. package/{components/dialog → dialog}/ScaleMachineDownDialog.vue +0 -0
  60. package/edit/auth/azuread.vue +20 -1
  61. package/edit/cloudcredential.vue +7 -1
  62. package/edit/management.cattle.io.project.vue +2 -2
  63. package/edit/namespace.vue +17 -10
  64. package/edit/networking.k8s.io.ingress/index.vue +2 -1
  65. package/edit/persistentvolumeclaim.vue +33 -2
  66. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +1 -1
  67. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +34 -6
  68. package/edit/provisioning.cattle.io.cluster/index.vue +1 -1
  69. package/edit/provisioning.cattle.io.cluster/rke2.vue +21 -6
  70. package/edit/service.vue +1 -1
  71. package/edit/workload/index.vue +363 -15
  72. package/edit/workload/mixins/workload.js +62 -7
  73. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -0
  74. package/layouts/default.vue +52 -27
  75. package/layouts/error.vue +5 -1
  76. package/layouts/home.vue +6 -2
  77. package/list/harvesterhci.io.management.cluster.vue +74 -33
  78. package/list/namespace.vue +3 -5
  79. package/list/provisioning.cattle.io.cluster.vue +6 -0
  80. package/machine-config/amazonec2.vue +2 -0
  81. package/machine-config/harvester.vue +96 -49
  82. package/middleware/authenticated.js +56 -52
  83. package/mixins/brand.js +3 -4
  84. package/mixins/create-edit-view/impl.js +0 -8
  85. package/mixins/form-validation.js +1 -1
  86. package/mixins/resource-fetch.js +3 -1
  87. package/models/chart.js +1 -1
  88. package/models/cluster/node.js +12 -1
  89. package/models/fleet.cattle.io.bundle.js +26 -19
  90. package/models/harvesterhci.io.management.cluster.js +194 -5
  91. package/models/management.cattle.io.cluster.js +1 -1
  92. package/models/management.cattle.io.clusterroletemplatebinding.js +9 -0
  93. package/models/management.cattle.io.globalrole.js +0 -19
  94. package/models/management.cattle.io.project.js +23 -2
  95. package/models/management.cattle.io.roletemplate.js +2 -21
  96. package/models/namespace.js +19 -3
  97. package/models/pod.js +19 -2
  98. package/models/provisioning.cattle.io.cluster.js +71 -0
  99. package/models/service.js +5 -1
  100. package/models/workload.js +4 -243
  101. package/models/workload.service.js +314 -0
  102. package/nuxt.config.js +14 -12
  103. package/package.json +3 -3
  104. package/pages/auth/login.vue +11 -2
  105. package/pages/auth/setup.vue +1 -1
  106. package/pages/c/_cluster/_product/members/index.vue +3 -93
  107. package/pages/c/_cluster/_product/projectsnamespaces.vue +6 -403
  108. package/pages/c/_cluster/apps/charts/install.vue +0 -6
  109. package/pages/c/_cluster/settings/performance.vue +19 -16
  110. package/pages/fail-whale.vue +1 -10
  111. package/pages/index.vue +18 -4
  112. package/pages/plugins.vue +2 -2
  113. package/pages/prefs.vue +8 -6
  114. package/pkg/auto-import.js +44 -7
  115. package/pkg/dynamic-plugin-loader.js +28 -0
  116. package/pkg/import.js +2 -2
  117. package/pkg/model-loader-require.lib.js +3 -0
  118. package/pkg/vue.config.js +9 -6
  119. package/plugins/console.js +10 -5
  120. package/plugins/dashboard-store/actions.js +8 -3
  121. package/plugins/dashboard-store/getters.js +7 -2
  122. package/plugins/dashboard-store/model-loader-require.js +12 -0
  123. package/plugins/dashboard-store/model-loader.js +4 -1
  124. package/plugins/dashboard-store/resource-class.js +10 -3
  125. package/plugins/steve/actions.js +1 -1
  126. package/plugins/steve/index.js +6 -4
  127. package/plugins/steve/steve-description-class.js +32 -0
  128. package/plugins/steve/subscribe.js +34 -23
  129. package/rancher-components/Banner/Banner.vue +2 -2
  130. package/rancher-components/Form/Checkbox/Checkbox.test.ts +77 -0
  131. package/rancher-components/Form/Checkbox/Checkbox.vue +12 -2
  132. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +0 -2
  133. package/rancher-components/Form/LabeledInput/LabeledInput.vue +2 -0
  134. package/rancher-components/Form/Radio/RadioButton.vue +14 -1
  135. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +107 -0
  136. package/{components/form → rancher-components/Form/ToggleSwitch}/ToggleSwitch.vue +18 -8
  137. package/rancher-components/Form/ToggleSwitch/index.ts +1 -0
  138. package/rancher-components/Form/index.ts +1 -0
  139. package/scripts/build-pkg.sh +48 -2
  140. package/scripts/drone-build-pkg.sh +31 -0
  141. package/scripts/publish-shell.sh +10 -11
  142. package/scripts/serve-pkgs +17 -10
  143. package/scripts/test-plugins-build.sh +18 -1
  144. package/store/catalog.js +3 -1
  145. package/store/i18n.js +16 -11
  146. package/store/index.js +4 -181
  147. package/store/prefs.js +30 -2
  148. package/store/type-map.js +16 -29
  149. package/types/{index.d.ts → rancher/index.d.ts} +0 -0
  150. package/utils/cluster.js +1 -1
  151. package/utils/custom-validators.js +1 -12
  152. package/utils/dynamic-importer.js +1 -1
  153. package/utils/validators/setting.js +0 -35
  154. package/components/FilterLabel.vue +0 -254
  155. package/components/HarvesterUpgradeProgressBarList.vue +0 -109
  156. package/components/VMConsoleBar.vue +0 -87
  157. package/components/dialog/harvester/AddHotplugModal.vue +0 -159
  158. package/components/dialog/harvester/BackupModal.vue +0 -117
  159. package/components/dialog/harvester/CloneTemplate.vue +0 -125
  160. package/components/dialog/harvester/EjectCDROMDialog.vue +0 -157
  161. package/components/dialog/harvester/ExportImageDialog.vue +0 -152
  162. package/components/dialog/harvester/MaintenanceDialog.vue +0 -94
  163. package/components/dialog/harvester/MigrationDialog.vue +0 -154
  164. package/components/dialog/harvester/RestoreDialog.vue +0 -153
  165. package/components/dialog/harvester/SupportBundle.vue +0 -217
  166. package/components/dialog/harvester/UnplugVolume.vue +0 -108
  167. package/components/form/SerialConsole/index.vue +0 -267
  168. package/components/formatter/AttachVMWithName.vue +0 -46
  169. package/components/formatter/CloudInitType.vue +0 -27
  170. package/components/formatter/HarvesterBackupTargetValidation.vue +0 -43
  171. package/components/formatter/HarvesterCPUUsed.vue +0 -122
  172. package/components/formatter/HarvesterDiskState.vue +0 -66
  173. package/components/formatter/HarvesterHostName.vue +0 -66
  174. package/components/formatter/HarvesterIpAddress.vue +0 -90
  175. package/components/formatter/HarvesterMemoryUsed.vue +0 -140
  176. package/components/formatter/HarvesterMigrationState.vue +0 -85
  177. package/components/formatter/HarvesterNodeName.vue +0 -49
  178. package/components/formatter/HarvesterStorageUsed.vue +0 -194
  179. package/components/formatter/HarvesterVmState.vue +0 -123
  180. package/components/nav/HarvesterUpgrade.vue +0 -232
  181. package/components/novnc/NovncConsole.vue +0 -93
  182. package/components/novnc/NovncConsoleItem.vue +0 -89
  183. package/components/novnc/NovncConsoleWrapper.vue +0 -243
  184. package/config/harvester-map.js +0 -44
  185. package/config/harvester-table-headers.js +0 -27
  186. package/config/product/harvester.js +0 -305
  187. package/detail/harvesterhci.io.host/HarvesterHostBasic.vue +0 -364
  188. package/detail/harvesterhci.io.host/HarvesterHostDisk.vue +0 -200
  189. package/detail/harvesterhci.io.host/HarvesterHostNetwork.vue +0 -89
  190. package/detail/harvesterhci.io.host/VirtualMachineInstance.vue +0 -134
  191. package/detail/harvesterhci.io.host/index.vue +0 -243
  192. package/detail/harvesterhci.io.virtualmachinebackup/index.vue +0 -221
  193. package/detail/harvesterhci.io.virtualmachineimage.vue +0 -118
  194. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineBasics.vue +0 -279
  195. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineEvents.vue +0 -75
  196. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineKeypairs.vue +0 -114
  197. package/detail/kubevirt.io.virtualmachine/VirtualMachineTabs/VirtualMachineMigration.vue +0 -79
  198. package/detail/kubevirt.io.virtualmachine/index.vue +0 -213
  199. package/edit/harvesterhci.io.cloudtemplate.vue +0 -123
  200. package/edit/harvesterhci.io.host/HarvesterDisk.vue +0 -262
  201. package/edit/harvesterhci.io.host/index.vue +0 -533
  202. package/edit/harvesterhci.io.keypair.vue +0 -112
  203. package/edit/harvesterhci.io.managedchart/index.vue +0 -25
  204. package/edit/harvesterhci.io.managedchart/rancher-monitoring.vue +0 -172
  205. package/edit/harvesterhci.io.networkattachmentdefinition.vue +0 -210
  206. package/edit/harvesterhci.io.setting/additional-ca.vue +0 -36
  207. package/edit/harvesterhci.io.setting/backup-target.vue +0 -182
  208. package/edit/harvesterhci.io.setting/http-proxy.vue +0 -79
  209. package/edit/harvesterhci.io.setting/index.vue +0 -201
  210. package/edit/harvesterhci.io.setting/overcommit-config.vue +0 -94
  211. package/edit/harvesterhci.io.setting/ssl-certificates.vue +0 -117
  212. package/edit/harvesterhci.io.setting/ssl-parameters.vue +0 -161
  213. package/edit/harvesterhci.io.setting/support-bundle-image.vue +0 -134
  214. package/edit/harvesterhci.io.setting/support-bundle-namespaces.vue +0 -73
  215. package/edit/harvesterhci.io.setting/vip-pools.vue +0 -244
  216. package/edit/harvesterhci.io.setting/vm-force-reset-policy.vue +0 -81
  217. package/edit/harvesterhci.io.virtualmachinebackup.vue +0 -256
  218. package/edit/harvesterhci.io.virtualmachineimage.vue +0 -364
  219. package/edit/harvesterhci.io.virtualmachinetemplateversion.vue +0 -340
  220. package/edit/harvesterhci.io.volume.vue +0 -195
  221. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/AccessCredentialsUsers.vue +0 -190
  222. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/index.vue +0 -212
  223. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/basicAuth.vue +0 -94
  224. package/edit/kubevirt.io.virtualmachine/VirtualMachineAccessCredentials/type/sshkey.vue +0 -85
  225. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/DataTemplate.vue +0 -153
  226. package/edit/kubevirt.io.virtualmachine/VirtualMachineCloudConfig/index.vue +0 -279
  227. package/edit/kubevirt.io.virtualmachine/VirtualMachineCpuMemory.vue +0 -113
  228. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/__tests__/HarvesterEditNetwork.test.ts +0 -41
  229. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/base.vue +0 -281
  230. package/edit/kubevirt.io.virtualmachine/VirtualMachineNetwork/index.vue +0 -142
  231. package/edit/kubevirt.io.virtualmachine/VirtualMachineReserved.vue +0 -54
  232. package/edit/kubevirt.io.virtualmachine/VirtualMachineSSHKey.vue +0 -256
  233. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +0 -391
  234. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditContainer.test.ts +0 -40
  235. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditExisting.test.ts +0 -102
  236. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVMImage.test.ts +0 -117
  237. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/__tests__/HarvesterEditVolume.test.ts +0 -74
  238. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/container.vue +0 -132
  239. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/existing.vue +0 -303
  240. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +0 -285
  241. package/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +0 -188
  242. package/edit/kubevirt.io.virtualmachine/index.vue +0 -642
  243. package/edit/network.harvesterhci.io.clusternetwork/index.vue +0 -19
  244. package/edit/network.harvesterhci.io.clusternetwork/vlan.vue +0 -134
  245. package/edit/workload/types/Deployment.vue +0 -377
  246. package/edit/workload/types/Generic.vue +0 -295
  247. package/list/harvesterhci.io.cloudtemplate.vue +0 -78
  248. package/list/harvesterhci.io.dashboard/HarvesterUpgrade.vue +0 -211
  249. package/list/harvesterhci.io.dashboard/UpgradeInfo.vue +0 -40
  250. package/list/harvesterhci.io.dashboard/index.vue +0 -752
  251. package/list/harvesterhci.io.host/index.vue +0 -186
  252. package/list/harvesterhci.io.networkattachmentdefinition.vue +0 -167
  253. package/list/harvesterhci.io.setting.vue +0 -241
  254. package/list/harvesterhci.io.virtualmachinebackup.vue +0 -172
  255. package/list/harvesterhci.io.virtualmachineimage.vue +0 -80
  256. package/list/harvesterhci.io.virtualmachinetemplateversion.vue +0 -173
  257. package/list/harvesterhci.io.volume.vue +0 -122
  258. package/list/kubevirt.io.virtualmachine.vue +0 -193
  259. package/mixins/harvester-vm/impl.js +0 -267
  260. package/mixins/harvester-vm/index.js +0 -1357
  261. package/models/harvester/configmap.js +0 -32
  262. package/models/harvester/harvesterhci.io.blockdevice.js +0 -55
  263. package/models/harvester/harvesterhci.io.keypair.js +0 -12
  264. package/models/harvester/harvesterhci.io.setting.js +0 -127
  265. package/models/harvester/harvesterhci.io.supportbundle.js +0 -35
  266. package/models/harvester/harvesterhci.io.upgrade.js +0 -226
  267. package/models/harvester/harvesterhci.io.virtualmachinebackup.js +0 -116
  268. package/models/harvester/harvesterhci.io.virtualmachineimage.js +0 -255
  269. package/models/harvester/harvesterhci.io.virtualmachinerestore.js +0 -43
  270. package/models/harvester/harvesterhci.io.virtualmachinetemplate.js +0 -69
  271. package/models/harvester/harvesterhci.io.virtualmachinetemplateversion.js +0 -227
  272. package/models/harvester/k8s.cni.cncf.io.networkattachmentdefinition.js +0 -32
  273. package/models/harvester/kubevirt.io.virtualmachine.js +0 -850
  274. package/models/harvester/kubevirt.io.virtualmachineinstance.js +0 -142
  275. package/models/harvester/management.cattle.io.managedchart.js +0 -191
  276. package/models/harvester/management.cattle.io.setting.js +0 -40
  277. package/models/harvester/network.harvesterhci.io.clusternetwork.js +0 -100
  278. package/models/harvester/network.harvesterhci.io.nodenetwork.js +0 -34
  279. package/models/harvester/node.js +0 -255
  280. package/models/harvester/persistentvolumeclaim.js +0 -166
  281. package/models/harvester/pod.js +0 -185
  282. package/pages/c/_cluster/harvester/airgapupgrade/index.vue +0 -309
  283. package/pages/c/_cluster/harvester/console/_uid/serial.vue +0 -51
  284. package/pages/c/_cluster/harvester/console/_uid/vnc.vue +0 -52
  285. package/pages/c/_cluster/harvester/index.vue +0 -24
  286. package/pages/c/_cluster/harvester/support/index.vue +0 -154
  287. package/pkg/model-loader.lib.js +0 -3
  288. package/plugins/lookup.js +0 -50
  289. package/promptRemove/kubevirt.io.virtualmachine.vue +0 -164
  290. package/store/harvester-common.js +0 -126
  291. package/utils/validators/vm-datavolumes.js +0 -38
  292. package/utils/validators/vm-image.js +0 -32
  293. package/utils/validators/vm.js +0 -221
  294. 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.
@@ -1,8 +1,6 @@
1
1
 
2
2
  import { mount } from '@vue/test-utils';
3
3
  import { LabeledInput } from './index';
4
- import Vue from 'vue';
5
- import Vuex from 'vuex';
6
4
 
7
5
  describe('component: LabeledInput', () => {
8
6
  it('should emit input only once', () => {
@@ -126,6 +126,8 @@ export default (
126
126
  if (this.hasTooltip) {
127
127
  return this.tooltipKey ? this.t(this.tooltipKey) : this.tooltip
128
128
  }
129
+
130
+ return undefined;
129
131
  },
130
132
 
131
133
  /**
@@ -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
- export default {
1
+ <script lang="ts">
2
+ import Vue from 'vue';
3
+ export default Vue.extend({
3
4
  props: {
4
5
  value: {
5
- type: null,
6
+ type: [Boolean, String, Number],
6
7
  default: false
7
8
  },
8
9
 
9
10
  offValue: {
10
- type: null,
11
+ type: [Boolean, String, Number],
11
12
  default: false,
12
13
  },
13
14
 
14
15
  onValue: {
15
- type: null,
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: this.value === this.onValue };
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';
@@ -2,3 +2,4 @@ export * from './Checkbox';
2
2
  export * from './LabeledInput';
3
3
  export * from './Radio';
4
4
  export * from './TextArea';
5
+ export * from './ToggleSwitch';
@@ -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
- VERSION=$(cd pkg/$1; node -p -e "require('./package.json').version")
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
- ${BASE_DIR}/node_modules/.bin/vue-cli-service build --name ${NAME} --target lib ${FILE} --dest ${PKG_DIST} --formats umd-min --filename ${NAME}
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
@@ -1,7 +1,10 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
4
- BASE_DIR="$( cd $SCRIPT_DIR && cd ../.. & pwd)"
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} > /dev/null
24
+ pushd ${SHELL_DIR} >/dev/null
22
25
 
23
- PKG_VERSION=`node -p "require('./package.json').version"`
24
- popd > /dev/null
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} > /dev/null
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}"
@@ -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
- var express = require('express')
13
- var serveStatic = require('serve-static');
14
-
15
- var app = express()
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
- const main = `${ f }.umd.min.js`;
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
- rm -rf ~/.local/share/verdaccio/storage/@rancher/*
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
- if ( !c.chartNameDisplay.match(token) && (c.chartDescription && !c.chartDescription.match(token)) ) {
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({ state, commit, dispatch }) {
212
- let selected = this.$cookies.get(LOCALE, { parseJSON: false });
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
- this.$cookies.set(LOCALE, locale, {
312
- encode: x => x,
313
- maxAge: 86400 * 365,
314
- path: '/',
315
- sameSite: true,
316
- secure: true,
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 }) {