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:
@@ -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 |
|
||||
|
||||
@@ -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) или
|
||||
частью экрана навигации — уточни методику усреднения для «отсутствующих» экранов.
|
||||
@@ -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 (показ/скрыть), неактивно |
|
||||
Reference in New Issue
Block a user