Я вот даже и не припомню когда в последний раз видел, чтобы так упорно пытались натянуть сову на глобус... Ты опять слишком много написал и слишком много всего попробовал, забыв сосредоточиться на самом важном... Давай в блиц вопрос-ответ. Отчвечай четко на каждый вопрос, не убегая в сторону. Здесь totalTime какой тип имеет?

Если я правиль понял в этом коде: чтобы получить общую сумму просто нужно передать массив timer где у тебя стоит троеточие. Собственно, что я и попытался сделать, но когда я его туда добавил TS выдал ошибку Operator '+=' cannot be applied to types 'number' and 'Timer_Fragment'.ts(2365). Тогда я попробовал преоброзовать типы totalTime и timersContent тоже в Timer_Fragment, так у timer у нас тип Timer_Fragment и ты вроде выше писал, что с такими объектами можно манипулировать (если конечно правильно понял), но TS все равно выдает ошибку и такое ощущение, что он все-таки его не преоброзовал, так как выше в коде: let totalTime = 0; все равно определяется, как number, пробовал разные способы, там в коде закоммитил, чтобы было видно, что пробовал, но в итоге не получилось. Плюс в этом коде: TS выдает ошибку All destructured elements are unused. Гуглил, но ничего вразумительного не смог найти, как исправить. Отправил коммит: https://github.com/p1aton/freecode.academy/commit/883f5e0fd03019c03cb4ca3577c7bb7abfac2acc

Можно и BeerWhereInput использовать. Только тут придется не одно пиво получать, а массив, то есть из него еще выдернуть конечную сущность. Но в данном случае я бы поступил иначе. Если задача в том, чтобы получить именно заведения с конкретным условием внутри конкретного объекта пива, то я бы условие адреса добавил в условие получения адресов. Это в любом случае было бы логичней. Ведь если ты ищешь пиво с учетом адреса, значит и адреса тебе нужны конкретные. Схема тебе позволяет. Ну а далее, если ты, получив данные, хочешь убедиться, что заведения нужные в нем есть, просто проверишь beer.places.length и все. Дальше решишь что делать, если заведений в нем нет. Иначе тут делать нет смысла. Ведь у тебя четкий ID пива, так что по сути искать не надо. И не должно быть такого, что оно то есть, то нету. А то завтра добавят тебе пиво и одно заведение, где оно продается, у тебя появится страница на сайте, она проиндексируется, а потом заведение закроется и все, пиво будет отдавать 404. Это разве дело?

Николай, нужна твоя подсказка... Опять. Есть gql звпрос: Получает id пива - возвращает что попросил. Добавляю places{ id Place{ name address } } Получаю данные заведений, в которых это пиво присутствует. А вот приладить условие не получается, так как places_some отсутствует в BeerWhereUniqueInput ,что понятно - там вообще только id присутствует. Вопрос: может вообще на странице пива не BeerWhereUniqueInput, а BeerWhereInput?

Смотри, у нас цикл do...while. Читай документацию и пройди урок. То есть у нас сразу выполняется блок do {} и потом, если while удовлетворяет условию, то опять do {} выполняется в полной мере, пока while не перестанет отвечать условию или мы не выйдем из цикла самостоятельно (к примеру, с помощью оператора break, который мы здесь так же используем). Так вот, перед началом цикла мы уже создали массив tasksListWithHierarchy, засунув в него все таски. Далее, в do мы работаем именно с этим массивом, при чем не создавая какой-либо копии, а именно меняя его, то есть переставляя элементы. При этом массив остается одним и тем же объектом (обрати внимание, что переменная объявлена как const, при этом мы нигде не создаем новую переменную). И тут важно понимать, что при каждой итерации блок do {} выполняется от начала и до конца (или до точки выхода), как будто в первый раз. Вот и смотри что происходит внутри этого блока. Первое - мы получаем искомый элемент. Хоть тут условие поиска и не простое, но все же принцип один и тот же - мы используем нативный метод Array.find(). Опять-таки, смотри документацию. Метод find() всегда работает с начала массива. То есть тут нет логики "Мы перебирали массив, нашли элемент, и потом опять перебираем дальше массив с найденного элемента". Тут всегда логика "Ищем элемент с начала массива". Просто каждый раз у нас измененный массив. То же самый, но измененный (то есть элементы переставленные). Вот и получается, что сначала мы искали, и на 2.1 кто-то ссылался, а потом опять искали, но получилось, что на него уже никто не ссылается (те, что ссылались, переместили). И в этот момент он у нас первый найденный элемент, отвечающий условию. И вот мы его и переместили. И пошли опять выполнять do {}. Но в какой-то момент мы не нашли ни одного элемента, отвечающего условию, и вышли из цикла. Вот и все.

Это понятно, что опечатка, я про другое: мы уже прошли 2.1 в начале, но на него ссылались 2.1.1 и 2.1.2 и мы его оставили на месте. Мы повторно обошли массив, чтобы найти его снова?

Ты про это? >> Теперь на 2.1 уже никто не ссылается. Перемещаем его в 2.1 (он туда уходит вместе со своими дочерними) Тут опечатка. Перемещаем его конечно же 2, а не в 2.1 Спасибо, поправил.