From 82e260fbf55193ee11d05b41c029610520364d04 Mon Sep 17 00:00:00 2001 From: b-mob-tasks Date: Mon, 13 Jul 2026 05:47:52 +0000 Subject: [PATCH] =?UTF-8?q?docs(app-map):=20=D0=BA=D0=B0=D1=80=D1=82=D0=B0?= =?UTF-8?q?=20=D0=97=D0=B0=D0=B4=D0=B0=D1=87=20+=20diff=20=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8F=201=20(=D0=B8=D0=B7=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B0=20v0.17.1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- docs/app-map/STATUS.md | 2 +- docs/app-map/tasks.diff.md | 102 ++++++++++++++++++++ docs/app-map/tasks.md | 190 +++++++++++++++++++++++++++++++++++++ 3 files changed, 293 insertions(+), 1 deletion(-) create mode 100644 docs/app-map/tasks.diff.md create mode 100644 docs/app-map/tasks.md diff --git a/docs/app-map/STATUS.md b/docs/app-map/STATUS.md index 907fd70..cb553d6 100644 --- a/docs/app-map/STATUS.md +++ b/docs/app-map/STATUS.md @@ -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 | diff --git a/docs/app-map/tasks.diff.md b/docs/app-map/tasks.diff.md new file mode 100644 index 0000000..1e2c6b4 --- /dev/null +++ b/docs/app-map/tasks.diff.md @@ -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) или +частью экрана навигации — уточни методику усреднения для «отсутствующих» экранов. diff --git a/docs/app-map/tasks.md b/docs/app-map/tasks.md new file mode 100644 index 0000000..3f650fb --- /dev/null +++ b/docs/app-map/tasks.md @@ -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 (показ/скрыть), неактивно |