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 @@ -209,9 +209,7 @@ private fun FolderItem(
tint = WriteopiaTheme.colorScheme.textLight,
modifier = Modifier
.clip(RoundedCornerShape(6.dp))
.clickable(onClick = {
editFolder(folder)
})
.clickable { editFolder(folder) }
.size(26.dp)
.padding(4.dp)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,8 @@ class GlobalShellKmpViewModel(
private val authRepository: AuthRepository,
private val authApi: AuthApi,
private val notesNavigationUseCase: NotesNavigationUseCase,
private val folderStateController: FolderStateController = FolderStateController(
notesUseCase,
authRepository
),
private val folderStateController: FolderStateController =
FolderStateController.singleton(notesUseCase, authRepository),
private val workspaceConfigRepository: WorkspaceConfigRepository,
private val ollamaRepository: OllamaRepository,
private val configRepository: ConfigurationRepository,
Expand All @@ -89,27 +87,27 @@ class GlobalShellKmpViewModel(
private val _showSettingsState = MutableStateFlow(false)
override val showSettingsState: StateFlow<Boolean> = _showSettingsState.asStateFlow()

private val _expandedFolders = MutableStateFlow(setOf<String>())
private val expandedFolders = MutableStateFlow(setOf<String>())

private val _showSearch = MutableStateFlow(false)
override val showSearchDialog: StateFlow<Boolean> = _showSearch.asStateFlow()
private val _showSearchDialog = MutableStateFlow(false)
override val showSearchDialog: StateFlow<Boolean> = _showSearchDialog.asStateFlow()

private val _workspaceLocalPath = MutableStateFlow("")
override val workspaceLocalPath: StateFlow<String> = _workspaceLocalPath.asStateFlow()

private val _retryModels = MutableStateFlow(0)
private val retryModels = MutableStateFlow(0)

private val _loginStateTrigger = MutableStateFlow(GenerateId.generate())
private val loginStateTrigger = MutableStateFlow(GenerateId.generate())

private val _lastWorkspaceSync = MutableStateFlow("")
override val lastWorkspaceSync: StateFlow<String> = _lastWorkspaceSync.asStateFlow()

@OptIn(ExperimentalCoroutinesApi::class)
private val _ollamaConfigState = authRepository.listenForUser().flatMapLatest { user ->
private val ollamaConfigState = authRepository.listenForUser().flatMapLatest { user ->
ollamaRepository.listenForConfiguration(user.id)
}

override val userState: StateFlow<WriteopiaUser> = _loginStateTrigger.map {
override val userState: StateFlow<WriteopiaUser> = loginStateTrigger.map {
authRepository.getUser()
}.stateIn(viewModelScope, SharingStarted.Lazily, WriteopiaUser.disconnectedUser())

Expand Down Expand Up @@ -142,11 +140,11 @@ class GlobalShellKmpViewModel(
}.stateIn(viewModelScope, SharingStarted.Lazily, ResultData.Idle())

override val ollamaUrl: StateFlow<String> =
_ollamaConfigState.map { config ->
ollamaConfigState.map { config ->
config?.url.takeIf { it?.isNotEmpty() == true } ?: ""
}.stateIn(viewModelScope, SharingStarted.Lazily, "")

override val ollamaSelectedModelState = _ollamaConfigState
override val ollamaSelectedModelState = ollamaConfigState
.map { config -> config?.selectedModel ?: "" }
.stateIn(viewModelScope, SharingStarted.Lazily, "")

Expand All @@ -158,7 +156,7 @@ class GlobalShellKmpViewModel(

@OptIn(ExperimentalCoroutinesApi::class)
override val modelsForUrl: StateFlow<ResultData<List<String>>> =
combine(ollamaUrl, _retryModels) { url, _ ->
combine(ollamaUrl, retryModels) { url, _ ->
url
}.flatMapLatest { url ->
ollamaRepository.listenToModels(url)
Expand All @@ -181,32 +179,28 @@ class GlobalShellKmpViewModel(
combine(
folderStateController.editingFolderState,
menuItemsPerFolderId,
authRepository.listenForWorkspace()
) { selectedFolder, menuItems, workspace ->
) { selectedFolder, menuItems ->
if (selectedFolder != null) {
val folder =
menuItems[selectedFolder.parentId]
?.find { menuItem ->
menuItem.id == selectedFolder.id
} as? Folder

folder
menuItems[selectedFolder.parentId]
?.find { menuItem ->
menuItem.id == selectedFolder.id
} as? Folder
} else {
null
}
}.stateIn(viewModelScope, SharingStarted.Lazily, null)
}

@OptIn(ExperimentalCoroutinesApi::class)
private val _uiConfiguration: Flow<UiConfiguration> by lazy {
private val uiConfiguration: Flow<UiConfiguration> by lazy {
authRepository.listenForUser().flatMapLatest { user ->
uiConfigurationRepo.listenForUiConfiguration(user.id, viewModelScope)
}.filterNotNull()
}

override val showSideMenuState: StateFlow<Float> by lazy {
combine(
_uiConfiguration,
uiConfiguration,
sideMenuWidthState.asStateFlow()
) { configuration, width ->
width ?: configuration.sideMenuWidth
Expand All @@ -228,11 +222,10 @@ class GlobalShellKmpViewModel(

override val sideMenuItems: StateFlow<List<MenuItemUi>> by lazy {
combine(
_expandedFolders,
expandedFolders,
menuItemsPerFolderId,
highlightItem,
authRepository.listenForWorkspace(),
) { expanded, folderMap, highlighted, workspace ->
) { expanded, folderMap, highlighted ->
val folderUiMap = folderMap.mapValues { (_, item) ->
item.map {
it.toUiCard(
Expand All @@ -251,7 +244,6 @@ class GlobalShellKmpViewModel(
)
.toList()

val items = itemsList.joinToString { it.title }
itemsList.toMutableList().apply {
removeAt(0)
}
Expand Down Expand Up @@ -369,10 +361,10 @@ class GlobalShellKmpViewModel(
}

override fun expandFolder(id: String) {
val expanded = _expandedFolders.value
val expanded = expandedFolders.value
if (expanded.contains(id)) {
viewModelScope.launch(Dispatchers.Default) {
_expandedFolders.value = expanded - id
expandedFolders.value = expanded - id
}
} else {
viewModelScope.launch {
Expand All @@ -384,7 +376,7 @@ class GlobalShellKmpViewModel(
workspace.id
)

_expandedFolders.value = expanded + id
expandedFolders.value = expanded + id
}
}
}
Expand Down Expand Up @@ -424,11 +416,11 @@ class GlobalShellKmpViewModel(
}

override fun showSearch() {
_showSearch.value = true
_showSearchDialog.value = true
}

override fun hideSearch() {
_showSearch.value = false
_showSearchDialog.value = false
}

override fun changeIcons(menuItemId: String, icon: String, tint: Int, iconChange: IconChange) {
Expand Down Expand Up @@ -480,7 +472,7 @@ class GlobalShellKmpViewModel(
}

override fun retryModels() {
_retryModels.value = Random.nextInt()
retryModels.value = Random.nextInt()
}

override fun modelToDownload(model: String, onComplete: () -> Unit) {
Expand Down Expand Up @@ -539,7 +531,7 @@ class GlobalShellKmpViewModel(
authRepository.saveToken(currentUserId, "")

// AppConnectionInjection.singleton().setJwtToken("")
_loginStateTrigger.value = GenerateId.generate()
loginStateTrigger.value = GenerateId.generate()
sideEffect()
}
}
Expand All @@ -556,7 +548,7 @@ class GlobalShellKmpViewModel(
if (result is ResultData.Complete && result.data) {
authRepository.unselectAllWorkspaces()
authRepository.logout()
_loginStateTrigger.value = GenerateId.generate()
loginStateTrigger.value = GenerateId.generate()
dismissDeleteConfirm()
logout(sideEffect = sideEffect)
}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class NotesMenuKmpInjection private constructor(
)

private fun provideFolderStateController(): FolderStateController =
FolderStateController(
FolderStateController.singleton(
provideNotesUseCase(),
authCoreInjection.provideAuthRepository()
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ fun DesktopNotesMenu(
newNote = onNewNoteClick,
newFolder = chooseNoteViewModel::newFolder,
hideShowMenu = chooseNoteViewModel::hideAddMenu,
editFolder = chooseNoteViewModel::editFolder
)

Spacer(modifier = Modifier.width(20.dp))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ fun NotesCardsScreen(
newNote: () -> Unit,
newFolder: () -> Unit,
hideShowMenu: () -> Unit,
editFolder: (MenuItemUi.FolderUi) -> Unit,
modifier: Modifier = Modifier,
) {
when (documents) {
Expand Down Expand Up @@ -139,6 +140,7 @@ fun NotesCardsScreen(
changeIcon = changeIcon,
onDragIconClick = onSelection,
newNote = newNote,
editFolder = editFolder,
modifier = listModifier,
)
}
Expand All @@ -157,6 +159,7 @@ fun NotesCardsScreen(
changeIcon = changeIcon,
onDragIconClick = onSelection,
newNote = newNote,
editFolder = editFolder,
modifier = listModifier,
)
}
Expand All @@ -174,6 +177,7 @@ fun NotesCardsScreen(
changeIcon = changeIcon,
onDragIconClick = onSelection,
newNote = newNote,
editFolder = editFolder,
modifier = listModifier,
)
}
Expand Down Expand Up @@ -273,6 +277,7 @@ private fun LazyStaggeredGridNotes(
contentPadding: PaddingValues = PaddingValues(12.dp),
onDragIconClick: (String) -> Unit,
newNote: () -> Unit,
editFolder: (MenuItemUi.FolderUi) -> Unit,
modifier: Modifier = Modifier
) {
val spacing = 6.dp
Expand Down Expand Up @@ -329,6 +334,7 @@ private fun LazyStaggeredGridNotes(
changeIcon(id, icon, tint, IconChange.FOLDER)
},
onDragIconClick = { onDragIconClick(menuItem.documentId) },
editFolder = editFolder,
modifier = itemModifier
)
}
Expand All @@ -354,6 +360,7 @@ private fun LazyGridNotes(
contentPadding: PaddingValues = PaddingValues(12.dp),
onDragIconClick: (String) -> Unit,
newNote: () -> Unit,
editFolder: (MenuItemUi.FolderUi) -> Unit,
modifier: Modifier = Modifier,
) {
val spacing = Arrangement.spacedBy(6.dp)
Expand Down Expand Up @@ -407,6 +414,7 @@ private fun LazyGridNotes(
changeIcon(id, icon, tint, IconChange.FOLDER)
},
position = i,
editFolder = editFolder,
onDragIconClick = { onDragIconClick(menuItem.documentId) },
)
}
Expand All @@ -431,6 +439,7 @@ private fun LazyColumnNotes(
contentPadding: PaddingValues = PaddingValues(12.dp),
onDragIconClick: (String) -> Unit,
newNote: () -> Unit,
editFolder: (MenuItemUi.FolderUi) -> Unit,
modifier: Modifier = Modifier,
) {
LazyColumn(
Expand Down Expand Up @@ -480,6 +489,7 @@ private fun LazyColumnNotes(
changeIcon(id, icon, tint, IconChange.FOLDER)
},
position = i,
editFolder = editFolder,
onDragIconClick = { onDragIconClick(menuItem.documentId) },
)
}
Expand All @@ -502,6 +512,7 @@ private fun FolderItem(
changeIcon: (String, String, Int) -> Unit,
onDragIconClick: () -> Unit,
modifier: Modifier = Modifier,
editFolder: (MenuItemUi.FolderUi) -> Unit,
) {
// sharedTransitionScope.run {
Box(
Expand Down Expand Up @@ -613,10 +624,29 @@ private fun FolderItem(
}
}

if (folderUi.isFavorite) {
Row(
modifier = Modifier.align(Alignment.TopEnd),
verticalAlignment = Alignment.CenterVertically
) {
if (folderUi.isFavorite) {
Icon(
modifier = Modifier.size(40.dp).padding(12.dp),
imageVector = WrIcons.favorites,
contentDescription = "Favorite",
tint = MaterialTheme.colorScheme.onBackground
)
}

Icon(
modifier = Modifier.align(Alignment.TopEnd).size(40.dp).padding(12.dp),
imageVector = WrIcons.favorites,
modifier = Modifier
.padding(4.dp)
.clip(MaterialTheme.shapes.large)
.clickable {
editFolder(folderUi)
}
.size(34.dp)
.padding(8.dp),
imageVector = WrIcons.moreHoriz,
contentDescription = "Favorite",
tint = MaterialTheme.colorScheme.onBackground
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,7 @@ private fun Content(
onSelection = {},
newNote = newNote,
newFolder = chooseNoteViewModel::newFolder,
editFolder = chooseNoteViewModel::editFolder,
modifier = Modifier
.padding(paddingValues)
.fillMaxSize()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ internal class ChooseNoteKmpViewModel(
private val keyboardEventFlow: Flow<KeyboardEvent>,
private val workspaceConfigRepository: WorkspaceConfigRepository,
private val folderSync: FolderSync,
private val folderController: FolderStateController = FolderStateController(
private val folderController: FolderStateController = FolderStateController.singleton(
notesUseCase,
authRepository
),
Expand Down
Loading