@rancher/shell 3.0.12-rc.1 → 3.0.12-rc.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 (376) hide show
  1. package/apis/impl/apis.ts +6 -0
  2. package/apis/index.ts +26 -0
  3. package/apis/intf/resources-api/cluster-api.ts +18 -0
  4. package/apis/intf/resources-api/mgmt-api.ts +15 -0
  5. package/apis/intf/resources-api/resource-base.ts +107 -0
  6. package/apis/intf/resources-api/resource-constants.ts +147 -0
  7. package/apis/intf/resources-api/resources-api.ts +143 -0
  8. package/apis/intf/resources.ts +49 -0
  9. package/apis/intf/{modal.ts → shell-api/modal.ts} +21 -26
  10. package/apis/intf/shell-api/proxy.ts +216 -0
  11. package/apis/intf/{slide-in.ts → shell-api/slide-in.ts} +4 -3
  12. package/apis/intf/{system.ts → shell-api/system.ts} +4 -1
  13. package/apis/intf/shell.ts +12 -6
  14. package/apis/resources/__tests__/resources-api-class.test.ts +550 -0
  15. package/apis/resources/index.ts +22 -0
  16. package/apis/resources/resources-api-class.ts +187 -0
  17. package/apis/shell/__tests__/proxy.test.ts +369 -0
  18. package/apis/shell/index.ts +8 -1
  19. package/apis/shell/modal.ts +4 -1
  20. package/apis/shell/notifications.ts +9 -6
  21. package/apis/shell/proxy.ts +256 -0
  22. package/apis/shell/slide-in.ts +4 -1
  23. package/apis/vue-shim.d.ts +2 -1
  24. package/assets/data/aws-regions.json +4 -0
  25. package/assets/fonts/lato/LatoLatin-Black.woff +0 -0
  26. package/assets/fonts/lato/LatoLatin-Black.woff2 +0 -0
  27. package/assets/fonts/lato/LatoLatin-BlackItalic.woff +0 -0
  28. package/assets/fonts/lato/LatoLatin-BlackItalic.woff2 +0 -0
  29. package/assets/fonts/lato/LatoLatin-Bold.woff +0 -0
  30. package/assets/fonts/lato/LatoLatin-Bold.woff2 +0 -0
  31. package/assets/fonts/lato/LatoLatin-BoldItalic.woff +0 -0
  32. package/assets/fonts/lato/LatoLatin-BoldItalic.woff2 +0 -0
  33. package/assets/fonts/lato/LatoLatin-Heavy.woff +0 -0
  34. package/assets/fonts/lato/LatoLatin-Heavy.woff2 +0 -0
  35. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff +0 -0
  36. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff2 +0 -0
  37. package/assets/fonts/lato/LatoLatin-Italic.woff +0 -0
  38. package/assets/fonts/lato/LatoLatin-Italic.woff2 +0 -0
  39. package/assets/fonts/lato/LatoLatin-Light.woff +0 -0
  40. package/assets/fonts/lato/LatoLatin-Light.woff2 +0 -0
  41. package/assets/fonts/lato/LatoLatin-LightItalic.woff +0 -0
  42. package/assets/fonts/lato/LatoLatin-LightItalic.woff2 +0 -0
  43. package/assets/fonts/lato/LatoLatin-Medium.woff +0 -0
  44. package/assets/fonts/lato/LatoLatin-Medium.woff2 +0 -0
  45. package/assets/fonts/lato/LatoLatin-MediumItalic.woff +0 -0
  46. package/assets/fonts/lato/LatoLatin-MediumItalic.woff2 +0 -0
  47. package/assets/fonts/lato/LatoLatin-Regular.woff +0 -0
  48. package/assets/fonts/lato/LatoLatin-Regular.woff2 +0 -0
  49. package/assets/fonts/lato/LatoLatin-Semibold.woff +0 -0
  50. package/assets/fonts/lato/LatoLatin-Semibold.woff2 +0 -0
  51. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff +0 -0
  52. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff2 +0 -0
  53. package/assets/images/providers/entraid-black.svg +4 -0
  54. package/assets/images/providers/entraid.svg +9 -0
  55. package/assets/images/vendor/entraid.svg +9 -0
  56. package/assets/styles/app.scss +0 -1
  57. package/assets/styles/base/_variables.scss +2 -0
  58. package/assets/styles/fonts/_fontstack.scss +132 -8
  59. package/assets/translations/en-us.yaml +41 -22
  60. package/assets/translations/zh-hans.yaml +4 -8
  61. package/chart/__tests__/S3.test.ts +10 -3
  62. package/chart/monitoring/index.vue +10 -1
  63. package/components/ActionDropdownShell.vue +2 -1
  64. package/components/CountBox.vue +20 -0
  65. package/components/CreateDriver.vue +0 -12
  66. package/components/CruResourceFooter.vue +9 -5
  67. package/components/DetailText.vue +12 -3
  68. package/components/ExplorerProjectsNamespaces.vue +1 -1
  69. package/components/InstallHelmCharts.vue +2 -2
  70. package/components/LandingPagePreference.vue +14 -5
  71. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +15 -1
  72. package/components/Resource/Detail/Metadata/index.vue +6 -0
  73. package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
  74. package/components/Resource/Detail/SpacedRow.vue +3 -1
  75. package/components/Resource/Detail/TitleBar/index.vue +10 -11
  76. package/components/ResourceList/Masthead.vue +12 -8
  77. package/components/SelectIconGrid.vue +5 -10
  78. package/components/SingleClusterInfo.vue +1 -0
  79. package/components/SortableTable/__tests__/sorting.test.ts +126 -0
  80. package/components/SortableTable/index.vue +6 -9
  81. package/components/SortableTable/selection.js +23 -5
  82. package/components/SortableTable/sorting.js +6 -3
  83. package/components/Wizard.vue +14 -13
  84. package/components/__tests__/CountBox.test.ts +72 -0
  85. package/components/__tests__/DetailText.test.ts +113 -0
  86. package/components/fleet/FleetBundles.vue +100 -12
  87. package/components/fleet/FleetClusterTargets/index.vue +54 -15
  88. package/components/fleet/__tests__/FleetClusterTargets.test.ts +149 -115
  89. package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
  90. package/components/form/InputWithSelect.vue +18 -10
  91. package/components/form/KeyValue.vue +17 -1
  92. package/components/form/LabeledSelect.vue +101 -26
  93. package/components/form/NameNsDescription.vue +11 -0
  94. package/components/form/Security.vue +6 -2
  95. package/components/form/Select.vue +73 -56
  96. package/components/form/ServiceNameSelect.vue +13 -11
  97. package/components/form/WorkloadPorts.vue +2 -7
  98. package/components/form/__tests__/KeyValue.test.ts +66 -0
  99. package/components/form/__tests__/NodeScheduling.test.ts +9 -0
  100. package/components/form/__tests__/Security.test.ts +76 -0
  101. package/components/form/labeled-select-utils/useLabeledSelectPagination.ts +138 -0
  102. package/components/formatter/Autoscaler.vue +4 -4
  103. package/components/formatter/ClusterKubeVersion.vue +27 -0
  104. package/components/formatter/ClusterLink.vue +1 -7
  105. package/components/formatter/ClusterProvider.vue +6 -10
  106. package/components/formatter/FleetSummaryGraph.vue +0 -3
  107. package/components/formatter/MachineSummaryGraph.vue +1 -1
  108. package/components/formatter/PodsUsage.vue +2 -2
  109. package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
  110. package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
  111. package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
  112. package/components/nav/Group.vue +7 -6
  113. package/components/nav/Header.vue +24 -3
  114. package/components/nav/NamespaceFilter.vue +2 -2
  115. package/components/nav/NotificationCenter/Notification.vue +4 -1
  116. package/components/nav/NotificationCenter/NotificationHeader.vue +20 -8
  117. package/components/nav/NotificationCenter/__tests__/NotificationHeader.test.ts +80 -0
  118. package/components/nav/TopLevelMenu.helper.ts +15 -3
  119. package/components/nav/TopLevelMenu.vue +16 -5
  120. package/components/nav/Type.vue +8 -7
  121. package/components/nav/WindowManager/index.vue +2 -1
  122. package/components/nav/WorkspaceSwitcher.vue +13 -0
  123. package/components/nav/__tests__/Group.test.ts +67 -0
  124. package/components/nav/__tests__/Header.test.ts +235 -0
  125. package/components/nav/__tests__/TopLevelMenu.test.ts +145 -21
  126. package/components/nav/__tests__/Type.test.ts +20 -3
  127. package/components/templates/default.vue +34 -4
  128. package/components/templates/home.vue +30 -25
  129. package/components/templates/plain.vue +31 -26
  130. package/components/templates/standalone.vue +17 -0
  131. package/composables/useFormValidation.ts +93 -0
  132. package/composables/useLabeledFormElement.ts +10 -2
  133. package/composables/useLabeledSelect.ts +60 -0
  134. package/composables/useUserRetentionValidation.ts +1 -49
  135. package/composables/useVeeValidateField.test.ts +159 -0
  136. package/composables/useVeeValidateField.ts +67 -0
  137. package/config/cookies.js +0 -1
  138. package/config/labels-annotations.js +1 -0
  139. package/config/pagination-table-headers.js +18 -1
  140. package/config/product/manager.js +82 -21
  141. package/config/query-params.js +1 -0
  142. package/config/router/routes.js +6 -8
  143. package/config/table-headers.js +20 -1
  144. package/config/types.js +2 -1
  145. package/core/__tests__/plugin-products.test.ts +1505 -30
  146. package/core/plugin-products-base.ts +137 -20
  147. package/core/plugin-products-helpers.ts +5 -4
  148. package/core/plugin-products.ts +4 -0
  149. package/core/plugin-types.ts +129 -4
  150. package/core/plugin.ts +15 -7
  151. package/core/productDebugger.js +9 -4
  152. package/core/types-provisioning.ts +43 -30
  153. package/core/types.ts +58 -19
  154. package/detail/__tests__/management.cattle.io.fleetworkspace.test.ts +128 -0
  155. package/detail/__tests__/pod.test.ts +41 -0
  156. package/detail/harvesterhci.io.management.cluster.vue +6 -2
  157. package/detail/management.cattle.io.fleetworkspace.vue +49 -0
  158. package/detail/pod.vue +1 -1
  159. package/detail/provisioning.cattle.io.cluster.vue +4 -10
  160. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +9 -0
  161. package/edit/__tests__/kontainerDriver.test.ts +0 -13
  162. package/edit/__tests__/nodeDriver.test.ts +5 -11
  163. package/edit/__tests__/resources.cattle.io.restore.test.ts +9 -0
  164. package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/General.test.ts.snap +6 -0
  165. package/edit/auth/__tests__/azuread.test.ts +217 -34
  166. package/edit/auth/__tests__/oidc.test.ts +54 -0
  167. package/edit/auth/azuread.vue +123 -15
  168. package/edit/auth/oidc.vue +10 -2
  169. package/edit/kontainerDriver.vue +1 -2
  170. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
  171. package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
  172. package/edit/networking.k8s.io.ingress/index.vue +75 -20
  173. package/edit/nodeDriver.vue +0 -2
  174. package/edit/provisioning.cattle.io.cluster/AgentEnv.vue +1 -0
  175. package/edit/provisioning.cattle.io.cluster/__tests__/AgentEnv.test.ts +25 -0
  176. package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
  177. package/edit/provisioning.cattle.io.cluster/index.vue +81 -106
  178. package/edit/provisioning.cattle.io.cluster/rke2.vue +8 -4
  179. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +11 -0
  180. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
  181. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
  182. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
  183. package/edit/secret/__tests__/ssh.test.ts +5 -6
  184. package/edit/secret/basic.vue +31 -0
  185. package/edit/secret/index.vue +68 -17
  186. package/edit/secret/registry.vue +38 -0
  187. package/edit/secret/ssh.vue +29 -0
  188. package/edit/secret/tls.vue +30 -0
  189. package/edit/service.vue +4 -4
  190. package/edit/workload/Upgrading.vue +3 -3
  191. package/edit/workload/__tests__/Upgrading.test.ts +6 -9
  192. package/edit/workload/mixins/workload.js +2 -1
  193. package/initialize/App.vue +29 -2
  194. package/initialize/install-plugins.js +0 -2
  195. package/list/__tests__/management.cattle.io.feature.test.ts +105 -0
  196. package/list/catalog.cattle.io.app.vue +25 -5
  197. package/list/fleet.cattle.io.bundle.vue +7 -104
  198. package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
  199. package/list/management.cattle.io.feature.vue +1 -1
  200. package/list/management.cattle.io.fleetworkspace.vue +8 -0
  201. package/list/provisioning.cattle.io.cluster.vue +262 -180
  202. package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
  203. package/machine-config/amazonec2.vue +1 -0
  204. package/mixins/__tests__/chart.test.ts +112 -0
  205. package/mixins/brand.js +2 -1
  206. package/mixins/chart.js +50 -15
  207. package/mixins/resource-fetch-api-pagination.js +41 -5
  208. package/models/__tests__/catalog.cattle.io.app.test.ts +15 -1
  209. package/models/__tests__/catalog.cattle.io.clusterrepo.test.ts +84 -0
  210. package/models/__tests__/chart.test.ts +99 -6
  211. package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
  212. package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
  213. package/models/__tests__/management.cattle.io.feature.test.ts +131 -0
  214. package/models/__tests__/management.cattle.io.node.ts +6 -5
  215. package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
  216. package/models/__tests__/monitoring.coreos.com.alertmanagerconfig.test.ts +98 -0
  217. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +32 -11
  218. package/models/base-cluster.x-k8s.io.js +26 -0
  219. package/models/catalog.cattle.io.app.js +21 -17
  220. package/models/catalog.cattle.io.clusterrepo.js +39 -11
  221. package/models/chart.js +33 -19
  222. package/models/cluster.js +1 -1
  223. package/models/cluster.x-k8s.io.machine.js +4 -22
  224. package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
  225. package/models/cluster.x-k8s.io.machineset.js +2 -20
  226. package/models/compliance.cattle.io.clusterscan.js +130 -2
  227. package/models/ext.cattle.io.kubeconfig.ts +4 -7
  228. package/models/fleet-application.js +4 -2
  229. package/models/fleet.cattle.io.bundle.js +1 -1
  230. package/models/kontainerdriver.js +11 -0
  231. package/models/management.cattle.io.authconfig.js +5 -1
  232. package/models/management.cattle.io.cluster.js +402 -78
  233. package/models/management.cattle.io.feature.js +3 -3
  234. package/models/management.cattle.io.kontainerdriver.js +1 -26
  235. package/models/management.cattle.io.node.js +6 -4
  236. package/models/management.cattle.io.nodepool.js +1 -1
  237. package/models/monitoring.coreos.com.alertmanagerconfig.js +31 -17
  238. package/models/networking.k8s.io.ingress.js +12 -4
  239. package/models/nodedriver.js +7 -0
  240. package/models/provisioning.cattle.io.cluster.js +47 -330
  241. package/models/rke.cattle.io.etcdsnapshot.js +1 -2
  242. package/package.json +20 -37
  243. package/pages/__tests__/readme.test.ts +49 -0
  244. package/pages/auth/setup.vue +2 -3
  245. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +265 -0
  246. package/pages/c/_cluster/apps/charts/__tests__/index.test.ts +55 -0
  247. package/pages/c/_cluster/apps/charts/__tests__/install.test.ts +53 -0
  248. package/pages/c/_cluster/apps/charts/chart.vue +275 -39
  249. package/pages/c/_cluster/apps/charts/index.vue +2 -2
  250. package/pages/c/_cluster/apps/charts/install.vue +18 -10
  251. package/pages/c/_cluster/auth/user.retention/index.vue +55 -22
  252. package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
  253. package/pages/c/_cluster/explorer/index.vue +5 -49
  254. package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
  255. package/pages/c/_cluster/istio/index.vue +21 -6
  256. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +5 -7
  257. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +40 -2
  258. package/pages/c/_cluster/uiplugins/__tests__/PluginInfoPanel.test.ts +61 -0
  259. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +735 -13
  260. package/pages/c/_cluster/uiplugins/index.vue +226 -222
  261. package/pages/diagnostic.vue +13 -17
  262. package/pages/fail-whale.vue +18 -0
  263. package/pages/home.vue +77 -260
  264. package/pages/readme.vue +88 -0
  265. package/plugins/dashboard-store/__tests__/resource-class.test.ts +88 -0
  266. package/plugins/dashboard-store/actions.js +40 -18
  267. package/plugins/dashboard-store/resource-class.js +5 -2
  268. package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
  269. package/plugins/steve/steve-pagination-utils.ts +11 -3
  270. package/plugins/steve/subscribe.js +35 -5
  271. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +211 -1
  272. package/rancher-components/Form/LabeledInput/LabeledInput.vue +37 -4
  273. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +1 -1
  274. package/rancher-components/RcButton/RcButton.test.ts +37 -1
  275. package/rancher-components/RcButton/RcButton.vue +38 -8
  276. package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
  277. package/scripts/test-plugins-build.sh +5 -2
  278. package/server/server-middleware.js +2 -2
  279. package/static/humans.txt +1 -0
  280. package/static/robots.txt +34 -0
  281. package/static/welcome-cow.svg +18 -0
  282. package/store/__tests__/catalog.test.ts +276 -12
  283. package/store/__tests__/type-map.test.ts +556 -1
  284. package/store/action-menu.js +8 -3
  285. package/store/auth.js +1 -4
  286. package/store/aws.js +27 -16
  287. package/store/catalog.js +87 -11
  288. package/store/digitalocean.js +20 -38
  289. package/store/index.js +2 -0
  290. package/store/linode.js +25 -40
  291. package/store/pnap.js +1 -0
  292. package/store/type-map.js +111 -29
  293. package/tsconfig.paths.json +8 -8
  294. package/types/kube/kube-api.ts +14 -1
  295. package/types/rancher/steve.api.ts +12 -12
  296. package/types/resources/settings.d.ts +2 -1
  297. package/types/shell/index.d.ts +128 -24
  298. package/types/store/dashboard-store.types.ts +108 -11
  299. package/types/store/pagination.types.ts +6 -3
  300. package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
  301. package/utils/__tests__/async.test.ts +87 -0
  302. package/utils/__tests__/aws.test.ts +140 -0
  303. package/utils/__tests__/banners.test.ts +176 -0
  304. package/utils/__tests__/chart.test.ts +64 -1
  305. package/utils/__tests__/color.test.ts +226 -0
  306. package/utils/__tests__/duration.test.ts +140 -0
  307. package/utils/__tests__/fleet.test.ts +340 -0
  308. package/utils/__tests__/git.test.ts +270 -0
  309. package/utils/__tests__/inactivity.test.ts +316 -0
  310. package/utils/__tests__/ingress.test.ts +553 -0
  311. package/utils/__tests__/kube.test.ts +68 -0
  312. package/utils/__tests__/namespace-filter.test.ts +109 -0
  313. package/utils/__tests__/object.test.ts +77 -0
  314. package/utils/__tests__/pagination-utils.test.ts +361 -0
  315. package/utils/__tests__/parse-externalid.test.ts +137 -0
  316. package/utils/__tests__/perf-setting.utils.test.ts +98 -0
  317. package/utils/__tests__/poller-sequential.test.ts +177 -0
  318. package/utils/__tests__/poller.test.ts +170 -0
  319. package/utils/__tests__/promise.test.ts +346 -0
  320. package/utils/__tests__/settings.test.ts +140 -0
  321. package/utils/__tests__/sort-utils.test.ts +301 -0
  322. package/utils/__tests__/string-utils.test.ts +798 -0
  323. package/utils/__tests__/string.test.ts +23 -1
  324. package/utils/__tests__/style.test.ts +154 -0
  325. package/utils/__tests__/svg-filter.test.ts +184 -0
  326. package/utils/__tests__/time.test.ts +14 -1
  327. package/utils/__tests__/units.test.ts +417 -0
  328. package/utils/__tests__/url.test.ts +246 -0
  329. package/utils/__tests__/versions.test.ts +128 -0
  330. package/utils/__tests__/xccdf.test.ts +391 -0
  331. package/utils/chart.js +36 -0
  332. package/utils/fleet.ts +13 -3
  333. package/utils/gatekeeper/__tests__/util.test.ts +174 -0
  334. package/utils/gc/__tests__/gc-interval.test.ts +119 -0
  335. package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
  336. package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
  337. package/utils/gc/__tests__/gc.test.ts +487 -0
  338. package/utils/ingress.ts +9 -1
  339. package/utils/object.js +33 -2
  340. package/utils/pagination-utils.ts +2 -1
  341. package/utils/string.js +25 -2
  342. package/utils/time.ts +5 -0
  343. package/utils/uiplugins.ts +5 -5
  344. package/utils/validators/__tests__/cluster-name.test.ts +110 -0
  345. package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
  346. package/utils/validators/__tests__/index.test.ts +481 -0
  347. package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
  348. package/utils/validators/__tests__/misc-validators.test.ts +246 -0
  349. package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
  350. package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
  351. package/utils/validators/__tests__/role-template.test.ts +149 -0
  352. package/utils/validators/__tests__/service.test.ts +283 -0
  353. package/utils/validators/__tests__/setting.test.js +32 -0
  354. package/utils/validators/formRules/__tests__/index.test.ts +50 -0
  355. package/utils/validators/formRules/index.ts +5 -5
  356. package/utils/validators/machine-pool.ts +1 -1
  357. package/utils/validators/setting.js +18 -3
  358. package/utils/xccdf.ts +418 -0
  359. package/vue.config.js +0 -9
  360. package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
  361. package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
  362. package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
  363. package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
  364. package/assets/images/providers/azuread-black.svg +0 -22
  365. package/assets/images/providers/azuread.svg +0 -25
  366. package/assets/images/vendor/azuread.svg +0 -18
  367. package/assets/styles/fonts/_dots.scss +0 -18
  368. package/components/EmberPage.vue +0 -622
  369. package/components/EmberPageView.vue +0 -39
  370. package/components/form/labeled-select-utils/labeled-select-pagination.ts +0 -116
  371. package/mixins/labeled-form-element.ts +0 -225
  372. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -28
  373. package/pages/c/_cluster/manager/pages/_page.vue +0 -22
  374. package/pages/c/_cluster/mcapps/pages/_page.vue +0 -22
  375. package/plugins/ember-cookie.js +0 -17
  376. package/utils/ember-page.js +0 -30
@@ -90,36 +90,36 @@ describe('component: FleetClusters', () => {
90
90
  const wrapper = createWrapper();
91
91
  const reposReady = wrapper.vm.headers.find((h: any) => h.name === 'reposReady');
92
92
 
93
- expect(reposReady.labelKey).toBe('tableHeaders.reposReady');
94
- expect(reposReady.value).toBe('status.readyGitRepos');
95
- expect(reposReady.search).toBe(false);
93
+ expect(reposReady?.labelKey).toBe('tableHeaders.reposReady');
94
+ expect(reposReady?.value).toBe('status.readyGitRepos');
95
+ expect(reposReady?.search).toBe(false);
96
96
  });
97
97
 
98
98
  it('should configure helmOpsReady column correctly', () => {
99
99
  const wrapper = createWrapper();
100
100
  const helmOpsReady = wrapper.vm.headers.find((h: any) => h.name === 'helmOpsReady');
101
101
 
102
- expect(helmOpsReady.labelKey).toBe('tableHeaders.helmOpsReady');
103
- expect(helmOpsReady.value).toBe('status.readyHelmOps');
104
- expect(helmOpsReady.search).toBe(false);
102
+ expect(helmOpsReady?.labelKey).toBe('tableHeaders.helmOpsReady');
103
+ expect(helmOpsReady?.value).toBe('status.readyHelmOps');
104
+ expect(helmOpsReady?.search).toBe(false);
105
105
  });
