Skip to content

Commit

Permalink
extracting code
Browse files Browse the repository at this point in the history
  • Loading branch information
leandroBorgesFerreira committed Jun 28, 2023
1 parent 15a1032 commit 084ec61
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 101 deletions.
Original file line number Diff line number Diff line change
@@ -1,33 +1,23 @@
package br.com.leandroferreira.app_sample.screens.menu.ui.screen

import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid
import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells
import androidx.compose.foundation.lazy.staggeredgrid.items
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.outlined.Dashboard
import androidx.compose.material.icons.outlined.List
import androidx.compose.material3.Button
import androidx.compose.material3.Card
import androidx.compose.material3.CircularProgressIndicator
Expand All @@ -45,8 +35,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
Expand All @@ -55,25 +43,16 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import br.com.leandroferreira.app_sample.R
import br.com.leandroferreira.app_sample.screens.menu.viewmodel.ChooseNoteViewModel
import br.com.leandroferreira.app_sample.screens.menu.ui.dto.DocumentCard
import br.com.leandroferreira.app_sample.screens.menu.viewmodel.ChooseNoteViewModel
import br.com.leandroferreira.app_sample.screens.menu.viewmodel.NotesArrangement
import br.com.leandroferreira.app_sample.utils.ResultData
import br.com.leandroferreira.app_sample.views.SlideInBox
import com.github.leandroborgesferreira.storyteller.drawer.DrawInfo
import com.github.leandroborgesferreira.storyteller.drawer.StoryUnitDrawer
import com.github.leandroborgesferreira.storyteller.drawer.preview.CheckItemPreviewDrawer
import com.github.leandroborgesferreira.storyteller.drawer.preview.MessagePreviewDrawer
import com.github.leandroborgesferreira.storyteller.model.story.StoryType


private fun Modifier.orderConfigModifier(clickable: () -> Unit): Modifier =
padding(8.dp)
.clip(RoundedCornerShape(6.dp))
.background(Color.Cyan)
.clickable(onClick = clickable)
.padding(6.dp)

private fun previewDrawers(): Map<String, StoryUnitDrawer> =
mapOf(
StoryType.MESSAGE.type to MessagePreviewDrawer(),
Expand Down Expand Up @@ -124,77 +103,6 @@ fun ChooseNoteScreen(
}
}

@Composable
private fun BoxScope.ConfigurationsMenu(editState: Boolean, viewModel: ChooseNoteViewModel) {
// Todo: Extract to a global use function
SlideInBox(
modifier = Modifier.align(Alignment.BottomCenter),
editState = editState,
animationLabel = "configurationsMenuAnimation"
) { isEdit ->
if (isEdit) {
val topCorner = CornerSize(24.dp)
val bottomCorner = CornerSize(0.dp)

Column(
modifier = Modifier
.fillMaxWidth()
.clip(
RoundedCornerShape(
topCorner,
topCorner,
bottomCorner,
bottomCorner
)
)
.background(MaterialTheme.colorScheme.primary)
.padding(16.dp),
) {
Text(
modifier = Modifier.fillMaxWidth(),
text = "Ordering",
style = MaterialTheme.typography.titleLarge,
color = MaterialTheme.colorScheme.onPrimary
)

ArrangementOptions(
listOptionClick = viewModel::listArrangementSelected,
gridOptionClick = viewModel::gridArrangementSelected,
)

Spacer(modifier = Modifier.height(90.dp))
}
} else {
Box(
modifier = Modifier
.height(0.dp)
.fillMaxWidth()
)
}
}
}

@Composable
private fun ArrangementOptions(listOptionClick: () -> Unit, gridOptionClick: () -> Unit) {
Row(modifier = Modifier.fillMaxWidth()) {
Image(
modifier = Modifier
.orderConfigModifier(clickable = gridOptionClick)
.weight(1F),
imageVector = Icons.Outlined.Dashboard,
contentDescription = stringResource(R.string.staggered_card)
)

Image(
modifier = Modifier
.orderConfigModifier(clickable = listOptionClick)
.weight(1F),
imageVector = Icons.Outlined.List,
contentDescription = stringResource(R.string.note_list)
)
}
}


@Composable
private fun Content(
Expand All @@ -215,7 +123,7 @@ private fun Content(
}

@Composable
fun Notes(chooseNoteViewModel: ChooseNoteViewModel, navigateToNote: (String) -> Unit) {
private fun Notes(chooseNoteViewModel: ChooseNoteViewModel, navigateToNote: (String) -> Unit) {
when (val documents =
chooseNoteViewModel.documentsState.collectAsStateWithLifecycle().value) {
is ResultData.Complete -> {
Expand Down Expand Up @@ -341,10 +249,3 @@ private fun MockDataScreen(chooseNoteViewModel: ChooseNoteViewModel) {
}
}
}

@Preview
@Composable
fun ArrangementOptions_Preview() {
ArrangementOptions({}, {})
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package br.com.leandroferreira.app_sample.screens.menu.ui.screen

import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.CornerSize
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Dashboard
import androidx.compose.material.icons.outlined.List
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import br.com.leandroferreira.app_sample.R
import br.com.leandroferreira.app_sample.screens.menu.viewmodel.ChooseNoteViewModel
import br.com.leandroferreira.app_sample.views.SlideInBox

@Composable
internal fun BoxScope.ConfigurationsMenu(editState: Boolean, viewModel: ChooseNoteViewModel) {
// Todo: Extract to a global use function
SlideInBox(
modifier = Modifier.align(Alignment.BottomCenter),
editState = editState,
animationLabel = "configurationsMenuAnimation"
) { isEdit ->
if (isEdit) {
val topCorner = CornerSize(16.dp)
val bottomCorner = CornerSize(0.dp)

Column(
modifier = Modifier
.fillMaxWidth()
.clip(
RoundedCornerShape(
topCorner,
topCorner,
bottomCorner,
bottomCorner
)
)
.background(MaterialTheme.colorScheme.primary)
.padding(16.dp),
) {
Text(
modifier = Modifier.fillMaxWidth(),
text = "Ordering",
style = MaterialTheme.typography.titleLarge,
color = MaterialTheme.colorScheme.onPrimary
)

ArrangementOptions(
listOptionClick = viewModel::listArrangementSelected,
gridOptionClick = viewModel::gridArrangementSelected,
)

Spacer(modifier = Modifier.height(90.dp))
}
} else {
Box(
modifier = Modifier
.height(0.dp)
.fillMaxWidth()
)
}
}
}

@Composable
private fun ArrangementOptions(listOptionClick: () -> Unit, gridOptionClick: () -> Unit) {
Row(modifier = Modifier.fillMaxWidth()) {
Image(
modifier = Modifier
.orderConfigModifier(clickable = gridOptionClick)
.weight(1F),
imageVector = Icons.Outlined.Dashboard,
contentDescription = stringResource(R.string.staggered_card)
)

Image(
modifier = Modifier
.orderConfigModifier(clickable = listOptionClick)
.weight(1F),
imageVector = Icons.Outlined.List,
contentDescription = stringResource(R.string.note_list)
)
}
}


private fun Modifier.orderConfigModifier(clickable: () -> Unit): Modifier =
padding(8.dp)
.clip(RoundedCornerShape(6.dp))
.background(Color.Cyan)
.clickable(onClick = clickable)
.padding(6.dp)

@Preview
@Composable
fun ArrangementOptions_Preview() {
ArrangementOptions({}, {})
}

0 comments on commit 084ec61

Please sign in to comment.