Как сделать фильтрацию в AWS Amplify GraphQL Client - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь реализовать фильтр GraphQL с помощью Amplify GraphQL Client.Я получил список задач и хотел получить список задач с полным статусом.

Документация показывает только, как получить все элементы и отдельный элемент

const allTodos = await API.graphql(graphqlOperation(queries.listTodos));
console.log(allTodos);

Может кто-нибудь указать мне, как применить фильтр к списку Тодос, чтобы он возвращал задачи только с завершенным статусом.

Я пытался сделать следующее, но это неправильно.

API.graphql(graphqlOperation(queries.listTodos(filter: {
    status: {
        eq: "completed"
    }
})));

1 Ответ

0 голосов
/ 31 декабря 2018

Я думаю, что у меня есть ответ на ваш вопрос, но у меня также есть похожий вопрос относительно запросов AWS Amplify codegen, мутаций и т. Д. Если вы посмотрите на код, сгенерированный внутри папки ~/graphql, выВы найдете файл объявления, подобный следующему:

export const listOrganizations = `query ListOrganizations(
  $filter: ModelOrganizationFilterInput
  $limit: Int
  $nextToken: String
) {
  listOrganizations(filter: $filter, limit: $limit, nextToken: $nextToken) {
    items {
      id
      name
      address
    }
    nextToken
  }
}
`;

Здесь вы можете видеть, что первый параметр запроса ListOrganizations (в вашем случае запрос ListTodos) принимает первый аргумент filter: $filter.Я уже понял, что вы можете изменить этот запрос, выполнив следующее ...

API.graphql(graphqlOperation(queries.listTodos, {
    filter: {
        status: {
            eq: "completed"
        }
    }
})));

Это должно отфильтровать все Todos, кроме тех, где их status равен completed.Проблема, с которой я сталкиваюсь, заключается в том, что я хочу включить разные уровни контроля доступа, чтобы каждый, у кого есть группа пользователей Cognito Admin, мог видеть @model, а также @owner.И я смог заставить все это работать с помощью преобразователя @auth, но теперь моя проблема в том, что на некоторых экранах я хочу отображать только некоторые объекты, которые являются owner этой сущности, и потому что я также Admin по умолчанию API получает все.Я хочу использовать это @filter или ModelOrganizationFilterInput, чтобы только дать мне данные, где я являюсь владельцем.Единственный способ сделать это - добавить поле owner в мою схему, но тогда API всегда предоставляет поле владельца, и я хочу отфильтровать это поле.

Единственная документация, которую я могу найти о том, как методы aws-amplify API и graphqlOperation, находится здесь: https://aws -amplify.github.io / docs / js / api но примеров не так много, и они не показывают, как работает API на клиенте.Я застрял.

...