90 lines
2.3 KiB
Dart
90 lines
2.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:intl/intl.dart';
|
|
import 'package:tm_app/core/utils/result.dart';
|
|
import 'package:tm_app/data/repositories/your_tenders_repository.dart';
|
|
import 'package:tm_app/data/services/model/tender_approvals_response/tender_approvals_response.dart';
|
|
|
|
class YourTendersViewModel with ChangeNotifier {
|
|
final YourTendersRepository yourTendersRepository;
|
|
YourTendersViewModel({required this.yourTendersRepository});
|
|
|
|
bool isLoading = false;
|
|
String? errorMessage;
|
|
TenderApprovalsResponse? data;
|
|
|
|
// Filter States
|
|
DateTimeRange? selectedDateRange;
|
|
String selectedStatus = 'All';
|
|
final _fmt = DateFormat('yyyy/MM/dd');
|
|
|
|
String get startDateFormatted =>
|
|
selectedDateRange?.start != null
|
|
? _fmt.format(selectedDateRange!.start)
|
|
: 'YYYY/MM/DD';
|
|
|
|
String get endDateFormatted =>
|
|
selectedDateRange?.end != null
|
|
? _fmt.format(selectedDateRange!.end)
|
|
: 'YYYY/MM/DD';
|
|
|
|
Future<void> getApprovedTenders() async {
|
|
isLoading = true;
|
|
notifyListeners();
|
|
|
|
final result = await yourTendersRepository.getApprovedTenders();
|
|
|
|
switch (result) {
|
|
case Ok<TenderApprovalsResponse>():
|
|
data = result.value;
|
|
errorMessage = null;
|
|
break;
|
|
case Error<TenderApprovalsResponse>():
|
|
errorMessage = result.error.toString();
|
|
break;
|
|
}
|
|
|
|
isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
|
|
Future<void> getTenders({
|
|
required int limit,
|
|
required int offset,
|
|
required String createdFrom,
|
|
required String createdTo,
|
|
}) async {
|
|
isLoading = true;
|
|
notifyListeners();
|
|
|
|
final result = await yourTendersRepository.getTenders(
|
|
limit: limit,
|
|
offset: offset,
|
|
createdFrom: createdFrom,
|
|
createdTo: createdTo,
|
|
);
|
|
switch (result) {
|
|
case Ok<TenderApprovalsResponse>():
|
|
data = result.value;
|
|
errorMessage = null;
|
|
break;
|
|
case Error<TenderApprovalsResponse>():
|
|
errorMessage = result.error.toString();
|
|
break;
|
|
}
|
|
|
|
isLoading = false;
|
|
notifyListeners();
|
|
}
|
|
|
|
// --- Filter Actions ---
|
|
void setDateRange(DateTimeRange? range) {
|
|
selectedDateRange = range;
|
|
notifyListeners();
|
|
}
|
|
|
|
void setStatus(String status) {
|
|
selectedStatus = status;
|
|
notifyListeners();
|
|
}
|
|
}
|