ui: cache derived secrets views
This commit is contained in:
+33
-9
@@ -3,6 +3,11 @@ function initSecretsPage() {
|
|||||||
workspaceId: null,
|
workspaceId: null,
|
||||||
secrets: [],
|
secrets: [],
|
||||||
profiles: [],
|
profiles: [],
|
||||||
|
derived: {
|
||||||
|
activeSecretCount: 0,
|
||||||
|
secretsById: {},
|
||||||
|
usageBySecret: {},
|
||||||
|
},
|
||||||
search: '',
|
search: '',
|
||||||
loading: false,
|
loading: false,
|
||||||
error: '',
|
error: '',
|
||||||
@@ -101,7 +106,7 @@ function initSecretsPage() {
|
|||||||
return secret ? secret.name : secretId;
|
return secret ? secret.name : secretId;
|
||||||
}
|
}
|
||||||
|
|
||||||
function usageBySecret() {
|
function buildUsageBySecret() {
|
||||||
var usage = {};
|
var usage = {};
|
||||||
state.profiles.forEach(function (profile) {
|
state.profiles.forEach(function (profile) {
|
||||||
secretIdsForProfile(profile).forEach(function (secretId) {
|
secretIdsForProfile(profile).forEach(function (secretId) {
|
||||||
@@ -113,6 +118,24 @@ function initSecretsPage() {
|
|||||||
return usage;
|
return usage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function recomputeDerivedState() {
|
||||||
|
var secretsById = {};
|
||||||
|
var activeSecretCount = 0;
|
||||||
|
|
||||||
|
state.secrets.forEach(function (secret) {
|
||||||
|
secretsById[secret.id] = secret;
|
||||||
|
if (secret.status === 'active') {
|
||||||
|
activeSecretCount += 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
state.derived = {
|
||||||
|
activeSecretCount: activeSecretCount,
|
||||||
|
secretsById: secretsById,
|
||||||
|
usageBySecret: buildUsageBySecret(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function resetModalFields() {
|
function resetModalFields() {
|
||||||
modalName.value = '';
|
modalName.value = '';
|
||||||
modalKind.value = 'token';
|
modalKind.value = 'token';
|
||||||
@@ -213,15 +236,14 @@ function initSecretsPage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renderSecrets() {
|
function renderSecrets() {
|
||||||
var usage = usageBySecret();
|
var usage = state.derived.usageBySecret;
|
||||||
var query = state.search.toLowerCase();
|
var query = state.search.toLowerCase();
|
||||||
var rows = state.secrets.filter(function (secret) {
|
var rows = state.secrets.filter(function (secret) {
|
||||||
return !query || secret.name.toLowerCase().includes(query) || String(secret.kind || '').toLowerCase().includes(query);
|
return !query || secret.name.toLowerCase().includes(query) || String(secret.kind || '').toLowerCase().includes(query);
|
||||||
});
|
});
|
||||||
|
|
||||||
var active = state.secrets.filter(function (secret) { return secret.status === 'active'; }).length;
|
|
||||||
summary.textContent = tfKey('secrets.active.subtitle', {
|
summary.textContent = tfKey('secrets.active.subtitle', {
|
||||||
active: active,
|
active: state.derived.activeSecretCount,
|
||||||
total: state.secrets.length,
|
total: state.secrets.length,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -321,11 +343,8 @@ function initSecretsPage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renderProfiles() {
|
function renderProfiles() {
|
||||||
var usage = usageBySecret();
|
var usage = state.derived.usageBySecret;
|
||||||
var secretsById = {};
|
var secretsById = state.derived.secretsById;
|
||||||
state.secrets.forEach(function (secret) {
|
|
||||||
secretsById[secret.id] = secret;
|
|
||||||
});
|
|
||||||
|
|
||||||
profilesSummary.textContent = window.tPlural(
|
profilesSummary.textContent = window.tPlural(
|
||||||
'secrets.profiles.subtitle_count',
|
'secrets.profiles.subtitle_count',
|
||||||
@@ -444,6 +463,9 @@ function initSecretsPage() {
|
|||||||
renderProfiles();
|
renderProfiles();
|
||||||
|
|
||||||
if (!state.workspaceId) {
|
if (!state.workspaceId) {
|
||||||
|
state.secrets = [];
|
||||||
|
state.profiles = [];
|
||||||
|
recomputeDerivedState();
|
||||||
state.loading = false;
|
state.loading = false;
|
||||||
state.error = tKey('secrets.error.workspace');
|
state.error = tKey('secrets.error.workspace');
|
||||||
renderSecrets();
|
renderSecrets();
|
||||||
@@ -458,10 +480,12 @@ function initSecretsPage() {
|
|||||||
]);
|
]);
|
||||||
state.secrets = (results[0] && results[0].items) || [];
|
state.secrets = (results[0] && results[0].items) || [];
|
||||||
state.profiles = (results[1] && results[1].items) || [];
|
state.profiles = (results[1] && results[1].items) || [];
|
||||||
|
recomputeDerivedState();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
state.error = error.message || tKey('secrets.error.load');
|
state.error = error.message || tKey('secrets.error.load');
|
||||||
state.secrets = [];
|
state.secrets = [];
|
||||||
state.profiles = [];
|
state.profiles = [];
|
||||||
|
recomputeDerivedState();
|
||||||
} finally {
|
} finally {
|
||||||
state.loading = false;
|
state.loading = false;
|
||||||
renderSecrets();
|
renderSecrets();
|
||||||
|
|||||||
Reference in New Issue
Block a user