JavaScript/GraphQL dodawanie fragmentów warunkowo
Mam funkcję w JavaScript, która wysyła żądanie fetch do punktu końcowego graphQL. Moim celem jest dodanie fragmentu do mojego zapytania graphQL w oparciu o parametr przekazany do funkcji JavaScript, na przykład moja funkcja wygląda tak:
const getEvent = async (id, lang) => {
const data = await fetchAPI(`
fragment EventFields on Event {
title
slug
date
}
fragment BnFields on Event {
bn {
content
subtitle
}
}
query fetchEvent($id: ID!, $idType: EventIdType!) {
event(id: $id, idType: $idType) {
...EventFields
content
}
}
}
}
Chciałbym dodać fragment BnFields, jeśli parametr lang w funkcji getEvent jest równy bn. Wiem, że mogę to osiągnąć, deklarując dwa osobne zapytania w zależności od parametru lang, ale zastanawiałem się, czy istnieje bardziej optymalny sposób wewnątrz samego GraphQL, aby dodać fragment w oparciu o zmienną. Każda pomoc byłaby naprawdę mile widziana.
Odpowiedź #1
Dokładnie do tego służy dyrektywa @include:
query fetchEvent($id: ID!, $idType: EventIdType!, $isBn: Boolean!) {
event(id: $id, idType: $idType) {
...EventFields
...BnFields @include(if: $isBn)
content
}
}
Następnie dodaj isBn: lang === 'bn' do zmiennych, które przekazujesz wraz z zapytaniem.
