mirror of
https://github.com/friebetill/TubeCards.git
synced 2025-08-15 02:26:03 +08:00
116 lines
3.3 KiB
Dart
116 lines
3.3 KiB
Dart
import 'package:ferry/typed_links.dart';
|
|
|
|
import '../../services/tubecards/card_service.dart';
|
|
import '../fragments/__generated__/offer_fragment.data.gql.dart';
|
|
import '../fragments/__generated__/offer_fragment.req.gql.dart';
|
|
import '../mutations/__generated__/subscribe.data.gql.dart';
|
|
import '../mutations/__generated__/subscribe.var.gql.dart';
|
|
import '../queries/__generated__/deck.data.gql.dart';
|
|
import '../queries/__generated__/deck.req.gql.dart';
|
|
import '../queries/__generated__/due_cards.data.gql.dart';
|
|
import '../queries/__generated__/due_cards.req.gql.dart';
|
|
import '../queries/__generated__/offer.data.gql.dart';
|
|
import '../queries/__generated__/offer.req.gql.dart';
|
|
import 'helpers/cards_helper.dart';
|
|
import 'helpers/decks_helper.dart';
|
|
import 'helpers/subscribed_offers_helper.dart';
|
|
|
|
const String subscribeHandlerKey = 'subscribeHandler';
|
|
|
|
void subscribeHandler(
|
|
CacheProxy proxy,
|
|
OperationResponse<GSubscribeData, GSubscribeVars> response,
|
|
) {
|
|
if (response.hasErrors) {
|
|
return;
|
|
}
|
|
|
|
const updateMethods = [
|
|
_updateDeckRequest,
|
|
_updateDecksRequest,
|
|
_updateCardsRequest,
|
|
_updateDueCardsRequest,
|
|
_updateSubscribedOffersRequest,
|
|
_updateOfferRequest,
|
|
_updateOfferFragment,
|
|
];
|
|
|
|
for (final updateMethod in updateMethods) {
|
|
updateMethod(proxy, response.data!.subscribe);
|
|
}
|
|
}
|
|
|
|
void _updateDeckRequest(
|
|
CacheProxy proxy,
|
|
GSubscribeData_subscribe response,
|
|
) {
|
|
final request = GDeckReq((b) => b..vars.id = response.offer.deck.id);
|
|
final cachedResponse = proxy.readQuery(request);
|
|
|
|
final deck = GDeckData_deck.fromJson(response.offer.deck.toJson())!;
|
|
final updatedCachedResponse = cachedResponse != null
|
|
? cachedResponse.rebuild((b) => b.deck.replace(deck))
|
|
: GDeckData((b) => b.deck.replace(deck));
|
|
|
|
proxy.writeQuery(request, updatedCachedResponse);
|
|
}
|
|
|
|
void _updateDecksRequest(
|
|
CacheProxy proxy,
|
|
GSubscribeData_subscribe response,
|
|
) {
|
|
DecksHelper(proxy, isActive: true)
|
|
..addDeck(response.offer.deck.toJson())
|
|
..changeTotalCountBy(1);
|
|
}
|
|
|
|
void _updateCardsRequest(
|
|
CacheProxy proxy,
|
|
GSubscribeData_subscribe response,
|
|
) {
|
|
CardsHelper(proxy)
|
|
.changeTotalCountBy(response.offer.deck.cardConnection.totalCount);
|
|
}
|
|
|
|
void _updateDueCardsRequest(
|
|
CacheProxy proxy,
|
|
GSubscribeData_subscribe response,
|
|
) {
|
|
proxy.writeQuery(
|
|
GDueCardsReq((b) => b.vars.first = dueCardsPageSize),
|
|
GDueCardsData.fromJson(response.toJson()),
|
|
);
|
|
}
|
|
|
|
void _updateSubscribedOffersRequest(
|
|
CacheProxy proxy,
|
|
GSubscribeData_subscribe response,
|
|
) {
|
|
SubscribedOffersHelper(proxy)
|
|
..insertOffer(GOfferFragmentData.fromJson(response.offer.toJson())!)
|
|
..changeTotalCountBy(1);
|
|
}
|
|
|
|
void _updateOfferRequest(
|
|
CacheProxy proxy,
|
|
GSubscribeData_subscribe response,
|
|
) {
|
|
final request = GOfferReq((b) => b..vars.id = response.offer.id);
|
|
final cachedResponse = proxy.readQuery(request);
|
|
|
|
final updatedCacheResponse = cachedResponse!.rebuild(
|
|
(b) => b.offer.replace(GOfferData_offer.fromJson(response.offer.toJson())!),
|
|
);
|
|
proxy.writeQuery(request, updatedCacheResponse);
|
|
}
|
|
|
|
void _updateOfferFragment(
|
|
CacheProxy proxy,
|
|
GSubscribeData_subscribe response,
|
|
) {
|
|
proxy.writeFragment(
|
|
GOfferFragmentReq((u) => u.idFields = {'id': response.offer.id}),
|
|
GOfferFragmentData.fromJson(response.offer.toJson()),
|
|
);
|
|
}
|