docs(app-map): карта Задач + diff итерация 1 (из кода v0.17.1)

tasks.md — дерево экранов + всплывающие меню поимённо (mail/087).
tasks.diff.md — веб↔натив, Ff=16.7% Fd=41.5% по 8 экранам, бэклог P1-P5.
STATUS.md — строка tasks обновлена.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
b-mob-tasks
2026-07-13 05:47:52 +00:00
parent 9c99cefbb9
commit 82e260fbf5
3 changed files with 293 additions and 1 deletions
+1 -1
View File
@@ -14,7 +14,7 @@
| files | b-mob-files | 1 | — | — | 4 | ? | нет | правки D4→D3→D2→D1 |
| mail | b-mob-mail | 1 | — | — | ~4 | ~2 | нет | правка P1 черновики |
| talk | b-mob-conf | 0 | — | — | — | — | нет | карта/сверка vendor |
| tasks | b-mob-tasks | 0 | — | — | ? | ? | нет | карта в работе (из кода v0.17.1); движок умных списков+DTSTART уже в main |
| tasks | b-mob-tasks | 1 | 16.7 | 41.5 | ~38 | ~11 | нет | карта+diff выложены (из кода v0.17.1); жду приоритизацию P1–P5, вопросы по меткам/напоминаниям/корзине |
| notes | b-mob-notes | 0 | — | — | — | — | нет | карта готова, diff |
| notifications | b-mob-notify | 0 | — | — | — | — | нет | карта готова, diff |
| deck | b-mob-deck | 0 | — | — | — | — | нет | карта готова, diff |
+102
View File
@@ -0,0 +1,102 @@
# Diff: Задачи (Tasks) — итерация 1 (2026-07-13)
Ff_app: **16.7%** · Fd_app: **41.5%** (среднее по 8 экранам, невзвешенно) · n-a: 0
Сверка веб (`nextcloud/tasks v0.17.1` + тема) ↔ натив (`feature/tasks`: `TasksScreen`,
`TasksComponents`, `TasksViewModel`, `TasksRepository`, `TasksSmartLists`). Метки: `[Ф|Д]`
(функционал/дизайн) · `[open|done|n-a]`. Это первый прогон — счётчики честно низкие: натив
покрывает базовый CRUD + группировку + движок умных списков (в коде, не в UI). Живую визуал-сверку
на forbion (`bmob-*`, mail/085) добавлю следующим проходом — сейчас diff из кода.
Прошу приоритизацию: предлагаемый порядок P1→P5 в конце.
---
## Экран 1. Панель навигации (списки + умные коллекции) — Ff 14.3% · Fd 40%
Ф (14, open 12):
- [Ф][open] умные коллекции в панели (Важное/Сегодня/Неделя/Все/Текущие/Завершённые) — движок
`TasksSmartLists` готов, в UI не выведены
- [Ф][open] счётчики-бейджи на коллекциях
- [Ф][done] открыть реальный список
- [Ф][open] «Добавить список» (MKCALENDAR) — сейчас мёртвая кнопка
- [Ф][open] выбор цвета при создании списка
- [Ф][open] drag-сортировка списков
- [Ф][open] drag задачи на коллекцию (retag priority/complete/today/week)
- [Ф][open] открыть Корзину
- [Ф][done] открыть Настройки
- [Ф][open] «⋯» списка: поделиться · [Ф][open] изменить · [Ф][open] копировать ссылку ·
[Ф][open] экспорт · [Ф][open] удалить/unshare
Д (5, open 3): [Д][open] композиция (коллекции+корзина) · [Д][open] иконки коллекций ·
[Д][open] вид счётчика · [Д][done] активный пункт (фон) · [Д][done] строка списка (40dp/иконка)
## Экран 2. Список задач — Ff 38.9% · Fd 75%
Ф (18, open 11):
- [Ф][done] создать задачу (быстрый ввод) · [Ф][open] создать несколько из вставки
- [Ф][open] фильтр по меткам · [Ф][open] сброс фильтра
- [Ф][open] выбор порядка сортировки (10 вариантов) · [Ф][done] направление ↑/↓
- [Ф][open] «Загрузить завершённые» (по списку/всем)
- [Ф][done] чекбокс выполнения · [Ф][done] открыть деталь · [Ф][done] поиск по тексту
- [Ф][done] добавить подзадачу · [Ф][done] удалить задачу
- [Ф][open] «⋯»: переключить важность (star) · [Ф][open] показать/скрыть подзадачи ·
[Ф][open] показать/скрыть завершённые подзадачи
- [Ф][open] индикатор pin · [Ф][open] индикатор «есть заметка»
Д (8, open 2): [Д][done] группировка по сроку · [Д][done] зона завершённых · [Д][done] строка
задачи · [Д][done] бейдж даты · [Д][done] пусто-состояние · [Д][done] чекбокс ·
[Д][open] звезда приоритета в строке · [Д][open] иконки/вид меню сортировки-фильтра
## Экран 3. Деталь задачи — Ff 30% · Fd 66.7%
Ф (20, open 14):
- [Ф][done] правка заголовка · [Ф][done] срок · [Ф][open] дата начала · [Ф][open] «весь день»
- [Ф][open] статус (Требует действия/В процессе/Отменено/Очистить) · [Ф][open] классификация
- [Ф][done] приоритет · [Ф][open] %-выполнения (слайдер)
- [Ф][open] метки · [Ф][open] локация · [Ф][open] URL · [Ф][open] смена списка задачи
- [Ф][open] напоминания (до старта/до срока/дата-время) · [Ф][done] заметка/описание
- [Ф][open] закрепить (pin) · [Ф][open] показать в Календаре · [Ф][open] показать в Deck
- [Ф][open] экспорт · [Ф][done] удалить · [Ф][done] переключить выполнение
Д (6, open 2): [Д][done] лейаут шита · [Д][open] вкладки Подробно/Заметки · [Д][done] pill-поля ·
[Д][done] нативные пикеры · [Д][done] типографика · [Д][open] слайдеры приоритет/%
## Экран 4. Параметры задач (Настройки) — Ff 0% · Fd 50%
Ф (2, open 2): [Ф][open] список по умолчанию (не персистится) · [Ф][open] видимость коллекций
(2 варианта вместо 3, неактивно — надо 3-state + SharedPreferences + влияние на панель)
Д (2, open 1): [Д][done] композиция шита · [Д][open] контрол 3-state (Скрыта/Видима/Авто)
## Экран 5. Правка/создание списка — Ff 0% · Fd 0% (экрана нет в нативе)
Ф (3, open 3): [Ф][open] имя списка · [Ф][open] цвет · [Ф][open] сохранить (PROPPATCH)
Д (1, open 1): [Д][open] модалка правки
## Экран 6. Шаринг списка — Ff 0% · Fd 0% (нет в нативе)
Ф (4, open 4): [Ф][open] поиск пользователей/групп · [Ф][open] выдать доступ ·
[Ф][open] список получателей · [Ф][open] отозвать
Д (1, open 1): [Д][open] модалка шаринга
## Экран 7. Корзина — Ff 0% · Fd 0% (нет в нативе)
Ф (4, open 4): [Ф][open] список удалённых · [Ф][open] восстановить · [Ф][open] очистить ·
[Ф][open] сортировка по дате
Д (1, open 1): [Д][open] модалка/таблица корзины
## Экран 8. Диалоги создания — Ff 50% · Fd 100%
Ф (2, open 1): [Ф][done] создать задачу · [Ф][open] создать несколько из вставки
Д (1, open 0): [Д][done] диалог создания
---
## Итог и предлагаемый приоритет
Ff_app = (14.3+38.9+30+0+0+0+0+50)/8 = **16.7%**;
Fd_app = (40+75+66.7+50+0+0+0+100)/8 = **41.5%**. Обе далеко от 98% — Задачи требуют нескольких
итераций. Крупные функциональные дыры (по влиянию на Ff):
- **P1 — Умные коллекции в UI** (`TasksListNavView` + счётчики + 3-state видимость с персистом).
Движок готов (`TasksSmartLists`), это «дешёвый» большой прирост Ff экрана 1. Мой модуль.
- **P2 — Управление списками**: рабочее «Добавить список» + цвет, «⋯» списка (переименовать/цвет/
удалить/экспорт/копировать ссылку), шаринг. Часть — core DAV (PROPPATCH/MKCALENDAR/share) —
**согласую с тобой ДО** (образец у calendar). Мой модуль + core-точки.
- **P3 — Богатая деталь**: старт-дата/весь день, статус, %-слайдер, метки, локация/URL, смена
списка, напоминания, pin. Метки/напоминания — крупные подсистемы; уточню объём.
- **P4 — Сортировка (10 порядков) + фильтр по меткам** вместо тумблера; «Загрузить завершённые».
- **P5 — Корзина** (DAV trashbin) — навигация/core, вероятно твой ход.
Вопросы к тебе: (1) порядок P1–P5 ок? (2) метки (tags) и напоминания (VALARM) — беру целиком в
`feature/tasks` или это кросс-модульное (метки шарятся с Календарём)? (3) Корзину относить в мой
модуль или это core/навигация? (4) экраны 5/6/7 считать полноценными (тянут среднее в 0) или
частью экрана навигации — уточни методику усреднения для «отсутствующих» экранов.
+190
View File
@@ -0,0 +1,190 @@
# Карта: Задачи (Tasks)
Источник: апстрим `nextcloud/tasks v0.17.1` (`src/**/*.vue`, точная версия forbion) + тема
`_mobile-tasks.css` (+ `app-tasks/forms/*`). Живой мобильный web (Browser 1) — для порядка/вида,
помечено `визуал(?)` где не подтверждено на устройстве. Составил `b-mob-tasks` (mail/075/078/087).
Легенда: **[веб]** — как в мобильном вебе forbion; `расхождение:` — чего нет/иначе в нативе
(вход в `tasks.diff.md`).
---
## Вход
Нижняя панель / шторка приложений → «Задачи». Открывается **Панель навигации** (в вебе — левая
`app-navigation`; в нативе — экран списков `TasksListNavView`).
---
## Экран: Панель навигации (списки + умные коллекции)
Источник: `views/AppNavigation.vue`.
**Тело (сверху вниз):**
1. **Умные коллекции** (виртуальные списки, каждый со счётчиком-бейджем `NcCounterBubble`):
- «Важное» (starred, иконка Star) → `/collections/starred`
- «Сегодня» (today, CalendarToday) → `/collections/today`
- «На неделе» (week, CalendarWeek) → `/collections/week`
- «Все» (all, CircleOutline) → `/collections/all`
- «Текущие» (current, TrendingUp) → `/collections/current`
- «Завершённые» (completed, Check) → `/collections/completed`
- Видимость каждой управляется настройкой (Скрыта/Видима/Автоматически — см. модалку Настроек);
«Автоматически» = показывать только если счётчик > 0.
2. **Реальные списки** (календари VTODO), перетаскиваемые для ручной сортировки (long-press drag).
У каждого — «⋯» меню (см. ниже).
3. **«Add List…» / «Добавить список»** (иконка Plus) → инлайн-форма: поле «New list» +
**выбор цвета** (`Colorpicker`); Enter/стрелка — создать (MKCALENDAR), Esc — отмена.
4. **«Корзина» / «Trash bin»** (иконка Delete, если сервер поддерживает) → модалка Корзины.
5. **Настройки** (шестерёнка в футере) → модалка «Параметры задач».
**Drag&drop:** задачу можно перетащить на коллекцию starred/completed/today/week — это
проставляет приоритет=1 / 100% / срок сегодня / срок +6 дней соответственно.
`расхождение:` в нативе (`TasksListNavView`) показаны ТОЛЬКО реальные списки; умных коллекций,
Корзины, drag-сортировки и drag-на-коллекцию нет; «Добавить список» — мёртвая кнопка (без обработчика).
### Всплывающее меню: «⋯» списка (в панели навигации)
Источник: `components/AppNavigation/ListItemCalendar.vue`. Пункты по порядку:
1. «Поделиться» (Share, если список расшариваем) → панель шаринга (пользователи/группы).
2. «Изменить» (Edit) → форма правки списка: имя + цвет.
3. «Копировать личную ссылку» (Copy private link → «Скопировано»/«Не удалось»).
4. «Экспорт» (Export) → скачивание списка `.ics`.
5. «Удалить» / «Отменить общий доступ» (Delete/Unshare, с обратным отсчётом → «Отмена»).
6. (внутри правки) «Удалить все завершённые задачи» → модалка (см. `DeleteCompletedModal`).
`расхождение:` в нативе у списков НЕТ «⋯»-меню вовсе (нельзя переименовать/цвет/шарить/экспорт/
удалить/копировать ссылку).
---
## Экран: Список задач (коллекция или реальный список)
Источник: `components/HeaderBar.vue`, `views/AppContent/General.vue`, `components/TaskBody.vue`.
**Шапка (`HeaderBar`):**
- **Поле быстрого ввода** «Add a task…» (иконка Plus): Enter/стрелка — создать задачу; вставка
многострочного текста → диалог «Создать несколько задач». Скрыто для коллекции «Завершённые»
и для read-only списка.
- **«Фильтр»** (`FilterDropdown`, иконка воронки; активна — подсвечена) → меню (см. ниже).
- **«Сортировка»** (`SortorderDropdown`, иконка текущего порядка + стрелка направления) → меню
(см. ниже).
**Тело:**
- Список задач (по выбранному порядку). Незавершённые сверху; завершённые — отдельной зоной.
- Коллекция «Завершённые» / завершённые в списке: кнопка **«Загрузить завершённые задачи»**
(`LoadCompletedButton`; варианты «…этого списка» / «…всех списков»).
- Пустое состояние: плейсхолдер без задач. `визуал(?)`.
### Строка задачи + всплывающее меню «⋯»
Источник: `components/TaskBody.vue`. Элементы строки:
- **Чекбокс** выполнения (клик — переключить 0/100%); показывает % выполнения.
- **Звезда** (если приоритет > 0).
- **Заголовок** (клик — открыть деталь в сайдбаре).
- **Дата** старта/срока (бейдж: Вчера/Сегодня/Завтра/дата; для завершённых — «Завершено …»).
- Индикаторы: **закреплена** (Pin), **есть заметка** (клик → сайдбар, вкладка Заметки),
**есть скрытые подзадачи** (SortVariant).
- **Меню «⋯»** — пункты по порядку:
1. «Добавить подзадачу» (Add subtask) → инлайн-поле ввода названия.
2. «Показать/скрыть подзадачи» (если есть подзадачи).
3. «Показать/скрыть завершённые подзадачи» (если есть завершённые подзадачи).
4. «Удалить задачу» (Delete task, с обратным отсчётом отмены).
5. «Переключить важность» (Toggle starred).
`расхождение:` нативное «⋯» (`TasksComponents.TasksRow`) имеет только «Добавить вложенную
задачу» и «Удалить задачу»; нет toggle-звезды, show/hide подзадач, индикаторов pin/заметка/
скрытые-подзадачи; звезды приоритета в строке нет.
### Выпадающее меню: Сортировка (`SortorderDropdown`)
10 порядков (клик повторно — сменить направление ↑/↓):
Актуальность (Relevance) · Дата начала · Дата выполнения (due) · Дата создания · Изменено ·
Дата завершения · Приоритет · По алфавиту · Метки (Tags) · Вручную (Manually).
`расхождение:` в нативе только тумблер ↑/↓ по одному критерию (дата→имя), выбора из 10 порядков нет.
### Выпадающее меню: Фильтр (`FilterDropdown`)
- «Фильтровать по меткам» (мультиселект тегов).
- «Сбросить фильтр».
`расхождение:` в нативе кнопка «фильтр» открывает шит Настроек (не фильтр по тегам); тегов нет,
фильтрации по тегам нет. Поиск по тексту в нативе есть (в VM), но отдельной строки поиска в вебе
на этом экране нет — сверить `визуал(?)`.
---
## Экран: Деталь задачи (правый сайдбар)
Источник: `views/AppSidebar.vue` (+ `components/AppSidebar/*`).
**Шапка сайдбара:** заголовок (редактируемый), подзаголовок (даты). Меню действий:
- «Закрепить»/«Открепить» (Pin/Unpin).
- «Показать в Календаре» (Show in Calendar).
- «Показать в Deck» (Show in Deck).
- «Изменить заголовок» (Edit summary).
- «Экспорт» (Export).
- «Удалить» (Delete).
**Вкладка «Подробно» (Details):**
- **Классификация** (Select a classification): Public/Private/Confidential.
- **Статус** (Select a status): Требует действия · Выполнено · В процессе · Отменено · Очистить.
- **Дата начала** (Set start date) + **Дата выполнения** (Set due date), флажок **«Весь день»**.
- **Приоритет** (слайдер): нет / низкий / средний / высокий (1–9).
- **% выполнения** (слайдер/поле).
- **Метки** (Select tags).
- **Расположение** (Set a location), **URL** (Set a URL).
- **Список** (переключение календаря задачи).
- **Напоминания** (`AlarmList`): меню «Добавить напоминание» → «До начала задачи» / «До срока» /
«Выбрать дату и время»; список напоминаний, «Нет напоминаний» — пусто.
**Вкладка «Заметки» (Notes):** многострочная заметка (Markdown).
`расхождение:` натив (`TaskDetailSheet`) — только заголовок, срок, приоритет, описание, toggle
выполнения, удалить. Нет: старт-даты/всего дня, статуса (кроме bool), классификации, %-слайдера,
меток, локации, URL, смены списка, напоминаний, Pin, «Показать в Календаре/Deck», экспорта,
разделения на вкладки Подробно/Заметки.
---
## Модалка: Параметры задач (Настройки)
Источник: `components/AppNavigation/AppNavigationSettings.vue`.
- «Список по умолчанию» (Default list) — селект.
- «Видимость умных коллекций» (Visibility of Smart Collections) — по каждой коллекции 3 варианта:
**Скрыта / Видима / Автоматически**.
`расхождение:` в нативе (`TasksSettingsSheet`) видимость — только 2 варианта (Показывать/Скрывать),
не персистится и ни на что не влияет; «список по умолчанию» не персистится.
## Модалка: Правка/создание списка
Источник: `ListItemCalendar.vue` (форма) + тема `_tasks-list-edit-mobile.css`.
- Поле «Имя списка» + **Colorpicker**. Сохранить/Отмена. `расхождение:` нет в нативе.
## Модалка: Шаринг списка
Источник: тема `_tasks-list-shares-mobile.css` + `ListItemCalendar` share.
- Поиск пользователей/групп, выдача доступа, список получателей. `расхождение:` нет в нативе.
## Модалка: Удалить завершённые
Источник: `components/DeleteCompletedModal.vue`.
- «Удалить все завершённые задачи» → подтверждение, отчёт «Удалено из списка …».
- В нативе аналог есть: массовое удаление завершённых в зоне «Завершённые» (`deleteCompletedTasks`).
## Модалка: Фильтр по тегам
Источник: тема `_tasks-filter-popover-mobile.css` + `FilterDropdown`. `расхождение:` нет в нативе.
## Экран: Корзина (Trash bin)
Источник: `components/AppNavigation/Trashbin.vue` + тема `_tasks-trash-modal-mobile.css`.
- Таблица удалённых (имя, дата удаления, сортировка), «Восстановить», «Очистить корзину»,
пусто-состояние «Нет удалённых…». `расхождение:` нет в нативе.
## Диалоги создания
Источник: `TaskCreateDialog.vue` (Создать задачу: поле «Краткое описание», Отмена/Создать),
`CreateMultipleTasksDialog.vue` (из вставленного текста: «Создать N задач», Отмена/Создать).
`расхождение:` быстрый ввод в нативе есть; массового создания из вставки — нет.
---
## Сводка всплывающих меню (mail/087) — веб ↔ натив
| Меню | Веб (пунктов) | Натив |
|---|---|---|
| «⋯» списка (навигация) | 6 (share/edit/copy-link/export/delete/del-completed) | нет меню |
| «⋯» задачи | 5 (subtask/show-hide/show-hide-closed/delete/star) | 2 (subtask/delete) |
| Сортировка | 10 порядков + направление | тумблер ↑/↓ |
| Фильтр | по тегам + сброс | нет (кнопка ведёт в Настройки) |
| Создание «+» | задача / из вставки | задача |
| Действия сайдбара | 6 (pin/calendar/deck/edit/export/delete) | 2 (toggle/delete) |
| Напоминания | 3 (до старта/до срока/дата-время) | нет |
| Настройки: видимость коллекций | 3 (скрыта/видима/авто) ×6 | 2 (показ/скрыть), неактивно |