@rancher/shell 3.0.6 → 3.0.8-rc.1

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 (146) hide show
  1. package/assets/images/pl/dark/rancher-logo.svg +131 -44
  2. package/assets/images/pl/rancher-logo.svg +120 -44
  3. package/assets/images/vendor/githubapp.svg +13 -0
  4. package/assets/styles/base/_basic.scss +2 -2
  5. package/assets/styles/base/_color-classic.scss +51 -0
  6. package/assets/styles/base/_color.scss +3 -3
  7. package/assets/styles/base/_mixins.scss +1 -1
  8. package/assets/styles/base/_typography.scss +1 -1
  9. package/assets/styles/base/_variables-classic.scss +47 -0
  10. package/assets/styles/global/_button.scss +49 -17
  11. package/assets/styles/global/_form.scss +1 -1
  12. package/assets/styles/themes/_dark.scss +4 -0
  13. package/assets/styles/themes/_light.scss +3 -69
  14. package/assets/styles/themes/_modern.scss +194 -50
  15. package/assets/styles/vendor/vue-select.scss +1 -2
  16. package/assets/translations/en-us.yaml +124 -32
  17. package/assets/translations/zh-hans.yaml +0 -4
  18. package/components/ClusterIconMenu.vue +1 -1
  19. package/components/ClusterProviderIcon.vue +1 -1
  20. package/components/CodeMirror.vue +1 -1
  21. package/components/IconOrSvg.vue +40 -29
  22. package/components/Inactivity.vue +222 -106
  23. package/components/InstallHelmCharts.vue +2 -2
  24. package/components/ResourceDetail/index.vue +2 -1
  25. package/components/SortableTable/index.vue +17 -2
  26. package/components/SortableTable/sorting.js +3 -1
  27. package/components/Tabbed/index.vue +5 -5
  28. package/components/fleet/FleetConfigMapSelector.vue +117 -0
  29. package/components/fleet/FleetSecretSelector.vue +127 -0
  30. package/components/fleet/__tests__/FleetConfigMapSelector.test.ts +125 -0
  31. package/components/fleet/__tests__/FleetSecretSelector.test.ts +82 -0
  32. package/components/form/FileImageSelector.vue +13 -4
  33. package/components/form/FileSelector.vue +11 -2
  34. package/components/form/ResourceLabeledSelect.vue +1 -0
  35. package/components/form/ResourceTabs/index.vue +37 -18
  36. package/components/form/SecretSelector.vue +6 -2
  37. package/components/form/__tests__/ResourceLabeledSelect.test.ts +90 -0
  38. package/components/nav/Group.vue +29 -9
  39. package/components/nav/Header.vue +7 -8
  40. package/components/nav/NamespaceFilter.vue +1 -1
  41. package/components/nav/TopLevelMenu.helper.ts +47 -20
  42. package/components/nav/TopLevelMenu.vue +44 -14
  43. package/components/nav/Type.vue +0 -5
  44. package/components/nav/__tests__/TopLevelMenu.test.ts +2 -0
  45. package/config/pagination-table-headers.js +10 -2
  46. package/config/product/auth.js +1 -0
  47. package/config/product/explorer.js +4 -3
  48. package/config/query-params.js +1 -0
  49. package/config/settings.ts +8 -1
  50. package/config/table-headers.js +9 -0
  51. package/config/types.js +2 -0
  52. package/core/plugin.ts +18 -6
  53. package/core/types.ts +8 -0
  54. package/detail/provisioning.cattle.io.cluster.vue +1 -0
  55. package/dialog/AddonConfigConfirmationDialog.vue +45 -1
  56. package/dialog/InstallExtensionDialog.vue +71 -45
  57. package/dialog/UninstallExtensionDialog.vue +2 -1
  58. package/dialog/__tests__/InstallExtensionDialog.test.ts +111 -0
  59. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +52 -11
  60. package/edit/auth/AuthProviderWarningBanners.vue +14 -1
  61. package/edit/auth/github-app-steps.vue +97 -0
  62. package/edit/auth/github-steps.vue +75 -0
  63. package/edit/auth/github.vue +94 -65
  64. package/edit/auth/oidc.vue +86 -16
  65. package/edit/fleet.cattle.io.helmop.vue +51 -2
  66. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +15 -5
  67. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +11 -9
  68. package/edit/provisioning.cattle.io.cluster/rke2.vue +56 -9
  69. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +28 -2
  70. package/list/projectsecret.vue +1 -1
  71. package/machine-config/azure.vue +1 -1
  72. package/mixins/__tests__/chart.test.ts +1 -1
  73. package/mixins/chart.js +2 -2
  74. package/models/__tests__/chart.test.ts +17 -9
  75. package/models/__tests__/compliance.cattle.io.clusterscanprofile.spec.js +30 -0
  76. package/models/catalog.cattle.io.app.js +1 -1
  77. package/models/chart.js +3 -1
  78. package/models/compliance.cattle.io.clusterscanprofile.js +1 -1
  79. package/models/event.js +7 -0
  80. package/models/management.cattle.io.authconfig.js +1 -0
  81. package/models/provisioning.cattle.io.cluster.js +9 -0
  82. package/package.json +2 -2
  83. package/pages/auth/login.vue +5 -2
  84. package/pages/auth/verify.vue +1 -1
  85. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +3 -2
  86. package/pages/c/_cluster/apps/charts/chart.vue +2 -2
  87. package/pages/c/_cluster/explorer/EventsTable.vue +92 -9
  88. package/pages/c/_cluster/explorer/tools/index.vue +3 -3
  89. package/pages/c/_cluster/settings/performance.vue +13 -26
  90. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +159 -62
  91. package/pages/c/_cluster/uiplugins/__tests__/PluginInfoPanel.test.ts +102 -0
  92. package/pages/c/_cluster/uiplugins/__tests__/{index.spec.ts → index.test.ts} +121 -55
  93. package/pages/c/_cluster/uiplugins/index.vue +110 -94
  94. package/pages/home.vue +313 -12
  95. package/plugins/__tests__/subscribe.events.test.ts +194 -0
  96. package/plugins/axios.js +2 -1
  97. package/plugins/dashboard-store/actions.js +4 -1
  98. package/plugins/dashboard-store/getters.js +1 -1
  99. package/plugins/dashboard-store/resource-class.js +20 -5
  100. package/plugins/steve/__tests__/subscribe.spec.ts +27 -24
  101. package/plugins/steve/index.js +18 -10
  102. package/plugins/steve/mutations.js +2 -2
  103. package/plugins/steve/resourceWatcher.js +2 -2
  104. package/plugins/steve/steve-pagination-utils.ts +12 -9
  105. package/plugins/steve/subscribe.js +113 -85
  106. package/plugins/subscribe-events.ts +211 -0
  107. package/rancher-components/BadgeState/BadgeState.vue +8 -6
  108. package/rancher-components/Banner/Banner.vue +2 -1
  109. package/rancher-components/Form/Checkbox/Checkbox.vue +3 -3
  110. package/rancher-components/Form/Radio/RadioButton.vue +3 -3
  111. package/scripts/extension/publish +1 -1
  112. package/store/auth.js +8 -3
  113. package/store/aws.js +8 -6
  114. package/store/features.js +1 -0
  115. package/store/index.js +21 -25
  116. package/store/prefs.js +6 -0
  117. package/types/extension-manager.ts +8 -1
  118. package/types/kube/kube-api.ts +2 -1
  119. package/types/rancher/index.d.ts +1 -0
  120. package/types/resources/settings.d.ts +52 -23
  121. package/types/shell/index.d.ts +412 -336
  122. package/types/store/subscribe-events.types.ts +70 -0
  123. package/types/store/subscribe.types.ts +6 -22
  124. package/utils/__tests__/cluster.test.ts +379 -1
  125. package/utils/cluster.js +157 -3
  126. package/utils/dynamic-content/__tests__/config.test.ts +187 -0
  127. package/utils/dynamic-content/__tests__/index.test.ts +390 -0
  128. package/utils/dynamic-content/__tests__/info.test.ts +263 -0
  129. package/utils/dynamic-content/__tests__/new-release.test.ts +216 -0
  130. package/utils/dynamic-content/__tests__/support-notice.test.ts +262 -0
  131. package/utils/dynamic-content/__tests__/util.test.ts +235 -0
  132. package/utils/dynamic-content/config.ts +55 -0
  133. package/utils/dynamic-content/index.ts +273 -0
  134. package/utils/dynamic-content/info.ts +219 -0
  135. package/utils/dynamic-content/new-release.ts +126 -0
  136. package/utils/dynamic-content/support-notice.ts +169 -0
  137. package/utils/dynamic-content/types.d.ts +101 -0
  138. package/utils/dynamic-content/util.ts +122 -0
  139. package/utils/inactivity.ts +104 -0
  140. package/utils/pagination-utils.ts +105 -31
  141. package/utils/pagination-wrapper.ts +6 -8
  142. package/utils/release-notes.ts +1 -1
  143. package/utils/sort.js +5 -0
  144. package/utils/unit-tests/pagination-utils.spec.ts +283 -0
  145. package/utils/validators/formRules/__tests__/index.test.ts +7 -0
  146. package/utils/validators/formRules/index.ts +2 -2