106
106
 
107
107
  it('should configure bundlesReady column correctly', () => {
108
108
  const wrapper = createWrapper();
109
109
  const bundlesReady = wrapper.vm.headers.find((h: any) => h.name === 'bundlesReady');
110
110
 
111
- expect(bundlesReady.labelKey).toBe('tableHeaders.bundlesReady');
112
- expect(bundlesReady.value).toBe('status.display.readyBundles');
113
- expect(bundlesReady.search).toBe(false);
111
+ expect(bundlesReady?.labelKey).toBe('tableHeaders.bundlesReady');
112
+ expect(bundlesReady?.value).toBe('status.display.readyBundles');
113
+ expect(bundlesReady?.search).toBe(false);
114
114
  });
115
115
 
116
116
  it('should configure lastSeen column with LiveDate formatter', () => {
117
117
  const wrapper = createWrapper();
118
118
  const lastSeen = wrapper.vm.headers.find((h: any) => h.name === 'lastSeen');
119
119
 
120
- expect(lastSeen.formatter).toBe('LiveDate');
121
- expect(lastSeen.formatterOpts).toStrictEqual({ addSuffix: true });
122
- expect(lastSeen.width).toBe(120);
120
+ expect(lastSeen?.formatter).toBe('LiveDate');
121
+ expect(lastSeen?.formatterOpts).toStrictEqual({ addSuffix: true });
122
+ expect(lastSeen?.width).toBe(120);
123
123
  });
124
124
  });
125
125
 
@@ -1,18 +1,22 @@
1
1
  <script>
2
- import labeledFormElement from '@shell/mixins/labeled-form-element';
3
2
  import { LabeledInput } from '@components/Form/LabeledInput';
4
3
  import LabeledSelect from '@shell/components/form/LabeledSelect';
5
4
  import Select from '@shell/components/form/Select';
5
+ import { computed } from 'vue';
6
+ import { _VIEW, _EDIT } from '@shell/config/query-params';
7
+
6
8
  export default {
7
- name: 'InputWithSelect',
9
+ name: 'InputWithSelect',
10
+
11
+ inheritAttrs: false,
12
+
8
13
  emits: ['update:value'],
9
14
  components: {
10
15
  LabeledInput,
11
16
  LabeledSelect,
12
17
  Select,
13
18
  },
14
- mixins: [labeledFormElement],
15
- props: {
19
+ props: {
16
20
  disabled: {
17
21
  type: Boolean,
18
22
  default: false,
@@ -84,10 +88,20 @@ export default {
84
88
  selectRules: {
85
89
  default: () => [],
86
90
  type: Array,
91
+ },
92
+ mode: {
93
+ type: String,
94
+ default: _EDIT,
87
95
  }
88
96
 
89
97
  },
90
98
 
99
+ setup(props) {
100
+ const isView = computed(() => props.mode === _VIEW);
101
+
102
+ return { isView };
103
+ },
104
+
91
105
  data() {
92
106
  return {
93
107
  selected: this.selectValue || this.options[0].value,
@@ -95,12 +109,6 @@ export default {
95
109
  };
96
110
  },
97
111
 
98
- computed: {
99
- canPaginate() {
100
- return false;
101
- }
102
- },
103
-
104
112
  methods: {
105
113
  focus() {
106
114
  const comp = this.$refs.text;
@@ -778,11 +778,16 @@ export default {
778
778
  @onInput="onInputMarkdownMultiline(i, $event)"
779
779
  @onFocus="onFocusMarkdownMultiline(i, $event)"
780
780
  />
781
+ <div
782
+ v-else-if="valueConcealed"
783
+ class="concealed-value conceal"
784
+ data-testid="concealed-value"
785
+ :aria-label="t('generic.ariaLabel.value', {index: i+1})"
786
+ />
781
787
  <TextAreaAutoGrow
782
788
  v-else-if="valueMultiline && row[valueName] !== undefined"
783
789
  v-model:value="row[valueName]"
784
790
  data-testid="value-multiline"
785
- :class="{'conceal': valueConcealed}"
786
791
  :disabled="disabled"
787
792
  :mode="mode"
788
793
  :placeholder="_valuePlaceholder"
@@ -809,6 +814,7 @@ export default {
809
814
  class="btn btn-sm role-secondary file-selector"
810
815
  :label="t('generic.upload')"
811
816
  :include-file-name="true"
817
+ :accept="readAccept"
812
818
  :aria-label="t('generic.ariaLabel.value', {index: i+1})"
813
819
  @selected="onValueFileSelected(i, $event)"
814
820
  />
@@ -896,6 +902,7 @@ export default {
896
902
  class="role-tertiary"
897
903
  :label="t('generic.readFromFile')"
898
904
  :include-file-name="true"
905
+ :accept="readAccept"
899
906
  data-testid="read_all_key_value_button"
900
907
  @selected="onFileSelected"
901
908
  />
@@ -941,6 +948,15 @@ export default {
941
948
  padding: 10px 10px 10px 10px;
942
949
  }
943
950
 
951
+ .concealed-value {
952
+ padding: 10px;
953
+ min-height: 40px;
954
+ user-select: none;
955
+ &::before {
956
+ content: '••••••••••••••••••••';
957
+ }
958
+ }
959
+
944
960
  .text-monospace:not(.conceal) {
945
961
  font-family: monospace, monospace;
946
962
  }
@@ -1,17 +1,19 @@
1
1
  <script>
2
2
  import CompactInput from '@shell/mixins/compact-input';
3
- import LabeledFormElement from '@shell/mixins/labeled-form-element';
4
3
  import { get } from '@shell/utils/object';
5
4
  import { LabeledTooltip } from '@components/LabeledTooltip';
6
5
  import VueSelectOverrides from '@shell/mixins/vue-select-overrides';
7
6
  import { calculatePosition } from '@shell/utils/select';
8
7
  import { generateRandomAlphaString } from '@shell/utils/string';
9
- import LabeledSelectPagination from '@shell/components/form/labeled-select-utils/labeled-select-pagination';
8
+ import { useLabeledSelectPagination, labeledSelectPaginationProps } from '@shell/components/form/labeled-select-utils/useLabeledSelectPagination';
10
9
  import { LABEL_SELECT_NOT_OPTION_KINDS } from '@shell/types/components/labeledSelect';
11
10
  import { mapGetters } from 'vuex';
12
11
  import { _VIEW } from '@shell/config/query-params';
13
12
  import { useClickOutside } from '@shell/composables/useClickOutside';
14
- import { ref } from 'vue';
13
+ import { useLabeledFormElement, labeledFormElementProps } from '@shell/composables/useLabeledFormElement';
14
+ import { useLabeledSelect } from '@shell/composables/useLabeledSelect';
15
+ import { ref, toRef } from 'vue';
16
+ import { useVeeValidateField } from '@shell/composables/useVeeValidateField';
15
17
 
16
18
  export default {
17
19
  name: 'LabeledSelect',
@@ -21,14 +23,18 @@ export default {
21
23
  components: { LabeledTooltip },
22
24
  mixins: [
23
25
  CompactInput,
24
- LabeledFormElement,
25
26
  VueSelectOverrides,
26
- LabeledSelectPagination
27
27
  ],
28
28
 
29
- emits: ['on-open', 'on-close', 'selecting', 'deselecting', 'search', 'update:validation', 'update:value'],
29
+ emits: ['on-open', 'on-close', 'on-focus', 'on-blur', 'selecting', 'deselecting', 'search', 'update:validation', 'update:value'],
30
30
 
31
31
  props: {
32
+ ...labeledFormElementProps,
33
+ ...labeledSelectPaginationProps,
34
+ value: {
35
+ default: null,
36
+ type: [String, Object, Number, Array, Boolean]
37
+ },
32
38
  appendToBody: {
33
39
  default: true,
34
40
  type: Boolean,
@@ -37,14 +43,6 @@ export default {
37
43
  default: false,
38
44
  type: Boolean
39
45
  },
40
- disabled: {
41
- default: false,
42
- type: Boolean
43
- },
44
- required: {
45
- default: false,
46
- type: Boolean
47
- },
48
46
  hoverTooltip: {
49
47
  default: true,
50
48
  type: Boolean
@@ -99,14 +97,18 @@ export default {
99
97
  default: null,
100
98
  type: [String, Object]
101
99
  },
102
- value: {
103
- default: null,
104
- type: [String, Object, Number, Array, Boolean]
105
- },
106
100
  options: {
107
101
  type: Array,
108
102
  default: () => ([])
109
103
  },
104
+ searchable: {
105
+ default: false,
106
+ type: Boolean
107
+ },
108
+ filterable: {
109
+ default: true,
110
+ type: Boolean
111
+ },
110
112
  closeOnSelect: {
111
113
  type: Boolean,
112
114
  default: true
@@ -114,10 +116,15 @@ export default {
114
116
  noOptionsLabelKey: {
115
117
  type: String,
116
118
  default: 'labelSelect.noOptions.empty'
119
+ },
120
+
121
+ name: {
122
+ type: String,
123
+ default: null
117
124
  }
118
125
  },
119
126
 
120
- setup() {
127
+ setup(props, { emit }) {
121
128
  const select = ref(null);
122
129
  const isOpen = ref(false);
123
130
 
@@ -125,7 +132,76 @@ export default {
125
132
  isOpen.value = false;
126
133
  });
127
134
 
128
- return { isOpen, select };
135
+ const {
136
+ raised,
137
+ focused,
138
+ blurred,
139
+ empty,
140
+ isView,
141
+ onFocusLabeled,
142
+ onBlurLabeled,
143
+ isDisabled,
144
+ validationMessage,
145
+ requiredField
146
+ } = useLabeledFormElement(props, emit);
147
+
148
+ const {
149
+ canPaginate,
150
+ canLoadMore,
151
+ optionCounts,
152
+ _options,
153
+ pages,
154
+ totalResults,
155
+ paginating,
156
+ loadMore,
157
+ setPaginationFilter,
158
+ } = useLabeledSelectPagination(props);
159
+
160
+ const {
161
+ isSearchable,
162
+ isFilterable,
163
+ resizeHandler: resizeHandlerFn
164
+ } = useLabeledSelect(props, canPaginate);
165
+
166
+ const resizeHandler = () => {
167
+ resizeHandlerFn(select);
168
+ };
169
+
170
+ const { effectiveValidationMessage, veeHandleBlur, veeValidate } = useVeeValidateField({
171
+ name: toRef(props, 'name'),
172
+ rules: toRef(props, 'rules'),
173
+ value: toRef(props, 'value'),
174
+ validationMessage,
175
+ });
176
+
177
+ return {
178
+ isOpen,
179
+ select,
180
+ raised,
181
+ focused,
182
+ blurred,
183
+ empty,
184
+ isView,
185
+ onFocusLabeled,
186
+ onBlurLabeled,
187
+ isDisabled,
188
+ validationMessage: effectiveValidationMessage,
189
+ requiredField,
190
+ isSearchable,
191
+ isFilterable,
192
+ resizeHandler,
193
+ canPaginate,
194
+ canLoadMore,
195
+ optionCounts,
196
+ _options,
197
+ pages,
198
+ totalResults,
199
+ paginating,
200
+ loadMore,
201
+ setPaginationFilter,
202
+ veeHandleBlur,
203
+ veeValidate,
204
+ };
129
205
  },
130
206
 
131
207
  data() {
@@ -148,11 +224,6 @@ export default {
148
224
  return this.canPaginate ? !!this._options.find((o) => o.kind === 'group' && !!o.icon) : false;
149
225
  },
150
226
 
151
- _options() {
152
- // If we're paginated show the page as provided by `paginate`. See label-select-pagination mixin
153
- return this.canPaginate ? this.page : this.options;
154
- },
155
-
156
227
  filteredAttrs() {
157
228
  const {
158
229
  class: _class,
@@ -165,7 +236,7 @@ export default {
165
236
  // update placeholder text to inform user they can add their own opts when none are found
166
237
  showTagPrompts() {
167
238
  return !this.options.length && this.$attrs.taggable && this.isSearchable;
168
- }
239
+ },
169
240
  },
170
241
 
171
242
  methods: {
@@ -207,13 +278,17 @@ export default {
207
278
  },
208
279
 
209
280
  onFocus() {
281
+ this.$emit('on-focus');
210
282
  this.selectedVisibility = 'hidden';
211
283
  this.onFocusLabeled();
212
284
  },
213
285
 
214
286
  onBlur() {
287
+ this.$emit('on-blur');
215
288
  this.selectedVisibility = 'visible';
216
289
  this.onBlurLabeled();
290
+ this.veeHandleBlur(undefined, false);
291
+ this.veeValidate();
217
292
  },
218
293
 
219
294
  onOpen() {
@@ -164,6 +164,14 @@ export default {
164
164
  }),
165
165
  type: Object,
166
166
  },
167
+ nameFieldName: {
168
+ type: String,
169
+ default: null,
170
+ },
171
+ namespaceFieldName: {
172
+ type: String,
173
+ default: null,
174
+ },
167
175
 
168
176
  /**
169
177
  * Inherited global identifier prefix for tests
@@ -438,6 +446,7 @@ export default {
438
446
  <LabeledInput
439
447
  ref="namespaceInput"
440
448
  v-model:value="namespace"
449
+ :name="namespaceFieldName"
441
450
  :label="t('namespace.label')"
442
451
  :placeholder="t('namespace.createNamespace')"
443
452
  :disabled="namespaceReallyDisabled"
@@ -464,6 +473,7 @@ export default {
464
473
  <LabeledSelect
465
474
  v-show="!createNamespace"
466
475
  v-model:value="namespace"
476
+ :name="namespaceFieldName"
467
477
  :clearable="true"
468
478
  :options="options"
469
479
  :disabled="namespaceReallyDisabled"
@@ -487,6 +497,7 @@ export default {
487
497
  ref="nameInput"
488
498
  key="name"
489
499
  v-model:value="name"
500
+ :name="nameFieldName"
490
501
  data-testid="NameNsDescriptionNameInput"
491
502
  :label="t(nameLabel)"
492
503
  :placeholder="t(namePlaceholder)"
@@ -140,11 +140,12 @@ export default {
140
140
  this.afterPrivilegedTickedMessage = this.t('workload.container.security.privileged.afterTick.false');
141
141
  }
142
142
 
143
- if (securityContext.fsGroup === '') {
143
+ // Drop empty values so we don't send a string for int64 fields.
144
+ if (securityContext.fsGroup === '' || securityContext.fsGroup === null || securityContext.fsGroup === undefined) {
144
145
  delete securityContext.fsGroup;
145
146
  }
146
147
 
147
- if (securityContext.runAsUser === '') {
148
+ if (securityContext.runAsUser === '' || securityContext.runAsUser === null || securityContext.runAsUser === undefined) {
148
149
  delete securityContext.runAsUser;
149
150
  }
150
151
 
@@ -175,6 +176,7 @@ export default {
175
176
  ref="firstFocusable"
176
177
  v-model:value.number="securityContext.fsGroup"
177
178
  type="number"
179
+ min="0"
178
180
  :mode="mode"
179
181
  :label="t('workload.container.security.fsGroup')"
180
182
  @update:value="update"
@@ -283,6 +285,8 @@ export default {
283
285
  </legend>
284
286
  <LabeledInput
285
287
  v-model:value.number="securityContext.runAsUser"
288
+ type="number"
289
+ min="0"
286
290
  :label="t('workload.container.security.runAsUser.label')"
287
291
  :mode="mode"
288
292
  @update:value="update"
@@ -1,39 +1,38 @@
1
1
  <script>
2
2
  import { get } from '@shell/utils/object';
3
- import LabeledFormElement from '@shell/mixins/labeled-form-element';
4
3
  import VueSelectOverrides from '@shell/mixins/vue-select-overrides';
5
4
  import { generateRandomAlphaString } from '@shell/utils/string';
6
5
  import { LabeledTooltip } from '@components/LabeledTooltip';
7
6
  import { calculatePosition } from '@shell/utils/select';
8
7
  import { _VIEW } from '@shell/config/query-params';
9
8
  import { useClickOutside } from '@shell/composables/useClickOutside';
9
+ import { useLabeledFormElement, labeledFormElementProps } from '@shell/composables/useLabeledFormElement';
10
+ import { useLabeledSelect } from '@shell/composables/useLabeledSelect';
10
11
  import { ref } from 'vue';
11
12
 
12
13
  export default {
13
- emits: ['update:value', 'createdListItem', 'on-open', 'on-close'],
14
+ inheritAttrs: false,
15
+
16
+ emits: ['update:value', 'createdListItem', 'on-open', 'on-close', 'on-focus', 'on-blur', 'update:validation'],
14
17
 
15
18
  components: { LabeledTooltip },
16
19
  mixins: [
17
- LabeledFormElement,
18
20
  VueSelectOverrides,
19
21
  ],
20
22
  props: {
23
+ ...labeledFormElementProps,
24
+ value: {
25
+ default: null,
26
+ type: [String, Object, Number, Array, Boolean],
27
+ },
21
28
  appendToBody: {
22
29
  default: true,
23
30
  type: Boolean,
24
31
  },
25
- disabled: {
26
- default: false,
27
- type: Boolean,
28
- },
29
32
  getKeyForOption: {
30
33
  default: null,
31
34
  type: Function
32
35
  },
33
- mode: {
34
- default: 'edit',
35
- type: String,
36
- },
37
36
  optionKey: {
38
37
  default: null,
39
38
  type: String,
@@ -46,10 +45,6 @@ export default {
46
45
  default: null,
47
46
  type: String,
48
47
  },
49
- placeholder: {
50
- type: String,
51
- default: '',
52
- },
53
48
  popperOverride: {
54
49
  type: Function,
55
50
  default: null,
@@ -78,10 +73,6 @@ export default {
78
73
  type: String,
79
74
  default: null,
80
75
  },
81
- value: {
82
- default: null,
83
- type: [String, Object, Number, Array, Boolean],
84
- },
85
76
  closeOnSelect: {
86
77
  type: Boolean,
87
78
  default: true,
@@ -99,8 +90,20 @@ export default {
99
90
  default: false,
100
91
  type: Boolean
101
92
  },
93
+ options: {
94
+ type: Array,
95
+ default: () => ([])
96
+ },
97
+ searchable: {
98
+ default: false,
99
+ type: Boolean
100
+ },
101
+ filterable: {
102
+ default: true,
103
+ type: Boolean
104
+ },
102
105
  },
103
- setup() {
106
+ setup(props, { emit }) {
104
107
  const select = ref(null);
105
108
  const isOpen = ref(false);
106
109
 
@@ -108,13 +111,61 @@ export default {
108
111
  isOpen.value = false;
109
112
  });
110
113
 
111
- return { isOpen, select };
114
+ const {
115
+ raised,
116
+ focused,
117
+ blurred,
118
+ empty,
119
+ isView,
120
+ onFocusLabeled,
121
+ onBlurLabeled,
122
+ isDisabled,
123
+ validationMessage,
124
+ requiredField
125
+ } = useLabeledFormElement(props, emit);
126
+
127
+ const onFocus = () => {
128
+ emit('on-focus');
129
+ onFocusLabeled();
130
+ };
131
+
132
+ const onBlur = () => {
133
+ emit('on-blur');
134
+ onBlurLabeled();
135
+ };
136
+
137
+ const {
138
+ isSearchable,
139
+ isFilterable,
140
+ resizeHandler: resizeHandlerFn
141
+ } = useLabeledSelect(props);
142
+
143
+ const resizeHandler = () => {
144
+ resizeHandlerFn(select);
145
+ };
146
+
147
+ return {
148
+ isOpen,
149
+ select,
150
+ raised,
151
+ focused,
152
+ blurred,
153
+ empty,
154
+ isView,
155
+ onFocus,
156
+ onBlur,
157
+ isDisabled,
158
+ validationMessage,
159
+ requiredField,
160
+ isSearchable,
161
+ isFilterable,
162
+ resizeHandler
163
+ };
112
164
  },
113
165
  data() {
114
166
  return { generatedUid: `s-uid-${ generateRandomAlphaString(12) }` };
115
167
  },
116
168
  methods: {
117
- // resizeHandler = in mixin
118
169
  getOptionLabel(option) {
119
170
  if (this.$attrs['get-option-label']) {
120
171
  return this.$attrs['get-option-label'](option);
@@ -252,40 +303,6 @@ export default {
252
303
  },
253
304
  },
254
305
  computed: {
255
- requiredField() {
256
- // using "any" for a type on "rule" here is dirty but the use of the optional chaining operator makes it safe for what we're doing here.
257
- return (this.required || this.rules.some((rule) => rule?.name === 'required'));
258
- },
259
- validationMessage() {
260
- // we want to grab the required rule passed in if we can but if it's not there then we can just grab it from the formRulesGenerator
261
- const requiredRule = this.rules.find((rule) => rule?.name === 'required');
262
- const ruleMessages = [];
263
- const value = this?.value;
264
-
265
- if (requiredRule && this.blurred && !this.focused) {
266
- const message = requiredRule(value);
267
-
268
- if (!!message) {
269
- return message;
270
- }
271
- }
272
-
273
- for (const rule of this.rules) {
274
- const message = rule(value);
275
-
276
- if (!!message && rule.name !== 'required') { // we're catching 'required' above so we can ignore it here
277
- ruleMessages.push(message);
278
- }
279
- }
280
- if (ruleMessages.length > 0 && (this.blurred || this.focused)) {
281
- return ruleMessages.join(', ');
282
- } else {
283
- return undefined;
284
- }
285
- },
286
- canPaginate() {
287
- return false;
288
- },
289
306
  deClassedAttrs() {
290
307
  const { class: _, ...rest } = this.$attrs;
291
308
 
@@ -1,16 +1,16 @@
1
1
  <script>
2
- import labeledFormElement from '@shell/mixins/labeled-form-element';
3
2
  import LabeledSelect from '@shell/components/form/LabeledSelect';
4
3
  import { Banner } from '@components/Banner';
5
4
  import { _VIEW } from '@shell/config/query-params';
5
+ import { computed } from 'vue';
6
6
 
7
7
  export default {
8
+ inheritAttrs: false,
9
+
8
10
  emits: ['update:value'],
9
11
 
10
12
  components: { LabeledSelect, Banner },
11
13
 
12
- mixins: [labeledFormElement],
13
-
14
14
  props: {
15
15
  disabled: {
16
16
  type: Boolean,
@@ -66,6 +66,16 @@ export default {
66
66
  type: Boolean,
67
67
  default: false,
68
68
  },
69
+ value: {
70
+ type: String,
71
+ default: null
72
+ }
73
+ },
74
+
75
+ setup(props) {
76
+ const isView = computed(() => props.mode === _VIEW);
77
+
78
+ return { isView };
69
79
  },
70
80
 
71
81
  data() {
@@ -73,10 +83,6 @@ export default {
73
83
  },
74
84
 
75
85
  computed: {
76
- isView() {
77
- return this.mode === _VIEW;
78
- },
79
-
80
86
  serviceNameNew() {
81
87
  if (!this.selected) {
82
88
  return false;
@@ -88,10 +94,6 @@ export default {
88
94
  serviceName() {
89
95
  return this.reduce(this.selected);
90
96
  },
91
-
92
- canPaginate() {
93
- return false;
94
- },
95
97
  },
96
98
 
97
99
  methods: {