Skip to content

Commit

Permalink
Add code snippet for OudsCheckbox
Browse files Browse the repository at this point in the history
  • Loading branch information
florentmaitre authored and paulinea committed Feb 24, 2025
1 parent b90584b commit ebbd895
Show file tree
Hide file tree
Showing 4 changed files with 87 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -198,21 +198,23 @@ private fun ButtonDemoBox(colored: Boolean, modifier: Modifier = Modifier, conte
private fun ButtonDemoCodeSnippet(state: ButtonDemoState, modifier: Modifier = Modifier) {
val text = stringResource(id = R.string.app_components_button_label)
CodeSnippet(modifier = modifier) {
coloredBoxCall(state.onColoredBox) {
functionCall(OudsButton::class.simpleName.orEmpty()) {
if (state.layout in listOf(ButtonDemoState.Layout.IconOnly, ButtonDemoState.Layout.IconAndText)) {
constructorCallArgument<OudsButton.Icon>("icon") {
painterArgument(R.drawable.ic_heart)
contentDescriptionArgument(R.string.app_components_button_icon_a11y)
with(state) {
coloredBoxCall(onColoredBox) {
functionCall(OudsButton::class.simpleName.orEmpty()) {
if (layout in listOf(ButtonDemoState.Layout.IconOnly, ButtonDemoState.Layout.IconAndText)) {
constructorCallArgument<OudsButton.Icon>("icon") {
painterArgument(R.drawable.ic_heart)
contentDescriptionArgument(R.string.app_components_button_icon_a11y)
}
}
if (layout in listOf(ButtonDemoState.Layout.TextOnly, ButtonDemoState.Layout.IconAndText)) {
textArgument(text)
}
onClickArgument()
enabledArgument(enabled)
typedArgument("style", style)
typedArgument("hierarchy", hierarchy)
}
if (state.layout in listOf(ButtonDemoState.Layout.TextOnly, ButtonDemoState.Layout.IconAndText)) {
textArgument(text)
}
onClickArgument()
enabledArgument(state.enabled)
typedArgument("style", state.style)
typedArgument("hierarchy", state.hierarchy)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,19 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.rememberBottomSheetScaffoldState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.state.ToggleableState
import com.orange.ouds.app.R
import com.orange.ouds.app.ui.components.Component
import com.orange.ouds.app.ui.components.enabledArgument
import com.orange.ouds.app.ui.components.onClickArgument
import com.orange.ouds.app.ui.utilities.composable.CodeSnippet
import com.orange.ouds.app.ui.utilities.composable.CustomizationBottomSheetScaffold
import com.orange.ouds.app.ui.utilities.composable.CustomizationSwitchListItem
import com.orange.ouds.app.ui.utilities.composable.DemoScreen
import com.orange.ouds.app.ui.utilities.composable.DetailScreenDescription
import com.orange.ouds.core.component.OudsCheckbox
import com.orange.ouds.core.component.OudsTriStateCheckbox
import com.orange.ouds.core.theme.OudsTheme
import com.orange.ouds.core.theme.OudsThemeTweak
Expand All @@ -64,42 +61,69 @@ fun CheckboxDemoScreen() = DemoScreen(rememberCheckboxDemoState()) {
)
}
) {
Column(modifier = Modifier.fillMaxWidth().verticalScroll(rememberScrollState())) {
Column(
modifier = Modifier
.fillMaxWidth()
.verticalScroll(rememberScrollState())
) {
DetailScreenDescription(
modifier = Modifier.padding(all = OudsTheme.spaces.fixed.medium),
descriptionRes = Component.Checkbox.descriptionRes
)
CheckboxDemo(state = this@DemoScreen)
val onClick = {
toggleableState = when (toggleableState) {
ToggleableState.On -> ToggleableState.Off
ToggleableState.Off -> ToggleableState.Indeterminate
ToggleableState.Indeterminate -> ToggleableState.On
}
}
CheckboxDemo(state = this@DemoScreen, onClick = onClick)
OudsThemeTweak(OudsTheme.Tweak.Invert) {
CheckboxDemo(state = this@DemoScreen)
CheckboxDemo(state = this@DemoScreen, onClick = onClick)
}
CheckboxDemoCodeSnippet(
state = this@DemoScreen,
modifier = Modifier
.padding(all = OudsTheme.spaces.fixed.medium)
.padding(top = OudsTheme.spaces.fixed.medium)
)
}
}
}

@Composable
private fun CheckboxDemo(state: CheckboxDemoState) {
var toggleableState by rememberSaveable { mutableStateOf(ToggleableState.Off) }

private fun CheckboxDemo(state: CheckboxDemoState, onClick: () -> Unit) {
Box(
modifier = Modifier
.background(OudsTheme.colorScheme.background.primary)
.padding(all = OudsTheme.spaces.fixed.medium)
.fillMaxWidth(),
contentAlignment = Alignment.Center,
) {
OudsTriStateCheckbox(
state = toggleableState,
onClick = {
toggleableState = when (toggleableState) {
ToggleableState.On -> ToggleableState.Off
ToggleableState.Off -> ToggleableState.Indeterminate
ToggleableState.Indeterminate -> ToggleableState.On
with(state) {
OudsTriStateCheckbox(
state = toggleableState,
onClick = onClick,
enabled = enabled,
error = error
)
}
}
}

@Composable
private fun CheckboxDemoCodeSnippet(state: CheckboxDemoState, modifier: Modifier = Modifier) {
CodeSnippet(modifier = modifier) {
with(state) {
functionCall("OudsTriStateCheckbox") {
typedArgument("state", toggleableState)
onClickArgument {
comment("Change state")
}
},
enabled = state.enabled,
error = state.error
)
enabledArgument(enabled)
typedArgument("error", error)
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,32 +18,38 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.mapSaver
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.state.ToggleableState

@Composable
fun rememberCheckboxDemoState(
toggleableState: ToggleableState = ToggleableState.Off,
enabled: Boolean = true,
error: Boolean = false
) = rememberSaveable(enabled, error, saver = CheckboxDemoState.Saver) {
CheckboxDemoState(enabled, error)
) = rememberSaveable(toggleableState, enabled, error, saver = CheckboxDemoState.Saver) {
CheckboxDemoState(toggleableState, enabled, error)
}

class CheckboxDemoState(
toggleableState: ToggleableState,
enabled: Boolean,
error: Boolean
) {
companion object {
val Saver = run {
val toggleableStateKey = "toggleableState"
val enabledKey = "enabled"
val errorKey = "error"
mapSaver(
save = { state ->
mapOf(
toggleableStateKey to state.toggleableState,
enabledKey to state.enabled,
errorKey to state.error,
)
},
restore = { map ->
CheckboxDemoState(
map[toggleableStateKey] as ToggleableState,
map[enabledKey] as Boolean,
map[errorKey] as Boolean
)
Expand All @@ -52,6 +58,8 @@ class CheckboxDemoState(
}
}

var toggleableState: ToggleableState by mutableStateOf(toggleableState)

var enabled: Boolean by mutableStateOf(enabled)

var error: Boolean by mutableStateOf(error)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,22 +186,24 @@ private fun LinkDemoBox(colored: Boolean, modifier: Modifier = Modifier, content
private fun LinkDemoCodeSnippet(state: LinkDemoState, modifier: Modifier = Modifier) {
val text = stringResource(id = R.string.app_components_link_label)
CodeSnippet(modifier = modifier) {
coloredBoxCall(state.onColoredBox) {
functionCall(OudsLink::class.simpleName.orEmpty()) {
textArgument(text)
when (state.layout) {
LinkDemoState.Layout.TextOnly -> {}
LinkDemoState.Layout.IconAndText -> {
constructorCallArgument<OudsLink.Icon>("icon") {
painterArgument(R.drawable.ic_heart)
with(state) {
coloredBoxCall(onColoredBox) {
functionCall(OudsLink::class.simpleName.orEmpty()) {
textArgument(text)
when (layout) {
LinkDemoState.Layout.TextOnly -> {}
LinkDemoState.Layout.IconAndText -> {
constructorCallArgument<OudsLink.Icon>("icon") {
painterArgument(R.drawable.ic_heart)
}
}
LinkDemoState.Layout.ArrowBack -> typedArgument("arrow", OudsLink.Arrow.Back)
LinkDemoState.Layout.ArrowNext -> typedArgument("arrow", OudsLink.Arrow.Next)
}
LinkDemoState.Layout.ArrowBack -> typedArgument("arrow", OudsLink.Arrow.Back)
LinkDemoState.Layout.ArrowNext -> typedArgument("arrow", OudsLink.Arrow.Next)
onClickArgument()
enabledArgument(enabled)
typedArgument("size", size)
}
onClickArgument()
enabledArgument(state.enabled)
typedArgument("size", state.size)
}
}
}
Expand Down

0 comments on commit ebbd895

Please sign in to comment.