@@ -62,7 +62,7 @@ const DEFAULT_COLOR = 'warning';
62
62
  const DEFAULT_ICON = 'x';
63
63
 
64
64
  const DEFAULT_WAIT_INTERVAL = 1000;
65
- const DEFAULT_WAIT_TMIMEOUT = 30000;
65
+ const DEFAULT_WAIT_TIMEOUT = 30000;
66
66
 
67
67
  export const STATES_ENUM = {
68
68
  IN_USE: 'in-use',
@@ -806,7 +806,7 @@ export default class Resource {
806
806
  // ------------------------------------------------------------------
807
807
 
808
808
  waitForTestFn(fn, msg, timeoutMs, intervalMs) {
809
- return waitFor(() => fn.apply(this), msg, timeoutMs || DEFAULT_WAIT_TMIMEOUT, intervalMs || DEFAULT_WAIT_INTERVAL, true);
809
+ return waitFor(() => fn.apply(this), msg, timeoutMs || DEFAULT_WAIT_TIMEOUT, intervalMs || DEFAULT_WAIT_INTERVAL, true);
810
810
  }
811
811
 
812
812
  waitForState(state, timeout, interval) {
@@ -855,7 +855,7 @@ export default class Resource {
855
855
  return (entry.status || '').toLowerCase() === `${ withStatus }`.toLowerCase();
856
856
  }
857
857
 
858
- waitForCondition(name, withStatus = 'True', timeoutMs = DEFAULT_WAIT_TMIMEOUT, intervalMs = DEFAULT_WAIT_INTERVAL) {
858
+ waitForCondition(name, withStatus = 'True', timeoutMs = DEFAULT_WAIT_TIMEOUT, intervalMs = DEFAULT_WAIT_INTERVAL) {
859
859
  return this.waitForTestFn(() => {
860
860
  return this.isCondition(name, withStatus);
861
861
  }, `condition ${ name }=${ withStatus }`, timeoutMs, intervalMs);
@@ -1264,6 +1264,12 @@ export default class Resource {
1264
1264
  delete opt.replace;
1265
1265
  }
1266
1266
 
1267
+ // Will loading this resource invalidate the resources in the cache that represent a page (resource is not from page)
1268
+ // By default we set this to no, it won't pollute the cache. Most likely either
1269
+ // 1. The resource came from a list already (loaded resource is already in the page that is in the cache)
1270
+ // 2. UI is not on a page with a list (cache doesn't represent a list)
1271
+ const invalidatePageCache = opt.invalidatePageCache || false;
1272
+
1267
1273
  try {
1268
1274
  const res = await this.$dispatch('request', { opt, type: this.type } );
1269
1275
 
@@ -1272,7 +1278,9 @@ export default class Resource {
1272
1278
 
1273
1279
  // Steve sometimes returns Table responses instead of the resource you just saved.. ignore
1274
1280
  if ( res && res.kind !== 'Table') {
1275
- await this.$dispatch('load', { data: res, existing: (forNew ? this : undefined ) });
1281
+ await this.$dispatch('load', {
1282
+ data: res, existing: (forNew ? this : undefined ), invalidatePageCache
1283
+ });
1276
1284
  }
1277
1285
  } catch (e) {
1278
1286
  if ( this.type && this.id && e?._status === 409) {
@@ -1280,7 +1288,14 @@ export default class Resource {
1280
1288
  await this.$dispatch('find', {
1281
1289
  type: this.type,
1282
1290
  id: this.id,
1283
- opt: { force: true }
1291
+ opt: {
1292
+ // We want to update the value in cache, so force the request
1293
+ force: true,
1294
+ // We're not interested in opening a watch for this specific resource
1295
+ watch: false,
1296
+ // Unless overridden, this will be false, we're probably from a list and we don't want to clear it's state
1297
+ invalidatePageCache
1298
+ }
1284
1299
  });
1285
1300
  }
1286
1301
 
@@ -1,17 +1,19 @@
1
1
  import { actions, getters, mutations } from '../subscribe';
2
2
  import { REVISION_TOO_OLD } from '../../../utils/socket';
3
- import { STEVE_WATCH_EVENT } from '../../../types/store/subscribe.types';
3
+ import { STEVE_WATCH_MODE } from '../../../types/store/subscribe.types';
4
4
  import backOff from '../../../utils/back-off';
5
+ import { SteveWatchEventListenerManager } from '../../subscribe-events';
5
6
 
6
7
  describe('steve: subscribe', () => {
7
8
  describe('actions', () => {
8
9
  describe('watch', () => {
9
- const state = {};
10
+ const state = { listenerManager: new SteveWatchEventListenerManager() };
10
11
  const getters = {
11
- normalizeType: (type: string) => type,
12
- schemaFor: () => null,
13
- inError: () => false,
14
- watchStarted: () => false,
12
+ normalizeType: (type: string) => type,
13
+ schemaFor: () => null,
14
+ inError: () => false,
15
+ watchStarted: () => false,
16
+ listenerManager: state.listenerManager
15
17
  };
16
18
  const rootGetters = {
17
19
  'type-map/isSpoofed': () => false,
@@ -211,15 +213,11 @@ describe('steve: subscribe', () => {
211
213
  }, {
212
214
  ...obj,
213
215
  revision,
214
- mode: STEVE_WATCH_EVENT.CHANGES,
216
+ mode: STEVE_WATCH_MODE.RESOURCE_CHANGES,
215
217
  force: true,
216
218
  });
217
219
 
218
- expect(dispatch).toHaveBeenNthCalledWith(1, 'unwatchIncompatible', {
219
- id: undefined, mode: STEVE_WATCH_EVENT.CHANGES, namespace: undefined, selector: undefined, type: obj.type
220
- });
221
-
222
- expect(dispatch).toHaveBeenNthCalledWith(2, 'send', {
220
+ expect(dispatch).toHaveBeenNthCalledWith(1, 'send', {
223
221
  debounceMs: 4000,
224
222
  mode: 'resource.changes',
225
223
  resourceType: obj.type,
@@ -231,7 +229,7 @@ describe('steve: subscribe', () => {
231
229
  state, dispatch, getters, commit
232
230
  }, { ...msg });
233
231
 
234
- expect(dispatch).toHaveBeenCalledTimes(2);
232
+ expect(dispatch).toHaveBeenCalledTimes(1);
235
233
  dispatch.mockClear();
236
234
  };
237
235
 
@@ -252,7 +250,7 @@ describe('steve: subscribe', () => {
252
250
  });
253
251
  expect(state.inError).toStrictEqual(
254
252
  {
255
- 'type=abc,namespace=,id=,selector=': {
253
+ 'type=abc,namespace=,id=,selector=,mode=resource.changes': {
256
254
  obj: {
257
255
  type: msg.resourceType,
258
256
  mode: msg.mode,
@@ -268,7 +266,7 @@ describe('steve: subscribe', () => {
268
266
  }, { ...msg });
269
267
  // stop tries to watch again, however we're in error so will be ignored
270
268
  expect(dispatch).toHaveBeenNthCalledWith(1, 'watch', {
271
- id: undefined, mode: STEVE_WATCH_EVENT.CHANGES, namespace: undefined, selector: undefined, type: obj.type
269
+ id: undefined, mode: STEVE_WATCH_MODE.RESOURCE_CHANGES, namespace: undefined, selector: undefined, standardWatch: true, type: obj.type
272
270
  });
273
271
 
274
272
  dispatch.mockClear();
@@ -349,19 +347,24 @@ describe('steve: subscribe', () => {
349
347
  const obj = { type: 'abc' };
350
348
  const msg = {
351
349
  resourceType: obj.type,
352
- mode: STEVE_WATCH_EVENT.CHANGES,
350
+ mode: STEVE_WATCH_MODE.RESOURCE_CHANGES,
353
351
  };
354
352
 
355
353
  const initStore = () => {
356
- const state = { started: [], inError: {} };
354
+ const state = {
355
+ started: [],
356
+ inError: {},
357
+ listenerManager: new SteveWatchEventListenerManager()
358
+ };
357
359
  const _getters = {
358
- normalizeType: (type: string) => type,
359
- schemaFor: () => ({}),
360
- storeName: 'test',
361
- inError: (...args) => getters.inError(state)(...args),
362
- watchStarted: (...args) => getters.watchStarted(state)(...args),
363
- backOffId: (...args) => getters.backOffId()(...args),
364
- canBackoff: () => true,
360
+ normalizeType: (type: string) => type,
361
+ schemaFor: () => ({}),
362
+ storeName: 'test',
363
+ inError: (...args) => getters.inError(state)(...args),
364
+ watchStarted: (...args) => getters.watchStarted(state)(...args),
365
+ backOffId: (...args) => getters.backOffId()(...args),
366
+ canBackoff: () => true,
367
+ listenerManager: state.listenerManager
365
368
  };
366
369
  const commit = (type, ...args) => mutations[type](state, ...args);
367
370
 
@@ -9,6 +9,8 @@ import {
9
9
  import getters, { STEVE_MODEL_TYPES } from './getters';
10
10
  import mutations from './mutations';
11
11
  import actions from './actions';
12
+ import { SteveWatchEventListenerManager } from '@shell/plugins/subscribe-events';
13
+ import { markRaw } from 'vue';
12
14
 
13
15
  export function SteveFactory(namespace, baseUrl) {
14
16
  return {
@@ -17,16 +19,22 @@ export function SteveFactory(namespace, baseUrl) {
17
19
  state() {
18
20
  return {
19
21
  ...coreStoreState(namespace, baseUrl),
20
- socket: null,
21
- queue: [], // For change event coalescing
22
- wantSocket: false,
23
- debugSocket: false,
24
- allowStreaming: true,
25
- pendingFrames: [],
26
- deferredRequests: {},
27
- started: [],
28
- inError: {},
29
- podsByNamespace: {}, // Cache of pods by namespace
22
+ socket: null,
23
+ queue: [], // For change event coalescing
24
+ wantSocket: false,
25
+ debugSocket: false,
26
+ allowStreaming: true,
27
+ pendingFrames: [],
28
+ deferredRequests: {},
29
+ started: [],
30
+ inError: {},
31
+ /**
32
+ * Socket listener manager for this store
33
+ *
34
+ * Instance of @SteveWatchEventListenerManager . See it's description for more info
35
+ */
36
+ socketListenerManager: markRaw(new SteveWatchEventListenerManager()),
37
+ podsByNamespace: {}, // Cache of pods by namespace
30
38
  };
31
39
  },
32
40
 
@@ -164,10 +164,10 @@ export default {
164
164
  },
165
165
 
166
166
  reset(state) {
167
- // Reset generic store things.... then steve specific things
168
-
167
+ // 1. Reset generic store things
169
168
  resetStore(state, this.commit);
170
169
 
170
+ // 2. Reset steve specific store things
171
171
  this.commit(`${ state.config.namespace }/resetSubscriptions`);
172
172
 
173
173
  // Clear the podsByNamespace cache
@@ -40,10 +40,10 @@ export const WATCH_STATUSES = {
40
40
  * Create a unique key for a specific resource watch's params
41
41
  */
42
42
  export const keyForSubscribe = ({
43
- resourceType, type, namespace, id, selector
43
+ resourceType, type, namespace, id, selector, mode
44
44
  } = {}) => {
45
45
  const keyMap = {
46
- type: resourceType || type, namespace, id, selector
46
+ type: resourceType || type, namespace, id, selector, mode
47
47
  };
48
48
 
49
49
  return Object.entries(keyMap)
@@ -17,9 +17,10 @@ import {
17
17
  } from '@shell/config/types';
18
18
  import { CAPI as CAPI_LAB_AND_ANO, CATTLE_PUBLIC_ENDPOINTS, STORAGE, UI_PROJECT_SECRET_COPY } from '@shell/config/labels-annotations';
19
19
  import { Schema } from '@shell/plugins/steve/schema';
20
- import { PaginationSettingsStore } from '@shell/types/resources/settings';
20
+ import { PaginationSettingsStores } from '@shell/types/resources/settings';
21
21
  import paginationUtils from '@shell/utils/pagination-utils';
22
22
  import { KubeLabelSelector, KubeLabelSelectorExpression } from '@shell/types/kube/kube-api';
23
+ import { parseField } from '@shell/utils/sort';
23
24
 
24
25
  /**
25
26
  * This is a workaround for a ts build issue found in check-plugins-build.
@@ -401,9 +402,13 @@ class StevePaginationUtils extends NamespaceProjectFilters {
401
402
 
402
403
  const joined = opt.pagination.sort
403
404
  .map((s) => {
404
- this.validateField(validateFields, schema, s.field);
405
+ // Use the same mechanism as local sorting to flip logic for asc/des
406
+ const { field, reverse } = parseField(s.field);
407
+ const asc = reverse ? !s.asc : s.asc;
405
408
 
406
- return `${ s.asc ? '' : '-' }${ this.convertArrayPath(s.field) }`;
409
+ this.validateField(validateFields, schema, field);
410
+
411
+ return `${ asc ? '' : '-' }${ this.convertArrayPath(field) }`;
407
412
  })
408
413
  .join(',');
409
414
 
@@ -615,7 +620,6 @@ class StevePaginationUtils extends NamespaceProjectFilters {
615
620
  res.push(`filter=!${ labelKey }`);
616
621
  break;
617
622
  case 'Gt':
618
- // Currently broken - see https://github.com/rancher/rancher/issues/50057
619
623
  // Only applicable to node affinity (atm) - https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
620
624
 
621
625
  if (typeof exp.values !== 'string') {
@@ -628,7 +632,6 @@ class StevePaginationUtils extends NamespaceProjectFilters {
628
632
  res.push(`filter=${ labelKey } > (${ exp.values })`);
629
633
  break;
630
634
  case 'Lt':
631
- // Currently broken - see https://github.com/rancher/rancher/issues/50057
632
635
  // Only applicable to node affinity (atm) - https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#operators
633
636
  if (typeof exp.values !== 'string') {
634
637
  console.error(`Skipping labelSelector to API filter param conversion for ${ exp.key }(Lt) as no value was supplied`); // eslint-disable-line no-console
@@ -649,7 +652,7 @@ class StevePaginationUtils extends NamespaceProjectFilters {
649
652
  }
650
653
  }
651
654
 
652
- export const PAGINATION_SETTINGS_STORE_DEFAULTS: PaginationSettingsStore = {
655
+ export const PAGINATION_SETTINGS_STORE_DEFAULTS: PaginationSettingsStores = {
653
656
  cluster: {
654
657
  resources: {
655
658
  enableAll: false,
@@ -662,7 +665,7 @@ export const PAGINATION_SETTINGS_STORE_DEFAULTS: PaginationSettingsStore = {
662
665
  CATALOG.APP, CATALOG.OPERATION,
663
666
  HPA, INGRESS, SERVICE,
664
667
  PV, CONFIG_MAP, STORAGE_CLASS, PVC, SECRET,
665
- WORKLOAD_TYPES.REPLICA_SET, WORKLOAD_TYPES.REPLICATION_CONTROLLER
668
+ WORKLOAD_TYPES.REPLICA_SET, WORKLOAD_TYPES.REPLICATION_CONTROLLER,
666
669
  ],
667
670
  generic: true,
668
671
  }
@@ -673,8 +676,8 @@ export const PAGINATION_SETTINGS_STORE_DEFAULTS: PaginationSettingsStore = {
673
676
  enableAll: false,
674
677
  enableSome: {
675
678
  enabled: [
676
- // { resource: CAPI.RANCHER_CLUSTER, context: ['home', 'side-bar'] }, // Disabled due to https://github.com/rancher/dashboard/issues/14493
677
- // { resource: MANAGEMENT.CLUSTER, context: ['side-bar'] }, // Disabled due to https://github.com/rancher/dashboard/issues/14493
679
+ { resource: CAPI.RANCHER_CLUSTER, context: ['side-bar'] },
680
+ { resource: MANAGEMENT.CLUSTER, context: ['side-bar'] },
678
681
  { resource: CATALOG.APP, context: ['branding'] },
679
682
  SECRET
680
683
  ],