feat: complete leave approval MVP
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
import 'package:aioa_mobile/core/auth/auth_session_controller.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/profile/data/device_repository.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
final deviceRepositoryProvider = Provider(
|
||||
(ref) => DeviceRepository(
|
||||
client: ref.watch(authenticatedHttpClientProvider),
|
||||
baseUrl: RuntimeConfig.apiBaseUrl,
|
||||
),
|
||||
);
|
||||
final deviceListProvider =
|
||||
AsyncNotifierProvider<DeviceController, List<UserDeviceItem>>(
|
||||
DeviceController.new,
|
||||
);
|
||||
|
||||
class DeviceController extends AsyncNotifier<List<UserDeviceItem>> {
|
||||
@override
|
||||
Future<List<UserDeviceItem>> build() =>
|
||||
ref.read(deviceRepositoryProvider).list();
|
||||
Future<String?> revoke(String id) async {
|
||||
try {
|
||||
final repository = ref.read(deviceRepositoryProvider);
|
||||
final current = await repository.isCurrent(id);
|
||||
await repository.revoke(id);
|
||||
if (current) {
|
||||
await ref.read(authSessionProvider.notifier).invalidateDeviceSession();
|
||||
} else {
|
||||
state = AsyncData([
|
||||
for (final item in state.value ?? const <UserDeviceItem>[])
|
||||
if (item.id != id) item,
|
||||
]);
|
||||
}
|
||||
return null;
|
||||
} catch (error) {
|
||||
return error.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user