@rancher/shell 0.3.29 → 0.5.0

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 (301) hide show
  1. package/assets/images/providers/ovhcloudmks.svg +122 -0
  2. package/assets/images/providers/ovhcloudpubliccloud.svg +122 -0
  3. package/assets/styles/global/_layout.scss +99 -0
  4. package/assets/translations/en-us.yaml +31 -6
  5. package/assets/translations/zh-hans.yaml +2 -2
  6. package/babel.config.js +7 -1
  7. package/chart/monitoring/alerting/index.vue +7 -21
  8. package/chart/monitoring/grafana/index.vue +55 -0
  9. package/chart/monitoring/index.vue +51 -17
  10. package/chart/monitoring/prometheus/index.vue +37 -43
  11. package/chart/rancher-backup/index.vue +2 -1
  12. package/cloud-credential/azure.vue +4 -17
  13. package/components/AsyncButton.vue +17 -5
  14. package/components/Certificates.vue +164 -0
  15. package/components/CodeMirror.vue +19 -21
  16. package/components/CopyCode.vue +6 -2
  17. package/components/CopyToClipboard.vue +2 -1
  18. package/components/CopyToClipboardText.vue +14 -9
  19. package/components/CruResource.vue +1 -0
  20. package/components/DraggableZone.vue +2 -2
  21. package/components/EtcdInfoBanner.vue +5 -5
  22. package/components/ExplorerProjectsNamespaces.vue +25 -1
  23. package/components/IconOrSvg.vue +1 -1
  24. package/components/LandingPagePreference.vue +1 -4
  25. package/components/Markdown.vue +16 -12
  26. package/components/PodSecurityAdmission.vue +2 -2
  27. package/components/Questions/index.vue +1 -1
  28. package/components/ResourceDetail/Masthead.vue +25 -9
  29. package/components/ResourceTable.vue +14 -2
  30. package/components/ResourceYaml.vue +5 -0
  31. package/components/SideNav.vue +1 -1
  32. package/components/SingleClusterInfo.vue +1 -4
  33. package/components/StatusTable.vue +5 -1
  34. package/components/Tabbed/index.vue +12 -0
  35. package/components/__tests__/CopyCode.test.ts +5 -4
  36. package/components/fleet/FleetBundles.vue +5 -11
  37. package/components/fleet/FleetRepos.vue +62 -27
  38. package/components/fleet/FleetResources.vue +6 -1
  39. package/components/fleet/FleetSummary.vue +3 -3
  40. package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
  41. package/components/form/ArrayListSelect.vue +10 -0
  42. package/components/form/Error.vue +3 -3
  43. package/components/form/Footer.vue +2 -2
  44. package/components/form/GitPicker.vue +83 -38
  45. package/components/form/KeyValue.vue +4 -0
  46. package/components/form/LabeledSelect.vue +4 -0
  47. package/components/form/Password.vue +3 -1
  48. package/components/formatter/Checked.vue +11 -3
  49. package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
  50. package/components/formatter/FleetSummaryGraph.vue +23 -11
  51. package/components/formatter/LiveDuration.vue +1 -1
  52. package/components/formatter/PercentageBar.vue +1 -1
  53. package/components/formatter/__tests__/Checked.test.ts +19 -0
  54. package/components/nav/Group.vue +2 -2
  55. package/components/nav/Header.vue +1 -2
  56. package/components/nav/TopLevelMenu.vue +36 -6
  57. package/components/nav/Type.vue +1 -3
  58. package/components/nav/WindowManager/ContainerLogs.vue +101 -3
  59. package/components/nav/WindowManager/ContainerShell.vue +6 -1
  60. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
  61. package/components/nav/WindowManager/index.vue +11 -10
  62. package/components/nav/__tests__/TopLevelMenu.test.ts +33 -0
  63. package/components/nav/__tests__/Type.test.ts +1 -1
  64. package/components/nuxt/nuxt-child.js +14 -78
  65. package/components/nuxt/nuxt.js +1 -1
  66. package/{layouts → components/templates}/blank.vue +1 -1
  67. package/{layouts → components/templates}/default.vue +8 -98
  68. package/{layouts → components/templates}/error.vue +10 -19
  69. package/{layouts → components/templates}/home.vue +4 -1
  70. package/{layouts → components/templates}/plain.vue +4 -1
  71. package/{layouts → components/templates}/standalone.vue +1 -1
  72. package/{layouts → components/templates}/unauthenticated.vue +1 -1
  73. package/composables/useCompactInput.test.ts +36 -0
  74. package/composables/useCompactInput.ts +20 -0
  75. package/composables/useLabeledFormElement.test.ts +135 -0
  76. package/composables/useLabeledFormElement.ts +138 -0
  77. package/config/harvester-manager-types.js +2 -0
  78. package/config/home-links.js +1 -1
  79. package/config/private-label.js +22 -0
  80. package/config/product/explorer.js +3 -0
  81. package/config/product/fleet.js +6 -1
  82. package/config/product/manager.js +8 -2
  83. package/config/query-params.js +1 -0
  84. package/config/router.js +385 -364
  85. package/config/settings.ts +1 -0
  86. package/config/store.js +1 -1
  87. package/config/system-namespaces.js +3 -0
  88. package/config/table-headers.js +47 -0
  89. package/core/plugin-helpers.js +3 -5
  90. package/core/plugin-routes.ts +56 -114
  91. package/core/plugin.ts +16 -10
  92. package/core/plugins-loader.js +7 -9
  93. package/core/plugins.js +0 -3
  94. package/creators/app/files/.gitlab-ci.yml +14 -0
  95. package/creators/app/init +19 -0
  96. package/detail/fleet.cattle.io.cluster.vue +11 -1
  97. package/detail/provisioning.cattle.io.cluster.vue +4 -3
  98. package/dialog/ScaleMachineDownDialog.vue +34 -17
  99. package/edit/__tests__/service.test.ts +89 -0
  100. package/edit/auth/googleoauth.vue +1 -5
  101. package/edit/cloudcredential.vue +2 -0
  102. package/edit/configmap.vue +2 -1
  103. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +2 -2
  104. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +12 -3
  105. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +2 -1
  106. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
  107. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +15 -7
  108. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +112 -0
  109. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
  110. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +6 -0
  111. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  112. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
  113. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +7 -1
  114. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +386 -0
  115. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  116. package/edit/provisioning.cattle.io.cluster/index.vue +92 -36
  117. package/edit/provisioning.cattle.io.cluster/rke2.vue +171 -583
  118. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
  119. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +157 -0
  120. package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +94 -19
  121. package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
  122. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
  123. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +189 -0
  124. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +144 -0
  125. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
  126. package/edit/service.vue +12 -0
  127. package/edit/workload/Upgrading.vue +3 -2
  128. package/edit/workload/mixins/workload.js +1 -1
  129. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +2 -1
  130. package/initialize/App.js +25 -71
  131. package/initialize/client.js +21 -162
  132. package/initialize/index.js +47 -124
  133. package/list/management.cattle.io.feature.vue +1 -7
  134. package/list/node.vue +1 -0
  135. package/machine-config/__tests__/vmwarevsphere.test.ts +100 -21
  136. package/machine-config/vmwarevsphere.vue +73 -51
  137. package/middleware/authenticated.js +10 -17
  138. package/mixins/auth-config.js +2 -7
  139. package/mixins/brand.js +29 -41
  140. package/mixins/create-edit-view/index.js +2 -2
  141. package/mixins/labeled-form-element.ts +6 -1
  142. package/models/__tests__/management.cattle.io.cluster.test.ts +4 -0
  143. package/models/__tests__/management.cattle.io.node.ts +85 -0
  144. package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
  145. package/models/__tests__/namespace.test.ts +49 -9
  146. package/models/__tests__/workload.test.ts +91 -0
  147. package/models/cluster/node.js +4 -4
  148. package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
  149. package/models/fleet.cattle.io.cluster.js +4 -0
  150. package/models/fleet.cattle.io.gitrepo.js +56 -13
  151. package/models/management.cattle.io.cluster.js +7 -3
  152. package/models/management.cattle.io.kontainerdriver.js +1 -1
  153. package/models/management.cattle.io.node.js +18 -14
  154. package/models/management.cattle.io.nodepool.js +17 -0
  155. package/models/namespace.js +1 -1
  156. package/models/pod.js +20 -0
  157. package/models/provisioning.cattle.io.cluster.js +39 -4
  158. package/models/secret.js +117 -18
  159. package/models/workload.js +16 -0
  160. package/models/workload.service.js +18 -0
  161. package/package.json +11 -10
  162. package/pages/about.vue +0 -1
  163. package/pages/account/create-key.vue +0 -1
  164. package/pages/account/index.vue +0 -1
  165. package/pages/auth/login.vue +0 -1
  166. package/pages/auth/logout.vue +0 -2
  167. package/pages/auth/setup.vue +0 -4
  168. package/pages/auth/verify.vue +14 -8
  169. package/pages/c/_cluster/apps/charts/index.vue +64 -43
  170. package/pages/c/_cluster/apps/charts/install.vue +4 -4
  171. package/pages/c/_cluster/apps/index.vue +0 -2
  172. package/pages/c/_cluster/auth/index.vue +0 -2
  173. package/pages/c/_cluster/ecm/index.vue +0 -2
  174. package/pages/c/_cluster/explorer/index.vue +28 -2
  175. package/pages/c/_cluster/fleet/index.vue +1 -1
  176. package/pages/c/_cluster/index.vue +0 -2
  177. package/pages/c/_cluster/settings/banners.vue +0 -2
  178. package/pages/c/_cluster/settings/brand.vue +0 -2
  179. package/pages/c/_cluster/settings/index.vue +0 -2
  180. package/pages/c/_cluster/settings/links.vue +0 -1
  181. package/pages/c/_cluster/settings/performance.vue +0 -1
  182. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +2 -1
  183. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
  184. package/pages/c/_cluster/uiplugins/index.vue +0 -2
  185. package/pages/diagnostic.vue +1 -2
  186. package/pages/fail-whale.vue +0 -1
  187. package/pages/prefs.vue +0 -1
  188. package/pages/support/index.vue +2 -8
  189. package/pkg/auto-import.js +1 -1
  190. package/plugins/axios.js +0 -36
  191. package/plugins/back-button.js +3 -5
  192. package/plugins/clean-html-directive.js +1 -19
  193. package/plugins/clean-html.js +53 -0
  194. package/plugins/clean-tooltip-directive.js +1 -1
  195. package/plugins/codemirror-loader.js +1 -1
  196. package/plugins/codemirror.js +41 -0
  197. package/plugins/dashboard-store/__tests__/{mutations.spec.ts → mutations.test.ts} +1 -1
  198. package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
  199. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
  200. package/plugins/dashboard-store/actions.js +30 -4
  201. package/plugins/dashboard-store/classify.js +1 -18
  202. package/plugins/dashboard-store/getters.js +10 -5
  203. package/plugins/dashboard-store/index.js +0 -12
  204. package/plugins/dashboard-store/mutations.js +0 -4
  205. package/plugins/dashboard-store/resource-class.js +59 -18
  206. package/plugins/index.js +11 -0
  207. package/plugins/steve/__tests__/steve-class.spec.ts +59 -0
  208. package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
  209. package/plugins/steve/getters.js +4 -1
  210. package/plugins/steve/norman-class.js +19 -0
  211. package/plugins/steve/steve-class.js +22 -0
  212. package/plugins/steve/subscribe.js +4 -10
  213. package/rancher-components/Accordion/Accordion.test.ts +45 -0
  214. package/rancher-components/Accordion/Accordion.vue +86 -0
  215. package/rancher-components/Accordion/index.ts +1 -0
  216. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  217. package/rancher-components/Banner/Banner.vue +2 -2
  218. package/rancher-components/Card/Card.vue +3 -3
  219. package/rancher-components/Form/Checkbox/Checkbox.vue +3 -3
  220. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
  221. package/rancher-components/Form/LabeledInput/LabeledInput.vue +65 -24
  222. package/rancher-components/Form/Radio/RadioButton.test.ts +7 -3
  223. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  224. package/rancher-components/Form/Radio/RadioGroup.test.ts +30 -0
  225. package/rancher-components/Form/Radio/RadioGroup.vue +8 -3
  226. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
  227. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  228. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  229. package/rancher-components/StringList/StringList.test.ts +270 -0
  230. package/rancher-components/StringList/StringList.vue +65 -26
  231. package/rancher-components/components/Accordion/Accordion.test.ts +45 -0
  232. package/rancher-components/components/Accordion/Accordion.vue +86 -0
  233. package/rancher-components/components/Accordion/index.ts +1 -0
  234. package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
  235. package/rancher-components/components/Banner/Banner.vue +2 -2
  236. package/rancher-components/components/Card/Card.vue +3 -3
  237. package/rancher-components/components/Form/Checkbox/Checkbox.vue +3 -3
  238. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +18 -1
  239. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +57 -24
  240. package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
  241. package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
  242. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
  243. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  244. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
  245. package/rancher-components/components/StringList/StringList.vue +8 -8
  246. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +50 -0
  247. package/scripts/extension/bundle +19 -7
  248. package/scripts/extension/helm/scripts/package +11 -3
  249. package/scripts/extension/parse-tag-name +2 -2
  250. package/scripts/extension/publish +20 -9
  251. package/scripts/publish-shell.sh +10 -0
  252. package/scripts/test-plugins-build.sh +85 -9
  253. package/server/har-file.js +183 -0
  254. package/store/catalog.js +1 -1
  255. package/store/features.js +1 -0
  256. package/store/i18n.js +11 -0
  257. package/store/index.js +13 -15
  258. package/store/prefs.js +33 -35
  259. package/store/type-map.js +8 -7
  260. package/tsconfig.json +35 -9
  261. package/tsconfig.paths.json +21 -0
  262. package/types/shell/index.d.ts +433 -234
  263. package/types/vue-shim.d.ts +42 -0
  264. package/utils/__tests__/create-yaml.test.ts +60 -0
  265. package/utils/axios.js +0 -19
  266. package/utils/azure.js +24 -0
  267. package/utils/clipboard.js +5 -0
  268. package/utils/create-yaml.js +17 -10
  269. package/utils/git.ts +1 -1
  270. package/utils/monitoring.js +1 -1
  271. package/utils/nuxt.js +18 -39
  272. package/utils/object.js +14 -0
  273. package/utils/router.scrollBehavior.js +12 -14
  274. package/utils/time.js +1 -1
  275. package/utils/url.ts +1 -1
  276. package/vue.config.js +23 -2
  277. package/.DS_Store +0 -0
  278. package/assets/images/providers/aks-black.svg +0 -28
  279. package/assets/images/providers/aks.svg +0 -31
  280. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -234
  281. package/initialize/layouts.ts +0 -26
  282. package/mixins/fetch.server.js +0 -73
  283. package/pages/c/index.vue +0 -9
  284. package/pages/rio/mesh.vue +0 -508
  285. package/plugins/transitions.js +0 -4
  286. package/plugins/vue-clipboard2.js +0 -4
  287. package/tsconfig.default.json +0 -46
  288. package/yarn-error.log +0 -200
  289. /package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +0 -0
  290. /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +0 -0
  291. /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
  292. /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
  293. /package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +0 -0
  294. /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
  295. /package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +0 -0
  296. /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
  297. /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
  298. /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
  299. /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
  300. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  301. /package/rancher-components/components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
@@ -19,7 +19,7 @@ import {
19
19
  isSamePath,
20
20
  urlJoin
21
21
  } from '../utils/nuxt.js';
22
- import { createApp, NuxtError } from './index.js';
22
+ import { createApp } from './index.js';
23
23
  import fetchMixin from '../mixins/fetch.client';
24
24
  import NuxtLink from '../components/nuxt/nuxt-link.client.js'; // should be included after ./index.js
25
25
 
@@ -92,17 +92,6 @@ if (debug) {
92
92
  if (nuxtApp && vm.$root[nuxtApp].error && info !== 'render function') {
93
93
  const currentApp = vm.$root[nuxtApp];
94
94
 
95
- // Load error layout
96
- let layout = (NuxtError.options || NuxtError).layout;
97
-
98
- if (typeof layout === 'function') {
99
- layout = layout(currentApp.context);
100
- }
101
- if (layout) {
102
- await currentApp.loadLayout(layout).catch(() => {});
103
- }
104
- currentApp.setLayout(layout);
105
-
106
95
  currentApp.error(err);
107
96
  }
108
97
  }
@@ -126,50 +115,7 @@ if (debug) {
126
115
  const errorHandler = Vue.config.errorHandler || console.error; // eslint-disable-line no-console
127
116
 
128
117
  // Create and mount App
129
- createApp(null, nuxt.publicRuntimeConfig).then(mountApp).catch(errorHandler); // eslint-disable-line no-undef
130
-
131
- function componentOption(component, key, ...args) {
132
- if (!component || !component.options || !component.options[key]) {
133
- return {};
134
- }
135
- const option = component.options[key];
136
-
137
- if (typeof option === 'function') {
138
- return option(...args);
139
- }
140
-
141
- return option;
142
- }
143
-
144
- function mapTransitions(toComponents, to, from) {
145
- const componentTransitions = (component) => {
146
- const transition = componentOption(component, 'transition', to, from) || {};
147
-
148
- return (typeof transition === 'string' ? { name: transition } : transition);
149
- };
150
-
151
- const fromComponents = from ? getMatchedComponents(from) : [];
152
- const maxDepth = Math.max(toComponents.length, fromComponents.length);
153
-
154
- const mergedTransitions = [];
155
-
156
- for (let i = 0; i < maxDepth; i++) {
157
- // Clone original objects to prevent overrides
158
- const toTransitions = Object.assign({}, componentTransitions(toComponents[i]));
159
- const transitions = Object.assign({}, componentTransitions(fromComponents[i]));
160
-
161
- // Combine transitions & prefer `leave` properties of "from" route
162
- Object.keys(toTransitions)
163
- .filter((key) => typeof toTransitions[key] !== 'undefined' && !key.toLowerCase().includes('leave'))
164
- .forEach((key) => {
165
- transitions[key] = toTransitions[key];
166
- });
167
-
168
- mergedTransitions.push(transitions);
169
- }
170
-
171
- return mergedTransitions;
172
- }
118
+ createApp(nuxt.publicRuntimeConfig).then(mountApp).catch(errorHandler); // eslint-disable-line no-undef
173
119
 
174
120
  async function loadAsyncComponents(to, from, next) {
175
121
  // Check if route changed (this._routeChanged), only if the page is not an error (for validate())
@@ -230,16 +176,6 @@ async function loadAsyncComponents(to, from, next) {
230
176
  }
231
177
  }
232
178
 
233
- function applySSRData(Component, ssrData) {
234
- if (NUXT.serverRendered && ssrData) {
235
- applyAsyncData(Component, ssrData);
236
- }
237
-
238
- Component._Ctor = Component;
239
-
240
- return Component;
241
- }
242
-
243
179
  // Get matched components
244
180
  function resolveComponents(route) {
245
181
  return flatMapComponents(route, async(Component, _, match, key, index) => {
@@ -247,32 +183,25 @@ function resolveComponents(route) {
247
183
  if (typeof Component === 'function' && !Component.options) {
248
184
  Component = await Component();
249
185
  }
186
+
250
187
  // Sanitize it and save it
251
- const _Component = applySSRData(sanitizeComponent(Component), NUXT.data ? NUXT.data[index] : null);
188
+ Component._Ctor = sanitizeComponent(Component);
252
189
 
253
- match.components[key] = _Component;
190
+ match.components[key] = Component;
254
191
 
255
- return _Component;
192
+ return Component;
256
193
  });
257
194
  }
258
195
 
259
- function callMiddleware(Components, context, layout) {
196
+ function callMiddleware(Components, context) {
260
197
  let midd = ['i18n'];
261
198
  let unknownMiddleware = false;
262
199
 
263
- // If layout is undefined, only call global middleware
264
- if (typeof layout !== 'undefined') {
265
- midd = []; // Exclude global middleware if layout defined (already called before)
266
- layout = sanitizeComponent(layout);
267
- if (layout.options.middleware) {
268
- midd = midd.concat(layout.options.middleware);
200
+ Components.forEach((Component) => {
201
+ if (Component.options.middleware) {
202
+ midd = midd.concat(Component.options.middleware);
269
203
  }
270
- Components.forEach((Component) => {
271
- if (Component.options.middleware) {
272
- midd = midd.concat(Component.options.middleware);
273
- }
274
- });
275
- }
204
+ });
276
205
 
277
206
  midd = midd.map((name) => {
278
207
  if (typeof name === 'function') {
@@ -342,25 +271,20 @@ async function render(to, from, next) {
342
271
 
343
272
  // If no Components matched, generate 404
344
273
  if (!Components.length) {
345
- // Default layout
346
- await callMiddleware.call(this, Components, app.context);
347
- if (nextCalled) {
348
- return;
349
- }
274
+ // Call the authenticated middleware. This used to attempt to load the error layout but because it was missing it would:
275
+ // 1. load the default layout instead
276
+ // 2. then call the authenticated middleware
277
+ // 3. Authenticated middleware would then load plugins and check to see if there was a valid route and navigate to that if it existed
278
+ // 4. This would allow harvester cluster pages to load on page reload
279
+ // We should really make authenticated middleware do less...
280
+ await callMiddleware.call(this, [{ options: { middleware: ['authenticated'] } }], app.context);
350
281
 
351
- // Load layout for error page
352
- const errorLayout = (NuxtError.options || NuxtError).layout;
353
- const layout = await this.loadLayout(
354
- typeof errorLayout === 'function' ? errorLayout.call(NuxtError, app.context) : errorLayout
355
- );
356
-
357
- await callMiddleware.call(this, Components, app.context, layout);
358
282
  if (nextCalled) {
359
283
  return;
360
284
  }
361
285
 
362
286
  // Show error page
363
- app.context.error({ statusCode: 404, message: 'This page could not be found' });
287
+ this.error({ statusCode: 404, message: 'This page could not be found' });
364
288
 
365
289
  return next();
366
290
  }
@@ -373,9 +297,6 @@ async function render(to, from, next) {
373
297
  }
374
298
  });
375
299
 
376
- // Apply transitions
377
- this.setTransitions(mapTransitions(Components, to, from));
378
-
379
300
  try {
380
301
  // Call middleware
381
302
  await callMiddleware.call(this, Components, app.context);
@@ -386,16 +307,8 @@ async function render(to, from, next) {
386
307
  return next();
387
308
  }
388
309
 
389
- // Set layout
390
- let layout = Components[0].options.layout;
391
-
392
- if (typeof layout === 'function') {
393
- layout = layout(app.context);
394
- }
395
- layout = await this.loadLayout(layout);
396
-
397
310
  // Call middleware for layout
398
- await callMiddleware.call(this, Components, app.context, layout);
311
+ await callMiddleware.call(this, Components, app.context);
399
312
  if (nextCalled) {
400
313
  return;
401
314
  }
@@ -536,14 +449,6 @@ async function render(to, from, next) {
536
449
 
537
450
  globalHandleError(error);
538
451
 
539
- // Load error layout
540
- let layout = (NuxtError.options || NuxtError).layout;
541
-
542
- if (typeof layout === 'function') {
543
- layout = layout(app.context);
544
- }
545
- await this.loadLayout(layout);
546
-
547
452
  this.error(error);
548
453
  this.$nuxt.$emit('routeChanged', to, from, error);
549
454
  next();
@@ -564,22 +469,6 @@ function normalizeComponents(to, ___) {
564
469
  });
565
470
  }
566
471
 
567
- function setLayoutForNextPage(to) {
568
- // Set layout
569
- let hasError = Boolean(this.$options.nuxt.err);
570
-
571
- if (this._hadError && this._dateLastError === this.$options.nuxt.dateErr) {
572
- hasError = false;
573
- }
574
- let layout = hasError ? (NuxtError.options || NuxtError).layout : to.matched[0].components.default.options.layout;
575
-
576
- if (typeof layout === 'function') {
577
- layout = layout(app.context);
578
- }
579
-
580
- this.setLayout(layout);
581
- }
582
-
583
472
  function checkForErrors(app) {
584
473
  // Hide error component if no error
585
474
  if (app._hadError && app._dateLastError === app.$options.nuxt.dateErr) {
@@ -723,31 +612,7 @@ function addHotReload($component, depth) {
723
612
 
724
613
  callMiddleware.call(this, Components, context)
725
614
  .then(() => {
726
- // If layout changed
727
- if (depth !== 0) {
728
- return;
729
- }
730
-
731
- let layout = Component.options.layout || 'default';
732
-
733
- if (typeof layout === 'function') {
734
- layout = layout(context);
735
- }
736
- if (this.layoutName === layout) {
737
- return;
738
- }
739
- const promise = this.loadLayout(layout);
740
-
741
- promise.then(() => {
742
- this.setLayout(layout);
743
- Vue.nextTick(() => hotReloadAPI(this));
744
- });
745
-
746
- return promise;
747
- })
748
-
749
- .then(() => {
750
- return callMiddleware.call(this, Components, context, this.layout);
615
+ return callMiddleware.call(this, Components, context);
751
616
  })
752
617
 
753
618
  .then(() => {
@@ -795,8 +660,6 @@ async function mountApp(__app) {
795
660
  // Add afterEach router hooks
796
661
  router.afterEach(normalizeComponents);
797
662
 
798
- router.afterEach(setLayoutForNextPage.bind(_app));
799
-
800
663
  router.afterEach(fixPrepatch.bind(_app));
801
664
 
802
665
  // Listen for first Vue update
@@ -814,10 +677,7 @@ async function mountApp(__app) {
814
677
  // Resolve route components
815
678
  const Components = await Promise.all(resolveComponents(app.context.route));
816
679
 
817
- // Enable transitions
818
- _app.setTransitions = _app.$options.nuxt.setTransitions.bind(_app);
819
680
  if (Components.length) {
820
- _app.setTransitions(mapTransitions(Components, router.currentRoute));
821
681
  _lastPaths = router.currentRoute.matched.map((route) => compile(route.path)(router.currentRoute.params));
822
682
  }
823
683
 
@@ -842,7 +702,6 @@ async function mountApp(__app) {
842
702
  // First render on client-side
843
703
  const clientFirstMount = () => {
844
704
  normalizeComponents(router.currentRoute, router.currentRoute);
845
- setLayoutForNextPage.call(_app, router.currentRoute);
846
705
  checkForErrors(_app);
847
706
  // Don't call fixPrepatch.call(_app, router.currentRoute, router.currentRoute) since it's first render
848
707
  mount();
@@ -1,19 +1,16 @@
1
1
  // Taken from @nuxt/vue-app/template/index.js
2
+ // This file was generated during Nuxt migration
2
3
 
3
4
  import Vue from 'vue';
4
- import Meta from 'vue-meta';
5
- import ClientOnly from 'vue-client-only';
6
- import NoSsr from 'vue-no-ssr';
7
5
  import { createRouter } from '../config/router.js';
8
6
  import NuxtChild from '../components/nuxt/nuxt-child.js';
9
- import NuxtError from '../layouts/error.vue';
10
7
  import Nuxt from '../components/nuxt/nuxt.js';
11
8
  import App from './App.js';
12
9
  import { setContext, getLocation, getRouteData, normalizeError } from '../utils/nuxt';
13
10
  import { createStore } from '../config/store.js';
14
11
 
15
12
  /* Plugins */
16
-
13
+ import { loadDirectives } from '@shell/plugins';
17
14
  import '../plugins/portal-vue.js';
18
15
  import cookieUniversalNuxt from '../utils/cookie-universal-nuxt.js';
19
16
  import axios from '../utils/axios.js';
@@ -21,12 +18,7 @@ import plugins from '../core/plugins.js';
21
18
  import pluginsLoader from '../core/plugins-loader.js';
22
19
  import axiosShell from '../plugins/axios';
23
20
  import '../plugins/tooltip';
24
- import '../plugins/clean-tooltip-directive';
25
- import '../plugins/vue-clipboard2';
26
21
  import '../plugins/v-select';
27
- import '../plugins/directives';
28
- import '../plugins/clean-html-directive';
29
- import '../plugins/transitions';
30
22
  import '../plugins/vue-js-modal';
31
23
  import '../plugins/js-yaml';
32
24
  import '../plugins/resize';
@@ -47,22 +39,28 @@ import '../plugins/formatters';
47
39
  import version from '../plugins/version';
48
40
  import steveCreateWorker from '../plugins/steve-create-worker';
49
41
 
50
- // Component: <ClientOnly>
51
- Vue.component(ClientOnly.name, ClientOnly);
52
-
53
- // TODO: Remove in Nuxt 3: <NoSsr>
54
- Vue.component(NoSsr.name, {
55
- ...NoSsr,
56
- render(h, ctx) {
57
- if (process.client && !NoSsr._warned) {
58
- NoSsr._warned = true;
42
+ // Prevent extensions from overriding existing directives
43
+ // Hook into Vue.directive and keep track of the directive names that have been added
44
+ // and prevent an existing directive from being overwritten
45
+ const directiveNames = {};
46
+ const vueDirective = Vue.directive;
59
47
 
60
- console.warn('<no-ssr> has been deprecated and will be removed in Nuxt 3, please use <client-only> instead'); // eslint-disable-line no-console
61
- }
48
+ Vue.directive = function(name) {
49
+ if (directiveNames[name]) {
50
+ console.log(`Can not override directive: ${ name }`); // eslint-disable-line no-console
62
51
 
63
- return NoSsr.render(h, ctx);
52
+ return;
64
53
  }
65
- });
54
+
55
+ directiveNames[name] = true;
56
+
57
+ vueDirective.apply(Vue, arguments);
58
+ };
59
+
60
+ // Load the directives from the plugins - we do this with a function so we know
61
+ // these are initialized here, after the code above which keeps track of them and
62
+ // prevents over-writes
63
+ loadDirectives();
66
64
 
67
65
  // Component: <NuxtChild>
68
66
  Vue.component(NuxtChild.name, NuxtChild);
@@ -77,7 +75,7 @@ Object.defineProperty(Vue.prototype, '$nuxt', {
77
75
  get() {
78
76
  const globalNuxt = this.$root.$options.$nuxt;
79
77
 
80
- if (process.client && !globalNuxt && typeof window !== 'undefined') {
78
+ if (!globalNuxt && typeof window !== 'undefined') {
81
79
  return window.$nuxt;
82
80
  }
83
81
 
@@ -86,18 +84,10 @@ Object.defineProperty(Vue.prototype, '$nuxt', {
86
84
  configurable: true
87
85
  });
88
86
 
89
- Vue.use(Meta, {
90
- keyName: 'head', attribute: 'data-n-head', ssrAttribute: 'data-n-head-ssr', tagIDKeyName: 'hid'
91
- });
87
+ async function createApp(config = {}) {
88
+ const router = await createRouter(config);
92
89
 
93
- const defaultTransition = {
94
- name: 'page', mode: 'out-in', appear: true, appearClass: 'appear', appearActiveClass: 'appear-active', appearToClass: 'appear-to'
95
- };
96
-
97
- async function createApp(ssrContext, config = {}) {
98
- const router = await createRouter(ssrContext, config);
99
-
100
- const store = createStore(ssrContext);
90
+ const store = createStore();
101
91
 
102
92
  // Add this.$router into store actions/mutations
103
93
  store.$router = router;
@@ -107,40 +97,9 @@ async function createApp(ssrContext, config = {}) {
107
97
  // here we inject the router and store to all child components,
108
98
  // making them available everywhere as `this.$router` and `this.$store`.
109
99
  const app = {
110
- head: {
111
- title: 'dashboard',
112
- meta: [{ charset: 'utf-8' }, { name: 'viewport', content: 'width=device-width, initial-scale=1' }, {
113
- hid: 'description', name: 'description', content: 'Rancher Dashboard'
114
- }],
115
- style: [],
116
- script: []
117
- },
118
-
119
100
  store,
120
101
  router,
121
102
  nuxt: {
122
- defaultTransition,
123
- transitions: [defaultTransition],
124
- setTransitions(transitions) {
125
- if (!Array.isArray(transitions)) {
126
- transitions = [transitions];
127
- }
128
- transitions = transitions.map((transition) => {
129
- if (!transition) {
130
- transition = defaultTransition;
131
- } else if (typeof transition === 'string') {
132
- transition = Object.assign({}, defaultTransition, { name: transition });
133
- } else {
134
- transition = Object.assign({}, defaultTransition, transition);
135
- }
136
-
137
- return transition;
138
- });
139
- this.$options.nuxt.transitions = transitions;
140
-
141
- return transitions;
142
- },
143
-
144
103
  err: null,
145
104
  dateErr: null,
146
105
  error(err) {
@@ -154,10 +113,6 @@ async function createApp(ssrContext, config = {}) {
154
113
  }
155
114
  nuxt.dateErr = Date.now();
156
115
  nuxt.err = err;
157
- // Used in src/server.js
158
- if (ssrContext) {
159
- ssrContext.nuxt.error = err;
160
- }
161
116
 
162
117
  return err;
163
118
  }
@@ -168,29 +123,21 @@ async function createApp(ssrContext, config = {}) {
168
123
  // Make app available into store via this.app
169
124
  store.app = app;
170
125
 
171
- const next = ssrContext ? ssrContext.next : (location) => app.router.push(location);
126
+ const next = (location) => app.router.push(location);
172
127
  // Resolve route
173
- let route;
174
128
 
175
- if (ssrContext) {
176
- route = router.resolve(ssrContext.url).route;
177
- } else {
178
- const path = getLocation(router.options.base, router.options.mode);
179
-
180
- route = router.resolve(path).route;
181
- }
129
+ const path = getLocation(router.options.base, router.options.mode);
130
+ const route = router.resolve(path).route;
182
131
 
183
132
  // Set context to app.context
184
133
  await setContext(app, {
185
134
  store,
186
135
  route,
187
136
  next,
188
- error: app.nuxt.error.bind(app),
189
- payload: ssrContext ? ssrContext.payload : undefined,
190
- req: ssrContext ? ssrContext.req : undefined,
191
- res: ssrContext ? ssrContext.res : undefined,
192
- beforeRenderFns: ssrContext ? ssrContext.beforeRenderFns : undefined,
193
- ssrContext
137
+ error: app.nuxt.error.bind(app),
138
+ payload: undefined,
139
+ req: undefined,
140
+ res: undefined
194
141
  });
195
142
 
196
143
  function inject(key, value) {
@@ -234,20 +181,11 @@ async function createApp(ssrContext, config = {}) {
234
181
  // Inject runtime config as $config
235
182
  inject('config', config);
236
183
 
237
- if (process.client) {
238
- // Replace store state before plugins execution
239
- if (window.__NUXT__ && window.__NUXT__.state) {
240
- store.replaceState(window.__NUXT__.state);
241
- }
184
+ // Replace store state before plugins execution
185
+ if (window.__NUXT__ && window.__NUXT__.state) {
186
+ store.replaceState(window.__NUXT__.state);
242
187
  }
243
188
 
244
- // Add enablePreview(previewData = {}) in context for plugins
245
- if (process.static && process.client) {
246
- app.context.enablePreview = function(previewData = {}) {
247
- app.previewData = Object.assign({}, previewData);
248
- inject('preview', previewData);
249
- };
250
- }
251
189
  // Plugin execution
252
190
 
253
191
  // if (typeof nuxt_plugin_portalvue_6babae27 === 'function') {
@@ -274,15 +212,15 @@ async function createApp(ssrContext, config = {}) {
274
212
  await axiosShell(app.context, inject);
275
213
  }
276
214
 
277
- if (process.client && typeof intNumber === 'function') {
215
+ if (typeof intNumber === 'function') {
278
216
  await intNumber(app.context, inject);
279
217
  }
280
218
 
281
- if (process.client && typeof positiveIntNumber === 'function') {
219
+ if (typeof positiveIntNumber === 'function') {
282
220
  await positiveIntNumber(app.context, inject);
283
221
  }
284
222
 
285
- if (process.client && typeof nuxtClientInit === 'function') {
223
+ if (typeof nuxtClientInit === 'function') {
286
224
  await nuxtClientInit(app.context, inject);
287
225
  }
288
226
 
@@ -294,43 +232,31 @@ async function createApp(ssrContext, config = {}) {
294
232
  await backButton(app.context, inject);
295
233
  }
296
234
 
297
- if (process.client && typeof plugin === 'function') {
235
+ if (typeof plugin === 'function') {
298
236
  await plugin(app.context, inject);
299
237
  }
300
238
 
301
- if (process.client && typeof codeMirror === 'function') {
239
+ if (typeof codeMirror === 'function') {
302
240
  await codeMirror(app.context, inject);
303
241
  }
304
242
 
305
- if (process.client && typeof version === 'function') {
243
+ if (typeof version === 'function') {
306
244
  await version(app.context, inject);
307
245
  }
308
246
 
309
- if (process.client && typeof steveCreateWorker === 'function') {
247
+ if (typeof steveCreateWorker === 'function') {
310
248
  await steveCreateWorker(app.context, inject);
311
249
  }
312
250
 
313
- // if (process.client && typeof formatters === 'function') {
314
- // await formatters(app.context, inject);
315
- // }
316
-
317
- // Lock enablePreview in context
318
- if (process.static && process.client) {
319
- app.context.enablePreview = function() {
320
- console.warn('You cannot call enablePreview() outside a plugin.'); // eslint-disable-line no-console
321
- };
322
- }
323
-
324
251
  // Wait for async component to be resolved first
325
252
  await new Promise((resolve, reject) => {
326
253
  // Ignore 404s rather than blindly replacing URL in browser
327
- if (process.client) {
328
- const { route } = router.resolve(app.context.route.fullPath);
254
+ const { route } = router.resolve(app.context.route.fullPath);
329
255
 
330
- if (!route.matched.length) {
331
- return resolve();
332
- }
256
+ if (!route.matched.length) {
257
+ return resolve();
333
258
  }
259
+
334
260
  router.replace(app.context.route.fullPath, resolve, (err) => {
335
261
  // https://github.com/vuejs/vue-router/blob/v3.4.3/src/util/errors.js
336
262
  if (!err._isRouter) {
@@ -342,9 +268,6 @@ async function createApp(ssrContext, config = {}) {
342
268
 
343
269
  // navigated to a different route in router guard
344
270
  const unregister = router.afterEach(async(to, from) => {
345
- if (process.server && ssrContext && ssrContext.url) {
346
- ssrContext.url = to.fullPath;
347
- }
348
271
  app.context.route = await getRouteData(to);
349
272
  app.context.params = to.params || {};
350
273
  app.context.query = to.query || {};
@@ -361,4 +284,4 @@ async function createApp(ssrContext, config = {}) {
361
284
  };
362
285
  }
363
286
 
364
- export { createApp, NuxtError };
287
+ export { createApp };
@@ -44,13 +44,7 @@ export default {
44
44
  this.serverUrl = this.serverUrlSetting.value;
45
45
  } else {
46
46
  this.noUrlSet = true;
47
- if ( process.server ) {
48
- const { req } = this.$nuxt.context;
49
-
50
- this.serverUrl = req.headers.host;
51
- } else {
52
- this.serverUrl = window.location.origin;
53
- }
47
+ this.serverUrl = window.location.origin;
54
48
  }
55
49
  },
56
50
 
package/list/node.vue CHANGED
@@ -167,6 +167,7 @@ export default {
167
167
  :loading="loading"
168
168
  :use-query-params-for-simple-filtering="useQueryParamsForSimpleFiltering"
169
169
  :force-update-live-and-delayed="forceUpdateLiveAndDelayed"
170
+ data-testid="cluster-node-list"
170
171
  v-on="$listeners"
171
172
  >
172
173
  <template #sub-row="{fullColspan, row, onRowMouseEnter, onRowMouseLeave}">