Vanilla Disintegratev1.0.0
RU
На этой странице

Библиотека не решает, как долго пользователю доступно undo. Хранение явно включается и полностью контролируется приложением.

Сохранить удалённый узел

const operation = effects.remove(element, {
  retain: true,
});

await operation.finished;
const id = operation.removalId;

При retain: true отсоединённый оригинал хранится во внутреннем Map под непрозрачным RemovalId. Библиотека не перемещает его в скрытый контейнер или DocumentFragment.

Забрать и восстановить

take(id) одновременно возвращает узел и удаляет сильную ссылку из хранилища.

if (id) {
  const retained = effects.take(id);

  if (retained) {
    destination.append(retained);
    effects.restore(retained);
  }
}

Приложение выбирает append, prepend, before или метод фреймворка. Библиотека работает уже с получившейся геометрией.

Освободить без восстановления

effects.discard(removalId); // boolean
effects.discardAll(); // количество освобождённых записей

destroy() также очищает всё хранилище.

Контроль памяти

TTL и лимита записей намеренно нет: библиотека не удаляет контент за пользователя. Поэтому каждый неиспользованный ID нужно забрать через take(), освободить через discard() либо очистить вместе с остальными через discardAll().

Условие задаёт приложение: закрытие undo-toast, смена маршрута, фиксация истории или любое другое бизнес-событие.

Удалить навсегда

effects.remove(element); // retain: false по умолчанию

После завершения ни объект операции, ни хранилище библиотеки не удерживают элемент.

Редактировать страницу на GitHub