menu: состав пунктов точно по дизайну (+Уведомления/Настройки)
По дизайну выдвижного меню: Файлы/Календарь/Контакты/Карточки/Заметки + Bitrix/1C/Личный кабинет + Уведомления/Настройки. Убраны Почта/Конференции/ Задачи/Поддержка (остаются в нижней панели). - F7AppMenuItem: опц. localIcon (ImageVector); нативные пункты рисуются в круглом бейдже с зелёной обводкой (стиль glass) вместо серверной SVG; - Уведомления → NotificationsSheet, Настройки → настройки активного таба, обработка по label в AppScaffold.onItemClick.
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
package ru.forbion.f7cloud.mobile.ui
|
||||
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Notifications
|
||||
import androidx.compose.material.icons.filled.Settings
|
||||
import ru.forbion.f7cloud.core.designsystem.F7AppMenuItem
|
||||
|
||||
enum class AppTab(
|
||||
@@ -29,16 +32,14 @@ private data class AppMenuEntry(
|
||||
val webPath: String? = null,
|
||||
)
|
||||
|
||||
// Состав меню — по дизайну выдвижного меню (Почта/Конференции/Задачи/Поддержка — только
|
||||
// в нижней панели; Уведомления/Настройки добавлены как нативные пункты, см. appMenuItems).
|
||||
private val coreAppMenuEntries = listOf(
|
||||
AppMenuEntry(AppTab.Mail, "Почта", "mail-glass.svg"),
|
||||
AppMenuEntry(AppTab.Files, "Файлы", "files-glass.svg"),
|
||||
AppMenuEntry(AppTab.Calendar, "Календарь", "calendar-glass.svg"),
|
||||
AppMenuEntry(AppTab.Contacts, "Контакты", "contact-glass.svg"),
|
||||
AppMenuEntry(AppTab.Talk, "Конференции", "spreed-glass.svg"),
|
||||
AppMenuEntry(AppTab.Deck, "Карточки", "deck-glass.svg"),
|
||||
AppMenuEntry(AppTab.Tasks, "Задачи", "task-glass.svg"),
|
||||
AppMenuEntry(null, "Заметки", "notes-glass.svg", webPath = "/apps/notes/"),
|
||||
AppMenuEntry(AppTab.Support, "Поддержка", "icon-header-f7support.svg"),
|
||||
)
|
||||
|
||||
data class AppMenuExternalSite(
|
||||
@@ -71,7 +72,22 @@ fun appMenuItems(
|
||||
externalUrl = site.openUrl,
|
||||
)
|
||||
}
|
||||
return core + external
|
||||
// Нативные пункты по дизайну — действия обрабатываются в AppScaffold по label
|
||||
val native = listOf(
|
||||
F7AppMenuItem(
|
||||
label = "Уведомления",
|
||||
iconUrl = "",
|
||||
selected = false,
|
||||
localIcon = Icons.Filled.Notifications,
|
||||
),
|
||||
F7AppMenuItem(
|
||||
label = "Настройки",
|
||||
iconUrl = "",
|
||||
selected = false,
|
||||
localIcon = Icons.Filled.Settings,
|
||||
),
|
||||
)
|
||||
return core + external + native
|
||||
}
|
||||
|
||||
fun appTabFromMenuIndex(index: Int): AppTab? {
|
||||
|
||||
@@ -637,24 +637,42 @@ fun AppScaffold(
|
||||
onItemClick = { index ->
|
||||
val item = appMenuItemsList.getOrNull(index) ?: return@F7AppMenuSheet
|
||||
val external = item.externalUrl
|
||||
val isPersonalCabinet = item.label.trim().equals("Личный кабинет", ignoreCase = true)
|
||||
if (isPersonalCabinet) {
|
||||
val label = item.label.trim()
|
||||
when {
|
||||
// Профиль — нативная панель вместо веб-ЛК forbion
|
||||
menuOpen = false
|
||||
profileOpen = true
|
||||
} else if (!external.isNullOrBlank()) {
|
||||
runCatching {
|
||||
context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(external)))
|
||||
label.equals("Личный кабинет", ignoreCase = true) -> {
|
||||
menuOpen = false
|
||||
profileOpen = true
|
||||
}
|
||||
menuOpen = false
|
||||
} else {
|
||||
appTabFromMenuIndex(index)?.let { tab ->
|
||||
if (tab != activeTab) {
|
||||
pushTabHistory(activeTab)
|
||||
activeTab = tab
|
||||
// Нативные пункты по дизайну меню
|
||||
label.equals("Уведомления", ignoreCase = true) -> {
|
||||
menuOpen = false
|
||||
notificationsOpen = true
|
||||
}
|
||||
label.equals("Настройки", ignoreCase = true) -> {
|
||||
menuOpen = false
|
||||
when (activeTab) {
|
||||
AppTab.Mail -> mailSettingsOpen = true
|
||||
AppTab.Calendar -> calendarSettingsRequest++
|
||||
AppTab.Files -> filesSettingsOpen = true
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
menuOpen = false
|
||||
!external.isNullOrBlank() -> {
|
||||
runCatching {
|
||||
context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(external)))
|
||||
}
|
||||
menuOpen = false
|
||||
}
|
||||
else -> {
|
||||
appTabFromMenuIndex(index)?.let { tab ->
|
||||
if (tab != activeTab) {
|
||||
pushTabHistory(activeTab)
|
||||
activeTab = tab
|
||||
}
|
||||
}
|
||||
menuOpen = false
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user