Skip to content

Commit cfbc147

Browse files
committed
feat(workspace): Add Compose previews for WorkspaceActionBar
1 parent 3f9d0e4 commit cfbc147

1 file changed

Lines changed: 110 additions & 0 deletions

File tree

app-workspace/src/main/java/eu/darken/butler/workspace/ui/actions/WorkspaceActionBar.kt

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.compose.foundation.border
55
import androidx.compose.foundation.layout.Arrangement
66
import androidx.compose.foundation.layout.Box
77
import androidx.compose.foundation.layout.BoxWithConstraints
8+
import androidx.compose.foundation.layout.Column
89
import androidx.compose.foundation.layout.Row
910
import androidx.compose.foundation.layout.fillMaxWidth
1011
import androidx.compose.foundation.layout.height
@@ -14,7 +15,13 @@ import androidx.compose.foundation.layout.size
1415
import androidx.compose.foundation.shape.CircleShape
1516
import androidx.compose.foundation.shape.RoundedCornerShape
1617
import androidx.compose.material.icons.Icons
18+
import androidx.compose.material.icons.twotone.ContentCopy
19+
import androidx.compose.material.icons.twotone.Delete
20+
import androidx.compose.material.icons.twotone.Edit
1721
import androidx.compose.material.icons.twotone.MoreVert
22+
import androidx.compose.material.icons.twotone.Refresh
23+
import androidx.compose.material.icons.twotone.Share
24+
import androidx.compose.material.icons.twotone.Star
1825
import androidx.compose.material3.Card
1926
import androidx.compose.material3.CardDefaults
2027
import androidx.compose.material3.DropdownMenu
@@ -31,12 +38,18 @@ import androidx.compose.runtime.remember
3138
import androidx.compose.runtime.setValue
3239
import androidx.compose.ui.Alignment
3340
import androidx.compose.ui.Modifier
41+
import androidx.compose.ui.graphics.vector.ImageVector
3442
import androidx.compose.ui.platform.LocalContext
3543
import androidx.compose.ui.res.pluralStringResource
3644
import androidx.compose.ui.res.stringResource
3745
import androidx.compose.ui.unit.Dp
3846
import androidx.compose.ui.unit.dp
47+
import eu.darken.butler.common.ca.CaString
48+
import eu.darken.butler.common.ca.toCaString
49+
import eu.darken.butler.common.compose.Preview2
50+
import eu.darken.butler.common.compose.PreviewWrapper
3951
import eu.darken.butler.workspace.R
52+
import eu.darken.butler.common.R as CommonR
4053

4154
/**
4255
* Shared action bar for workspace modules
@@ -242,3 +255,100 @@ fun WorkspaceActionBar(
242255
}
243256
}
244257
}
258+
259+
@Preview2
260+
@Composable
261+
private fun WorkspaceActionBarPreview() {
262+
PreviewWrapper {
263+
Column(
264+
verticalArrangement = Arrangement.spacedBy(16.dp),
265+
modifier = Modifier.padding(16.dp)
266+
) {
267+
// Sample action implementation for preview
268+
data class SampleAction(
269+
override val icon: ImageVector,
270+
override val label: CaString,
271+
override val isVisible: Boolean = true,
272+
override val isEnabled: Boolean = true,
273+
override val isDestructive: Boolean = false,
274+
override val group: WorkspaceAction.Group = WorkspaceAction.Group.PRIMARY,
275+
override val badge: Boolean = false,
276+
) : WorkspaceAction
277+
278+
// Basic action bar with a few actions
279+
WorkspaceActionBar(
280+
actions = listOf(
281+
SampleAction(Icons.TwoTone.Share, CommonR.string.general_share_action.toCaString()),
282+
SampleAction(Icons.TwoTone.Edit, CommonR.string.general_edit_action.toCaString()),
283+
SampleAction(
284+
Icons.TwoTone.Delete,
285+
CommonR.string.general_delete_action.toCaString(),
286+
isDestructive = true
287+
),
288+
),
289+
onActionClick = {},
290+
)
291+
292+
// With selection count (selection mode)
293+
WorkspaceActionBar(
294+
actions = listOf(
295+
SampleAction(Icons.TwoTone.ContentCopy, CommonR.string.general_copy_action.toCaString()),
296+
SampleAction(
297+
Icons.TwoTone.Delete,
298+
CommonR.string.general_delete_action.toCaString(),
299+
isDestructive = true
300+
),
301+
),
302+
onActionClick = {},
303+
selectionCount = 5,
304+
)
305+
306+
// With overflow menu (more actions than fit)
307+
WorkspaceActionBar(
308+
actions = listOf(
309+
SampleAction(Icons.TwoTone.Share, CommonR.string.general_share_action.toCaString()),
310+
SampleAction(Icons.TwoTone.Edit, CommonR.string.general_edit_action.toCaString()),
311+
SampleAction(Icons.TwoTone.ContentCopy, CommonR.string.general_copy_action.toCaString()),
312+
SampleAction(
313+
Icons.TwoTone.Star,
314+
CommonR.string.general_view_action.toCaString(),
315+
group = WorkspaceAction.Group.SECONDARY
316+
),
317+
SampleAction(
318+
Icons.TwoTone.Refresh,
319+
CommonR.string.general_refresh_action.toCaString(),
320+
group = WorkspaceAction.Group.SECONDARY
321+
),
322+
SampleAction(
323+
Icons.TwoTone.Delete,
324+
CommonR.string.general_delete_action.toCaString(),
325+
isDestructive = true
326+
),
327+
),
328+
onActionClick = {},
329+
)
330+
331+
// With badges and disabled action
332+
WorkspaceActionBar(
333+
actions = listOf(
334+
SampleAction(
335+
Icons.TwoTone.Refresh,
336+
CommonR.string.general_refresh_action.toCaString(),
337+
badge = true
338+
),
339+
SampleAction(
340+
Icons.TwoTone.Edit,
341+
CommonR.string.general_edit_action.toCaString(),
342+
isEnabled = false
343+
),
344+
SampleAction(
345+
Icons.TwoTone.Delete,
346+
CommonR.string.general_delete_action.toCaString(),
347+
isDestructive = true
348+
),
349+
),
350+
onActionClick = {},
351+
)
352+
}
353+
}
354+
}

0 commit comments

Comments
 (0)