@rancher/shell 0.3.10 → 0.3.11
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.
- package/components/DetailText.vue +1 -0
- package/components/ResourceList/index.vue +1 -1
- package/components/SortableTable/THead.vue +1 -0
- package/components/form/ChangePassword.vue +3 -0
- package/detail/helm.cattle.io.projecthelmchart.vue +2 -2
- package/edit/token.vue +1 -0
- package/package.json +1 -1
- package/pages/account/index.vue +3 -0
- package/plugins/steve/subscribe.js +34 -7
- package/plugins/steve/worker/index.js +4 -3
|
@@ -8,7 +8,7 @@ import IconMessage from '@shell/components/IconMessage.vue';
|
|
|
8
8
|
import { ResourceListComponentName } from './resource-list.config';
|
|
9
9
|
import { PanelLocation, ExtensionPoint } from '@shell/core/types';
|
|
10
10
|
import ExtensionPanel from '@shell/components/ExtensionPanel';
|
|
11
|
-
import { sameContents } from 'utils/array';
|
|
11
|
+
import { sameContents } from '@shell/utils/array';
|
|
12
12
|
|
|
13
13
|
export default {
|
|
14
14
|
name: ResourceListComponentName,
|
|
@@ -342,6 +342,7 @@ export default {
|
|
|
342
342
|
<Password
|
|
343
343
|
v-if="isChange"
|
|
344
344
|
v-model="passwordCurrent"
|
|
345
|
+
data-testid="account__current_password"
|
|
345
346
|
class="mt-10"
|
|
346
347
|
:required="true"
|
|
347
348
|
:label="t('changePassword.currentPassword.label')"
|
|
@@ -368,6 +369,7 @@ export default {
|
|
|
368
369
|
<div :class="{'col': isCreateEdit, 'span-4': isCreateEdit}">
|
|
369
370
|
<Password
|
|
370
371
|
v-model="passwordNew"
|
|
372
|
+
data-testid="account__new_password"
|
|
371
373
|
class="mt-10"
|
|
372
374
|
:label="t('changePassword.userGen.newPassword.label')"
|
|
373
375
|
:required="userGeneratedPasswordsRequired"
|
|
@@ -377,6 +379,7 @@ export default {
|
|
|
377
379
|
<div :class="{'col': isCreateEdit, 'span-4': isCreateEdit}">
|
|
378
380
|
<Password
|
|
379
381
|
v-model="passwordConfirm"
|
|
382
|
+
data-testid="account__confirm_password"
|
|
380
383
|
class="mt-10"
|
|
381
384
|
:label="t('changePassword.userGen.confirmPassword.label')"
|
|
382
385
|
:required="userGeneratedPasswordsRequired"
|
|
@@ -43,8 +43,8 @@ export default {
|
|
|
43
43
|
};
|
|
44
44
|
},
|
|
45
45
|
monitoringNamespace() {
|
|
46
|
-
//
|
|
47
|
-
return this.pullKeyFromUrl(this.relativeDashboardValues.
|
|
46
|
+
// picking the prometheusURL here, they're all going to be the same, but alertmanager and grafana can be deactivated
|
|
47
|
+
return this.pullKeyFromUrl(this.relativeDashboardValues.prometheusURL, 'namespaces');
|
|
48
48
|
},
|
|
49
49
|
alertServiceEndpoint() {
|
|
50
50
|
return this.pullServiceEndpointFromUrl(this.relativeDashboardValues.alertmanagerURL);
|
package/edit/token.vue
CHANGED
package/package.json
CHANGED
package/pages/account/index.vue
CHANGED
|
@@ -159,6 +159,7 @@ export default {
|
|
|
159
159
|
v-if="canChangePassword"
|
|
160
160
|
type="button"
|
|
161
161
|
class="btn role-primary"
|
|
162
|
+
data-testid="account_change_password"
|
|
162
163
|
@click="$refs.promptChangePassword.show(true)"
|
|
163
164
|
>
|
|
164
165
|
{{ t("accountAndKeys.account.change") }}
|
|
@@ -179,6 +180,7 @@ export default {
|
|
|
179
180
|
<button
|
|
180
181
|
v-if="apiKeySchema"
|
|
181
182
|
class="btn role-primary add mb-20"
|
|
183
|
+
data-testid="account_create_api_keys"
|
|
182
184
|
@click="addKey"
|
|
183
185
|
>
|
|
184
186
|
{{ t('accountAndKeys.apiKeys.add.label') }}
|
|
@@ -193,6 +195,7 @@ export default {
|
|
|
193
195
|
:rows="apiKeys"
|
|
194
196
|
:headers="apiKeyheaders"
|
|
195
197
|
key-field="id"
|
|
198
|
+
data-testid="api_keys_list"
|
|
196
199
|
:search="true"
|
|
197
200
|
:row-actions="true"
|
|
198
201
|
:table-actions="true"
|
|
@@ -43,12 +43,16 @@ const workerQueues = {};
|
|
|
43
43
|
|
|
44
44
|
const supportedStores = [STORE.CLUSTER, STORE.RANCHER, STORE.MANAGEMENT];
|
|
45
45
|
|
|
46
|
-
const
|
|
47
|
-
return
|
|
46
|
+
const isWaitingForDestroy = (storeName, store) => {
|
|
47
|
+
return store.$workers[storeName]?.waitingForDestroy && store.$workers[storeName].waitingForDestroy();
|
|
48
48
|
};
|
|
49
49
|
|
|
50
|
-
const
|
|
51
|
-
return waitFor(() => !!store.getters['management/byId'](MANAGEMENT.SETTING
|
|
50
|
+
const waitForSettingsSchema = (storeName, store) => {
|
|
51
|
+
return waitFor(() => isWaitingForDestroy(storeName, store) || !!store.getters['management/byId'](SCHEMA, MANAGEMENT.SETTING));
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const waitForSettings = (storeName, store) => {
|
|
55
|
+
return waitFor(() => isWaitingForDestroy(storeName, store) || !!store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.UI_PERFORMANCE));
|
|
52
56
|
};
|
|
53
57
|
|
|
54
58
|
const isAdvancedWorker = (ctx) => {
|
|
@@ -80,18 +84,41 @@ export async function createWorker(store, ctx) {
|
|
|
80
84
|
// it will simply queue up any messages for the real worker to process when it loads up
|
|
81
85
|
store.$workers[storeName] = {
|
|
82
86
|
postMessage: (msg) => {
|
|
87
|
+
if (Object.keys(msg)?.[0] === 'destroyWorker') {
|
|
88
|
+
// The worker has been destroyed before it's been set up. Flag this so we stop waiting for mgmt settings and then can destroy worker.
|
|
89
|
+
// This can occurr when the user is redirected to the log in page
|
|
90
|
+
// - workers created (but waiting)
|
|
91
|
+
// - logout is called
|
|
92
|
+
// - <store>/unsubscribe is dispatched
|
|
93
|
+
// - wait for worker object to be destroyed <-- requires initial wait to be unblocked
|
|
94
|
+
store.$workers[storeName].mode = WORKER_MODES.DESTROY_MOCK;
|
|
95
|
+
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
83
98
|
if (workerQueues[storeName]) {
|
|
84
99
|
workerQueues[storeName].push(msg);
|
|
85
100
|
} else {
|
|
86
101
|
workerQueues[storeName] = [msg];
|
|
87
102
|
}
|
|
88
103
|
},
|
|
89
|
-
mode:
|
|
104
|
+
mode: WORKER_MODES.WAITING,
|
|
105
|
+
waitingForDestroy: () => {
|
|
106
|
+
return store.$workers[storeName]?.mode === WORKER_MODES.DESTROY_MOCK;
|
|
107
|
+
},
|
|
108
|
+
destroy: () => {
|
|
109
|
+
// Similar to workerActions.destroyWorker
|
|
110
|
+
delete store.$workers[storeName];
|
|
111
|
+
}
|
|
90
112
|
};
|
|
91
113
|
}
|
|
92
114
|
|
|
93
|
-
await waitForSettingsSchema(store);
|
|
94
|
-
await waitForSettings(store);
|
|
115
|
+
await waitForSettingsSchema(storeName, store);
|
|
116
|
+
await waitForSettings(storeName, store);
|
|
117
|
+
if (store.$workers[storeName].waitingForDestroy()) {
|
|
118
|
+
store.$workers[storeName].destroy();
|
|
119
|
+
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
95
122
|
const advancedWorker = isAdvancedWorker(ctx);
|
|
96
123
|
|
|
97
124
|
const workerActions = {
|
|
@@ -4,9 +4,10 @@ import basicWorkerConstructor from '@shell/plugins/steve/worker/web-worker.basic
|
|
|
4
4
|
import advancedWorkerConstructor from '@shell/plugins/steve/worker/web-worker.advanced.js';
|
|
5
5
|
|
|
6
6
|
export const WORKER_MODES = {
|
|
7
|
-
WAITING:
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
WAITING: 'waiting',
|
|
8
|
+
DESTROY_MOCK: 'destroy',
|
|
9
|
+
BASIC: 'basic',
|
|
10
|
+
ADVANCED: 'advanced'
|
|
10
11
|
};
|
|
11
12
|
|
|
12
13
|
export default function storeWorker(mode, options = {}, closures = {}) {
|