QueryObserver test created

This commit is contained in:
Kingkor Roy Tirtho
2022-04-13 13:53:02 +06:00
parent 06e15c3096
commit 181c5f8616
7 changed files with 914 additions and 12 deletions
+13 -3
View File
@@ -120,7 +120,7 @@ class QueryFilters {
bool? exact;
bool? inactive;
bool Function(Query query)? predicate;
bool? queryKey;
QueryKey? queryKey;
bool? stale;
bool? fetching;
@@ -162,7 +162,7 @@ class RefetchableQueryFilters<TPageData> extends QueryFilters
bool? exact,
bool? inactive,
bool Function(Query query)? predicate,
bool? queryKey,
QueryKey? queryKey,
bool? stale,
bool? fetching,
this.refetchPage,
@@ -212,7 +212,7 @@ class InvalidateQueryFilters<TPageData>
bool? exact,
bool? inactive,
bool Function(Query query)? predicate,
bool? queryKey,
QueryKey? queryKey,
bool? stale,
bool? fetching,
bool Function(TPageData lastPage, int index, List<TPageData> allPages)?
@@ -452,6 +452,11 @@ class QueryObserverOptions<
QueryMeta? meta,
bool? structuralSharing,
bool? defaulted,
ShouldRetryFunction<TError>? retry,
RetryDelayFunction<TError>? retryDelay,
QueryBehavior<TQueryFnData, TError, TQueryData>? behavior,
GetPreviousPageParamFunction<TQueryFnData>? getPreviousPageParam,
GetNextPageParamFunction<TQueryFnData>? getNextPageParam,
}) : super(
queryKey: queryKey,
queryKeyHashFn: queryKeyHashFn,
@@ -464,6 +469,11 @@ class QueryObserverOptions<
meta: meta,
structuralSharing: structuralSharing,
defaulted: defaulted,
behavior: behavior,
getNextPageParam: getNextPageParam,
getPreviousPageParam: getPreviousPageParam,
retry: retry,
retryDelay: retryDelay,
);
QueryObserverOptions.fromJson(Map<String, dynamic> json)
+6 -2
View File
@@ -1,4 +1,6 @@
import 'dart:async';
import 'dart:collection';
import 'dart:convert';
import 'dart:math';
import 'package:fl_query/src/core/models.dart';
@@ -280,7 +282,9 @@ class Query<TQueryFnData extends Map<String, dynamic>, TError,
data = prevData as TData;
} else if (this.options.structuralSharing != false) {
// Structurally share data between prev and new data if needed
data = replaceEqualDeep(prevData, data);
final merged =
Map<String, dynamic>.from(replaceEqualDeep(prevData, data));
data = merged as TData;
}
// Set data and mark it as cached
_dispatch(Action(
@@ -360,7 +364,7 @@ class Query<TQueryFnData extends Map<String, dynamic>, TError,
// Use the options from the first observer with a query function if no function is found.
// This can happen when the query is hydrated or created with setQueryData.
if (this.options.queryFn == null) {
var observer =
final observer =
_observers.firstWhereOrNull((x) => x.options.queryFn != null);
if (observer != null) {
_setOptions(QueryOptions<TQueryFnData, TError, TData>(
@@ -171,7 +171,7 @@ class QueryCache extends Subscribable<QueryCacheListener> {
void notify(QueryCacheNotifyEvent event) {
notifyManager.batch(() {
for (var listener in listeners) {
for (final listener in listeners) {
listener(event);
}
});
@@ -266,7 +266,7 @@ class QueryClient {
QueryFunction<TQueryFnData, dynamic>? queryFn,
FetchQueryOptions<TQueryFnData, TError, TData>? options,
}) {
var defaultedOptions = this.defaultQueryOptions(
final defaultedOptions = this.defaultQueryOptions(
QueryObserverOptions<Map<String, dynamic>, dynamic, Map<String, dynamic>,
TData>(
queryFn: queryFn,
@@ -285,7 +285,7 @@ class QueryClient {
);
// returning 0 indicates turing off retry
defaultedOptions.retry ??= (_, __) => 0;
var query = _queryCache.build<Map<String, dynamic>, dynamic, TData>(
final query = _queryCache.build<Map<String, dynamic>, dynamic, TData>(
this, defaultedOptions);
return query.isStaleByTime(defaultedOptions.staleTime)
? query.fetch(defaultedOptions)
@@ -313,7 +313,7 @@ class QueryClient {
TQueryData extends Map<String, dynamic>>(
QueryObserverOptions<TQueryFnData, TError, TData, TQueryData>? options) {
if (options?.defaulted == true) return options!;
var defaultedOptions =
final defaultedOptions =
QueryObserverOptions<TQueryFnData, TError, TData, TQueryData>.fromJson({
...(_defaultOptions.queries?.toJson() ?? {}),
...(getQueryDefaults(options?.queryKey)?.toJson() ?? {}),
@@ -94,6 +94,9 @@ class QueryObserver<
Timer? _refetchInterval;
Duration? _currentRefetchInterval;
@protected
Timer? get refetchInterval => _refetchInterval;
QueryObserver(
this._client,
QueryObserverOptions<TQueryFnData, TError, TData, TQueryData>? _options,
@@ -225,9 +228,9 @@ class QueryObserver<
throw UnimplementedError("COULD NOT IMPLEMENT DUE TO LANGUAGE LIMITATIONS");
}
Future<QueryObserverResult<TData, TError>> getNextResult(
Future<QueryObserverResult<TData, TError>> getNextResult([
bool? throwOnError,
) {
]) {
final completer = Completer<QueryObserverResult<TData, TError>>();
var unsubscribe;
unsubscribe = subscribe((result) {
@@ -445,7 +448,8 @@ class QueryObserver<
try {
data = options.select?.call(state.data);
if (options.structuralSharing != false) {
data = replaceEqualDeep(prevResult?.data, data);
data = Map<String, dynamic>.from(
replaceEqualDeep(prevResult?.data, data)) as TData;
}
if (options.select != null && data != null) {
_previousSelect = SelectQuery<TQueryData, TData>(