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 @@ -90,6 +90,7 @@ fun FolderScreen(
onPostClick: (Long) -> Unit,
onFolderEditClick: () -> Unit,
onPostMoveClick: () -> Unit,
onWritePostWithFolderClick: () -> Unit,
onBackClick: () -> Unit,
folderViewModel: FolderViewModel = hiltViewModel()
) {
Expand Down Expand Up @@ -159,6 +160,7 @@ fun FolderScreen(
optionMenu = optionMenu,
onPostClick = { postId -> onPostClick(postId) },
onPostSelect = { postId -> folderViewModel.toggleSelection(postId) },
onWritePostWithFolderClick = onWritePostWithFolderClick,
onCancelClick = { folderViewModel.toggleEditMode() },
onPostDeleteClick = { showPostDeleteAlertDialog = true },
onClickSort = { folderViewModel.toggleFolderOrder(folderId) },
Expand Down Expand Up @@ -200,6 +202,7 @@ private fun FolderScreen(
optionMenu: List<FolderOptionMenu>,
onPostClick: (Long) -> Unit,
onPostSelect: (Long) -> Unit,
onWritePostWithFolderClick: () -> Unit,
onPostDeleteClick: () -> Unit,
onPostMoveClick: () -> Unit,
onClickSort: () -> Unit,
Expand Down Expand Up @@ -294,7 +297,7 @@ private fun FolderScreen(
) { innerPadding ->
Column(modifier = Modifier.padding(innerPadding)) {
if (!isEditMode) {
FolderInformation(folderInfo)
FolderInformation(folderInfo, onWritePostWithFolderClick)
}
FolderHeader(
postCount = folderInfo.postCount,
Expand All @@ -315,7 +318,7 @@ private fun FolderScreen(
}

@Composable
private fun FolderInformation(folderInfo: FolderInfo) {
private fun FolderInformation(folderInfo: FolderInfo, onWritePostWithFolderClick: () -> Unit) {
Column(
modifier = Modifier
.fillMaxWidth()
Expand Down Expand Up @@ -357,7 +360,7 @@ private fun FolderInformation(folderInfo: FolderInfo) {
Spacer(modifier = Modifier.height(16.dp))

Button(
onClick = {},
onClick = onWritePostWithFolderClick,
modifier = Modifier
.fillMaxWidth()
.height(40.dp),
Expand Down Expand Up @@ -636,6 +639,7 @@ private fun PreviewFolderScreen() {
optionMenu = listOf(),
onPostClick = { },
onPostSelect = { },
onWritePostWithFolderClick = { },
onPostDeleteClick = { },
onPostMoveClick = { },
onClickSort = { },
Expand Down Expand Up @@ -675,6 +679,7 @@ private fun PreviewFolderScreenEditMode() {
optionMenu = listOf(),
onPostClick = { },
onPostSelect = { },
onWritePostWithFolderClick = { },
onPostDeleteClick = { },
onPostMoveClick = { },
onClickSort = { },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import daily.dayo.presentation.screen.settings.navigateInformation
import daily.dayo.presentation.screen.settings.navigateSettings
import daily.dayo.presentation.screen.settings.navigateSettingsNotification
import daily.dayo.presentation.screen.write.navigatePostEdit
import daily.dayo.presentation.screen.write.navigateToWritePostWithFolder
import daily.dayo.presentation.screen.write.navigateWrite
import daily.dayo.presentation.screen.write.navigateWriteFolder
import daily.dayo.presentation.screen.write.navigateWriteFolderNew
Expand Down Expand Up @@ -147,6 +148,10 @@ class MainNavigator(
navController.navigatePostEdit(postId)
}

fun navigateToWritePostWithFolder(folderId: Long) {
navController.navigateToWritePostWithFolder(folderId)
}

fun navigateWriteTag() {
navController.navigateWriteTag()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,11 @@ internal fun MainScreen(
folderId
)
},
onWritePostWithFolderClick = { folderId ->
navigator.navigateToWritePostWithFolder(
folderId
)
},
onPostClick = { postId -> navigator.navigatePost(postId) },
onPostMoveClick = { folderId ->
navigator.navigateFolderPostMove(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ fun NavGraphBuilder.myPageNavGraph(
onFolderClick: (Long) -> Unit,
onFolderCreateClick: () -> Unit,
onFolderEditClick: (Long) -> Unit,
onWritePostWithFolderClick: (Long) -> Unit,
onPostClick: (Long) -> Unit,
onPostMoveClick: (Long) -> Unit,
onAdRequest: (onRewardSuccess: () -> Unit) -> Unit,
Expand Down Expand Up @@ -148,6 +149,7 @@ fun NavGraphBuilder.myPageNavGraph(
onPostClick = onPostClick,
onFolderEditClick = { onFolderEditClick(folderId) },
onPostMoveClick = { onPostMoveClick(folderId) },
onWritePostWithFolderClick = { onWritePostWithFolderClick(folderId) },
onBackClick = onBackClick,
folderViewModel = hiltViewModel(navBackStackEntry)
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ fun NavController.navigatePostEdit(postId: Long) {
navigate(WriteRoute.postEdit(postId))
}

fun NavController.navigateToWritePostWithFolder(folderId: Long) {
navigate(WriteRoute.writeWithQueries(folderId))
}

fun NavController.navigateWriteTag() {
navigate(WriteRoute.tag)
}
Expand Down Expand Up @@ -55,7 +59,16 @@ fun NavGraphBuilder.writeNavGraph(
startDestination = WriteRoute.route,
route = "writeNavigation"
) {
composable(route = WriteRoute.route) {
composable(
route = WriteRoute.routeWithQueries,
arguments = listOf(
navArgument("folderId") {
type = NavType.StringType
defaultValue = null
nullable = true
}
)
) {
val parentStackEntry = remember(it) {
navController.getBackStackEntry(WriteRoute.writeRouteNavigation)
}
Expand Down Expand Up @@ -157,6 +170,9 @@ fun NavGraphBuilder.writeNavGraph(

object WriteRoute {
const val route = "write"
private const val folderIdQuery = "folderId={folderId}"
const val routeWithQueries = "$route?$folderIdQuery"

const val postEditRoute = "$route/{postId}"
const val writeRouteNavigation = "writeNavigation"

Expand All @@ -165,9 +181,16 @@ object WriteRoute {
const val folderNew = "${route}/folder/new"

const val crop = "$route/crop/{index}"

fun getCropRoute(index: Int): String {
return crop.replace("{index}", index.toString())
}

fun writeWithQueries(folderId: Long? = null): String {
val params = mutableListOf<String>()
folderId?.let { params.add("folderId=$it") }
return if (params.isEmpty()) route else "$route?${params.joinToString("&")}"
}

fun postEdit(postId: Long) = "$route/$postId"
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
import android.util.Log
import androidx.core.net.toUri
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import daily.dayo.domain.model.Category
import daily.dayo.domain.model.Folder
import daily.dayo.domain.model.NetworkResponse
import daily.dayo.domain.model.PostDetail
import daily.dayo.domain.model.Privacy
import daily.dayo.domain.usecase.folder.RequestAllMyFolderListUseCase
import daily.dayo.domain.usecase.folder.RequestCreateFolderInPostUseCase
Expand Down Expand Up @@ -57,6 +57,7 @@ class WriteViewModel @Inject constructor(
// There isn't really a leak here in the context constructor, it is just the lint check doesn't know that is the application context
@ApplicationContext
private val applicationContext: Context,
savedStateHandle: SavedStateHandle,
private val requestUploadPostUseCase: RequestUploadPostUseCase,
private val requestEditPostUseCase: RequestEditPostUseCase,
private val requestPostDetailUseCase: RequestPostDetailUseCase,
Expand Down Expand Up @@ -91,21 +92,19 @@ class WriteViewModel @Inject constructor(
// WritePost
private val _writePostId = MutableSharedFlow<Long?>()
val writePostId = _writePostId.asSharedFlow()
private val _writeSuccess = MutableLiveData<Event<Boolean>>()
val writeSuccess: LiveData<Event<Boolean>> get() = _writeSuccess
private val _uploadSuccess: MutableStateFlow<Status?> = MutableStateFlow(null)
val uploadSuccess get() = _uploadSuccess
private val _writeCurrentPostDetail = MutableLiveData<PostDetail>()
val writeCurrentPostDetail: LiveData<PostDetail> get() = _writeCurrentPostDetail

// WriteFolder
private val _folderList = MutableLiveData<Resource<List<Folder>>>()
val folderList: LiveData<Resource<List<Folder>>> get() = _folderList
private val _folderAddSuccess = MutableLiveData<Event<Boolean>>()
val folderAddAccess: LiveData<Event<Boolean>> get() = _folderAddSuccess
private val _writeFolderAddSuccess = MutableStateFlow(Event(false))
val writeFolderAddSuccess get() = _writeFolderAddSuccess

init {
savedStateHandle.get<String>("folderId")?.toLongOrNull()?.let { folderId ->
setInitFolder(folderId)
}
}

fun requestUploadPost() {
if (postEditId.value != null) {
requestUploadEditingPost()
Expand Down Expand Up @@ -194,29 +193,19 @@ class WriteViewModel @Inject constructor(
}
}

fun requestAllMyFolderList() = viewModelScope.launch(Dispatchers.IO) {
_folderList.postValue(Resource.loading(null))
requestAllMyFolderListUseCase()?.let { ApiResponse ->
_folderList.postValue(
when (ApiResponse) {
is NetworkResponse.Success -> {
Resource.success(ApiResponse.body?.data)
}

is NetworkResponse.NetworkError -> {
Resource.error(ApiResponse.exception.toString(), null)
}

is NetworkResponse.ApiError -> {
Resource.error(ApiResponse.error.toString(), null)
}
private suspend fun requestAllMyFolderList(): List<Folder>? {
val resource = when (val response = requestAllMyFolderListUseCase()) {
is NetworkResponse.Success -> Resource.success(response.body?.data)
is NetworkResponse.NetworkError -> Resource.error(response.exception.toString(), null)
is NetworkResponse.ApiError -> Resource.error(response.error.toString(), null)
is NetworkResponse.UnknownError -> Resource.error(response.throwable.toString(), null)
}

is NetworkResponse.UnknownError -> {
Resource.error(ApiResponse.throwable.toString(), null)
}
}
)
if (resource.data == null) {
Log.e("WriteViewModel", "폴더 리스트 불러오기 실패: ${resource.message}")
}

return resource.data
}

fun requestCreateFolderInPost(
Expand All @@ -230,7 +219,6 @@ class WriteViewModel @Inject constructor(
description = description,
privacy = privacy
).let { ApiResponse ->
_folderAddSuccess.postValue(Event(ApiResponse is NetworkResponse.Success))
_writeFolderAddSuccess.emit(Event(ApiResponse is NetworkResponse.Success))
}
}
Expand All @@ -240,7 +228,7 @@ class WriteViewModel @Inject constructor(
*/
fun resetWriteInfoValue() = viewModelScope.launch {
_postEditId.emit(null)
_writeFolderId.emit(0)
_writeFolderId.emit(null)
_writeFolderName.emit("")
_writeTags.emit(emptyList())
_writeImagesUri.emit(emptyList())
Expand Down Expand Up @@ -288,6 +276,15 @@ class WriteViewModel @Inject constructor(
_writeCategory.emit(category)
}

private fun setInitFolder(id: Long) {
viewModelScope.launch {
_writeFolderId.emit(id)
val folders = requestAllMyFolderList()
val folderTitle = folders?.find { it.folderId == id }?.title
_writeFolderName.emit(folderTitle)
}
}

fun setFolderId(id: Long) = viewModelScope.launch {
_writeFolderId.emit(id)
}
Expand Down