feat(org-chart): implement expandable layout and multi-company navigation

Integrate P5-1B through P5-4 shared Core layout, collapse, zoom/pan/fit, company roots and keyboard accessibility. Include React/HTML examples, virtual 20/100/300 employee fixtures, focused checks and the additive data contract.
This commit is contained in:
shkim4 committed 2026-10-12 21:59:09 +09:00
1 parent a92913d6bc
commit 064517ec46
30 files changed
+7532 -183

No files matched your search

+19 -1
View File
@@ -20,6 +20,10 @@ export function OrgChart({
displayMode,
layoutMode,
companyId,
selectedCompanyIds,
companyTopNodes,
employeeConnections,
zoom,
organizationLinks,
onEmployeeClick,
className,
@@ -66,6 +70,10 @@ export function OrgChart({
displayMode,
layoutMode,
companyId,
selectedCompanyIds,
companyTopNodes,
employeeConnections,
zoom,
organizationLinks,
onEmployeeClick: hasEmployeeCallback ? (employee, context) => {
if (generationRef.current === generation) committedRef.current.onEmployeeClick?.(employee, context);
@@ -105,7 +113,17 @@ export function OrgChart({
}
}
};
}, [aggregationPolicy, engineStylesheetUrl, coreStylesheetUrl, displayMode, layoutMode, companyId, organizationLinks, hasEmployeeCallback]);
}, [aggregationPolicy, engineStylesheetUrl, coreStylesheetUrl, displayMode, layoutMode, companyId, companyTopNodes, employeeConnections, zoom, organizationLinks, hasEmployeeCallback]);
useLayoutEffect(() => {
const instance = instanceRef.current;
if (!instance || layoutMode !== 'auto') return;
void instance.handle.setSelectedCompanies(selectedCompanyIds).catch(error => {
if (instanceRef.current !== instance) return;
try { committedRef.current.onLifecycleError?.(error); }
catch { /* Match other lifecycle callbacks: never leak a rejected Promise. */ }
});
}, [selectedCompanyIds, layoutMode]);
useLayoutEffect(() => {
const instance = instanceRef.current;