feat(infinite-query): add setInfiniteQueryData support

This commit is contained in:
Kingkor Roy Tirtho
2022-09-14 13:04:55 +06:00
parent 95b1837620
commit 6eb7b2a429
5 changed files with 36 additions and 18 deletions
+17
View File
@@ -268,6 +268,23 @@ abstract class BaseQuery<T extends Object, Outside, Error>
return isConnectedToInternet(await _connectivity.checkConnectivity());
}
/// can be used to update the data manually. Can be useful when used
/// together with mutations to perform optimistic updates or manual data
/// updates
/// For updating particular queries after a mutation using the
/// `QueryBowl.refetchQueries` is more appropriate. But this one can be
/// used when only 1 query needs get updated
///
/// Every time a new instance of data should be returned because of
/// immutability
void setQueryData(QueryUpdateFunction<T> updateFn) async {
final newData = await updateFn(data);
if (data == newData) return;
data = newData;
status = QueryStatus.success;
notifyListeners();
}
/// invalidates the query
///
/// Forcefully makes the query stale & expired which results in a refetch
@@ -1,3 +1,5 @@
// ignore_for_file: invalid_use_of_protected_member
import 'package:fl_query/src/infinite_query.dart';
import 'package:fl_query/src/models/infinite_query_job.dart';
import 'package:fl_query/src/query_bowl.dart';
@@ -1,3 +1,5 @@
// ignore_for_file: invalid_use_of_protected_member
import 'package:fl_query/src/models/mutation_job.dart';
import 'package:fl_query/src/mutation.dart';
import 'package:fl_query/src/query_bowl.dart';
-17
View File
@@ -97,23 +97,6 @@ class Query<T extends Object, Outside> extends BaseQuery<T, Outside, dynamic> {
);
}
/// can be used to update the data manually. Can be useful when used
/// together with mutations to perform optimistic updates or manual data
/// updates
/// For updating particular queries after a mutation using the
/// `QueryBowl.refetchQueries` is more appropriate. But this one can be
/// used when only 1 query needs get updated
///
/// Every time a new instance of data should be returned because of
/// immutability
void setQueryData(QueryUpdateFunction<T> updateFn) async {
final newData = await updateFn(data);
if (data == newData) return;
data = newData;
status = QueryStatus.success;
notifyListeners();
}
String get debugLabel => "Query($queryKey)";
@override
+15 -1
View File
@@ -598,10 +598,24 @@ class QueryBowl extends InheritedWidget {
/// Mostly used in combination with [onMutate] callback of
/// [MutationBuilder] & [useMutation] for optimistic updates
void setQueryData<T extends Object, Outside>(
String queryKey, QueryUpdateFunction<T> updateCb) {
String queryKey,
QueryUpdateFunction<T> updateCb,
) {
getQuery<T, Outside>(queryKey)?.setQueryData(updateCb);
}
/// Sets [InfiniteQuery]'s data manually
///
/// Mostly used in combination with [onMutate] callback of
/// [MutationBuilder] & [useMutation] for optimistic updates
void
setInfiniteQueryData<T extends Object, Outside, PageParam extends Object>(
String queryKey,
QueryUpdateFunction<Map<PageParam, T?>> updateCb,
) {
getInfiniteQuery<T, Outside, PageParam>(queryKey)?.setQueryData(updateCb);
}
/// resets all the queries matching the passed List of queryKeys
///
/// If an empty list of [queryKeys] is passed then all of the queries