Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import io.writeopia.commonui.dialogs.confirmation.DeleteConfirmationDialog
import io.writeopia.editor.features.editor.ui.desktop.edit.menu.SideEditorOptions
import io.writeopia.editor.features.editor.ui.folders.FolderSelectionDialog
import io.writeopia.editor.features.editor.viewmodel.NoteEditorViewModel
import io.writeopia.editor.features.editor.viewmodel.SideMenuTab
import io.writeopia.theme.WriteopiaTheme
import io.writeopia.ui.drawer.factory.DrawersFactory

Expand All @@ -62,7 +63,10 @@ fun DesktopNoteEditorScreen(

Box(
modifier = Modifier.clickable(
onClick = noteEditorViewModel::clearSelections,
onClick = {
noteEditorViewModel.clearSelections()
noteEditorViewModel.changeSideMenu(SideMenuTab.NONE)
},
interactionSource = interactionSource,
indication = null
)
Expand All @@ -81,6 +85,11 @@ fun DesktopNoteEditorScreen(
loadNoteId = documentId,
onDocumentLinkClick = onDocumentLinkClick,
modifier = Modifier.padding(start = 30.dp, end = 30.dp)
.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = null,
onClick = { }
)
)
}
)
Expand Down Expand Up @@ -147,6 +156,7 @@ fun DesktopNoteEditorScreen(
isEditableState = noteEditorViewModel.isEditable,
isFavorite = noteEditorViewModel.notFavorite,
selectedMetadataState = noteEditorViewModel.selectionMetadataState,
sideMenuTabState = noteEditorViewModel.sideMenuTabState,
boldClick = noteEditorViewModel::onAddSpanClick,
setEditable = noteEditorViewModel::toggleEditable,
checkItemClick = noteEditorViewModel::onAddCheckListClick,
Expand All @@ -173,6 +183,7 @@ fun DesktopNoteEditorScreen(
aiFaq = noteEditorViewModel::aiFaq,
aiTags = noteEditorViewModel::aiTags,
selectModel = noteEditorViewModel::selectModel,
changeSideMenuTab = noteEditorViewModel::changeSideMenu
)

if (showDeleteConfirmation) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ import io.writeopia.common.utils.collections.inBatches
import io.writeopia.common.utils.file.fileChooserLoad
import io.writeopia.common.utils.file.fileChooserSave
import io.writeopia.common.utils.icons.WrIcons
import io.writeopia.editor.features.editor.viewmodel.SideMenuTab
import io.writeopia.model.Font
import io.writeopia.resources.WrStrings
import io.writeopia.sdk.models.span.Span
Expand All @@ -73,6 +74,7 @@ fun SideEditorOptions(
isEditableState: StateFlow<Boolean>,
isFavorite: StateFlow<Boolean>,
selectedMetadataState: StateFlow<Set<SelectionMetadata>>,
sideMenuTabState: StateFlow<SideMenuTab>,
boldClick: (Span) -> Unit,
setEditable: () -> Unit,
checkItemClick: () -> Unit,
Expand All @@ -95,14 +97,13 @@ fun SideEditorOptions(
deleteDocument: () -> Unit,
toggleFavorite: () -> Unit,
selectModel: (String) -> Unit,
changeSideMenuTab: (SideMenuTab) -> Unit
) {
var menuType by remember {
mutableStateOf(OptionsType.NONE)
}
val menuType by sideMenuTabState.collectAsState()

val showSubMenu by remember {
derivedStateOf {
menuType != OptionsType.NONE
menuType != SideMenuTab.NONE
}
}

Expand All @@ -111,11 +112,8 @@ fun SideEditorOptions(
properties = PopupProperties(
focusable = false,
dismissOnBackPress = false,
dismissOnClickOutside = true
dismissOnClickOutside = false
),
onDismissRequest = {
menuType = OptionsType.NONE
},
) {
Row(modifier) {
AnimatedVisibility(
Expand All @@ -134,9 +132,9 @@ fun SideEditorOptions(
animationSpec = tween(200),
) { type ->
when (type) {
OptionsType.NONE -> {}
SideMenuTab.NONE -> {}

OptionsType.PAGE_STYLE -> {
SideMenuTab.PAGE_STYLE -> {
PageOptions(
changeFontFamily,
isEditableState,
Expand All @@ -150,7 +148,7 @@ fun SideEditorOptions(
)
}

OptionsType.TEXT_OPTIONS -> {
SideMenuTab.TEXT_OPTIONS -> {
TextOptions(
isDarkTheme,
selectedMetadataState,
Expand All @@ -164,14 +162,14 @@ fun SideEditorOptions(
)
}

OptionsType.EXPORT -> {
SideMenuTab.EXPORT -> {
Actions(
exportJson,
exportMarkdown,
)
}

OptionsType.AI -> {
SideMenuTab.AI -> {
AiOptions(
currentModel = currentModel,
models = models,
Expand Down Expand Up @@ -200,15 +198,15 @@ fun SideEditorOptions(

Spacer(modifier = Modifier.height(spacing))

val background = @Composable { optionsType: OptionsType ->
val background = @Composable { optionsType: SideMenuTab ->
if (optionsType == menuType) {
MaterialTheme.colorScheme.primary
} else {
MaterialTheme.colorScheme.background
}
}

val tint = @Composable { optionsType: OptionsType ->
val tint = @Composable { optionsType: SideMenuTab ->
if (optionsType == menuType) {
MaterialTheme.colorScheme.onPrimary
} else {
Expand All @@ -222,17 +220,19 @@ fun SideEditorOptions(
modifier = Modifier
.padding(horizontal = spacing)
.clip(MaterialTheme.shapes.medium)
.background(background(OptionsType.PAGE_STYLE))
.background(background(SideMenuTab.PAGE_STYLE))
.clickable {
menuType = if (menuType != OptionsType.PAGE_STYLE) {
OptionsType.PAGE_STYLE
val menuType = if (menuType != SideMenuTab.PAGE_STYLE) {
SideMenuTab.PAGE_STYLE
} else {
OptionsType.NONE
SideMenuTab.NONE
}

changeSideMenuTab(menuType)
}
.size(40.dp)
.padding(10.dp),
tint = tint(OptionsType.PAGE_STYLE)
tint = tint(SideMenuTab.PAGE_STYLE)
)

Spacer(modifier = Modifier.height(1.dp))
Expand All @@ -243,17 +243,19 @@ fun SideEditorOptions(
modifier = Modifier
.padding(horizontal = spacing)
.clip(MaterialTheme.shapes.medium)
.background(background(OptionsType.TEXT_OPTIONS))
.background(background(SideMenuTab.TEXT_OPTIONS))
.clickable {
menuType = if (menuType != OptionsType.TEXT_OPTIONS) {
OptionsType.TEXT_OPTIONS
val menuType = if (menuType != SideMenuTab.TEXT_OPTIONS) {
SideMenuTab.TEXT_OPTIONS
} else {
OptionsType.NONE
SideMenuTab.NONE
}

changeSideMenuTab(menuType)
}
.size(40.dp)
.padding(9.dp),
tint = tint(OptionsType.TEXT_OPTIONS)
tint = tint(SideMenuTab.TEXT_OPTIONS)
)

Icon(
Expand All @@ -262,17 +264,19 @@ fun SideEditorOptions(
modifier = Modifier
.padding(horizontal = spacing)
.clip(MaterialTheme.shapes.medium)
.background(background(OptionsType.AI))
.background(background(SideMenuTab.AI))
.clickable {
menuType = if (menuType != OptionsType.AI) {
OptionsType.AI
val menuType = if (menuType != SideMenuTab.AI) {
SideMenuTab.AI
} else {
OptionsType.NONE
SideMenuTab.NONE
}

changeSideMenuTab(menuType)
}
.size(40.dp)
.padding(9.dp),
tint = tint(OptionsType.AI)
tint = tint(SideMenuTab.AI)
)

Spacer(modifier = Modifier.height(spacing))
Expand All @@ -285,17 +289,19 @@ fun SideEditorOptions(
modifier = Modifier
.padding(horizontal = spacing)
.clip(MaterialTheme.shapes.medium)
.background(background(OptionsType.EXPORT))
.background(background(SideMenuTab.EXPORT))
.clickable {
menuType = if (menuType != OptionsType.EXPORT) {
OptionsType.EXPORT
val menuType = if (menuType != SideMenuTab.EXPORT) {
SideMenuTab.EXPORT
} else {
OptionsType.NONE
SideMenuTab.NONE
}

changeSideMenuTab(menuType)
}
.size(40.dp)
.padding(9.dp),
tint = tint(OptionsType.EXPORT)
tint = tint(SideMenuTab.EXPORT)
)

Spacer(modifier = Modifier.height(spacing))
Expand Down Expand Up @@ -925,14 +931,6 @@ private fun buttonsTextStyle() =
@Composable
private fun smallButtonPadding() = PaddingValues(horizontal = 8.dp, vertical = 4.dp)

private enum class OptionsType {
NONE,
PAGE_STYLE,
TEXT_OPTIONS,
EXPORT,
AI
}

private data class DecorationButton(
val text: String,
val highlight: Boolean,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,9 @@ class NoteEditorKmpViewModel(
.stateIn(viewModelScope, SharingStarted.Lazily, "")
}

private val _sideMenuTab = MutableStateFlow(SideMenuTab.NONE)
override val sideMenuTabState: StateFlow<SideMenuTab> = _sideMenuTab.asStateFlow()

/**
* This property defines if the document is favorite
*/
Expand Down Expand Up @@ -358,6 +361,10 @@ class NoteEditorKmpViewModel(
}
}.stateIn(viewModelScope, SharingStarted.Lazily, emptyList())

override fun changeSideMenu(tab: SideMenuTab) {
_sideMenuTab.value = tab
}

override fun deleteSelection() {
writeopiaManager.deleteSelection()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ interface NoteEditorViewModel : BackstackInform, BackstackHandler {

val selectionMetadataState: StateFlow<Set<SelectionMetadata>>

val sideMenuTabState: StateFlow<SideMenuTab>

fun changeSideMenu(tab: SideMenuTab)

fun showSearch()

fun hideSearch()
Expand Down Expand Up @@ -141,3 +145,11 @@ interface NoteEditorViewModel : BackstackInform, BackstackHandler {
}

data class ShareDocument(val content: String, val title: String, val type: String)

public enum class SideMenuTab {
NONE,
PAGE_STYLE,
TEXT_OPTIONS,
EXPORT,
AI
}