@rancher/shell 3.0.4 → 3.0.5-rc.2

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 (270) hide show
  1. package/assets/images/providers/sks.svg +1 -0
  2. package/assets/styles/base/_basic.scss +6 -0
  3. package/assets/styles/base/_helpers.scss +4 -0
  4. package/assets/styles/base/_variables.scss +1 -0
  5. package/assets/styles/global/_button.scss +1 -0
  6. package/assets/translations/en-us.yaml +65 -15
  7. package/assets/translations/zh-hans.yaml +4 -3
  8. package/chart/monitoring/index.vue +3 -1
  9. package/cloud-credential/aws.vue +2 -0
  10. package/components/ActionDropdownShell.vue +71 -0
  11. package/components/AppModal.vue +18 -4
  12. package/components/AsyncButton.vue +24 -7
  13. package/components/BannerGraphic.vue +1 -0
  14. package/components/CommunityLinks.vue +4 -59
  15. package/components/CopyToClipboardText.vue +2 -1
  16. package/components/CruResource.vue +6 -1
  17. package/components/DetailText.vue +5 -0
  18. package/components/ExplorerMembers.vue +1 -1
  19. package/components/ExplorerProjectsNamespaces.vue +68 -18
  20. package/components/GlobalRoleBindings.vue +5 -1
  21. package/components/GrowlManager.vue +1 -0
  22. package/components/LandingPagePreference.vue +7 -3
  23. package/components/LocaleSelector.vue +39 -95
  24. package/components/ModalManager.vue +55 -0
  25. package/components/ModalWithCard.vue +1 -0
  26. package/components/PromptModal.vue +47 -8
  27. package/components/PromptRemove.vue +1 -0
  28. package/components/PromptRestore.vue +1 -0
  29. package/components/ResourceCancelModal.vue +1 -0
  30. package/components/ResourceDetail/Masthead.vue +38 -12
  31. package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
  32. package/components/ResourceDetail/index.vue +47 -12
  33. package/components/ResourceTable.vue +54 -19
  34. package/components/SideNav.vue +5 -1
  35. package/components/SlideInPanelManager.vue +126 -0
  36. package/components/SortableTable/THead.vue +5 -2
  37. package/components/SortableTable/actions.js +1 -1
  38. package/components/SortableTable/index.vue +64 -51
  39. package/components/SortableTable/paging.js +16 -19
  40. package/components/SortableTable/selection.js +0 -11
  41. package/components/Wizard.vue +2 -2
  42. package/components/__tests__/AsyncButton.test.ts +2 -2
  43. package/components/__tests__/ModalManager.spec.ts +176 -0
  44. package/components/__tests__/PromptModal.test.ts +148 -0
  45. package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
  46. package/components/auth/AuthBanner.vue +13 -11
  47. package/components/auth/Principal.vue +1 -0
  48. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  49. package/components/auth/login/ldap.vue +1 -1
  50. package/components/fleet/FleetResources.vue +21 -6
  51. package/components/form/ArrayList.vue +76 -60
  52. package/components/form/BannerSettings.vue +17 -2
  53. package/components/form/ColorInput.vue +35 -6
  54. package/components/form/Command.vue +6 -15
  55. package/components/form/EnvVars.vue +16 -8
  56. package/components/form/HealthCheck.vue +3 -3
  57. package/components/form/HookOption.vue +11 -16
  58. package/components/form/LabeledSelect.vue +18 -22
  59. package/components/form/LifecycleHooks.vue +3 -3
  60. package/components/form/MatchExpressions.vue +14 -8
  61. package/components/form/NameNsDescription.vue +128 -104
  62. package/components/form/Networking.vue +20 -12
  63. package/components/form/NodeAffinity.vue +31 -23
  64. package/components/form/NodeScheduling.vue +13 -3
  65. package/components/form/NotificationSettings.vue +15 -1
  66. package/components/form/Password.vue +1 -0
  67. package/components/form/PodAffinity.vue +43 -43
  68. package/components/form/Probe.vue +68 -66
  69. package/components/form/ResourceQuota/Project.vue +5 -1
  70. package/components/form/ResourceSelector.vue +7 -9
  71. package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +16 -24
  72. package/components/form/SSHKnownHosts/index.vue +30 -13
  73. package/components/form/Security.vue +54 -56
  74. package/components/form/Select.vue +32 -21
  75. package/components/form/ShellInput.vue +5 -1
  76. package/components/form/Tolerations.vue +5 -1
  77. package/components/form/ValueFromResource.vue +134 -121
  78. package/components/form/WorkloadPorts.vue +18 -18
  79. package/components/form/__tests__/ArrayList.test.ts +5 -2
  80. package/components/form/__tests__/ColorInput.test.ts +35 -0
  81. package/components/form/__tests__/LabeledSelect.test.ts +40 -0
  82. package/components/form/__tests__/MatchExpressions.test.ts +12 -12
  83. package/components/form/__tests__/NameNsDescription.test.ts +115 -14
  84. package/components/form/__tests__/Probe.test.ts +12 -8
  85. package/components/form/__tests__/SSHKnownHosts.test.ts +22 -2
  86. package/components/form/__tests__/Select.test.ts +37 -0
  87. package/components/formatter/InternalExternalIP.vue +2 -0
  88. package/components/formatter/SecretData.vue +20 -7
  89. package/components/nav/Group.vue +27 -5
  90. package/components/nav/Header.vue +17 -43
  91. package/components/nav/NamespaceFilter.vue +134 -86
  92. package/components/nav/TopLevelMenu.vue +4 -5
  93. package/components/nav/Type.vue +12 -1
  94. package/components/nav/WindowManager/ContainerLogs.vue +87 -61
  95. package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
  96. package/components/templates/blank.vue +4 -1
  97. package/components/templates/default.vue +8 -3
  98. package/components/templates/home.vue +10 -1
  99. package/components/templates/plain.vue +10 -4
  100. package/composables/focusTrap.ts +12 -4
  101. package/composables/useRuntimeFlag.ts +29 -0
  102. package/config/router/routes.js +20 -13
  103. package/config/store.js +4 -0
  104. package/config/uiplugins.js +5 -1
  105. package/core/types.ts +12 -6
  106. package/detail/catalog.cattle.io.app.vue +6 -1
  107. package/detail/fleet.cattle.io.bundle.vue +70 -6
  108. package/detail/fleet.cattle.io.gitrepo.vue +1 -1
  109. package/detail/namespace.vue +0 -3
  110. package/detail/node.vue +17 -13
  111. package/detail/provisioning.cattle.io.cluster.vue +72 -6
  112. package/dialog/AddCustomBadgeDialog.vue +1 -1
  113. package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
  114. package/{components/AssignTo.vue → dialog/AssignToDialog.vue} +71 -80
  115. package/dialog/ChangePasswordDialog.vue +106 -0
  116. package/dialog/DeactivateDriverDialog.vue +1 -0
  117. package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
  118. package/dialog/DisableAuthProviderDialog.vue +101 -0
  119. package/dialog/DrainNode.vue +1 -1
  120. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
  121. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +69 -57
  122. package/dialog/FeatureFlagListDialog.vue +288 -0
  123. package/dialog/ForceMachineRemoveDialog.vue +5 -2
  124. package/{components/Import.vue → dialog/ImportDialog.vue} +0 -5
  125. package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
  126. package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -59
  127. package/dialog/MoveNamespaceDialog.vue +157 -0
  128. package/dialog/ScalePoolDownDialog.vue +1 -1
  129. package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
  130. package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
  131. package/dialog/WechatDialog.vue +57 -0
  132. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +16 -3
  133. package/edit/auth/__tests__/oidc.test.ts +152 -109
  134. package/edit/auth/azuread.vue +2 -1
  135. package/edit/auth/github.vue +1 -1
  136. package/edit/auth/googleoauth.vue +5 -1
  137. package/edit/auth/ldap/index.vue +1 -1
  138. package/edit/auth/oidc.vue +38 -5
  139. package/edit/auth/saml.vue +1 -1
  140. package/edit/cloudcredential.vue +24 -9
  141. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +40 -9
  142. package/edit/management.cattle.io.user.vue +28 -3
  143. package/edit/namespace.vue +1 -4
  144. package/edit/networking.k8s.io.ingress/IngressClass.vue +7 -3
  145. package/edit/networking.k8s.io.ingress/__tests__/IngressClass.test.ts +58 -0
  146. package/edit/persistentvolume/__tests__/persistentvolume.test.ts +14 -2
  147. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
  148. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -9
  149. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -8
  150. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
  151. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +66 -0
  152. package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
  153. package/edit/provisioning.cattle.io.cluster/rke2.vue +49 -41
  154. package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +6 -1
  155. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
  156. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +33 -2
  157. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +2 -2
  158. package/edit/token.vue +2 -0
  159. package/edit/workload/index.vue +1 -0
  160. package/edit/workload/mixins/workload.js +0 -2
  161. package/initialize/install-plugins.js +2 -1
  162. package/list/harvesterhci.io.management.cluster.vue +4 -1
  163. package/list/management.cattle.io.feature.vue +4 -287
  164. package/list/provisioning.cattle.io.cluster.vue +20 -12
  165. package/machine-config/azure.vue +16 -4
  166. package/mixins/vue-select-overrides.js +0 -4
  167. package/models/__tests__/namespace.test.ts +25 -1
  168. package/models/cloudcredential.js +5 -0
  169. package/models/fleet.cattle.io.cluster.js +8 -2
  170. package/models/fleet.cattle.io.gitrepo.js +8 -34
  171. package/models/kontainerdriver.js +6 -3
  172. package/models/management.cattle.io.feature.js +7 -1
  173. package/models/management.cattle.io.node.js +3 -3
  174. package/models/namespace.js +11 -6
  175. package/models/nodedriver.js +6 -3
  176. package/models/workload.js +4 -1
  177. package/package.json +3 -3
  178. package/pages/about.vue +13 -3
  179. package/pages/account/index.vue +16 -6
  180. package/pages/auth/login.vue +18 -7
  181. package/pages/auth/logout.vue +4 -1
  182. package/pages/auth/setup.vue +2 -0
  183. package/pages/auth/verify.vue +13 -8
  184. package/pages/c/_cluster/apps/charts/chart.vue +1 -1
  185. package/pages/c/_cluster/apps/charts/install.vue +26 -26
  186. package/pages/c/_cluster/auth/config/index.vue +10 -12
  187. package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
  188. package/pages/c/_cluster/explorer/index.vue +17 -15
  189. package/pages/c/_cluster/istio/index.vue +2 -2
  190. package/pages/c/_cluster/longhorn/index.vue +1 -1
  191. package/pages/c/_cluster/monitoring/index.vue +1 -1
  192. package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
  193. package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
  194. package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
  195. package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
  196. package/pages/c/_cluster/neuvector/index.vue +1 -1
  197. package/pages/c/_cluster/settings/banners.vue +4 -3
  198. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
  199. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
  200. package/pages/c/_cluster/uiplugins/index.vue +98 -55
  201. package/pages/diagnostic.vue +59 -11
  202. package/pages/fail-whale.vue +14 -8
  203. package/pages/home.vue +24 -18
  204. package/pages/prefs.vue +7 -6
  205. package/pages/support/index.vue +4 -1
  206. package/plugins/internal-api/index.ts +37 -0
  207. package/plugins/internal-api/shared/base-api.ts +13 -0
  208. package/plugins/internal-api/shell/shell.api.ts +108 -0
  209. package/plugins/steve/actions.js +0 -12
  210. package/public/index.html +1 -0
  211. package/rancher-components/Card/Card.vue +1 -1
  212. package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
  213. package/rancher-components/Form/Checkbox/Checkbox.vue +27 -3
  214. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +47 -0
  215. package/rancher-components/Form/LabeledInput/LabeledInput.vue +20 -2
  216. package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
  217. package/rancher-components/Form/Radio/RadioButton.vue +20 -4
  218. package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
  219. package/rancher-components/Form/Radio/RadioGroup.vue +52 -10
  220. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +17 -0
  221. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +5 -0
  222. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +10 -1
  223. package/rancher-components/RcButton/RcButton.vue +2 -1
  224. package/rancher-components/RcButton/types.ts +1 -0
  225. package/rancher-components/RcDropdown/RcDropdown.vue +18 -6
  226. package/rancher-components/RcDropdown/RcDropdownItem.vue +3 -56
  227. package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +68 -0
  228. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +92 -0
  229. package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -0
  230. package/rancher-components/RcDropdown/index.ts +2 -0
  231. package/rancher-components/RcDropdown/useDropdownCollection.ts +8 -0
  232. package/rancher-components/RcDropdown/useDropdownContext.ts +9 -3
  233. package/rancher-components/RcDropdown/useDropdownItem.ts +63 -0
  234. package/scripts/extension/bundle +20 -0
  235. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
  236. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  237. package/scripts/extension/helmpatch +44 -31
  238. package/scripts/extension/publish +12 -12
  239. package/scripts/typegen.sh +2 -4
  240. package/server/har-file.js +25 -3
  241. package/store/action-menu.js +26 -56
  242. package/store/features.js +2 -1
  243. package/store/index.js +5 -0
  244. package/store/modal.ts +71 -0
  245. package/store/slideInPanel.ts +47 -0
  246. package/store/type-map.js +12 -1
  247. package/store/type-map.utils.ts +4 -4
  248. package/types/global-vue.d.ts +5 -0
  249. package/types/internal-api/shell/growl.d.ts +25 -0
  250. package/types/internal-api/shell/modal.d.ts +77 -0
  251. package/types/internal-api/shell/slideIn.d.ts +15 -0
  252. package/types/resources/fleet.d.ts +0 -14
  253. package/types/shell/index.d.ts +43 -24
  254. package/types/vue-shim.d.ts +4 -1
  255. package/utils/__mocks__/tabbable.js +13 -0
  256. package/utils/__tests__/object.test.ts +38 -4
  257. package/utils/cluster.js +35 -0
  258. package/utils/fleet.ts +15 -73
  259. package/utils/object.js +48 -5
  260. package/utils/validators/formRules/__tests__/index.test.ts +10 -1
  261. package/utils/validators/formRules/index.ts +27 -3
  262. package/utils/validators/machine-pool.ts +20 -0
  263. package/components/DisableAuthProviderModal.vue +0 -114
  264. package/components/MoveModal.vue +0 -166
  265. package/components/PromptChangePassword.vue +0 -123
  266. package/components/fleet/FleetBundleResources.vue +0 -86
  267. package/components/formatter/ExtensionCache.vue +0 -74
  268. package/components/formatter/Port.vue +0 -24
  269. package/components/formatter/SecretType.vue +0 -41
  270. package/types/vue-shim.d +0 -20
