Перейти к основному содержимому

Операции с задачами

Добавление новой задачи

Чтобы добавить новую задачу в список, используйте метод addTask(). Пример ниже добавляет задачу под указанным родителем:

list.addTask({
id: "1.1.1",
project: "first",
parent: "1.1",
targetId: "1.1.2",
reverse: true,
task: {
text: "Task 1.1.1",
}
});

Копирование и вставка задачи

Копирование и вставка

Самый быстрый способ скопировать и вставить задачу — метод copyTask(). Передайте следующие параметры:

  • id — идентификатор копируемой задачи
  • project — идентификатор целевого проекта, если он существует
  • targetId — идентификатор целевой задачи, куда вставляется скопированная задача
  • остальные параметры необязательны

Фрагмент ниже копирует задачу в новый проект:

list.copyTask({ 
id: "1.1", // ID копируемой задачи
join: false, // сбрасывает копии других задач и копирует только эту
project: "p_2", // ID будущего проекта (если существует)
parent: "2.1", // ID будущего родителя
targetId: "2.1.2", // ID целевой задачи
reverse: true // вставить задачу перед целевой
});

Копирование в буфер обмена

Чтобы скопировать задачу в буфер обмена без вставки, передайте идентификатор задачи методу copyTask():

list.copyTask({ 
id: "1.1"
});

Сохранение идентификаторов других копий

информация

Чтобы скопировать задачу и сохранить ранее скопированные задачи, передайте join: true методу copyTask(). В противном случае метод копирует только указанную задачу и сбрасывает все предыдущие копии.

Вставка из буфера обмена

Вставьте скопированную задачу из буфера обмена в нужное место через метод pasteTask(). Фрагмент ниже вставляет скопированную задачу рядом с целевой:

list.pasteTask({ 
parent: "1",
targetId: "1.2",
});
информация

Событие clone-task срабатывает после paste-task, когда содержимое буфера обмена помещается в целевую позицию. Обратный вызов получает идентификатор родителя, идентификатор проекта, идентификатор цели и массив batch с объектами клонированных задач.

Обновление задачи

Чтобы динамически обновить параметры задачи, используйте метод updateTask(). Пример ниже изменяет текст задачи:

list.updateTask({ 
id: "1.1.1",
task: {
text: "Completed task"
}
});

Перемещение задачи

Чтобы переместить задачу на другую позицию, используйте метод moveTask(). Фрагмент ниже перемещает задачу в другой проект:

list.moveTask({ 
id: "1.1", // ID перемещаемой задачи
project:"p_2", // ID будущего проекта (если существует)
parent: "2", // ID будущего родителя
targetId: "2.1", // ID целевой задачи
reverse: true // поместить задачу перед целевой
});
заметка

Родительская задача перемещается вместе со своими подзадачами.

Удаление задачи

Чтобы удалить задачу, используйте метод deleteTask():

list.deleteTask({ id: "1.2" });
заметка

Метод удаляет задачу вместе со всеми её дочерними задачами.

Разворачивание и сворачивание задачи

Чтобы свернуть задачу, используйте метод collapseTask(). Метод принимает идентификатор задачи в качестве параметра:

list.collapseTask({ id: "1.1" });

Чтобы развернуть свёрнутую задачу по её идентификатору, используйте метод expandTask():

list.expandTask({ id: "1.1" });

Контекстное меню

У каждой задачи и пользователя есть контекстное меню. Отслеживайте его активность с помощью двух событий:

  • open-menu — срабатывает при открытии меню; предоставляет идентификатор элемента, тип меню и, при необходимости, массив идентификаторов задач (source) для пакетных операций
  • close-menu — срабатывает при закрытии меню; предоставляет идентификатор элемента и тип меню

Пример ниже логирует события жизненного цикла меню:

list.api.on("open-menu", ({ id, type, source }) => {
console.log("menu opened for", id, "type", type, "source", source);
});

list.api.on("close-menu", ({ id, type }) => {
console.log("menu closed for", id, "type", type);
});

История изменений: События open-menu и close-menu были добавлены в v1.1.

Пометка задачи как выполненной или невыполненной

Пометьте задачу как выполненную или невыполненную через методы checkTask() и uncheckTask(). Пример ниже показывает оба вызова:

list.checkTask({ 
id: "1.1.1",
manual: false
});

list.uncheckTask({
id: "1.1.1",
manual: false
});

При manual: false результат зависит от taskShape.completed.behavior (подробнее см. справочник taskShape).

Если taskShape.completed.behavior равен "auto", но вам нужна разовая ручная отметка, установите manual: true:

list.checkTask({ 
id: "1.1.1",
manual: true
});

list.uncheckTask({
id: "1.1.1",
manual: true
});

Изменение уровня вложенности задачи

Динамически изменяйте уровень вложенности задачи с помощью следующих методов:

  • indentTask() — понизить уровень вложенности задачи на один
  • unindentTask() — повысить уровень вложенности задачи на один

Фрагмент ниже понижает задачу на один уровень глубже:

const list = new ToDo("#root", {
tasks: [
{ id: "1", text: "Task 1 #tag1" },
{ id: "1.1", text: "Task 1.1", parent: "1" },
{ id: "1.1.1", text: "Task 1.1.1", parent: "1.1" },
{ id: "1.2", text: "Task 1.2", parent: "1" },
]
});

list.indentTask({ id: "1.2" });

console.log(list.getParentIds({ id: "1.2" })); // ['1.1', '1']

Пример ниже повышает задачу на один уровень вверх:

const list = new ToDo("#root", {
tasks: [
{ id: "1", text: "Task 1 #tag1" },
{ id: "1.1", text: "Task 1.1", parent: "1" },
{ id: "1.1.1", text: "Task 1.1.1", parent: "1.1" },
{ id: "1.2", text: "Task 1.2", parent: "1" },
]
});

list.unindentTask({ id: "1.2" });

console.log(list.getParentIds({ id: "1.2" })); // []
информация

Если задача уже находится на верхнем уровне, unindentTask() не выполняет никаких действий.

Фильтрация задач

Найдите задачи, соответствующие заданным критериям, с помощью метода setFilter(). Метод поддерживает строгий режим для точного совпадения. Фрагмент ниже фильтрует задачи по хэштегу:

// фильтрация данных по заданным правилам
list.setFilter({
match: "#tag1",
highlight: true,
strict: true
});

Чтобы сбросить фильтрацию, передайте match: null:

// сброс фильтрации
list.setFilter({ match: null });

Отмена и повтор действий

To Do List по умолчанию отслеживает историю изменений. Чтобы отменить последнюю операцию, вызовите метод undo(). Чтобы восстановить операцию, отменённую с помощью undo(), вызовите метод redo():

list.addTask({ task: { text: "New task" } });

list.undo(); // отмена добавления
list.redo(); // восстановить

Область и глубина истории зависят от свойства конфигурации history. Подробнее см. Конфигурация → История изменений.

История изменений: Методы undo() и redo() были добавлены в v1.3.