import 'package:flutter/material.dart'; import 'package:superport/models/user_model.dart'; /// 사용자 목록 테이블 위젯 (SRP, 재사용성 중심) class UserTable extends StatelessWidget { final List users; final double width; final String Function(String role) getRoleName; final String Function(int companyId, int? branchId) getBranchName; final String Function(int companyId) getCompanyName; final void Function(int userId) onEdit; final void Function(int userId) onDelete; const UserTable({ super.key, required this.users, required this.width, required this.getRoleName, required this.getBranchName, required this.getCompanyName, required this.onEdit, required this.onDelete, }); @override Widget build(BuildContext context) { return users.isEmpty ? const Center(child: Text('등록된 사용자 정보가 없습니다.')) : SingleChildScrollView( scrollDirection: Axis.horizontal, child: Container( constraints: BoxConstraints(minWidth: width - 32), child: SingleChildScrollView( scrollDirection: Axis.vertical, child: DataTable( columns: const [ DataColumn(label: Text('번호')), DataColumn(label: Text('이름')), DataColumn(label: Text('직급')), DataColumn(label: Text('소속 회사')), DataColumn(label: Text('소속 지점')), DataColumn(label: Text('이메일')), DataColumn(label: Text('전화번호')), DataColumn(label: Text('권한')), DataColumn(label: Text('관리')), ], rows: users.map((user) { return DataRow( cells: [ DataCell(Text('${user.id}')), DataCell(Text(user.name)), DataCell(Text(user.position ?? '-')), DataCell(Text(getCompanyName(user.companyId))), DataCell( Text( user.branchId != null ? getBranchName(user.companyId, user.branchId) : '-', ), ), DataCell(Text(user.email ?? '-')), DataCell( user.phoneNumbers.isNotEmpty ? Text(user.phoneNumbers.first['number'] ?? '-') : const Text('-'), ), DataCell(Text(getRoleName(user.role))), DataCell( Row( mainAxisSize: MainAxisSize.min, children: [ IconButton( icon: const Icon( Icons.edit, color: Colors.blue, ), onPressed: () => onEdit(user.id!), ), IconButton( icon: const Icon( Icons.delete, color: Colors.red, ), onPressed: () => onDelete(user.id!), ), ], ), ), ], ); }).toList(), ), ), ), ); } }