feat(org-chart): add core cards and fixed-layout integration
This commit is contained in:
1 parent
d18e3c3380
commit
61c6f8d1f1
161 files changed
+13044
-1
No files matched your search
@@ -0,0 +1,45 @@
|
||||
import hanmac from '../assets/affiliations/hanmac.png?inline';
|
||||
import saman from '../assets/affiliations/saman.png?inline';
|
||||
import jangheon from '../assets/affiliations/jangheon.png?inline';
|
||||
import jangheonIndustry from '../assets/affiliations/jangheon-industry.png?inline';
|
||||
import ptc from '../assets/affiliations/ptc.png?inline';
|
||||
import halla from '../assets/affiliations/halla.png?inline';
|
||||
import baron from '../assets/affiliations/baron.png?inline';
|
||||
|
||||
// Asset mapping is an internal presentation concern; the employee/affiliation
|
||||
// JSON contract continues to use only its existing id and name fields.
|
||||
const logos = new Map<string, string>([
|
||||
['hanmac', hanmac], ['saman', saman], ['jangheon', jangheon],
|
||||
['jangheon-industry', jangheonIndustry], ['ptc', ptc], ['halla', halla], ['baron', baron],
|
||||
]);
|
||||
|
||||
/** Shared by employee cards and the affiliation summary footer. */
|
||||
export function createAffiliationMark(
|
||||
document: Document, affiliationId: string, name: string, signal?: AbortSignal,
|
||||
): HTMLElement {
|
||||
const mark = document.createElement('span');
|
||||
mark.className = 'hm-orgchart-affiliation-mark';
|
||||
mark.dataset.affiliationId = affiliationId;
|
||||
mark.setAttribute('role', 'img');
|
||||
mark.setAttribute('aria-label', `관계사 ${name}`);
|
||||
mark.title = name;
|
||||
const fallback = document.createElement('span');
|
||||
fallback.className = 'hm-orgchart-affiliation-fallback';
|
||||
fallback.textContent = Array.from(name.trim()).slice(0, 2).join('') || '?';
|
||||
mark.append(fallback);
|
||||
|
||||
const logo = logos.get(affiliationId);
|
||||
mark.dataset.logoAvailable = String(Boolean(logo));
|
||||
if (logo) {
|
||||
const image = document.createElement('img');
|
||||
image.alt = '';
|
||||
image.decoding = 'async';
|
||||
image.addEventListener('error', () => {
|
||||
image.remove();
|
||||
mark.dataset.logoAvailable = 'false';
|
||||
}, { once: true, ...(signal ? { signal } : {}) });
|
||||
image.src = logo;
|
||||
mark.append(image);
|
||||
}
|
||||
return mark;
|
||||
}
|
||||
Reference in new issue
Block a user