@@ -1,23 +1,30 @@
1
1
  <script>
2
- import { mapState, mapGetters } from 'vuex';
2
+ import { mapGetters } from 'vuex';
3
3
  import { FLEET, NORMAN } from '@shell/config/types';
4
4
  import LabeledSelect from '@shell/components/form/LabeledSelect';
5
5
  import KeyValue from '@shell/components/form/KeyValue';
6
6
  import AsyncButton from '@shell/components/AsyncButton';
7
- import AppModal from '@shell/components/AppModal.vue';
8
7
  import { Card } from '@components/Card';
9
8
  import { Banner } from '@components/Banner';
10
9
  import { exceptionToErrorsArray } from '@shell/utils/error';
11
10
  import { set } from '@shell/utils/object';
12
11
 
13
12
  export default {
13
+ emits: ['close'],
14
+
14
15
  components: {
15
16
  Card,
16
17
  LabeledSelect,
17
18
  KeyValue,
18
19
  AsyncButton,
19
- Banner,
20
- AppModal
20
+ Banner
21
+ },
22
+
23
+ props: {
24
+ toAssign: {
25
+ type: Array,
26
+ default: () => []
27
+ }
21
28
  },
22
29
 
23
30
  data() {
@@ -26,13 +33,18 @@ export default {
26
33
  labels: {},
27
34
  moveTo: this.workspace,
28
35
  loaded: false,
29
- allWorkspaces: [],
30
- showModal: false,
36
+ allWorkspaces: []
31
37
  };
32
38
  },
33
39
 
40
+ async fetch() {
41
+ await this.$store.dispatch('rancher/findAll', { type: NORMAN.CLUSTER });
42
+ this.allWorkspaces = await this.$store.dispatch('management/findAll', { type: FLEET.WORKSPACE });
43
+ this.moveTo = this.workspace;
44
+ this.loaded = true;
45
+ },
46
+
34
47
  computed: {
35
- ...mapState('action-menu', ['showAssignTo', 'toAssign']),
36
48
  ...mapGetters({ t: 'i18n/t' }),
37
49
  ...mapGetters(['workspace']),
38
50
 
@@ -47,26 +59,12 @@ export default {
47
59
  }
48
60
  },
49
61
 
50
- watch: {
51
- async showAssignTo(show) {
52
- if (show) {
53
- await this.$store.dispatch('rancher/findAll', { type: NORMAN.CLUSTER });
54
- this.allWorkspaces = await this.$store.dispatch('management/findAll', { type: FLEET.WORKSPACE });
55
- this.moveTo = this.workspace;
56
- this.loaded = true;
57
- this.showModal = true;
58
- } else {
59
- this.showModal = false;
60
- }
61
- }
62
- },
63
-
64
62
  methods: {
65
63
  close() {
66
64
  this.errors = [];
67
65
  this.labels = {};
68
66
  this.moveTo = this.workspace;
69
- this.$store.commit('action-menu/toggleAssignTo');
67
+ this.$emit('close');
70
68
  },
71
69
 
72
70
  async apply(buttonDone) {
@@ -108,55 +106,46 @@ export default {
108
106
  </script>
109
107
 
110
108
  <template>
111
- <app-modal
112
- v-if="showModal"
113
- class="assign-modal"
114
- name="assignTo"
115
- styles="background-color: var(--nav-bg); border-radius: var(--border-radius); max-height: 100vh;"
116
- height="auto"
117
- :scrollable="true"
118
- @close="close"
109
+ <Card
110
+ :show-highlight-border="false"
119
111
  >
120
- <Card
121
- v-if="loaded"
122
- :show-highlight-border="false"
123
- >
124
- <template #title>
125
- <h4
126
- v-clean-html="t('assignTo.title', {count: resourceCount}, true)"
127
- class="text-default-text"
128
- />
129
- </template>
130
- <template #body>
131
- <div class="pl-10 pr-10">
132
- <form>
133
- <LabeledSelect
134
- v-model:value="moveTo"
135
- data-testid="workspace_options"
136
- :label="t('assignTo.workspace')"
137
- :options="workspaceOptions"
138
- placement="bottom"
139
- />
140
-
141
- <KeyValue
142
- key="labels"
143
- v-model:value="labels"
144
- class="mt-20"
145
- :add-label="t('labels.addSetLabel')"
146
- :read-allowed="false"
147
- />
148
-
149
- <Banner
150
- v-for="(err, i) in errors"
151
- :key="i"
152
- color="error"
153
- :label="err"
154
- />
155
- </form>
156
- </div>
157
- </template>
158
-
159
- <template #actions>
112
+ <template #title>
113
+ <h4
114
+ v-clean-html="t('assignTo.title', {count: resourceCount}, true)"
115
+ class="text-default-text"
116
+ />
117
+ </template>
118
+ <template #body>
119
+ <div class="pl-10 pr-10">
120
+ <form>
121
+ <LabeledSelect
122
+ v-model:value="moveTo"
123
+ data-testid="workspace_options"
124
+ :label="t('assignTo.workspace')"
125
+ :options="workspaceOptions"
126
+ placement="bottom"
127
+ />
128
+
129
+ <KeyValue
130
+ key="labels"
131
+ v-model:value="labels"
132
+ class="mt-20"
133
+ :add-label="t('labels.addSetLabel')"
134
+ :read-allowed="false"
135
+ />
136
+
137
+ <Banner
138
+ v-for="(err, i) in errors"
139
+ :key="i"
140
+ color="error"
141
+ :label="err"
142
+ />
143
+ </form>
144
+ </div>
145
+ </template>
146
+
147
+ <template #actions>
148
+ <div class="actions-container">
160
149
  <button
161
150
  class="btn role-secondary"
162
151
  @click="close"
@@ -165,21 +154,23 @@ export default {
165
154
  </button>
166
155
 
167
156
  <AsyncButton
157
+ class="apply-btn"
168
158
  mode="apply"
169
159
  @click="apply"
170
160
  />
171
- </template>
172
- </Card>
173
- </app-modal>
161
+ </div>
162
+ </template>
163
+ </Card>
174
164
  </template>
175
165
 
176
166
  <style lang='scss'>
177
- .assign-modal {
178
- border-radius: var(--border-radius);
179
- overflow: scroll;
180
- max-height: 100vh;
181
- & ::-webkit-scrollbar-corner {
182
- background: rgba(0,0,0,0);
167
+ .actions-container {
168
+ display: flex;
169
+ justify-content: flex-end;
170
+ width: 100%;
171
+
172
+ .apply-btn {
173
+ margin-left: 20px;
174
+ }
183
175
  }
184
- }
185
176
  </style>
@@ -0,0 +1,106 @@
1
+ <script>
2
+ import { mapGetters } from 'vuex';
3
+ import ChangePassword from '@shell/components/form/ChangePassword';
4
+ import { Card } from '@components/Card';
5
+ import AsyncButton from '@shell/components/AsyncButton';
6
+
7
+ export default {
8
+ emits: ['close'],
9
+ components: {
10
+ Card, AsyncButton, ChangePassword
11
+ },
12
+ data() {
13
+ return { valid: false, password: '' };
14
+ },
15
+ computed: { ...mapGetters({ t: 'i18n/t' }) },
16
+ methods: {
17
+ closeModal() {
18
+ this.$emit('close');
19
+ },
20
+ async submit(buttonCb) {
21
+ try {
22
+ await this.$refs.changePassword.save();
23
+ this.closeModal();
24
+ buttonCb(true);
25
+ } catch (err) {
26
+ buttonCb(false);
27
+ }
28
+ }
29
+ },
30
+ };
31
+ </script>
32
+
33
+ <template>
34
+ <Card
35
+ class="prompt-password"
36
+ :show-highlight-border="false"
37
+ >
38
+ <template #title>
39
+ <h4 class="text-default-text">
40
+ {{ t("changePassword.title") }}
41
+ </h4>
42
+ </template>
43
+
44
+ <template #body>
45
+ <form @submit.prevent>
46
+ <ChangePassword
47
+ ref="changePassword"
48
+ @valid="valid = $event"
49
+ />
50
+ </form>
51
+ </template>
52
+
53
+ <template #actions>
54
+ <!-- type reset is required by lastpass -->
55
+ <button
56
+ class="btn role-secondary"
57
+ role="button"
58
+ :aria-label="t('changePassword.cancel')"
59
+ type="reset"
60
+ @click="closeModal"
61
+ >
62
+ {{ t("changePassword.cancel") }}
63
+ </button>
64
+ <AsyncButton
65
+ type="submit"
66
+ mode="apply"
67
+ class="btn bg-error ml-10"
68
+ :disabled="!valid"
69
+ value="LOGIN"
70
+ @click="submit"
71
+ />
72
+ </template>
73
+ </Card>
74
+ </template>
75
+
76
+ <style lang="scss" scoped>
77
+ .prompt-password {
78
+ :deep() .card-wrap {
79
+ display: flex;
80
+ flex-direction: column;
81
+
82
+ .card-body {
83
+ flex: 1;
84
+ justify-content: start;
85
+ & > div {
86
+ flex: 1;
87
+ display: flex;
88
+ }
89
+ }
90
+
91
+ .card-actions {
92
+ display: flex;
93
+ justify-content: flex-end;
94
+ width: 100%;
95
+ }
96
+ }
97
+ }
98
+
99
+ .prompt-password {
100
+ flex: 1;
101
+ display: flex;
102
+ form {
103
+ flex: 1;
104
+ }
105
+ }
106
+ </style>
@@ -91,6 +91,7 @@ export default {
91
91
  :key="i"
92
92
  color="error"
93
93
  :label="err"
94
+ data-testid="deactivate-driver-error-banner"
94
95
  />
95
96
  </div>
96
97
  </template>
@@ -1,30 +1,44 @@
1
1
  <script>
2
2
  import AsyncButton from '@shell/components/AsyncButton';
3
- import AppModal from '@shell/components/AppModal.vue';
4
3
  import { LabeledInput } from '@components/Form/LabeledInput';
5
4
  import Checkbox from '@components/Form/Checkbox/Checkbox.vue';
6
5
  import { UI_PLUGIN } from '@shell/config/types';
7
6
  import { UI_PLUGIN_CHART_ANNOTATIONS, UI_PLUGIN_NAMESPACE } from '@shell/config/uiplugins';
8
7
 
9
8
  export default {
10
- emits: ['closed'],
9
+ emits: ['close'],
11
10
 
12
11
  components: {
13
12
  AsyncButton,
14
13
  Checkbox,
15
- LabeledInput,
16
- AppModal,
14
+ LabeledInput
15
+ },
16
+ props: {
17
+ /**
18
+ * Callback when modal is closed
19
+ */
20
+ closed: {
21
+ type: Function,
22
+ default: () => {},
23
+ required: true
24
+ },
25
+ resources: {
26
+ type: Array,
27
+ default: () => []
28
+ },
29
+ registerBackgroundClosing: {
30
+ type: Function,
31
+ default: () => {}
32
+ }
17
33
  },
18
34
 
19
35
  data() {
20
36
  return {
21
- name: '',
22
- location: '',
23
- persist: false,
24
- canModifyName: true,
25
- canModifyLocation: true,
26
- showModal: false,
27
- returnFocusSelector: '[data-testid="extensions-page-menu"]'
37
+ name: '',
38
+ location: '',
39
+ persist: false,
40
+ canModifyName: true,
41
+ canModifyLocation: true
28
42
  };
29
43
  },
30
44
 
@@ -55,12 +69,9 @@ export default {
55
69
  },
56
70
 
57
71
  methods: {
58
- showDialog() {
59
- this.showModal = true;
60
- },
61
72
  closeDialog(result) {
62
- this.showModal = false;
63
- this.$emit('closed', result);
73
+ this.closed(result);
74
+ this.$emit('close');
64
75
  },
65
76
 
66
77
  updateName(v) {
@@ -127,15 +138,17 @@ export default {
127
138
 
128
139
  this.$plugin.loadAsync(name, url).then(() => {
129
140
  this.closeDialog(true);
141
+
130
142
  this.$store.dispatch('growl/success', {
131
143
  title: this.t('plugins.success.title', { name }),
132
144
  message: this.t('plugins.success.message'),
133
145
  timeout: 3000,
134
146
  }, { root: true });
147
+
135
148
  btnCb(true);
136
149
  }).catch((error) => {
137
150
  btnCb(false);
138
- // this.closeDialog(false);
151
+
139
152
  const message = typeof error === 'object' ? this.t('plugins.error.message') : error;
140
153
 
141
154
  this.$store.dispatch('growl/error', {
@@ -150,63 +163,53 @@ export default {
150
163
  </script>
151
164
 
152
165
  <template>
153
- <app-modal
154
- v-if="showModal"
155
- name="developerInstallPluginDialog"
156
- height="auto"
157
- :scrollable="true"
158
- :trigger-focus-trap="true"
159
- :return-focus-selector="returnFocusSelector"
160
- @close="closeDialog()"
161
- >
162
- <div class="plugin-install-dialog">
163
- <h4>
164
- {{ t('plugins.developer.title') }}
165
- </h4>
166
- <p>
167
- {{ t('plugins.developer.prompt') }}
168
- </p>
169
- <div class="custom mt-10">
170
- <div class="fields">
171
- <LabeledInput
172
- v-model:value="location"
173
- v-focus
174
- label-key="plugins.developer.fields.url"
175
- @update:value="updateLocation"
176
- />
177
- </div>
166
+ <div class="plugin-install-dialog">
167
+ <h4>
168
+ {{ t('plugins.developer.title') }}
169
+ </h4>
170
+ <p>
171
+ {{ t('plugins.developer.prompt') }}
172
+ </p>
173
+ <div class="custom mt-10">
174
+ <div class="fields">
175
+ <LabeledInput
176
+ v-model:value="location"
177
+ v-focus
178
+ label-key="plugins.developer.fields.url"
179
+ @update:value="updateLocation"
180
+ />
181
+ </div>
182
+ </div>
183
+ <div class="custom mt-10">
184
+ <div class="fields">
185
+ <LabeledInput
186
+ v-model:value="name"
187
+ label-key="plugins.developer.fields.name"
188
+ @update:value="updateName"
189
+ />
190
+ </div>
191
+ <div class="fields mt-10">
192
+ <Checkbox
193
+ v-model:value="persist"
194
+ label-key="plugins.developer.fields.persist"
195
+ />
178
196
  </div>
179
- <div class="custom mt-10">
180
- <div class="fields">
181
- <LabeledInput
182
- v-model:value="name"
183
- label-key="plugins.developer.fields.name"
184
- @update:value="updateName"
185
- />
186
- </div>
187
- <div class="fields mt-10">
188
- <Checkbox
189
- v-model:value="persist"
190
- label-key="plugins.developer.fields.persist"
191
- />
192
- </div>
193
- <div class="dialog-buttons mt-20">
194
- <button
195
- class="btn role-secondary"
196
- data-testid="dev-install-ext-modal-cancel-btn"
197
- @click="closeDialog()"
198
- >
199
- {{ t('generic.cancel') }}
200
- </button>
201
- <AsyncButton
202
- mode="load"
203
- data-testid="dev-install-ext-modal-install-btn"
204
- @click="loadPlugin"
205
- />
206
- </div>
197
+ <div class="dialog-buttons mt-20">
198
+ <button
199
+ class="btn role-secondary"
200
+ data-testid="dev-install-ext-modal-cancel-btn"
201
+ @click="closeDialog()"
202
+ >
203
+ {{ t('generic.cancel') }}
204
+ </button>
205
+ <AsyncButton
206
+ mode="load"
207
+ data-testid="dev-install-ext-modal-install-btn"
208
+ @click="loadPlugin"
209
+ />
207
210
  </div>
208
211
  </div>
209
- </app-modal>
212
+ </div>
210
213
  </template>
211
214
 
212
215
  <style lang="scss" scoped>
@@ -0,0 +1,101 @@
1
+ <script>
2
+ import { Card } from '@components/Card';
3
+
4
+ export default {
5
+ name: 'PromptRemove',
6
+
7
+ emits: ['disable', 'close'],
8
+
9
+ components: { Card },
10
+ props: {
11
+ /**
12
+ * Inherited global identifier prefix for tests
13
+ * Define a term based on the parent component to avoid conflicts on multiple components
14
+ */
15
+ componentTestid: {
16
+ type: String,
17
+ default: 'disable-auth-provider'
18
+ },
19
+ disableCb: {
20
+ type: Function,
21
+ default: () => {}
22
+ }
23
+ },
24
+ methods: {
25
+ close() {
26
+ this.$emit('close');
27
+ },
28
+ disable() {
29
+ this.disableCb();
30
+ this.$emit('close');
31
+ }
32
+ }
33
+ };
34
+ </script>
35
+
36
+ <template>
37
+ <Card
38
+ class="disable-auth-provider"
39
+ :show-highlight-border="false"
40
+ >
41
+ <template #title>
42
+ <h4 class="text-default-text">
43
+ {{ t('promptRemove.title') }}
44
+ </h4>
45
+ </template>
46
+ <template #body>
47
+ <div class="mb-10">
48
+ <p v-clean-html="t('promptRemove.attemptingToRemoveAuthConfig', null, true)" />
49
+ </div>
50
+ </template>
51
+ <template #actions>
52
+ <button
53
+ class="btn role-secondary"
54
+ @click="close"
55
+ >
56
+ {{ t('generic.cancel') }}
57
+ </button>
58
+ <div class="spacer" />
59
+ <button
60
+ class="btn role-primary bg-error ml-10"
61
+ :data-testid="componentTestid + '-confirm-button'"
62
+ @click="disable"
63
+ >
64
+ {{ t('generic.disable') }}
65
+ </button>
66
+ </template>
67
+ </Card>
68
+ </template>
69
+
70
+ <style lang='scss'>
71
+ .disable-auth-provider {
72
+ &.card-container {
73
+ box-shadow: none;
74
+ }
75
+ #confirm {
76
+ width: 90%;
77
+ margin-left: 3px;
78
+ }
79
+
80
+ .remove-modal {
81
+ border-radius: var(--border-radius);
82
+ overflow: scroll;
83
+ max-height: 100vh;
84
+ & ::-webkit-scrollbar-corner {
85
+ background: rgba(0,0,0,0);
86
+ }
87
+ }
88
+
89
+ .actions {
90
+ text-align: right;
91
+ }
92
+
93
+ .card-actions {
94
+ display: flex;
95
+
96
+ .spacer {
97
+ flex: 1;
98
+ }
99
+ }
100
+ }
101
+ </style>
@@ -137,7 +137,7 @@ export default {
137
137
  {{ t('drainNode.titleMultiple', { count: kubeNodes.length }) }}
138
138
  </template>
139
139
  <template v-else>
140
- {{ t('drainNode.titleOne', { name: kubeNodes[0].name }, true) }}
140
+ {{ t('drainNode.titleOne', { name: kubeNodes[0]?.name }, true) }}
141
141
  </template>
142
142
  </h4>
143
143
  </template>