Wyszukiwanie w witrynie

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.