Files
tm_app/lib/view_models/your_tenders_view_model.dart
T
2025-09-02 15:33:07 +03:30

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();
}
}