50 lines
1.1 KiB
Dart
50 lines
1.1 KiB
Dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import '../models/timecard.dart';
|
|
import 'seed.dart';
|
|
|
|
class TimecardsController extends Notifier<List<Timecard>> {
|
|
@override
|
|
List<Timecard> build() => Seed.timecards();
|
|
|
|
void add(Timecard card) {
|
|
state = [card, ...state];
|
|
}
|
|
|
|
void approve(String id) {
|
|
state = [
|
|
for (final t in state)
|
|
if (t.id == id) t.copyWith(status: TimecardStatus.approved) else t,
|
|
];
|
|
}
|
|
|
|
void dispute(String id, String note) {
|
|
state = [
|
|
for (final t in state)
|
|
if (t.id == id)
|
|
t.copyWith(status: TimecardStatus.disputed, disputeNote: note)
|
|
else
|
|
t,
|
|
];
|
|
}
|
|
|
|
Timecard? byId(String id) {
|
|
for (final t in state) {
|
|
if (t.id == id) return t;
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
|
|
final timecardsProvider = NotifierProvider<TimecardsController, List<Timecard>>(
|
|
TimecardsController.new,
|
|
);
|
|
|
|
/// Timecards still waiting on the worker to confirm or dispute.
|
|
final timecardsNeedingReviewProvider = Provider<List<Timecard>>((ref) {
|
|
return ref
|
|
.watch(timecardsProvider)
|
|
.where((t) => t.status == TimecardStatus.needsReview)
|
|
.toList();
|
|
});
|