diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/dialog/EditDescriptionDialog.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/dialog/EditDescriptionDialog.kt index 7240a5f9..4eee8e1b 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/dialog/EditDescriptionDialog.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/dialog/EditDescriptionDialog.kt @@ -10,17 +10,22 @@ import android.view.View import android.view.ViewGroup import android.view.WindowManager import androidx.fragment.app.DialogFragment +import androidx.navigation.fragment.navArgs +import androidx.navigation.navGraphViewModels import boostcamp.and07.mindsync.R +import boostcamp.and07.mindsync.data.NodeGenerator +import boostcamp.and07.mindsync.data.crdt.OperationType +import boostcamp.and07.mindsync.data.model.CircleNode +import boostcamp.and07.mindsync.data.model.RectangleNode import boostcamp.and07.mindsync.databinding.DialogEditDescriptionBinding +import boostcamp.and07.mindsync.ui.mindmap.MindMapViewModel class EditDescriptionDialog : DialogFragment() { private var _binding: DialogEditDescriptionBinding? = null private val binding get() = _binding!! private lateinit var editDialogInterface: EditDialogInterface - - fun setListener(listener: EditDialogInterface) { - editDialogInterface = listener - } + private val mindMapViewModel: MindMapViewModel by navGraphViewModels(R.id.nav_graph) + private val args: EditDescriptionDialogArgs by navArgs() override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val dialog = super.onCreateDialog(savedInstanceState) @@ -36,16 +41,46 @@ class EditDescriptionDialog : DialogFragment() { savedInstanceState: Bundle?, ): View { _binding = DialogEditDescriptionBinding.inflate(inflater, container, false) - binding.run { - btnCancel.setOnClickListener { - dismiss() - } - btnSubmit.setOnClickListener { - editDialogInterface.onSubmitClick(binding.etNodeDescription.text.toString()) - dismiss() + return binding.root + } + + override fun onViewCreated( + view: View, + savedInstanceState: Bundle?, + ) { + super.onViewCreated(view, savedInstanceState) + setupCancelBtn() + setupSubmitBtn() + } + + private fun setupSubmitBtn() { + binding.btnSubmit.setOnClickListener { + val node = args.node + val description = binding.etNodeDescription.text.toString() + when (args.operation) { + OperationType.ADD -> { + mindMapViewModel.addNode(node, NodeGenerator.makeNode(description, node.id)) + } + + OperationType.UPDATE -> { + val newNode = + when (node) { + is CircleNode -> node.copy(description = description) + is RectangleNode -> node.copy(description = description) + } + mindMapViewModel.updateNode(newNode) + } + + else -> {} } + dismiss() + } + } + + private fun setupCancelBtn() { + binding.btnCancel.setOnClickListener { + dismiss() } - return binding.root } override fun onStart() { diff --git a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/mindmap/MindMapFragment.kt b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/mindmap/MindMapFragment.kt index b77a0470..e50df17f 100644 --- a/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/mindmap/MindMapFragment.kt +++ b/AOS/app/src/main/java/boostcamp/and07/mindsync/ui/mindmap/MindMapFragment.kt @@ -1,22 +1,19 @@ package boostcamp.and07.mindsync.ui.mindmap import android.util.Log -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 androidx.navigation.navGraphViewModels import boostcamp.and07.mindsync.R -import boostcamp.and07.mindsync.data.NodeGenerator -import boostcamp.and07.mindsync.data.model.CircleNode +import boostcamp.and07.mindsync.data.crdt.OperationType import boostcamp.and07.mindsync.data.model.Node -import boostcamp.and07.mindsync.data.model.RectangleNode import boostcamp.and07.mindsync.data.model.Tree import boostcamp.and07.mindsync.data.network.SocketState import boostcamp.and07.mindsync.databinding.FragmentMindMapBinding import boostcamp.and07.mindsync.ui.base.BaseFragment -import boostcamp.and07.mindsync.ui.dialog.EditDescriptionDialog -import boostcamp.and07.mindsync.ui.dialog.EditDialogInterface import boostcamp.and07.mindsync.ui.util.Dp import boostcamp.and07.mindsync.ui.util.Px import boostcamp.and07.mindsync.ui.util.ThrottleDuration @@ -36,7 +33,9 @@ class MindMapFragment : NodeClickListener, TreeUpdateListener, NodeMoveListener { - private val mindMapViewModel: MindMapViewModel by viewModels() + private val mindMapViewModel: MindMapViewModel by navGraphViewModels(R.id.nav_graph) { + MindMapViewModelFactory() + } private lateinit var mindMapContainer: MindMapContainer private val args: MindMapFragmentArgs by navArgs() @@ -111,42 +110,39 @@ class MindMapFragment : } private fun showDialog( - selectNode: Node, - action: (Node, String) -> Unit, + operationType: OperationType, + selectedNode: Node, ) { - val dialog = EditDescriptionDialog() - dialog.setListener( - object : EditDialogInterface { - override fun onSubmitClick(description: String) { - action.invoke(selectNode, description) - } - }, + findNavController().navigate( + MindMapFragmentDirections.actionMindMapFragmentToEditDescriptionDialog( + operationType, + selectedNode, + ), ) - dialog.show(requireActivity().supportFragmentManager, "EditDescriptionDialog") } private fun setClickEventThrottle() { with(binding) { - imgbtnMindMapAdd.setClickEvent(lifecycleScope, ThrottleDuration.SHORT_DURATION.duration) { + imgbtnMindMapAdd.setClickEvent( + lifecycleScope, + ThrottleDuration.SHORT_DURATION.duration, + ) { mindMapViewModel.selectedNode.value?.let { selectNode -> - showDialog(selectNode) { parent, description -> - mindMapViewModel.addNode(parent, NodeGenerator.makeNode(description, parent.id)) - } + showDialog(OperationType.ADD, selectNode) } } - imgbtnMindMapEdit.setClickEvent(lifecycleScope, ThrottleDuration.SHORT_DURATION.duration) { + imgbtnMindMapEdit.setClickEvent( + lifecycleScope, + ThrottleDuration.SHORT_DURATION.duration, + ) { mindMapViewModel.selectedNode.value?.let { selectNode -> - showDialog(selectNode) { node, description -> - val newNode = - when (node) { - is CircleNode -> node.copy(description = description) - is RectangleNode -> node.copy(description = description) - } - mindMapViewModel.updateNode(newNode) - } + showDialog(OperationType.UPDATE, selectNode) } } - imgbtnMindMapRemove.setClickEvent(lifecycleScope, ThrottleDuration.SHORT_DURATION.duration) { + imgbtnMindMapRemove.setClickEvent( + lifecycleScope, + ThrottleDuration.SHORT_DURATION.duration, + ) { mindMapViewModel.selectedNode.value?.let { selectNode -> mindMapViewModel.removeNode(selectNode) }