Files
superport_v2/lib/widgets/components/superport_table.dart
JiWoong Sul c3010965ad 결재 템플릿 단계 적용 구현
- ApprovalTemplate 엔티티·DTO·원격 리포지토리 추가
- ApprovalController에 템플릿 로딩/적용 상태와 assignSteps 호출 연동
- ApprovalPage 단계 탭에 템플릿 선택 UI 및 적용 확인 다이얼로그 구현
- 템플릿 적용 단위 테스트와 IMPLEMENTATION_TASKS 현황 갱신
2025-09-25 00:21:12 +09:00

59 lines
1.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:shadcn_ui/shadcn_ui.dart';
/// ShadTable.list를 감싼 공통 테이블 래퍼.
class SuperportTable extends StatelessWidget {
const SuperportTable({
super.key,
required this.columns,
required this.rows,
this.columnSpanExtent,
this.rowHeight = 56,
this.onRowTap,
this.emptyLabel = '데이터가 없습니다.',
});
final List<Widget> columns;
final List<List<Widget>> rows;
final TableSpanExtent? Function(int index)? columnSpanExtent;
final double rowHeight;
final void Function(int index)? onRowTap;
final String emptyLabel;
@override
Widget build(BuildContext context) {
if (rows.isEmpty) {
final theme = ShadTheme.of(context);
return Padding(
padding: const EdgeInsets.all(32),
child: Center(
child: Text(emptyLabel, style: theme.textTheme.muted),
),
);
}
final tableRows = [
for (final row in rows)
row
.map(
(cell) => cell is ShadTableCell ? cell : ShadTableCell(child: cell),
)
.toList(),
];
return ShadTable.list(
header: columns
.map(
(cell) => cell is ShadTableCell
? cell
: ShadTableCell.header(child: cell),
)
.toList(),
columnSpanExtent: columnSpanExtent,
rowSpanExtent: (_) => FixedTableSpanExtent(rowHeight),
onRowTap: onRowTap,
children: tableRows,
);
}
}