refactor: remove listing type bottom sheet (#44)

* remove ListingTypeBottomSheet

* update usages
This commit is contained in:
akesi seli 2024-10-26 17:06:14 +02:00 committed by GitHub
parent 05bee093bb
commit 5fcf303a50
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 250 additions and 157 deletions

View File

@ -1,110 +0,0 @@
package com.livefast.eattrash.raccoonforlemmy.core.commonui.modals
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.navigationBars
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import cafe.adriel.voyager.core.screen.Screen
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.CornerSize
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.Spacing
import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.BottomSheetHeader
import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getNavigationCoordinator
import com.livefast.eattrash.raccoonforlemmy.core.notifications.NotificationCenterEvent
import com.livefast.eattrash.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.livefast.eattrash.raccoonforlemmy.core.utils.compose.onClick
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
class ListingTypeBottomSheet(
private val isLogged: Boolean = false,
private val screenKey: String? = null,
) : Screen {
@Composable
override fun Content() {
val navigationCoordinator = remember { getNavigationCoordinator() }
val notificationCenter = remember { getNotificationCenter() }
Surface {
Column(
modifier =
Modifier
.windowInsetsPadding(WindowInsets.navigationBars)
.padding(
top = Spacing.s,
start = Spacing.s,
end = Spacing.s,
bottom = Spacing.m,
),
verticalArrangement = Arrangement.spacedBy(Spacing.s),
) {
BottomSheetHeader(LocalStrings.current.homeListingTitle)
val values =
buildList {
if (isLogged) {
this += ListingType.Subscribed
}
this += ListingType.All
this += ListingType.Local
}
Column(
modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(Spacing.xxs),
) {
for (value in values) {
Row(
modifier =
Modifier
.clip(RoundedCornerShape(CornerSize.xxl))
.onClick(
onClick = {
notificationCenter.send(
NotificationCenterEvent.ChangeFeedType(
value = value,
screenKey = screenKey,
),
)
navigationCoordinator.hideBottomSheet()
},
).padding(
horizontal = Spacing.s,
vertical = Spacing.s,
).fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
) {
Text(
text = value.toReadableName(),
style = MaterialTheme.typography.bodyLarge,
color = MaterialTheme.colorScheme.onBackground,
)
Spacer(modifier = Modifier.weight(1f))
Icon(
imageVector = value.toIcon(),
contentDescription = null,
tint = MaterialTheme.colorScheme.onBackground,
)
}
}
}
}
}
}
}

View File

@ -54,7 +54,6 @@ import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsRow
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsSwitchRow
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ResultTypeBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SelectLanguageDialog
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SelectNumberBottomSheet
@ -71,6 +70,8 @@ import com.livefast.eattrash.raccoonforlemmy.core.utils.appicon.toReadableName
import com.livefast.eattrash.raccoonforlemmy.core.utils.datetime.getPrettyDuration
import com.livefast.eattrash.raccoonforlemmy.core.utils.fs.getFileSystemManager
import com.livefast.eattrash.raccoonforlemmy.core.utils.toLocalDp
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
import com.livefast.eattrash.raccoonforlemmy.unit.configurenavbar.ConfigureNavBarScreen
import kotlinx.coroutines.flow.launchIn
@ -110,6 +111,7 @@ class AdvancedSettingsScreen : Screen {
var zombieModeDurationBottomSheetOpened by remember { mutableStateOf(false) }
var inboxCheckDurationBottomSheetOpened by remember { mutableStateOf(false) }
var inboxTypeBottomSheetOpened by remember { mutableStateOf(false) }
var exploreListingTypeBottomSheet by remember { mutableStateOf(false) }
LaunchedEffect(model) {
model.effects
@ -279,12 +281,7 @@ class AdvancedSettingsScreen : Screen {
title = LocalStrings.current.settingsDefaultExploreType,
value = uiState.defaultExploreType.toReadableName(),
onTap = {
val sheet =
ListingTypeBottomSheet(
isLogged = uiState.isLogged,
screenKey = "advancedSettings",
)
navigationCoordinator.showBottomSheet(sheet)
exploreListingTypeBottomSheet = true
},
)
if (uiState.isLogged) {
@ -793,6 +790,45 @@ class AdvancedSettingsScreen : Screen {
)
}
if (exploreListingTypeBottomSheet) {
val values =
buildList {
if (uiState.isLogged) {
this += ListingType.Subscribed
}
this += ListingType.All
this += ListingType.Local
}
CustomModalBottomSheet(
title = LocalStrings.current.inboxListingTypeTitle,
items =
values.map { value ->
CustomModalBottomSheetItem(
label = value.toReadableName(),
trailingContent = {
Icon(
modifier = Modifier.size(IconSize.m),
imageVector = value.toIcon(),
contentDescription = null,
tint = MaterialTheme.colorScheme.onBackground,
)
},
)
},
onSelected = { index ->
exploreListingTypeBottomSheet = false
if (index != null) {
notificationCenter.send(
NotificationCenterEvent.ChangeFeedType(
value = values[index],
screenKey = "advancedSettings",
),
)
}
},
)
}
settingsContent?.also { content ->
fileSystemManager.writeToFile(
mimeType = SETTINGS_MIME_TYPE,

View File

@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
@ -41,12 +42,14 @@ import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.buildAnnotatedString
import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.koin.getScreenModel
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.IconSize
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.Spacing
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsHeader
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsRow
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsSwitchRow
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.LanguageBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SortBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.UrlOpeningModeBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings
@ -58,6 +61,8 @@ import com.livefast.eattrash.raccoonforlemmy.core.utils.toLanguageFlag
import com.livefast.eattrash.raccoonforlemmy.core.utils.toLanguageName
import com.livefast.eattrash.raccoonforlemmy.core.utils.url.UrlOpeningMode
import com.livefast.eattrash.raccoonforlemmy.core.utils.url.toReadableName
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toInt
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
import com.livefast.eattrash.raccoonforlemmy.feature.settings.advanced.AdvancedSettingsScreen
@ -90,6 +95,7 @@ class SettingsScreen : Screen {
var infoDialogOpened by remember { mutableStateOf(false) }
val scope = rememberCoroutineScope()
val uriHandler = LocalUriHandler.current
var defaultListingTypeBottomSheetOpened by remember { mutableStateOf(false) }
LaunchedEffect(notificationCenter) {
notificationCenter
@ -202,12 +208,7 @@ class SettingsScreen : Screen {
title = LocalStrings.current.settingsDefaultListingType,
value = uiState.defaultListingType.toReadableName(),
onTap = {
val sheet =
ListingTypeBottomSheet(
isLogged = uiState.isLogged,
screenKey = "settings",
)
navigationCoordinator.showBottomSheet(sheet)
defaultListingTypeBottomSheetOpened = true
},
)
@ -407,5 +408,44 @@ class SettingsScreen : Screen {
if (infoDialogOpened) {
AboutDialog().Content()
}
if (defaultListingTypeBottomSheetOpened) {
val values =
buildList {
if (uiState.isLogged) {
this += ListingType.Subscribed
}
this += ListingType.All
this += ListingType.Local
}
CustomModalBottomSheet(
title = LocalStrings.current.inboxListingTypeTitle,
items =
values.map { value ->
CustomModalBottomSheetItem(
label = value.toReadableName(),
trailingContent = {
Icon(
modifier = Modifier.size(IconSize.m),
imageVector = value.toIcon(),
contentDescription = null,
tint = MaterialTheme.colorScheme.onBackground,
)
},
)
},
onSelected = { index ->
defaultListingTypeBottomSheetOpened = false
if (index != null) {
notificationCenter.send(
NotificationCenterEvent.ChangeFeedType(
value = values[index],
screenKey = "settings",
),
)
}
},
)
}
}
}

View File

@ -66,14 +66,19 @@ import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsImage
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsRow
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsSwitchRow
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.SettingsTextualInfo
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.EditFormattedInfoDialog
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.EditTextualInfoDialog
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SortBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getNavigationCoordinator
import com.livefast.eattrash.raccoonforlemmy.core.notifications.NotificationCenterEvent
import com.livefast.eattrash.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.livefast.eattrash.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.livefast.eattrash.raccoonforlemmy.core.utils.gallery.getGalleryHelper
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toInt
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
import kotlinx.coroutines.flow.launchIn
@ -102,9 +107,11 @@ class AccountSettingsScreen : Screen {
val errorMessage = LocalStrings.current.messageGenericError
val snackbarHostState = remember { SnackbarHostState() }
val galleryHelper = remember { getGalleryHelper() }
val notificationCenter = remember { getNotificationCenter() }
var openAvatarPicker by remember { mutableStateOf(false) }
var openBannerPicker by remember { mutableStateOf(false) }
var confirmBackWithUnsavedChangesDialog by remember { mutableStateOf(false) }
var defaultListingTypeBottomSheetOpened by remember { mutableStateOf(false) }
LaunchedEffect(model) {
model.effects
@ -314,12 +321,7 @@ class AccountSettingsScreen : Screen {
title = LocalStrings.current.settingsDefaultListingType,
value = uiState.defaultListingType.toReadableName(),
onTap = {
val sheet =
ListingTypeBottomSheet(
isLogged = true,
screenKey = "accountSettings",
)
navigationCoordinator.showBottomSheet(sheet)
defaultListingTypeBottomSheetOpened = true
},
)
@ -548,5 +550,42 @@ class AccountSettingsScreen : Screen {
},
)
}
if (defaultListingTypeBottomSheetOpened) {
val values =
buildList {
this += ListingType.Subscribed
this += ListingType.All
this += ListingType.Local
}
CustomModalBottomSheet(
title = LocalStrings.current.inboxListingTypeTitle,
items =
values.map { value ->
CustomModalBottomSheetItem(
label = value.toReadableName(),
trailingContent = {
Icon(
modifier = Modifier.size(IconSize.m),
imageVector = value.toIcon(),
contentDescription = null,
tint = MaterialTheme.colorScheme.onBackground,
)
},
)
},
onSelected = { index ->
defaultListingTypeBottomSheetOpened = false
if (index != null) {
notificationCenter.send(
NotificationCenterEvent.ChangeFeedType(
value = values[index],
screenKey = "accountSettings",
),
)
}
},
)
}
}
}

View File

@ -35,8 +35,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester
@ -52,6 +54,7 @@ import androidx.compose.ui.unit.dp
import cafe.adriel.voyager.core.screen.Screen
import com.livefast.eattrash.raccoonforlemmy.core.appearance.data.PostLayout
import com.livefast.eattrash.raccoonforlemmy.core.appearance.di.getThemeRepository
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.IconSize
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.Spacing
import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.SearchField
import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.SwipeAction
@ -62,7 +65,8 @@ import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.CommunityItem
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.PostCard
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.PostCardPlaceholder
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.UserItem
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ResultTypeBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SortBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings
@ -70,13 +74,18 @@ import com.livefast.eattrash.raccoonforlemmy.core.navigation.TabNavigationSectio
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getDrawerCoordinator
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getNavigationCoordinator
import com.livefast.eattrash.raccoonforlemmy.core.navigation.getScreenModel
import com.livefast.eattrash.raccoonforlemmy.core.notifications.NotificationCenterEvent
import com.livefast.eattrash.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.livefast.eattrash.raccoonforlemmy.core.persistence.data.ActionOnSwipe
import com.livefast.eattrash.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.livefast.eattrash.raccoonforlemmy.core.utils.compose.onClick
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.PostModel
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.SearchResult
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.readableHandle
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toInt
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.uniqueIdentifier
import com.livefast.eattrash.raccoonforlemmy.unit.explore.components.ExploreTopBar
import com.livefast.eattrash.raccoonforlemmy.unit.zoomableimage.ZoomableImageScreen
@ -129,6 +138,7 @@ class ExploreScreen(
val detailOpener = remember { getDetailOpener() }
val connection = navigationCoordinator.getBottomBarScrollConnection()
val scope = rememberCoroutineScope()
val notificationCenter = remember { getNotificationCenter() }
val isOnOtherInstance = remember { otherInstance.isNotEmpty() }
val otherInstanceName = remember { otherInstance }
val snackbarHostState = remember { SnackbarHostState() }
@ -142,6 +152,7 @@ class ExploreScreen(
}
}
val searchFocusRequester = remember { FocusRequester() }
var listingTypeBottomSheetOpened by remember { mutableStateOf(false) }
LaunchedEffect(navigationCoordinator) {
navigationCoordinator.onDoubleTabSelection
@ -190,12 +201,7 @@ class ExploreScreen(
edgeToEdge = settings.edgeToEdge,
onSelectListingType = {
focusManager.clearFocus()
val sheet =
ListingTypeBottomSheet(
isLogged = uiState.isLogged,
screenKey = notificationEventKey,
)
navigationCoordinator.showBottomSheet(sheet)
listingTypeBottomSheetOpened = true
},
onSelectSortType = {
focusManager.clearFocus()
@ -757,5 +763,44 @@ class ExploreScreen(
}
}
}
if (listingTypeBottomSheetOpened) {
val values =
buildList {
if (uiState.isLogged) {
this += ListingType.Subscribed
}
this += ListingType.All
this += ListingType.Local
}
CustomModalBottomSheet(
title = LocalStrings.current.inboxListingTypeTitle,
items =
values.map { value ->
CustomModalBottomSheetItem(
label = value.toReadableName(),
trailingContent = {
Icon(
modifier = Modifier.size(IconSize.m),
imageVector = value.toIcon(),
contentDescription = null,
tint = MaterialTheme.colorScheme.onBackground,
)
},
)
},
onSelected = { index ->
listingTypeBottomSheetOpened = false
if (index != null) {
notificationCenter.send(
NotificationCenterEvent.ChangeFeedType(
value = values[index],
screenKey = notificationEventKey,
),
)
}
},
)
}
}
}

View File

@ -65,6 +65,7 @@ import cafe.adriel.voyager.core.screen.Screen
import cafe.adriel.voyager.koin.getScreenModel
import com.livefast.eattrash.raccoonforlemmy.core.appearance.data.PostLayout
import com.livefast.eattrash.raccoonforlemmy.core.appearance.di.getThemeRepository
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.IconSize
import com.livefast.eattrash.raccoonforlemmy.core.appearance.theme.Spacing
import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.FloatingActionButtonMenu
import com.livefast.eattrash.raccoonforlemmy.core.commonui.components.FloatingActionButtonMenuItem
@ -78,20 +79,26 @@ import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.PostCardPlace
import com.livefast.eattrash.raccoonforlemmy.core.commonui.lemmyui.di.getFabNestedScrollConnection
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.BlockBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CopyPostBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ListingTypeBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.CustomModalBottomSheetItem
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.ShareBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.commonui.modals.SortBottomSheet
import com.livefast.eattrash.raccoonforlemmy.core.l10n.messages.LocalStrings
import com.livefast.eattrash.raccoonforlemmy.core.navigation.TabNavigationSection
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getDrawerCoordinator
import com.livefast.eattrash.raccoonforlemmy.core.navigation.di.getNavigationCoordinator
import com.livefast.eattrash.raccoonforlemmy.core.notifications.NotificationCenterEvent
import com.livefast.eattrash.raccoonforlemmy.core.notifications.di.getNotificationCenter
import com.livefast.eattrash.raccoonforlemmy.core.persistence.data.ActionOnSwipe
import com.livefast.eattrash.raccoonforlemmy.core.persistence.di.getSettingsRepository
import com.livefast.eattrash.raccoonforlemmy.core.utils.keepscreenon.rememberKeepScreenOn
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.ListingType
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.PostModel
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.readableHandle
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.readableName
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toIcon
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toInt
import com.livefast.eattrash.raccoonforlemmy.domain.lemmy.data.toReadableName
import com.livefast.eattrash.raccoonforlemmy.unit.moderatewithreason.ModerateWithReasonAction
import com.livefast.eattrash.raccoonforlemmy.unit.moderatewithreason.ModerateWithReasonScreen
import com.livefast.eattrash.raccoonforlemmy.unit.moderatewithreason.toInt
@ -126,6 +133,7 @@ class PostListScreen : Screen {
val lazyListState = rememberLazyListState()
val drawerCoordinator = remember { getDrawerCoordinator() }
val scope = rememberCoroutineScope()
val notificationCenter = remember { getNotificationCenter() }
var rawContent by remember { mutableStateOf<Any?>(null) }
val settingsRepository = remember { getSettingsRepository() }
val settings by settingsRepository.currentSettings.collectAsState()
@ -138,6 +146,7 @@ class PostListScreen : Screen {
}
val clipboardManager = LocalClipboardManager.current
var itemIdToDelete by remember { mutableStateOf<Long?>(null) }
var listingTypeBottomSheetOpened by remember { mutableStateOf(false) }
LaunchedEffect(navigationCoordinator) {
navigationCoordinator.onDoubleTabSelection
@ -204,17 +213,12 @@ class PostListScreen : Screen {
}
},
onSelectListingType = {
val sheet =
ListingTypeBottomSheet(
isLogged = uiState.isLogged,
screenKey = "postList",
)
navigationCoordinator.showBottomSheet(sheet)
listingTypeBottomSheetOpened = true
},
onSelectInstance =
{
navigationCoordinator.showBottomSheet(SelectInstanceBottomSheet())
}.takeIf { uiState.isLogged },
}.takeIf { !uiState.isLogged },
onSelectSortType = {
val sheet =
SortBottomSheet(
@ -858,5 +862,44 @@ class PostListScreen : Screen {
},
)
}
if (listingTypeBottomSheetOpened) {
val values =
buildList {
if (uiState.isLogged) {
this += ListingType.Subscribed
}
this += ListingType.All
this += ListingType.Local
}
CustomModalBottomSheet(
title = LocalStrings.current.inboxListingTypeTitle,
items =
values.map { value ->
CustomModalBottomSheetItem(
label = value.toReadableName(),
trailingContent = {
Icon(
modifier = Modifier.size(IconSize.m),
imageVector = value.toIcon(),
contentDescription = null,
tint = MaterialTheme.colorScheme.onBackground,
)
},
)
},
onSelected = { index ->
listingTypeBottomSheetOpened = false
if (index != null) {
notificationCenter.send(
NotificationCenterEvent.ChangeFeedType(
value = values[index],
screenKey = "postList",
),
)
}
},
)
}
}
}

View File

@ -110,15 +110,15 @@ internal fun PostsTopBar(
modifier =
Modifier
.fillMaxWidth()
.padding(horizontal = Spacing.s)
.onClick(
.padding(horizontal = Spacing.s),
) {
Text(
modifier =
Modifier.fillMaxWidth().onClick(
onClick = {
onSelectListingType?.invoke()
},
),
) {
Text(
modifier = Modifier.fillMaxWidth(),
text = listingType?.toReadableName().orEmpty(),
style = MaterialTheme.typography.titleMedium,
color = MaterialTheme.colorScheme.onBackground,
@ -126,15 +126,15 @@ internal fun PostsTopBar(
Text(
modifier =
Modifier.fillMaxWidth().then(
if (onSelectInstance != null) {
Modifier.onClick(
onClick = {
if (onSelectInstance != null) {
onSelectInstance.invoke()
},
)
} else {
Modifier
},
} else {
onSelectListingType?.invoke()
}
},
),
),
text =
buildString {