[UX] #577 focus effective access on selected user

This commit is contained in:
devmrko
2026-06-30 18:05:04 +09:00
parent e7070663c3
commit 0ed048905a
6 changed files with 419 additions and 177 deletions

View File

@@ -630,6 +630,54 @@ function filterEffectiveMatrixTable(select) {
row.innerHTML = `<td colspan="${columnCount}" class="text-muted">${table.dataset.emptyMessage || '선택한 항목이 없습니다.'}</td>`;
body?.appendChild(row);
}
if (select.matches('[data-effective-user-select]')) {
updateEffectiveUserFocus(table, value);
}
}
function updateEffectiveUserFocus(table, userId) {
const focus = document.querySelector('[data-effective-user-focus]');
if (!focus || !table) {
return;
}
const row = Array.from(table.querySelectorAll('tbody tr[data-effective-id]'))
.find((item) => item.dataset.effectiveId === (userId || ''));
const values = {
username: row?.dataset.username || '사용자 선택',
profile: row?.dataset.profile || '사번 / 부서',
directRoles: row?.dataset.directRoles || '-',
inheritance: row?.dataset.inheritance || '-',
effectiveRoles: row?.dataset.effectiveRoles || '-',
objects: row?.dataset.objects || '-',
permissionCount: row?.dataset.permissionCount || '0'
};
Object.entries(values).forEach(([field, value]) => {
const target = focus.querySelector(`[data-effective-user-field="${field}"]`);
if (target) {
target.textContent = value;
}
});
}
function initEffectiveMatrixTabs() {
const tabs = document.querySelectorAll('[data-effective-tab]');
const panes = document.querySelectorAll('[data-effective-pane]');
if (!tabs.length || !panes.length) {
return;
}
tabs.forEach((tab) => {
tab.addEventListener('click', () => {
const target = tab.dataset.effectiveTab;
tabs.forEach((item) => {
const active = item === tab;
item.classList.toggle('is-active', active);
item.setAttribute('aria-selected', String(active));
});
panes.forEach((pane) => {
pane.hidden = pane.dataset.effectivePane !== target;
});
});
});
}
function initEffectiveMatrixFilters() {
@@ -955,6 +1003,7 @@ document.addEventListener('DOMContentLoaded', () => {
});
initTokenContextPreviews();
initEffectiveMatrixFilters();
initEffectiveMatrixTabs();
const objectSelect = document.querySelector('select[name="objectRef"]');
if (objectSelect) {
objectSelect.addEventListener('change', () => {