169 похожих чатов

Друзья, натолкните на мысль. Есть todo доска, использую vue draggable.

Мне нужно сохранить порядок карточек после обновления страницы. На текущий момент бэк отдает мне карточки сортируя по важности, т.е. сначала сверху красные, потом зеленые. При изменении порядка элемента в массиве я знаю его старый и новый индекс. Теоретически, мне бы следовало завести новое значение index в БД для модели задачи и сортировать по нему. Однако возникает следующая проблема : я сделаю patch запрос и изменю Index карточки на новый, например 10. Однако в БД уже будет карточка с индексом 10, хотя по факту она или 9 или 11 ( в зависимости от того, с какой стороны дропнул). Делать patch на каждый из элементов массива выглядит тупой идеей. Что тут можно изящного изобрести?

13 ответов

18 просмотров

Индекс записи в БД и индекс как порядковый номер записи в массиве js - это разные индексы в принципе и они не должны пересекаться

Nikita- Автор вопроса
Master Craftsman
Индекс записи в БД и индекс как порядковый номер з...

я ничего и не говорю про пересечение id записи в бд и некого абстрактного индекса в массиве на фронтенде

так круто

Nikita- Автор вопроса
Master Craftsman
Тогда я немного не понял суть. Уточни

Сейчас бекэнд отдает мне задачи в следующем порядке '-priority'. Затем большой массив из api сортируется на 4 массива на фронте, и каждая карточка встает на свою колонку. При изменении порядка внутри колонки до обновления страницы все ок. После обновления бэк, естественно, отдает все в изначальном виде. Мне надо что-то выдумать, чтобы при обновлении страницы порядок карточек оставался.

Nikita- Автор вопроса
Master Craftsman
Тогда я немного не понял суть. Уточни

Если у модели Task завести еще одно поле, допустим columnIndex и патчить его исходя из нового индекса внутри массива фронта, то спустя какое-то время все элементы в бд могут быть с одним columnIndex и бэк, сортируя по этому полю снова выдаст какую-нибудь ерунду

Nikita
Если у модели Task завести еще одно поле, допустим...

Бек не выдаёт ерунду. Бек выдаёт правильно. Это тебе в принципе надо ещё одну подсортировку по доп полю делать, которое будет учитывать твои изменения. На каком основании ты передвинул элемент в колонке выше или ниже? Как ты это событие зафиксировал для бека?

Nikita- Автор вопроса
Nikita
screenshot Сейчас бекэнд отдает мне задачи в следующем порядк...

Передвинул карточку внутри столбца, поймал старый-новый индекс. Может к индексу добавлять таймштамп, и сотрировать по двум полям, сначала по Index по убыванию, потом таймштамп по возрастанию? Тогда новый элемент с Index 10 будет иметь более "свежий" таймштамп, чем старый элемент с фактически таким же index ? Хорошая мысля, кстати

Nikita
screenshot Передвинул карточку внутри столбца, поймал старый-...

Я подумал о времени, но тогда самое позднее время будет либо всегда первым, либо всегда последним

Nikita- Автор вопроса
Master Craftsman
Бек не выдаёт ерунду. Бек выдаёт правильно. Это те...

сотрировку внутри одной колонки пока для бэка никак не обозначаю. Только при перемещении между колонками патчу конкретную задачу, присваивая ей state новой колонки

Nikita- Автор вопроса
Master Craftsman
Я подумал о времени, но тогда самое позднее время ...

Так сначала отсортирует по index, в случае совпадения наверх поставит самый новый

Nikita- Автор вопроса
Master Craftsman
Я подумал о времени, но тогда самое позднее время ...

Уоттакуот, например. Должно ж работать по идее?

Nikita
screenshot Уоттакуот, например. Должно ж работать по идее?

Ну такое... Тебе придётся сделать отдельно механизм консистентности, иначе будут разрывы в индексах по полю column_index при перемещениях элементов между колонками.

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта