diff --git a/docs/app-map/mail.diff.md b/docs/app-map/mail.diff.md new file mode 100644 index 0000000..62fc824 --- /dev/null +++ b/docs/app-map/mail.diff.md @@ -0,0 +1,46 @@ +# Diff: Почта (веб forbion ↔ нативный `feature/mail`) + +Итерация 1 (по mail/081). Вход — карта `mail.md` (живой forbion, аккаунт `cloude`, read-only) + +код модуля `feature/mail` на 91aaaba. Тип: **Ф** — функционал, **Д** — дизайн/вёрстка. +Приоритет: P1 (болит/ядро), P2 (заметно), P3 (мелочь/косметика). +Статус: `open` — есть в вебе, нет/иначе в нативе; `device?` — требует проверки на устройстве. + +> Общий вывод: нативный клиент функционально зрелый — расширенный поиск (все поля), +> подтверждение прочтения, важность/спам/метки/переместить/создать задачу/создать событие/ +> запланированная отправка **уже есть и совпадают**. Ниже — только реальные пробелы. + +## Функциональные + +| # | Элемент / функция | В вебе (forbion) | В нативе (`feature/mail`) | Тип | Приор. | Статус | +|---|---|---|---|---|---|---| +| 1 | Черновики | Папка «Черновики» + композер сохраняет и восстанавливает черновик | Композер **не сохраняет** черновик — набранное теряется (`MailComposeViewModel`) | Ф | **P1** | open | +| 2 | Композер «⋯» → «Текстовые шаблоны» | Вставка шаблона/подписи в тело письма | Текстовые блоки только в настройках (`MailRepository`), в композер не вставляются | Ф | P2 | open | +| 3 | Композер «⋯» → «Умный подборщик» (smart picker) | Есть (вставка ссылок/упоминаний/виджетов) | Нет | Ф | P3 | open | +| 4 | Меню письма → «Ответить встречей» | Создание ответа-приглашения (iMIP) | Нет (есть смежное «Создать событие» `MailComponents.kt:1254`) | Ф | P3 | open | +| 5 | Меню письма → «Скачать письмо» (.eml) | Выгрузка исходника письма | Нет | Ф | P3 | open | +| 6 | Меню письма → «Редактировать как новое сообщение» | Открывает композер с телом письма | Нет | Ф | P3 | open | +| 7 | Действие «Архивировать» над письмом | Отдельная кнопка «в архив» | Нет отдельного пункта; архив только через «Переместить» (`MailComponents.kt:1259`) | Ф | P3 | open | + +## Дизайн / вёрстка + +| # | Элемент | В вебе (forbion) | В нативе | Тип | Приор. | Статус | +|---|---|---|---|---|---|---| +| 8 | Подписи виртуальных папок | «Непрочитанное», «Избранные» | «Непрочитанные», «Избранное» (`MailRepository.kt:672-673`) | Д | P2 | open | +| 9 | Порядок папок | Приоритетные→Входящие→Непрочитанное→Избранные→Черновики→Отправленные→Спам→Корзина | Входящие→Непрочитанные→Избранное→Отправленные→Черновики→Архив→Корзина→Спам (`MailRepository.kt:671-680`) | Д | P2 | open | +| 10 | Быстрые действия строки списка | Inline-иконки при наведении (✉/🌿/🗑/⋯) | Свайп справа-налево (`f7SwipeFromRightToDismiss`) | Д | P3 | **device?** | + +## Требуют device-сверки (карта live не покрыла) + +| # | Что | Причина | Статус | +|---|---|---|---| +| A | Экран открытого письма/треда: панель действий (Ответить/Переслать/Архив/Спам/Корзина/Удалить), меты, вложения, HTML-тело | live не проходился — открытие непрочитанного = запись `\Seen`; структура достроена по `MessageView.vue`+макетам | device? | +| B | Модалка «Параметры эл. почты» по подразделам (native — 6 разделов) | JS-модалка, live не раскрыта по пунктам | device? | +| C | Диалоги «Изменить метки» / «Переместить» / «Запланированная отправка» — состав форм | live не раскрывались (пишущие) | device? | +| D | Действия «⋯» по папке и по аккаунту в шторке навигации | live не раскрывались | device? | +| E | Проверить #10: hover-иконки vs свайп — не артефакт ли desktop-web на узком экране | нужен реальный мобильный web/устройство | device? | + +## Примечание по методу +- Пункт #10 помечен `device?`: наблюдённые inline-hover-действия могут быть поведением + desktop-web в узком вьюпорте, а не мобильным паттерном — до проверки на реальном мобильном + не тащить в реализацию. +- Метрику ≤2% (mail/081 п.2) считаю по чек-листу «элементы+функции на экран» — жду формулу лида. diff --git a/docs/app-map/mail.md b/docs/app-map/mail.md index c91d0d1..6d44af1 100644 --- a/docs/app-map/mail.md +++ b/docs/app-map/mail.md @@ -162,44 +162,13 @@ URL: `/apps/mail/box//thread/`. Структура по `MessageView.vu --- ## Расхождения с нативным `feature/mail` -Сверка карты (живой forbion) с кодом модуля на 91aaaba. Нативный клиент оказался -функционально богат — расширенный поиск, подтверждение прочтения, важность/спам/метки/ -создать задачу/создать событие/запланированная отправка **уже есть** и совпадают. Ниже — -только то, где native **отстаёт или отличается** от живого web (это бэклог на добивку). - -### Функциональные (native отстаёт) — бэклог -1. **Черновики не сохраняются** `[приоритет]`. Live: папка «Черновики» + композер сохраняет/ - восстанавливает черновик. Native: `MailComposeViewModel` не пишет и не восстанавливает - черновик — набранное теряется. (Совпадает с долгом №1 представления mail/070; план п.2.) -2. **Композер «⋯» → «Текстовые шаблоны»** — вставки в тело нет. Live: пункт есть. Native: - текстовые блоки только в настройках (`MailRepository`), в композере не вставляются - (`MailComposeScreen.kt` меню «⋯» = только «Отправить позже» + «Запросить подтверждение - прочтения»). -3. **Композер «⋯» → «Умный подборщик»** (NC smart picker) — в native отсутствует. -4. **Меню письма → «Ответить встречей»** — в native нет (есть смежное «Создать событие» - `MailComponents.kt:1254`, но это не invite-reply). -5. **Меню письма → «Скачать письмо» (.eml)** — в native отсутствует. -6. **Меню письма → «Редактировать как новое сообщение»** — в native отсутствует. -7. **Действие «Архивировать» над письмом** — в native нет отдельного пункта (папка «Архив» - и `archiveMailboxId` есть, но архивирование только через «Переместить сообщение» - `MailComponents.kt:1259`). - -### Косметические / вёрстка (для попиксельной сверки) -8. **Подписи виртуальных папок.** Live: «Непрочитанное», «Избранные». Native: «Непрочитанные», - «Избранное» (`MailRepository.kt:672-673`) — число/форма слова расходятся. -9. **Порядок папок.** Live: Приоритетные → Входящие → Непрочитанное → Избранные → Черновики → - Отправленные → Спам → Корзина. Native: Входящие → Непрочитанные → Избранное → Отправленные → - Черновики → Архив → Корзина → Спам (`MailRepository.kt:671-680`). Порядок отличается. -10. **Быстрые действия строки списка.** Live-web (даже в узком вьюпорте): inline-иконки при - наведении (✉ прочитать / 🌿 важность / 🗑 удалить / ⋯). Native: свайп справа-налево - (`f7SwipeFromRightToDismiss`). ⚠️ вероятно артефакт desktop-web на узком экране, а не - мобильный паттерн — **проверить на реальном мобильном web/устройстве** прежде чем считать - расхождением. - -## Открытые вопросы (добить при сверке на устройстве) -1. **Экран открытого письма/треда** — пройти live, когда будет прочитанное письмо или write-ОК - на `\Seen`; там же сверить панель действий и расхождения (архив/скачать/редактировать-как-новое). -2. Модалка «Параметры эл. почты» — раскрыть каждый подраздел live (native — 6 разделов). -3. Действия «⋯» по папке и по аккаунту — раскрыть состав live. -4. Диалоги «Изменить метки», «Переместить», «Запланированная отправка» — раскрыть формы live. -5. Проверить п.10 (быстрые действия строки) на реальном мобильном — hover-иконки vs свайп. +Полный список расхождений (веб ↔ натив) вынесен в **[`mail.diff.md`](mail.diff.md)** — формат +итерации сверки по mail/081 (функция/элемент, тип Ф/Д, приоритет, статус). Кратко: +нативный клиент функционально зрелый (расширенный поиск, подтверждение прочтения, +важность/спам/метки/задача/событие/запланированная отправка — совпадают). Пробелы: +- **P1 функц.:** черновики не сохраняются из композера. +- **P2:** «Текстовые шаблоны» в композере; подписи и порядок виртуальных папок. +- **P3:** «Умный подборщик», «Ответить встречей», «Скачать письмо», «Редактировать как новое», + отдельное «Архивировать»; паттерн быстрых действий строки (hover vs свайп — device?). +- **device?:** экран открытого письма, модалка настроек, диалоги меток/перемещения — live не + проходились (read-only / `\Seen`), см. `mail.diff.md` раздел «Требуют device-сверки».