45 lines
1.5 KiB
Dart
45 lines
1.5 KiB
Dart
import 'package:aioa_mobile/core/auth/authenticated_http_client.dart';
|
|
import 'package:aioa_mobile/core/config/runtime_config.dart';
|
|
import 'package:aioa_mobile/features/form/data/leave_draft_submission_repository.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
final leaveDraftSubmissionRepositoryProvider =
|
|
Provider<LeaveDraftSubmissionRepository>(
|
|
(ref) => LeaveDraftSubmissionRepository(
|
|
client: ref.watch(authenticatedHttpClientProvider),
|
|
baseUrl: RuntimeConfig.apiBaseUrl,
|
|
),
|
|
);
|
|
|
|
final leaveSubmissionProvider =
|
|
NotifierProvider<LeaveSubmissionController, LeaveSubmissionState>(
|
|
LeaveSubmissionController.new,
|
|
);
|
|
|
|
class LeaveSubmissionState {
|
|
const LeaveSubmissionState({this.submitting = false, this.error});
|
|
|
|
final bool submitting;
|
|
final String? error;
|
|
}
|
|
|
|
class LeaveSubmissionController extends Notifier<LeaveSubmissionState> {
|
|
@override
|
|
LeaveSubmissionState build() => const LeaveSubmissionState();
|
|
|
|
Future<CreatedLeaveDraft?> submit(Map<String, Object?> values) async {
|
|
if (state.submitting) return null;
|
|
state = const LeaveSubmissionState(submitting: true);
|
|
try {
|
|
final created = await ref
|
|
.read(leaveDraftSubmissionRepositoryProvider)
|
|
.create(values);
|
|
state = const LeaveSubmissionState();
|
|
return created;
|
|
} on LeaveDraftSubmissionException catch (error) {
|
|
state = LeaveSubmissionState(error: error.message);
|
|
return null;
|
|
}
|
|
}
|
|
}
|