mirror of https://github.com/immich-app/immich.git
feat: check server feature to render OCR search option (#23325)
parent
9676da27c9
commit
106effca2e
@ -0,0 +1,38 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/models/server_info/server_features.model.dart';
|
||||
import 'package:immich_mobile/providers/server_info.provider.dart';
|
||||
|
||||
/// A utility widget that conditionally renders its child based on a server feature flag.
|
||||
///
|
||||
/// Example usage:
|
||||
/// ```dart
|
||||
/// FeatureCheck(
|
||||
/// feature: (features) => features.ocr,
|
||||
/// child: Text('OCR is enabled'),
|
||||
/// fallback: Text('OCR is not available'),
|
||||
/// )
|
||||
/// ```
|
||||
class FeatureCheck extends ConsumerWidget {
|
||||
/// A function that extracts the specific feature flag from ServerFeatures
|
||||
final bool Function(ServerFeatures) feature;
|
||||
|
||||
/// The widget to display when the feature is enabled
|
||||
final Widget child;
|
||||
|
||||
/// Optional widget to display when the feature is disabled
|
||||
final Widget? fallback;
|
||||
|
||||
const FeatureCheck({super.key, required this.feature, required this.child, this.fallback});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final serverFeatures = ref.watch(serverInfoProvider.select((s) => s.serverFeatures));
|
||||
final isFeatureEnabled = feature(serverFeatures);
|
||||
if (isFeatureEnabled) {
|
||||
return child;
|
||||
}
|
||||
|
||||
return fallback ?? const SizedBox.shrink();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue