Initial commit: Krow Worker App
This commit is contained in:
49
lib/state/timecards_controller.dart
Normal file
49
lib/state/timecards_controller.dart
Normal file
@@ -0,0 +1,49 @@
|
||||
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();
|
||||
});
|
||||
Reference in New Issue
Block a user