@rancher/shell 0.1.4 → 0.2.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 (170) hide show
  1. package/assets/brand/suse/favicon.png +0 -0
  2. package/assets/images/generic-plugin.svg +1 -7
  3. package/assets/styles/global/_button.scss +1 -0
  4. package/assets/translations/en-us.yaml +129 -53
  5. package/assets/translations/zh-hans.yaml +18 -0
  6. package/components/CommunityLinks.vue +40 -49
  7. package/components/ExplorerProjectsNamespaces.vue +20 -3
  8. package/components/HarvesterServiceAddOnConfig.vue +10 -10
  9. package/components/LazyImage.vue +21 -8
  10. package/components/PromptRemove.vue +2 -2
  11. package/components/ResourceList/Masthead.vue +21 -1
  12. package/components/ResourceList/ResourceLoadingIndicator.vue +0 -8
  13. package/components/ResourceList/index.vue +42 -36
  14. package/components/ResourceTable.vue +19 -0
  15. package/components/SortableTable/THead.vue +311 -70
  16. package/components/SortableTable/advanced-filtering.js +272 -0
  17. package/components/SortableTable/filtering.js +90 -29
  18. package/components/SortableTable/index.vue +486 -280
  19. package/components/Tabbed/index.vue +25 -7
  20. package/components/TypeDescription.vue +10 -1
  21. package/components/fleet/FleetClusters.vue +6 -0
  22. package/components/fleet/FleetRepos.vue +7 -1
  23. package/components/form/Command.vue +5 -0
  24. package/components/form/EnvVars.vue +5 -0
  25. package/components/form/NameNsDescription.vue +3 -1
  26. package/components/form/NodeScheduling.vue +6 -1
  27. package/components/form/PodAffinity.vue +5 -0
  28. package/components/form/ServiceNameSelect.vue +5 -0
  29. package/components/form/ValueFromResource.vue +7 -1
  30. package/components/form/WorkloadPorts.vue +2 -2
  31. package/components/nav/TopLevelMenu.vue +2 -1
  32. package/config/home-links.js +155 -0
  33. package/config/private-label.js +1 -1
  34. package/config/product/manager.js +0 -2
  35. package/config/product/settings.js +1 -0
  36. package/config/product/uiplugins.js +2 -1
  37. package/config/settings.js +3 -1
  38. package/config/uiplugins.js +76 -6
  39. package/config/version.js +17 -0
  40. package/core/plugin.ts +12 -0
  41. package/core/plugins.js +29 -5
  42. package/core/types.ts +6 -0
  43. package/creators/app/{.eslintignore → files/.eslintignore} +0 -0
  44. package/creators/app/{.eslintrc.js → files/.eslintrc.js} +0 -0
  45. package/creators/app/{.vscode → files/.vscode}/settings.json +0 -0
  46. package/creators/app/{babel.config.js → files/babel.config.js} +0 -0
  47. package/creators/app/{nuxt.config.js → files/nuxt.config.js} +0 -0
  48. package/creators/app/{tsconfig.json → files/tsconfig.json} +2 -1
  49. package/creators/app/init +16 -17
  50. package/creators/app/package.json +7 -1
  51. package/creators/pkg/{babel.config.js → files/babel.config.js} +0 -0
  52. package/creators/pkg/{index.ts → files/index.ts} +0 -0
  53. package/creators/pkg/{tsconfig.json → files/tsconfig.json} +13 -12
  54. package/creators/pkg/{vue.config.js → files/vue.config.js} +0 -0
  55. package/creators/pkg/init +1 -1
  56. package/creators/pkg/package.json +1 -1
  57. package/creators/update/init +54 -0
  58. package/creators/update/package.json +20 -0
  59. package/creators/update/upgrade +56 -0
  60. package/creators/update/yarn-error.log +54 -0
  61. package/detail/provisioning.cattle.io.cluster.vue +1 -1
  62. package/detail/workload/index.vue +1 -0
  63. package/edit/persistentvolume/index.vue +48 -13
  64. package/edit/persistentvolumeclaim.vue +31 -13
  65. package/edit/provisioning.cattle.io.cluster/ACE.vue +2 -1
  66. package/edit/provisioning.cattle.io.cluster/DrainOptions.vue +0 -1
  67. package/edit/provisioning.cattle.io.cluster/rke2.vue +52 -43
  68. package/edit/service.vue +1 -1
  69. package/edit/workload/index.vue +19 -9
  70. package/edit/workload/mixins/workload.js +109 -114
  71. package/edit/workload/storage/index.vue +11 -17
  72. package/edit/workload/storage/persistentVolumeClaim/index.vue +5 -0
  73. package/edit/workload/storage/secret.vue +6 -1
  74. package/list/catalog.cattle.io.app.vue +10 -9
  75. package/list/catalog.cattle.io.clusterrepo.vue +6 -61
  76. package/list/cis.cattle.io.clusterscan.vue +12 -12
  77. package/list/fleet.cattle.io.bundle.vue +33 -28
  78. package/list/fleet.cattle.io.cluster.vue +26 -22
  79. package/list/fleet.cattle.io.clustergroup.vue +6 -0
  80. package/list/fleet.cattle.io.clusterregistrationtoken.vue +28 -24
  81. package/list/fleet.cattle.io.gitrepo.vue +25 -14
  82. package/list/helm.cattle.io.projecthelmchart.vue +52 -33
  83. package/list/logging.banzaicloud.io.clusterflow.vue +7 -12
  84. package/list/logging.banzaicloud.io.flow.vue +7 -14
  85. package/list/management.cattle.io.cluster.vue +26 -15
  86. package/list/management.cattle.io.feature.vue +13 -8
  87. package/list/management.cattle.io.user.vue +38 -19
  88. package/list/monitoring.coreos.com.alertmanagerconfig.vue +8 -15
  89. package/list/namespace.vue +14 -1
  90. package/list/node.vue +13 -16
  91. package/list/persistentvolume.vue +16 -9
  92. package/list/persistentvolumeclaim.vue +5 -8
  93. package/list/provisioning.cattle.io.cluster.vue +34 -8
  94. package/list/service.vue +24 -12
  95. package/list/ui.cattle.io.navlink.vue +6 -0
  96. package/list/workload.vue +2 -2
  97. package/middleware/authenticated.js +6 -0
  98. package/mixins/resource-fetch.js +12 -18
  99. package/mixins/resource-manager.js +126 -0
  100. package/models/catalog.cattle.io.uiplugin.js +4 -0
  101. package/models/management.cattle.io.cluster.js +9 -1
  102. package/models/pod.js +15 -5
  103. package/models/provisioning.cattle.io.cluster.js +4 -0
  104. package/models/workload.service.js +10 -0
  105. package/nuxt.config.js +2 -1
  106. package/package.json +1 -1
  107. package/pages/auth/login.vue +10 -0
  108. package/pages/auth/verify.vue +9 -0
  109. package/pages/c/_cluster/apps/charts/install.vue +119 -31
  110. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +108 -0
  111. package/pages/c/_cluster/settings/links.vue +53 -101
  112. package/pages/c/_cluster/settings/performance.vue +90 -7
  113. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +3 -3
  114. package/pages/c/_cluster/uiplugins/InstallDialog.vue +72 -21
  115. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +26 -7
  116. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +2 -7
  117. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +23 -15
  118. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +12 -5
  119. package/pages/c/_cluster/uiplugins/index.vue +223 -72
  120. package/pages/support/index.vue +31 -142
  121. package/plugins/dashboard-store/actions.js +19 -0
  122. package/plugins/dashboard-store/getters.js +20 -3
  123. package/plugins/dashboard-store/mutations.js +13 -7
  124. package/plugins/plugin.js +18 -15
  125. package/plugins/steve/getters.js +12 -0
  126. package/plugins/version.js +21 -0
  127. package/promptRemove/mixin/roleDeletionCheck.js +15 -1
  128. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -7
  129. package/rancher-components/components/BadgeState/BadgeState.spec.ts +12 -0
  130. package/rancher-components/components/BadgeState/BadgeState.vue +107 -0
  131. package/rancher-components/components/BadgeState/index.ts +1 -0
  132. package/rancher-components/components/Banner/Banner.test.ts +13 -0
  133. package/rancher-components/components/Banner/Banner.vue +163 -0
  134. package/rancher-components/components/Banner/index.ts +1 -0
  135. package/rancher-components/components/Card/Card.vue +150 -0
  136. package/rancher-components/components/Card/index.ts +1 -0
  137. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +77 -0
  138. package/rancher-components/components/Form/Checkbox/Checkbox.vue +395 -0
  139. package/rancher-components/components/Form/Checkbox/index.ts +1 -0
  140. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +29 -0
  141. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +343 -0
  142. package/rancher-components/components/Form/LabeledInput/index.ts +1 -0
  143. package/rancher-components/components/Form/Radio/RadioButton.vue +270 -0
  144. package/rancher-components/components/Form/Radio/RadioGroup.vue +235 -0
  145. package/rancher-components/components/Form/Radio/index.ts +2 -0
  146. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +168 -0
  147. package/rancher-components/components/Form/TextArea/index.ts +1 -0
  148. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +107 -0
  149. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +137 -0
  150. package/rancher-components/components/Form/ToggleSwitch/index.ts +1 -0
  151. package/rancher-components/components/Form/index.ts +5 -0
  152. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +137 -0
  153. package/rancher-components/components/LabeledTooltip/index.ts +1 -0
  154. package/scripts/publish-shell.sh +39 -6
  155. package/scripts/record-deps.js +37 -0
  156. package/scripts/test-plugins-build.sh +8 -5
  157. package/scripts/typegen.sh +84 -0
  158. package/store/auth.js +3 -0
  159. package/store/index.js +12 -3
  160. package/store/type-map.js +2 -0
  161. package/types/shell/index.d.ts +3046 -0
  162. package/utils/favicon.js +8 -2
  163. package/utils/gc/gc-interval.ts +40 -0
  164. package/utils/gc/gc-root-store.js +76 -0
  165. package/utils/gc/gc-route-changed.ts +44 -0
  166. package/utils/gc/gc-types.ts +21 -0
  167. package/utils/gc/gc.ts +282 -0
  168. package/config/footer.js +0 -18
  169. package/creators/pkg/nuxt.config.js +0 -6
  170. package/yarn-error.log +0 -195
