Size: a a a

GraphQL — русскоговорящее сообщество

2021 May 28

DM

Denis Mironov in GraphQL — русскоговорящее сообщество
В компоненте пагинации или просто через url он может запросить, например .../page/55. В таком случае, например
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
это технически он может, а какая проблема этим решается?
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
offset в целом медленно работает, лучше его избегать https://use-the-index-luke.com/sql/partial-results/fetch-next-page
источник

DM

Denis Mironov in GraphQL — русскоговорящее сообщество
То есть присутствует компонент пагинации, который отображает номера страниц и пользователь может по ним непоследовательно переходить.
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
я это понял, почему нельзя сделать endless scroll?
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
TLDR если нужны прям оффсеты — то придется извращаться
источник

DM

Denis Mironov in GraphQL — русскоговорящее сообщество
Эта пагинация используется в админке и заказчику удобней иметь  именно постраничную.
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
тогда connections тут не помогут 🙂
источник

DM

Denis Mironov in GraphQL — русскоговорящее сообщество
пилить свой класс, чтобы переписать nodes?
источник

DM

Denis Mironov in GraphQL — русскоговорящее сообщество
Может у кого-нибудь здесь есть готовое решение? Буду крайне благодарен, плюс к карме и все такое)
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
Просто не использовать connection, написать поле принимающее limit offset
источник

DM

Denis Mironov in GraphQL — русскоговорящее сообщество
@dmitry_tsepelev Спасибо за помощь)
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
что–то вроде

field :seo_settings, [Types::SeoSettingType], null: false,
 preauthorize: {to: :index?, with: SeoSettingPolicy} do
   argument :limit, Integer, required: true
   argument :offset, Integer, required: true
 end

def seo_settings(limit:, offset:)
 SeoSetting.order(created_at: :desc).limit(limit).offset(offset)
end
источник

DM

Denis Mironov in GraphQL — русскоговорящее сообщество
Текущая реализация именно такая. Весь затык в том, чтобы вернуть верный total_count. А field уже возвращает пагинированный результат.
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
class Paginated
 def [](wrapped_type)
   Class.new(BaseType) do
     field :items, [wrapped_type], null: false, method: :to_a
     field :total_count, Integer, null: false
   end
 end
end

class PageBuilder
 def initialize(scope, limit, offset)
   @scope = scope
   @limit = limit
   @offset = offset
 end

 def items
   @scope.limit(limit).offset(offset)
 end

 def total_count
   @scope.count
 end
end

class SomeType
 field :seo_settings, Paginated[Types::SeoSettingType], null: false,
   preauthorize: {to: :index?, with: SeoSettingPolicy} do
     argument :limit, Integer, required: true
     argument :offset, Integer, required: true
   end

 def seo_settings(limit:, offset:)
   PageBuilder.new(SeoSetting.order(created_at: :desc), limit, offset)
 end
end
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
что–то такое, вариантов уйма
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
и можно даже сделать через , paginate: true чтоб не таскать это все
источник

DM

Denis Mironov in GraphQL — русскоговорящее сообщество
Круто, попробую👍
источник

DM

Denis Mironov in GraphQL — русскоговорящее сообщество
Да, уже реализовал! Дельное выступление на конфе два года назад!
источник
2021 May 30

AM

Art Mas in GraphQL — русскоговорящее сообщество
Друзья, подскажите, пожалуйста

Вопрос по apolloclient

Есть запрос А содержащий список объектов с укороченными данными. В нём у объектов только поле id, masterName, __typename

Есть запрос Б который подтягивает один объект с полной информацией. В нём есть поля id, masterName, __typename, data: {}, итд

Как мне обновить дополненными данными (запрос Б) объект из запроса A ?

Проще говоря: есть селект  c укороченными данными, при выборе из селекта уходит запрос для получения полной инфы по выбранному option'у, на onComplete надо дополнить укороченный объект полной инфой. updateQuery не работает, так как в полном объекте есть поля, которых нет в укороченном
источник