Skip to content

Commit 4629b8a

Browse files
committed
feat: couple tag creation and tag list for individual components into
TagSelectionComponent
1 parent f727d0a commit 4629b8a

3 files changed

Lines changed: 175 additions & 174 deletions

File tree

composeApp/src/commonMain/kotlin/com/sakethh/linkora/ui/components/AddANewLinkDialogBox.kt

Lines changed: 19 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.sakethh.linkora.ui.components
22

3+
import androidx.compose.animation.AnimatedVisibility
34
import androidx.compose.animation.animateContentSize
45
import androidx.compose.foundation.BorderStroke
56
import androidx.compose.foundation.ExperimentalFoundationApi
@@ -43,7 +44,6 @@ import androidx.compose.material.icons.filled.KeyboardArrowDown
4344
import androidx.compose.material.icons.filled.KeyboardArrowUp
4445
import androidx.compose.material.icons.filled.Search
4546
import androidx.compose.material.icons.filled.SubdirectoryArrowRight
46-
import androidx.compose.material.icons.filled.Tag
4747
import androidx.compose.material.icons.outlined.Folder
4848
import androidx.compose.material.icons.outlined.Link
4949
import androidx.compose.material.icons.outlined.StarOutline
@@ -122,8 +122,6 @@ import com.sakethh.linkora.ui.domain.PaginationState
122122
import com.sakethh.linkora.ui.domain.model.AddNewFolderDialogBoxParam
123123
import com.sakethh.linkora.ui.domain.model.AddNewLinkDialogParams
124124
import com.sakethh.linkora.ui.screens.DataEmptyScreen
125-
import com.sakethh.linkora.ui.utils.UIEvent
126-
import com.sakethh.linkora.ui.utils.UIEvent.pushUIEvent
127125
import com.sakethh.linkora.ui.utils.linkoraLog
128126
import com.sakethh.linkora.ui.utils.pressScaleEffect
129127
import com.sakethh.linkora.ui.utils.rememberDeserializableMutableObject
@@ -619,60 +617,26 @@ private fun BottomPartOfAddANewLinkDialogBox(
619617
fontSize = 18.sp
620618
)
621619
}
622-
Box(
623-
modifier = Modifier.animateContentSize()
624-
.then(if (AppPreferences.showTagsInAddNewLinkDialogBox) Modifier.height(345.dp) else Modifier)
625-
.fillMaxWidth()
626-
) {
627-
if (AppPreferences.showTagsInAddNewLinkDialogBox) {
628-
Column(modifier = Modifier.align(Alignment.BottomCenter)) {
629-
OutlinedButton(
630-
shape = RoundedCornerShape(bottomStart = 25.dp, bottomEnd = 25.dp),
631-
modifier = Modifier.pointerHoverIcon(icon = PointerIcon.Hand).padding(
632-
end = 25.dp,
633-
start = 15.25.dp,
634-
).height(ButtonDefaults.MinHeight + 30.dp).fillMaxWidth(), onClick = {
635-
coroutineScope.pushUIEvent(UIEvent.Type.ShowCreateTagBtmSheet)
636-
}
637-
) {
638-
Box(
639-
modifier = Modifier.fillMaxSize().padding(bottom = 5.dp),
640-
contentAlignment = Alignment.BottomCenter
641-
) {
642-
Row(verticalAlignment = Alignment.CenterVertically) {
643-
Icon(
644-
imageVector = Icons.Default.Tag,
645-
contentDescription = null
646-
)
647-
Spacer(Modifier.width(5.dp))
648-
Text(
649-
text = Localization.Key.CreateANewTag.rememberLocalizedString(),
650-
style = MaterialTheme.typography.titleSmall,
651-
fontSize = 16.sp
652-
)
653-
}
654-
}
620+
621+
AnimatedVisibility(AppPreferences.showTagsInAddNewLinkDialogBox) {
622+
TagSelectionComponent(
623+
paddingValues = PaddingValues(start = 15.dp, end = 25.dp),
624+
allTags = allTags,
625+
selectedTags = selectedTags,
626+
onTagClick = {
627+
if (selectedTags.contains(it)) {
628+
performAction(AddANewLinkDialogBoxAction.UnSelectATag(it))
629+
} else {
630+
performAction(AddANewLinkDialogBoxAction.SelectATag(it))
655631
}
632+
},
633+
onRetrieveNextTagsPage = {
634+
performAction(AddANewLinkDialogBoxAction.OnRetrieveNextTagsPage)
635+
},
636+
onFirstVisibleIndexChange = {
637+
performAction(AddANewLinkDialogBoxAction.OnFirstVisibleIndexChangeOfTags(it))
656638
}
657-
TagSelectionComponent(
658-
paddingValues = PaddingValues(start = 15.dp, end = 25.dp),
659-
allTags = allTags,
660-
selectedTags = selectedTags,
661-
onTagClick = {
662-
if (selectedTags.contains(it)) {
663-
performAction(AddANewLinkDialogBoxAction.UnSelectATag(it))
664-
} else {
665-
performAction(AddANewLinkDialogBoxAction.SelectATag(it))
666-
}
667-
},
668-
onRetrieveNextTagsPage = {
669-
performAction(AddANewLinkDialogBoxAction.OnRetrieveNextTagsPage)
670-
},
671-
onFirstVisibleIndexChange = {
672-
performAction(AddANewLinkDialogBoxAction.OnFirstVisibleIndexChangeOfTags(it))
673-
}
674-
)
675-
}
639+
)
676640
}
677641

678642
if (currentFolder == null) {

composeApp/src/commonMain/kotlin/com/sakethh/linkora/ui/components/RenameFolderOrLinkDialog.kt

Lines changed: 19 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.sakethh.linkora.ui.components
33
import androidx.compose.animation.animateContentSize
44
import androidx.compose.foundation.background
55
import androidx.compose.foundation.layout.Arrangement
6-
import androidx.compose.foundation.layout.Box
76
import androidx.compose.foundation.layout.Column
87
import androidx.compose.foundation.layout.PaddingValues
98
import androidx.compose.foundation.layout.Row
@@ -13,16 +12,15 @@ import androidx.compose.foundation.layout.fillMaxWidth
1312
import androidx.compose.foundation.layout.height
1413
import androidx.compose.foundation.layout.imePadding
1514
import androidx.compose.foundation.layout.padding
16-
import androidx.compose.foundation.layout.width
1715
import androidx.compose.foundation.layout.wrapContentSize
16+
import androidx.compose.foundation.rememberScrollState
1817
import androidx.compose.foundation.shape.RoundedCornerShape
18+
import androidx.compose.foundation.verticalScroll
1919
import androidx.compose.material.icons.Icons
2020
import androidx.compose.material.icons.filled.Close
21-
import androidx.compose.material.icons.filled.Tag
2221
import androidx.compose.material3.AlertDialogDefaults
2322
import androidx.compose.material3.BasicAlertDialog
2423
import androidx.compose.material3.Button
25-
import androidx.compose.material3.ButtonDefaults
2624
import androidx.compose.material3.ExperimentalMaterial3Api
2725
import androidx.compose.material3.Icon
2826
import androidx.compose.material3.IconButton
@@ -60,8 +58,6 @@ import com.sakethh.linkora.ui.PageKey
6058
import com.sakethh.linkora.ui.components.menu.MenuBtmSheetType
6159
import com.sakethh.linkora.ui.components.menu.menuBtmSheetFolderEntries
6260
import com.sakethh.linkora.ui.domain.PaginationState
63-
import com.sakethh.linkora.ui.utils.UIEvent
64-
import com.sakethh.linkora.ui.utils.UIEvent.pushUIEvent
6561
import com.sakethh.linkora.ui.utils.pressScaleEffect
6662
import com.sakethh.linkora.ui.utils.rememberDeserializableMutableObject
6763
import com.sakethh.linkora.utils.rememberLocalizedString
@@ -88,7 +84,7 @@ data class RenameFolderOrLinkDialogParam @OptIn(ExperimentalMaterial3Api::class)
8884
fun RenameFolderOrLinkDialog(
8985
renameFolderOrLinkDialogParam: RenameFolderOrLinkDialogParam
9086
) {
91-
val coroutineScope = rememberCoroutineScope()
87+
rememberCoroutineScope()
9288
if (renameFolderOrLinkDialogParam.showDialogBox) {
9389
var selectedTags by rememberDeserializableMutableObject {
9490
mutableStateOf(renameFolderOrLinkDialogParam.selectedTags)
@@ -108,6 +104,7 @@ fun RenameFolderOrLinkDialog(
108104
bottom = 15.dp,
109105
top = if (platform() == Platform.Android.Mobile) 0.dp else 15.dp
110106
)
107+
.fillMaxWidth().verticalScroll(rememberScrollState())
111108
) {
112109
Row(
113110
verticalAlignment = Alignment.CenterVertically,
@@ -195,60 +192,23 @@ fun RenameFolderOrLinkDialog(
195192
fontSize = 18.sp,
196193
modifier = Modifier.padding(start = 15.dp, top = 15.dp, bottom = 10.dp)
197194
)
198-
Box(
199-
modifier = Modifier.animateContentSize()
200-
.height(345.dp)
201-
.fillMaxWidth()
202-
) {
203-
Column(modifier = Modifier.align(Alignment.BottomCenter)) {
204-
OutlinedButton(
205-
shape = RoundedCornerShape(bottomStart = 25.dp, bottomEnd = 25.dp),
206-
modifier = Modifier.pointerHoverIcon(icon = PointerIcon.Hand)
207-
.padding(
208-
end = 15.dp,
209-
start = 15.dp,
210-
).height(ButtonDefaults.MinHeight + 30.dp).fillMaxWidth(),
211-
onClick = {
212-
coroutineScope.pushUIEvent(UIEvent.Type.ShowCreateTagBtmSheet)
213-
}
214-
) {
215-
Box(
216-
modifier = Modifier.fillMaxSize().padding(bottom = 5.dp),
217-
contentAlignment = Alignment.BottomCenter
218-
) {
219-
Row(verticalAlignment = Alignment.CenterVertically) {
220-
Icon(
221-
imageVector = Icons.Default.Tag,
222-
contentDescription = null
223-
)
224-
Spacer(Modifier.width(5.dp))
225-
Text(
226-
text = Localization.Key.CreateANewTag.rememberLocalizedString(),
227-
style = MaterialTheme.typography.titleSmall,
228-
fontSize = 16.sp
229-
)
230-
}
195+
TagSelectionComponent(
196+
paddingValues = PaddingValues(start = 15.dp, end = 15.dp),
197+
allTags = renameFolderOrLinkDialogParam.allTags.value,
198+
selectedTags = selectedTags,
199+
onTagClick = { currTag ->
200+
if (selectedTags.contains(currTag)) {
201+
selectedTags = selectedTags.filterNot {
202+
currTag == it
231203
}
204+
} else {
205+
selectedTags += currTag
232206
}
233-
}
234-
TagSelectionComponent(
235-
paddingValues = PaddingValues(start = 15.dp, end = 15.dp),
236-
allTags = renameFolderOrLinkDialogParam.allTags.value,
237-
selectedTags = selectedTags,
238-
onTagClick = { currTag ->
239-
if (selectedTags.contains(currTag)) {
240-
selectedTags = selectedTags.filterNot {
241-
currTag == it
242-
}
243-
} else {
244-
selectedTags += currTag
245-
}
246-
},
247-
onRetrieveNextTagsPage = renameFolderOrLinkDialogParam.onRetrieveNextTagsPage,
248-
onFirstVisibleIndexChange = {
249-
renameFolderOrLinkDialogParam.onFirstVisibleIndexChange(it)
250-
})
251-
}
207+
},
208+
onRetrieveNextTagsPage = renameFolderOrLinkDialogParam.onRetrieveNextTagsPage,
209+
onFirstVisibleIndexChange = {
210+
renameFolderOrLinkDialogParam.onFirstVisibleIndexChange(it)
211+
})
252212
}
253213

254214
if (showProgressBar) {
@@ -264,7 +224,6 @@ fun RenameFolderOrLinkDialog(
264224

265225
return@Column
266226
}
267-
268227
Spacer(modifier = Modifier.height(10.dp))
269228
Button(
270229
modifier = Modifier.padding(

0 commit comments

Comments
 (0)