@@ -100,7 +100,7 @@ export default {
100
100
  const errors = [];
101
101
 
102
102
  if (this.healthCheckEnabled && !this.healthcheckPort) {
103
- errors.push(this.t('validation.required', { key: this.t('harvester.service.healthCheckPort.label') }, true));
103
+ errors.push(this.t('validation.required', { key: this.t('servicesPage.harvester.healthCheckPort.label') }, true));
104
104
  }
105
105
 
106
106
  if (errors.length > 0) {
@@ -131,7 +131,7 @@ export default {
131
131
  v-model="ipam"
132
132
  :mode="mode"
133
133
  :options="ipamOptions"
134
- :label="t('harvester.service.ipam.label')"
134
+ :label="t('servicesPage.harvester.ipam.label')"
135
135
  :disabled="mode === 'edit'"
136
136
  />
137
137
  </div>
@@ -143,7 +143,7 @@ export default {
143
143
  v-model="healthCheckEnabled"
144
144
  :mode="mode"
145
145
  name="healthCheckEnabled"
146
- :label="t('harvester.service.healthCheckEnabled.label')"
146
+ :label="t('servicesPage.harvester.healthCheckEnabled.label')"
147
147
  :labels="[t('generic.disabled'),t('generic.enabled')]"
148
148
  :options="[false, true]"
149
149
  />
@@ -157,7 +157,7 @@ export default {
157
157
  :mode="mode"
158
158
  :options="portOptions"
159
159
  required
160
- :label="t('harvester.service.healthCheckPort.label')"
160
+ :label="t('servicesPage.harvester.healthCheckPort.label')"
161
161
  />
162
162
  </div>
163
163
  <div class="col span-6">
@@ -165,8 +165,8 @@ export default {
165
165
  v-model="healthCheckSuccessThreshold"
166
166
  :mode="mode"
167
167
  type="number"
168
- :label="t('harvester.service.healthCheckSuccessThreshold.label')"
169
- :tooltip="t('harvester.service.healthCheckSuccessThreshold.description')"
168
+ :label="t('servicesPage.harvester.healthCheckSuccessThreshold.label')"
169
+ :tooltip="t('servicesPage.harvester.healthCheckSuccessThreshold.description')"
170
170
  />
171
171
  </div>
172
172
  </div>
@@ -176,8 +176,8 @@ export default {
176
176
  v-model="healthCheckFailureThreshold"
177
177
  :mode="mode"
178
178
  type="number"
179
- :label="t('harvester.service.healthCheckFailureThreshold.label')"
180
- :tooltip="t('harvester.service.healthCheckFailureThreshold.description')"
179
+ :label="t('servicesPage.harvester.healthCheckFailureThreshold.label')"
180
+ :tooltip="t('servicesPage.harvester.healthCheckFailureThreshold.description')"
181
181
  />
182
182
  </div>
183
183
  <div class="col span-6">
@@ -185,7 +185,7 @@ export default {
185
185
  v-model="healthCheckPeriod"
186
186
  :mode="mode"
187
187
  type="number"
188
- :label="t('harvester.service.healthCheckPeriod.label')"
188
+ :label="t('servicesPage.harvester.healthCheckPeriod.label')"
189
189
  />
190
190
  </div>
191
191
  </div>
@@ -195,7 +195,7 @@ export default {
195
195
  v-model="healthCheckTimeout"
196
196
  :mode="mode"
197
197
  type="number"
198
- :label="t('harvester.service.healthCheckTimeout.label')"
198
+ :label="t('servicesPage.harvester.healthCheckTimeout.label')"
199
199
  />
200
200
  </div>
201
201
  </div>
@@ -19,17 +19,18 @@ export default {
19
19
  },
20
20
  },
21
21
 
22
- mounted() {
23
- const $img = $(this.$refs.img);
24
-
25
- if ( this.src ) {
26
- $img.attr('src', this.src);
27
- this.boundError = this.onError.bind(this);
28
-
29
- $img.on('error', this.boundError);
22
+ watch: {
23
+ src(neu, old) {
24
+ if (neu !== old) {
25
+ this.loadImage();
26
+ }
30
27
  }
31
28
  },
32
29
 
30
+ mounted() {
31
+ this.loadImage();
32
+ },
33
+
33
34
  beforeDestroy() {
34
35
  const $img = $(this.$refs.img);
35
36
 
@@ -39,6 +40,18 @@ export default {
39
40
  },
40
41
 
41
42
  methods: {
43
+ // Ensure we load the image when the source changes
44
+ loadImage() {
45
+ const $img = $(this.$refs.img);
46
+
47
+ if ( this.src ) {
48
+ $img.attr('src', this.src);
49
+ this.boundError = this.onError.bind(this);
50
+
51
+ $img.on('error', this.boundError);
52
+ }
53
+ },
54
+
42
55
  onError() {
43
56
  const $img = $(this.$refs.img);
44
57
 
@@ -266,7 +266,7 @@ export default {
266
266
  await this.refreshSpoofedTypes(spoofedTypes);
267
267
  this.done();
268
268
  } catch (err) {
269
- this.error = err;
269
+ this.error = err.message || err;
270
270
  btnCB(false);
271
271
  }
272
272
  },
@@ -278,7 +278,7 @@ export default {
278
278
  await this.refreshSpoofedTypes(spoofedTypes);
279
279
  this.done();
280
280
  } catch (err) {
281
- this.error = err;
281
+ this.error = err.message || err;
282
282
  btnCB(false);
283
283
  }
284
284
  },
@@ -4,6 +4,7 @@ import Favorite from '@shell/components/nav/Favorite';
4
4
  import TypeDescription from '@shell/components/TypeDescription';
5
5
  import { get } from '@shell/utils/object';
6
6
  import { AS, _YAML } from '@shell/config/query-params';
7
+ import ResourceLoadingIndicator from './ResourceLoadingIndicator';
7
8
 
8
9
  /**
9
10
  * Resource List Masthead component.
@@ -15,6 +16,7 @@ export default {
15
16
  components: {
16
17
  Favorite,
17
18
  TypeDescription,
19
+ ResourceLoadingIndicator,
18
20
  },
19
21
  props: {
20
22
  resource: {
@@ -53,6 +55,20 @@ export default {
53
55
  type: String,
54
56
  default: null
55
57
  },
58
+ loadResources: {
59
+ type: Array,
60
+ default: () => []
61
+ },
62
+
63
+ loadIndeterminate: {
64
+ type: Boolean,
65
+ default: false
66
+ },
67
+
68
+ showIncrementalLoadingIndicator: {
69
+ type: Boolean,
70
+ default: false
71
+ },
56
72
 
57
73
  /**
58
74
  * Inherited global identifier prefix for tests
@@ -155,7 +171,11 @@ export default {
155
171
  <h1 class="m-0">
156
172
  {{ _typeDisplay }} <Favorite v-if="isExplorer" :resource="favoriteResource || resource" />
157
173
  </h1>
158
- <slot name="header"></slot>
174
+ <ResourceLoadingIndicator
175
+ v-if="showIncrementalLoadingIndicator"
176
+ :resources="loadResources"
177
+ :indeterminate="loadIndeterminate"
178
+ />
159
179
  </div>
160
180
  <div class="actions-container">
161
181
  <slot name="actions">
@@ -16,10 +16,6 @@ export default {
16
16
  indeterminate: {
17
17
  type: Boolean,
18
18
  default: false,
19
- },
20
- rows: {
21
- type: Array,
22
- default: undefined,
23
19
  }
24
20
  },
25
21
 
@@ -32,10 +28,6 @@ export default {
32
28
  computed: {
33
29
  // Count of rows - either from the data provided or from the rows for the first resource
34
30
  rowsCount() {
35
- if (this.rows) {
36
- return this.rows.length;
37
- }
38
-
39
31
  if (this.resources.length > 0) {
40
32
  const existingData = this.$store.getters[`${ this.inStore }/all`](this.resources[0]) || [];
41
33
 
@@ -3,7 +3,7 @@ import ResourceTable from '@shell/components/ResourceTable';
3
3
  import Loading from '@shell/components/Loading';
4
4
  import Masthead from './Masthead';
5
5
  import ResourceLoadingIndicator from './ResourceLoadingIndicator';
6
- import ResourceFetch, { TYPES_RESTRICTED } from '@shell/mixins/resource-fetch';
6
+ import ResourceFetch from '@shell/mixins/resource-fetch';
7
7
 
8
8
  export default {
9
9
  components: {
@@ -14,6 +14,20 @@ export default {
14
14
  },
15
15
  mixins: [ResourceFetch],
16
16
 
17
+ props: {
18
+ hasAdvancedFiltering: {
19
+ type: Boolean,
20
+ default: false
21
+ },
22
+ advFilterHideLabelsAsCols: {
23
+ type: Boolean,
24
+ default: false
25
+ },
26
+ advFilterPreventFilteringLabels: {
27
+ type: Boolean,
28
+ default: false
29
+ },
30
+ },
17
31
  async fetch() {
18
32
  const store = this.$store;
19
33
  const resource = this.resource;
@@ -43,8 +57,8 @@ export default {
43
57
  if (component?.$loadingResources) {
44
58
  const { loadResources, loadIndeterminate } = component?.$loadingResources(this.$route, this.$store);
45
59
 
46
- this.loadResources = loadResources;
47
- this.loadIndeterminate = loadIndeterminate;
60
+ this.loadResources = loadResources || [resource];
61
+ this.loadIndeterminate = loadIndeterminate || false;
48
62
  }
49
63
  }
50
64
 
@@ -55,11 +69,7 @@ export default {
55
69
  return;
56
70
  }
57
71
 
58
- if (TYPES_RESTRICTED.includes(resource)) {
59
- this.rows = await this.$fetchType(resource);
60
- } else {
61
- this.rows = await store.dispatch(`${ inStore }/findAll`, { type: resource });
62
- }
72
+ await this.$fetchType(resource);
63
73
  }
64
74
  },
65
75
 
@@ -75,13 +85,10 @@ export default {
75
85
 
76
86
  const showMasthead = getters[`type-map/optionsFor`](resource).showListMasthead;
77
87
 
78
- const existingData = getters[`${ inStore }/all`](resource) || [];
79
-
80
88
  return {
81
89
  inStore,
82
90
  schema,
83
91
  hasListComponent,
84
- hasData: existingData.length > 0,
85
92
  showMasthead: showMasthead === undefined ? true : showMasthead,
86
93
  resource,
87
94
  // manual refresh
@@ -89,7 +96,6 @@ export default {
89
96
  watch: false,
90
97
  force: false,
91
98
  // Provided by fetch later
92
- rows: [],
93
99
  customTypeDisplay: null,
94
100
  // incremental loading
95
101
  loadResources: [resource],
@@ -111,10 +117,6 @@ export default {
111
117
  return this.$store.getters['type-map/groupByFor'](this.schema);
112
118
  },
113
119
 
114
- loading() {
115
- return this.hasData ? false : this.$fetchState.pending;
116
- },
117
-
118
120
  showIncrementalLoadingIndicator() {
119
121
  return this.perfConfig?.incrementalLoading?.enabled;
120
122
  }
@@ -142,18 +144,19 @@ export default {
142
144
  :type-display="customTypeDisplay"
143
145
  :schema="schema"
144
146
  :resource="resource"
147
+ :show-incremental-loading-indicator="showIncrementalLoadingIndicator"
148
+ :load-resources="loadResources"
149
+ :load-indeterminate="loadIndeterminate"
145
150
  >
146
- <template v-slot:header>
147
- <ResourceLoadingIndicator
148
- v-if="showIncrementalLoadingIndicator"
149
- :resources="loadResources"
150
- :indeterminate="loadIndeterminate"
151
- />
151
+ <template slot="extraActions">
152
+ <slot name="extraActions"></slot>
152
153
  </template>
153
154
  </Masthead>
154
155
  <div v-if="hasListComponent">
155
156
  <component
156
157
  :is="listComponent"
158
+ :incremental-loading-indicator="showIncrementalLoadingIndicator"
159
+ :rows="rows"
157
160
  v-bind="$data"
158
161
  />
159
162
  </div>
@@ -164,21 +167,24 @@ export default {
164
167
  :loading="loading"
165
168
  :headers="headers"
166
169
  :group-by="groupBy"
170
+ :has-advanced-filtering="hasAdvancedFiltering"
171
+ :adv-filter-hide-labels-as-cols="advFilterHideLabelsAsCols"
172
+ :adv-filter-prevent-filtering-labels="advFilterPreventFilteringLabels"
167
173
  />
168
174
  </div>
169
175
  </template>
170
176
 
171
- <style lang="scss" scoped>
172
- .header {
173
- position: relative;
174
- }
175
- H2 {
176
- position: relative;
177
- margin: 0 0 20px 0;
178
- }
179
- .right-action {
180
- position: absolute;
181
- top: 10px;
182
- right: 10px;
183
- }
184
- </style>
177
+ <style lang="scss" scoped>
178
+ .header {
179
+ position: relative;
180
+ }
181
+ H2 {
182
+ position: relative;
183
+ margin: 0 0 20px 0;
184
+ }
185
+ .right-action {
186
+ position: absolute;
187
+ top: 10px;
188
+ right: 10px;
189
+ }
190
+ </style>
@@ -122,6 +122,18 @@ export default {
122
122
  type: Boolean,
123
123
  default: false
124
124
  },
125
+ hasAdvancedFiltering: {
126
+ type: Boolean,
127
+ default: false
128
+ },
129
+ advFilterHideLabelsAsCols: {
130
+ type: Boolean,
131
+ default: false
132
+ },
133
+ advFilterPreventFilteringLabels: {
134
+ type: Boolean,
135
+ default: false
136
+ },
125
137
  },
126
138
 
127
139
  data() {
@@ -357,6 +369,7 @@ export default {
357
369
  handleActionButtonClick(event) {
358
370
  this.$emit('clickedActionButton', event);
359
371
  }
372
+
360
373
  }
361
374
  };
362
375
  </script>
@@ -369,6 +382,8 @@ export default {
369
382
  :rows="filteredRows"
370
383
  :loading="loading"
371
384
  :group-by="computedGroupBy"
385
+ :group="group"
386
+ :group-options="groupOptions"
372
387
  :search="search"
373
388
  :paging="true"
374
389
  :paging-params="pagingParams"
@@ -378,9 +393,13 @@ export default {
378
393
  :overflow-x="overflowX"
379
394
  :overflow-y="overflowY"
380
395
  :get-custom-detail-link="getCustomDetailLink"
396
+ :has-advanced-filtering="hasAdvancedFiltering"
397
+ :adv-filter-hide-labels-as-cols="advFilterHideLabelsAsCols"
398
+ :adv-filter-prevent-filtering-labels="advFilterPreventFilteringLabels"
381
399
  key-field="_key"
382
400
  :sort-generation-fn="safeSortGenerationFn"
383
401
  @clickedActionButton="handleActionButtonClick"
402
+ @group-value-change="group = $event"
384
403
  v-on="$listeners"
385
404
  >
386
405
  <template v-if="showGrouping" #header-middle>