결재 단계 편집 다이얼로그 구현

This commit is contained in:
JiWoong Sul
2025-09-25 17:57:29 +09:00
parent 6d6781f552
commit 8a6ad1e81b
17 changed files with 1689 additions and 42 deletions

View File

@@ -0,0 +1,94 @@
import 'package:flutter/foundation.dart';
import 'package:superport_v2/core/common/models/paginated_result.dart';
import '../../domain/entities/approval_history_record.dart';
import '../../domain/repositories/approval_history_repository.dart';
enum ApprovalHistoryActionFilter { all, approve, reject, comment }
class ApprovalHistoryController extends ChangeNotifier {
ApprovalHistoryController({required ApprovalHistoryRepository repository})
: _repository = repository;
final ApprovalHistoryRepository _repository;
PaginatedResult<ApprovalHistoryRecord>? _result;
bool _isLoading = false;
String _query = '';
ApprovalHistoryActionFilter _actionFilter = ApprovalHistoryActionFilter.all;
DateTime? _from;
DateTime? _to;
String? _errorMessage;
PaginatedResult<ApprovalHistoryRecord>? get result => _result;
bool get isLoading => _isLoading;
String get query => _query;
ApprovalHistoryActionFilter get actionFilter => _actionFilter;
DateTime? get from => _from;
DateTime? get to => _to;
String? get errorMessage => _errorMessage;
Future<void> fetch({int page = 1}) async {
_isLoading = true;
_errorMessage = null;
notifyListeners();
try {
final action = switch (_actionFilter) {
ApprovalHistoryActionFilter.all => null,
ApprovalHistoryActionFilter.approve => 'approve',
ApprovalHistoryActionFilter.reject => 'reject',
ApprovalHistoryActionFilter.comment => 'comment',
};
final response = await _repository.list(
page: page,
pageSize: _result?.pageSize ?? 20,
query: _query.trim().isEmpty ? null : _query.trim(),
action: action,
from: _from,
to: _to,
);
_result = response;
} catch (e) {
_errorMessage = e.toString();
} finally {
_isLoading = false;
notifyListeners();
}
}
void updateQuery(String value) {
_query = value;
notifyListeners();
}
void updateActionFilter(ApprovalHistoryActionFilter filter) {
_actionFilter = filter;
notifyListeners();
}
void updateDateRange(DateTime? from, DateTime? to) {
_from = from;
_to = to;
notifyListeners();
}
void clearFilters() {
_query = '';
_actionFilter = ApprovalHistoryActionFilter.all;
_from = null;
_to = null;
notifyListeners();
}
void clearError() {
_errorMessage = null;
notifyListeners();
}
bool get hasActiveFilters =>
_query.trim().isNotEmpty ||
_actionFilter != ApprovalHistoryActionFilter.all ||
_from != null ||
_to != null;
}