Skip to content

Commit

Permalink
Merge pull request #326 from boostcampwm2023/AOS-refactor/board
Browse files Browse the repository at this point in the history
BoardList Jetpack Compose로 마이그레이션 하기
  • Loading branch information
yang1318 authored Mar 9, 2024
2 parents e22b9b0 + 272d81b commit 62dbd16
Show file tree
Hide file tree
Showing 21 changed files with 1,140 additions and 831 deletions.
3 changes: 1 addition & 2 deletions AOS/.idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions AOS/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ dependencies {
implementation("io.coil-kt:coil-compose:2.5.0")
implementation("com.google.accompanist:accompanist-permissions:0.32.0")
debugImplementation("androidx.compose.ui:ui-tooling")
implementation("androidx.navigation:navigation-compose:2.7.7")
}

val ktlintCheck by tasks.registering(JavaExec::class) {
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,88 +1,57 @@
package boostcamp.and07.mindsync.ui.boardlist

import android.net.Uri
import androidx.compose.runtime.Composable
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import boostcamp.and07.mindsync.R
import boostcamp.and07.mindsync.data.model.Board
import boostcamp.and07.mindsync.databinding.FragmentBoardListBinding
import boostcamp.and07.mindsync.ui.base.BaseFragment
import boostcamp.and07.mindsync.ui.dialog.CreateBoardDialog
import boostcamp.and07.mindsync.ui.util.setClickEvent
import boostcamp.and07.mindsync.ui.base.BaseComposeFragment
import boostcamp.and07.mindsync.ui.theme.MindSyncTheme
import boostcamp.and07.mindsync.ui.util.toAbsolutePath
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import java.io.File

@AndroidEntryPoint
class BoardListFragment :
BaseFragment<FragmentBoardListBinding>(R.layout.fragment_board_list) {
class BoardListFragment : BaseComposeFragment() {
private val boardListViewModel: BoardListViewModel by viewModels()
private val boardListAdapter = BoardListAdapter()
private val args: BoardListFragmentArgs by navArgs()

override fun initView() {
setBinding()
collectBoardEvent()
onFloatingButtonClick()
boardListViewModel.setSpaceId(args.spaceId)
private fun createImage(uri: Uri?) {
uri?.let { uri ->
val file = File(uri.toAbsolutePath(requireContext()))
boardListViewModel.setBoardImage(uri.toString())
boardListViewModel.setImageFile(file)
}
}

private fun setBinding() {
binding.vm = boardListViewModel
binding.rvBoardListBoard.adapter = boardListAdapter
boardListAdapter.setBoardClickListener(
object : BoardClickListener {
override fun onClick(board: Board) {
findNavController().navigate(
BoardListFragmentDirections.actionBoardListFragmentToMindMapFragment(
board.id,
board.name,
),
)
}

override fun onCheckBoxClick(board: Board) {
boardListViewModel.selectBoard(board)
}
},
private fun navigateToMindMap(
boardId: String,
boardName: String,
) {
findNavController().navigate(
BoardListFragmentDirections.actionBoardListFragmentToMindMapFragment(
boardId = boardId,
boardName = boardName,
),
)
}

private fun collectBoardEvent() {
viewLifecycleOwner.lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
boardListViewModel.boardUiEvent.collectLatest { boardEvent ->
when (boardEvent) {
is BoardUiEvent.ShowMessage -> {
showMessage(boardEvent.message)
}
else -> {}
}
}
}
}
}

private fun onFloatingButtonClick() {
binding.btnBoardListAddBoard.setClickEvent(lifecycleScope) {
if (boardListViewModel.boardUiState.value.selectBoards.isEmpty()) {
val createBoardDialog = CreateBoardDialog()
createBoardDialog.setCompleteListener { part, name ->
boardListViewModel.addBoard(part, name)
}
createBoardDialog.show(
requireActivity().supportFragmentManager,
"CreateBoardDialog",
)
} else {
boardListViewModel.deleteBoard()
}
}
binding.btnBoardListRefresh.setClickEvent(lifecycleScope) {
boardListViewModel.getBoards()
@Composable
override fun Screen() {
MindSyncTheme {
BoardListScreen(
boardListViewModel = boardListViewModel,
onCheckBoxClicked = { boardListViewModel.selectBoard() },
refreshBoard = { boardListViewModel.restoreBoard() },
showDialog = { boardListViewModel.showCreateBoardDialog(it) },
deleteBoard = { boardListViewModel.deleteBoard() },
createBoard = { imageFile, imageName ->
boardListViewModel.addBoard(imageFile, imageName)
},
onAcceptClicked = { uri -> createImage(uri) },
navigateToMindMap = { boardId, boardName ->
navigateToMindMap(boardId, boardName)
},
updateBoardName = { boardListViewModel.onBoardNameChanged(it) },
)
}
}
}
Loading

0 comments on commit 62dbd16

Please sign in to comment.