wierszuGraphQL & Relay Filtering UI
Jeśli było zbudować Kalendarza Google za pomocą przekaźnika, w jaki sposób zorganizować schemat GraphQL i pojemniki Przekaźnik/komponenty prawidłowo obsługiwać pokazując & ukrywa wiele kalendarzy?
PRÓBA
Można by sobie wyobrazić schemat takiego:
viewer {
user {
calendars(calendarIds: [String]) {
edges,
node {
name,
id,
events(dates: [Date]) {
... edges, node, eventinfo...
}
}
}
}
}
}
Więc mogę ciągnąć w dół wszystkie kalendarze i wszystkie zdarzenia lub specjalnego kalendarza, lub co cię mieć .
Kształtowanie pojemniki i elementy przekaźnikowe, to sobie wyobrazić następujące:
<CalendarView Container>
<CalendarView>
<WeekView> or <MonthView> or <Agenda> etc...
<Event>
, że pojemnik przekaźnik CalendarView tworzy fragment wzywający kalendarze oraz komponent CalenderView
wykorzystuje setVariables
aby włączyć Wykazywanie/ukrywanie tego kalendarza w widoku.
Problem, który mam napotykając (a to, że mój zawrót głowy) jest to, że Day
/Week
/Month
/Agenda
elementy są kombinatoryczne widoki - to znaczy, że wymagają dane z wszystkich wybranych zdarzeń.
działki zgęstnieje
Teraz to brzmi dobrze - mają CalendarView
ustawić zmienne calendarId i przekazać zdarzeń powstałych w dół, prawda? Cóż ... trochę. Teraz fragment dla CalendarView
jest skonstruowany z zestawem calendarIds
, tak że włączanie lub wyłączanie jednego calendar
zmienia całe drzewo tego, co ma zostać pobrane.
GOTCHA?
O ile mogę stwierdzić, przekaźnik widzi każdą kombinację calendarIds
jako zupełnie inne pobranie. Tak więc, gdy przełączam się na nowe id
, pobiera się zdarzenia, nawet te kalendarze, które już zostały pobrane.
Put kod mądry:
fragment calendar(calendarIds: [1, 2]) { ... }
jest całkowicie inny pobrać z:
fragment calendar(calendarIds: [1, 2, 3]) { ... }
... Jest źle. W tych kalendarzach może być dużo wydarzeń, a nadmiar jest zabójcą.
Teoretycznie mógłbym utworzyć kontener na kalendarz, ale w jaki sposób połączyć wydarzenia w tych kalendarzach i połączyć je w wspólny pod-komponent? Kalendarzy nie można ułożyć warstwowo, ponieważ zdarzenia muszą się poruszać w reakcji na inne zdarzenia, nawet te w osobnych kalendarzach (przesuwanie w lewo/w prawo, aby wyświetlać je obok siebie).
Myśli? Mój mózg boli.
Czy istnieje dokumentacja w dowolnym miejscu na głównym polu 'węzłów'? Implementujemy pole węzła głównego za pośrednictwem 'graphql-relay', ale nie mogę znaleźć niczego na' węzłach'. –
Co więcej, jest to "pole identyfikujące w liczbie mnogiej" podobne do powyższego podejścia? Wydaje mi się, że podobnie jak "pole identyfikujące w liczbie mnogiej", użycie pola 'nodes' wymagałoby obiektów do mapowania jeden-do-jednego do identyfikatorów. Idealnie byłoby, gdybym mógł zapytać używając zmiennych do dużego zestawu obiektów (zdarzeń), które nie są ładnie pogrupowane przez identyfikatory wejściowe (input: [Array of 3 ids], output: [Array of n events]), ale oba podejścia wydają się wymagać utworzenia jakiegoś pośredniego obiektu (input: [Array of 3 ids], output: [Array of 3 objects with events]). –
Pole 'węzłów' nie jest udokumentowane, ale działa tak jak opisano powyżej. Nie ma potrzeby stosowania pośrednich obiektów wynikowych, tj. Można wykonać 'węzeł (identyfikatory: [tablica 3 identyfikatorów zdarzeń])' i zwrócić '[tablica 3 zdarzeń]' - wyniki zdarzeń muszą być w tej samej kolejności, co argumenty. –