- ListFactory.ts를 생성하여 중복되는 테이블 생성, 정렬, 필터 로직을 공통 컴포넌트화 - 14개의 ListView.ts 파일들을 ListFactory를 호출하는 설정 객체 형태로 리팩토링 - TypeScript 컴파일 에러(타입 불일치 및 누락된 속성) 수정 완료
39 lines
2.1 KiB
TypeScript
39 lines
2.1 KiB
TypeScript
import { state } from '../../core/state';
|
|
import { openDomainModal } from '../../components/Modal/DomainModal';
|
|
import { formatInline } from '../../core/utils';
|
|
import { ASSET_SCHEMA } from '../../core/schema';
|
|
import { SortState } from '../../core/tableHandler';
|
|
import { createListView } from './ListFactory';
|
|
|
|
// 정렬 상태를 모듈 수준에서 관리하여 화면 갱신 시에도 유지되도록 함
|
|
let persistentSortState: SortState = { key: '', direction: 'asc' };
|
|
|
|
export function renderDomainList(container: HTMLElement) {
|
|
createListView(container, {
|
|
title: '도메인',
|
|
dataSource: () => state.masterData.domain || [],
|
|
searchKeys: ['DOMAIN_ADDR', 'ASSET_PURPOSE', 'PRODUCT_NAME'],
|
|
persistentSortState,
|
|
emptyMessage: '등록된 도메인 정보가 없습니다.',
|
|
filterOptions: {
|
|
keywordLabel: `통합 검색 (${ASSET_SCHEMA.DOMAIN_ADDR.ui}/${ASSET_SCHEMA.PRODUCT_NAME.ui})`,
|
|
showCorp: true,
|
|
showDept: true
|
|
},
|
|
onRowClick: (item) => openDomainModal(item),
|
|
columns: [
|
|
{ header: ASSET_SCHEMA.DOMAIN_ADDR.ui, sortKey: ASSET_SCHEMA.DOMAIN_ADDR.key, align: 'left', render: a => a[ASSET_SCHEMA.DOMAIN_ADDR.key] || '' },
|
|
{ header: ASSET_SCHEMA.ASSET_PURPOSE.ui, sortKey: ASSET_SCHEMA.ASSET_PURPOSE.key, align: 'left', render: a => a[ASSET_SCHEMA.ASSET_PURPOSE.key] || '' },
|
|
{
|
|
header: ASSET_SCHEMA.ASSET_TYPE.ui,
|
|
sortKey: ASSET_SCHEMA.ASSET_TYPE.key,
|
|
align: 'center',
|
|
render: a => `<span class="badge badge-${a[ASSET_SCHEMA.ASSET_TYPE.key] === '관리중' ? 'primary' : 'muted'}">${a[ASSET_SCHEMA.ASSET_TYPE.key] || '-'}</span>`
|
|
},
|
|
{ header: ASSET_SCHEMA.PURCHASE_CORP.ui, sortKey: ASSET_SCHEMA.PURCHASE_CORP.key, align: 'center', render: a => a[ASSET_SCHEMA.PURCHASE_CORP.key] || '' },
|
|
{ header: ASSET_SCHEMA.EXPIRED_DATE.ui, sortKey: ASSET_SCHEMA.EXPIRED_DATE.key, align: 'center', render: a => a[ASSET_SCHEMA.EXPIRED_DATE.key] || '' },
|
|
{ header: ASSET_SCHEMA.MEMO.ui, sortKey: ASSET_SCHEMA.MEMO.key, className: 'col-memo', render: a => formatInline(a[ASSET_SCHEMA.MEMO.key] || '-') }
|
|
]
|
|
});
|
|
}
|