-
Notifications
You must be signed in to change notification settings - Fork 57
/
BottomSheet.kt
127 lines (118 loc) · 4.25 KB
/
BottomSheet.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/*
*
* ******************************************************************
* * * Copyright (C) 2022
* * * BottomSheet.kt is part of Kizzy
* * * and can not be copied and/or distributed without the express
* * * permission of yzziK(Vaibhav)
* * *****************************************************************
*
*
*/
package com.my.kizzy.feature_custom_rpc.components
import android.os.Build
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ClearAll
import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material.icons.outlined.FileOpen
import androidx.compose.material.icons.outlined.SaveAs
import androidx.compose.material.icons.outlined.Share
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.my.kizzy.feature_custom_rpc.UiEvent
import com.my.kizzy.feature_custom_rpc.components.sheet.SheetItem
import com.my.kizzy.resources.R
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun BottomSheet(onEvent: (UiEvent.SheetEvent) -> Unit,onDismiss: () -> Unit) {
val scope = rememberCoroutineScope()
val state = rememberModalBottomSheetState()
ModalBottomSheet(
onDismissRequest = onDismiss,
sheetState = state,
) {
Column(
modifier = Modifier.fillMaxWidth(),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
SheetItem(
title = stringResource(id = R.string.load_config),
icon = Icons.Outlined.FileOpen,
onClick = {
scope.launch {
state.hide()
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
onEvent(UiEvent.SheetEvent.TriggerStoragePermissionRequest)
}
onEvent(UiEvent.SheetEvent.TriggerLoadDialog)
}
}
)
SheetItem(
title = stringResource(id = R.string.save_config),
icon = Icons.Outlined.SaveAs
) {
scope.launch {
state.hide()
onEvent(UiEvent.SheetEvent.TriggerSaveDialog)
}
}
SheetItem(
title = stringResource(id = R.string.delete_configs),
icon = Icons.Outlined.Delete
) {
scope.launch {
state.hide()
onEvent(UiEvent.SheetEvent.TriggerDeleteDialog)
}
}
SheetItem(
title = stringResource(id = R.string.preview_rpc),
onClick = {
scope.launch {
state.hide()
onEvent(UiEvent.SheetEvent.TriggerPreviewDialog)
}
},
icon = R.drawable.ic_rpc_placeholder
)
SheetItem(
title = stringResource(id = R.string.clear_all_fields),
onClick = {
scope.launch {
state.hide()
onEvent(UiEvent.SheetEvent.ClearAllFields)
}
},
icon = Icons.Outlined.ClearAll
)
SheetItem(
title = stringResource(id = R.string.share_config),
icon = Icons.Outlined.Share,
onClick = {
scope.launch {
state.hide()
onEvent(UiEvent.SheetEvent.TriggerShareDialog)
}
}
)
}
}
}
@Preview
@Composable
fun BottomSheetPreview() {
BottomSheet({}){
}
}