Супер, изучаю!
Дима, привет!
Не путай Eslint и TypeScript. Это совершенно разные вещи и ругать каждого может решаться по-разному (хотя и бывают пересекающиеся ошибки). В данном случае у тебя ругается именно TS.
>> надо привести это добро к string[], но не приводиться...
Вопрос: а зачем тебе приводить к string[]? Что ты из этого получишь? Разбитая строка по разделителю-запятой да, будет массивом строк. Но прежде чем ее разбить, надо чтобы она была строкой. А ты смотрел какой тип у тебя у переменной query.coords? Спойлер: string | string[] | undefined. То есть у тебя из УРЛ уже на вход либо пусто, либо строка, либо массив строк. Да, УРЛ может в переменной нести массив, а не строку. Так вот, при этом ты пытаешься сразу вызывать coordsline.split(','), а метода split у массива нет. Вот тебе ТС и ругается, что нет такого метода. Что примечательно, у тебя выше строчкой вызывается query.coords.slice(1), и тут ошибки нет, но прикол в том, что метод slice есть и у строки и у массива, и тот и другой на выходе возвращает массив, поэтому там ошибки и не возникло. Вот если бы ты попытался вызвать splice (который есть только у массива, но не у строки), вот тогда бы еще там ошибка возникла.
В общем, суть решения таких задач - это не всегда приведение к каким-то типам как таковым, но уточнение по типу. В данном случае у тебя на вход string | string[] | undefined. Но ты знаешь, что тебе нужна только строка. Вот и добавь условие if(typeof query.coords === "string"). В таком случае дальше по коду ТС уже понимает, что здесь в области действия условия уже может быть только строка, но не что-то другое.
Данная задача на самом деле довольно сложная, поэтому я сильно сомневался, что ты ее решишь. Но голову поломать с ней полезно. Вот ПР. Только не иди пока дальше. Сначала изучи подробно этот вариант, и скорее всего дня три. Поиграйся как следует и пойми каждую строчку кода в src/pages/Cities/City. Пока не поймешь, нет смысла двигаться дальше. Это все важные и распространенные моменты.
Николай, привет! Посмотришь?
Не могу понять, как победить ругань Eslint на split() на 48 строке: надо привести это добро к string[], но не приводиться...
То есть это надо, чтобы при любом изменени координат в строке урла, запрос переотправлялся и возвращал ближайшие к точке заведения. Это нужно будет на карте. Правильно понял?
Понял, смотрю!
Дима, привет!
Ну ты куда-то не туда смотришь. Я же в прошлом сообщении писал: так как они берутся из данных города.
Сделай console.log(variables) и посмотри что там будет. А там будет center{lat:.., lng:...}, то есть компании все так же берутся по удаленности от указанной координаты.
Николай, привет!
Выяснил, что не очень понимаю, по какому признаку отбираются компании в городах. Но отбираются правильно. В предыдущей версии - по стемени близости к координатам в урле ,а сейчас как?
Ты только не путай формирование УРЛ и обработку УРЛ. Эти два моментам друг с другом никак не связаны (адрес в браузере можно и вручную прописать). а вот pages/..., то есть роутинг УРЛов - это уже разбор и дальнейшая логика. Но сейчас у тебя на странице города не полная логика обработки, так как УРЛы у тебя по маске Город/Координаты, но реально сейчас координаты никак не обрабатываются, так как они берутся из данных города. Там у тебя есть объект query, вот возьми еще в нем найди координаты, разбей строку на отдельные части (там lat, lng и zoom, тебе нужны только lat и lng), и если они есть, используй их для параметров запроса.
Похоже этого оказалась достаточно: https://github.com/Pivkarta/pivkarta.ru-2/commit/a68e17787f9a930fabbb3a42bae40e64c9af4072
Николай, вопрос: я затянул изменения и перегрузил докер, но ссыли на город не заработали. Понял, что работает с координатами типа /moskva/@55.753215,37.622504,12 , тогда как сейчас осталась /moskva .