Николай, привет!
Понимаю ,что затык идиотский, но решить не могу. Прошу помощи.

Надо взять отсюда https://github.com/Fi1osof/pivkarta.ru-2/blob/5e1a4937498f2a6efb8c3cc6dbd0ca1a690c2e02/src/pages/Beers/Beer/index.tsx#L81
линки фоток и привести к виду

var images = { [ { src: 'some image url', title: 'image title', description: 'image description' }, ... ] }
Это для запихования картинок в Lightbox



Там с типами следующая тонкость: у тебя вот такой тип: content: Maybe<any[] | Record<string, any>> | undefined
То есть или пусто, или массив, или объект. То есть проверкой на наличие ты уже отметаешь undefined, и у тебя остается или массив или объект. Но по прежнему или то, или другое. Следовательно это лечится проверкой на то, что это не массив.
const blocks = beerinfo.content && !Array.isArray(beerinfo.content) && beerinfo.content?.blocks
Тогда ошибка пропадает, потому что остается только один вариант - это объект.

>> И ещё вопрос: в ImageList Material Ui можно сделать эффект лайтбокса или лучше react-lightbox-component использовать?
MUI не имеет эффектов типа лайтбокса, поэтому да, надо допкомпонент использовать.

Николай, привет!
Закинул коммит с ошибкой - опять с типами не понимаю: https://github.com/Pivkarta/pivkarta.ru-2/blob/2d6787948f2b5d7c2ee848e869619957847364a6/src/pages/Beers/Beer/index.tsx#L211


И ещё вопрос: в ImageList Material Ui можно сделать эффект лайтбокса или лучше react-lightbox-component использовать?

ПыСы: пока все в одном файле, но я во вьюху перекну обязательно!
Отправил PR, изучай: https://github.com/Pivkarta/pivkarta.ru-2/pull/10

Правда пока не очень отзывчивое текстовое поле получилось, потому что при вводе данных в нее выполняется изменение адресной строки, и только потом данные из эттой адресной строки прилетают в само поле. Из-за это не сразу появляются силы при вводе. Пока не придумал как сделать получше, так как в противном случае просто теряется функциональность. Потом что-нить придумаю.
Спасибо, ковыряю)

>> У тебя сейчас поиск рассчитан на точное вхождение. Вряд ли это то, что ты хотел. Правильней так:
-- потерялось что-то(

return { statusCode: !result.data.beersConnection.edges.length ? 404 : undefined, }
Вот этот вариант тебе тоже здесь не подходит, так как если не найдено ни одной записи, то выводится страница 404 без возможности изменить фильтр. Это надо убирать и делать кастомную надпись типа "Не найдено ни одного вида пива".
if (search) { where.name = search }

У тебя сейчас поиск рассчитан на точное вхождение. Вряд ли это то, что ты хотел. Правильней так:

if (search) { // eslint-disable-next-line @typescript-eslint/camelcase where.name_contains = search }


const search: BeerSearch = query.search && typeof query.search === 'string' && query.search

Здесь двойная проверка на query.search, чтобы было наверняка?))