Refactoring duplicated code in Clickable Route
This commit is contained in:
@@ -62,20 +62,46 @@ fun ClickableRoute(
|
|||||||
nip19: Nip19.Return,
|
nip19: Nip19.Return,
|
||||||
nav: (String) -> Unit
|
nav: (String) -> Unit
|
||||||
) {
|
) {
|
||||||
if (nip19.type == Nip19.Type.USER) {
|
when (nip19.type) {
|
||||||
DisplayUser(nip19, nav)
|
Nip19.Type.USER -> {
|
||||||
} else if (nip19.type == Nip19.Type.ADDRESS) {
|
DisplayUser(nip19, nav)
|
||||||
DisplayAddress(nip19, nav)
|
}
|
||||||
} else if (nip19.type == Nip19.Type.NOTE) {
|
Nip19.Type.ADDRESS -> {
|
||||||
DisplayNote(nip19, nav)
|
DisplayAddress(nip19, nav)
|
||||||
} else if (nip19.type == Nip19.Type.EVENT) {
|
}
|
||||||
DisplayEvent(nip19, nav)
|
Nip19.Type.NOTE -> {
|
||||||
} else {
|
DisplayNote(nip19, nav)
|
||||||
Text(
|
}
|
||||||
remember {
|
Nip19.Type.EVENT -> {
|
||||||
"@${nip19.hex}${nip19.additionalChars} "
|
DisplayEvent(nip19, nav)
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
Text(
|
||||||
|
remember {
|
||||||
|
"@${nip19.hex}${nip19.additionalChars} "
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun LoadNote(
|
||||||
|
hex: String,
|
||||||
|
content: @Composable (Note) -> Unit
|
||||||
|
) {
|
||||||
|
var noteBase by remember(hex) { mutableStateOf<Note?>(null) }
|
||||||
|
|
||||||
|
LaunchedEffect(key1 = hex) {
|
||||||
|
if (noteBase == null) {
|
||||||
|
launch(Dispatchers.IO) {
|
||||||
|
noteBase = LocalCache.checkGetOrCreateNote(hex)
|
||||||
}
|
}
|
||||||
)
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
noteBase?.let {
|
||||||
|
content(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,69 +110,8 @@ private fun DisplayEvent(
|
|||||||
nip19: Nip19.Return,
|
nip19: Nip19.Return,
|
||||||
nav: (String) -> Unit
|
nav: (String) -> Unit
|
||||||
) {
|
) {
|
||||||
var noteBase by remember(nip19) { mutableStateOf<Note?>(null) }
|
LoadNote(nip19.hex) {
|
||||||
|
DisplayNoteLink(it, nip19, nav)
|
||||||
LaunchedEffect(key1 = nip19.hex) {
|
|
||||||
if (noteBase == null) {
|
|
||||||
launch(Dispatchers.IO) {
|
|
||||||
noteBase = LocalCache.checkGetOrCreateNote(nip19.hex)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
noteBase?.let {
|
|
||||||
val noteState by it.live().metadata.observeAsState()
|
|
||||||
val note = remember(noteState) { noteState?.note } ?: return
|
|
||||||
val channelHex = remember(noteState) { note.channelHex() }
|
|
||||||
val noteIdDisplayNote = remember(noteState) { "@${note.idDisplayNote()}" }
|
|
||||||
val addedCharts = remember { "${nip19.additionalChars} " }
|
|
||||||
|
|
||||||
if (note.event is ChannelCreateEvent) {
|
|
||||||
CreateClickableText(
|
|
||||||
clickablePart = noteIdDisplayNote,
|
|
||||||
suffix = addedCharts,
|
|
||||||
route = remember(noteState) { "Channel/${nip19.hex}" },
|
|
||||||
nav = nav
|
|
||||||
)
|
|
||||||
} else if (note.event is PrivateDmEvent) {
|
|
||||||
CreateClickableText(
|
|
||||||
clickablePart = noteIdDisplayNote,
|
|
||||||
suffix = addedCharts,
|
|
||||||
route = remember(noteState) { "Room/${note.author?.pubkeyHex}" },
|
|
||||||
nav = nav
|
|
||||||
)
|
|
||||||
} else if (channelHex != null) {
|
|
||||||
LoadChannel(baseChannelHex = channelHex) { baseChannel ->
|
|
||||||
val channelState by baseChannel.live.observeAsState()
|
|
||||||
val channelDisplayName by remember(channelState) {
|
|
||||||
derivedStateOf {
|
|
||||||
channelState?.channel?.toBestDisplayName() ?: noteIdDisplayNote
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CreateClickableText(
|
|
||||||
clickablePart = channelDisplayName,
|
|
||||||
suffix = addedCharts,
|
|
||||||
route = remember(noteState) { "Channel/${baseChannel.idHex}" },
|
|
||||||
nav = nav
|
|
||||||
)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
CreateClickableText(
|
|
||||||
clickablePart = noteIdDisplayNote,
|
|
||||||
suffix = addedCharts,
|
|
||||||
route = remember(noteState) { "Event/${nip19.hex}" },
|
|
||||||
nav = nav
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (noteBase == null) {
|
|
||||||
Text(
|
|
||||||
remember {
|
|
||||||
"@${nip19.hex}${nip19.additionalChars} "
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,66 +120,61 @@ private fun DisplayNote(
|
|||||||
nip19: Nip19.Return,
|
nip19: Nip19.Return,
|
||||||
nav: (String) -> Unit
|
nav: (String) -> Unit
|
||||||
) {
|
) {
|
||||||
var noteBase by remember(nip19) { mutableStateOf<Note?>(null) }
|
LoadNote(nip19.hex) {
|
||||||
|
DisplayNoteLink(it, nip19, nav)
|
||||||
LaunchedEffect(key1 = nip19.hex) {
|
|
||||||
launch(Dispatchers.IO) {
|
|
||||||
noteBase = LocalCache.checkGetOrCreateNote(nip19.hex)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
noteBase?.let {
|
@Composable
|
||||||
val noteState by it.live().metadata.observeAsState()
|
private fun DisplayNoteLink(
|
||||||
val note = remember(noteState) { noteState?.note } ?: return
|
it: Note,
|
||||||
val channelHex = remember(noteState) { note.channelHex() }
|
nip19: Nip19.Return,
|
||||||
val noteIdDisplayNote = remember(noteState) { "@${note.idDisplayNote()}" }
|
nav: (String) -> Unit
|
||||||
val addedCharts = remember { "${nip19.additionalChars} " }
|
) {
|
||||||
|
val noteState by it.live().metadata.observeAsState()
|
||||||
|
|
||||||
if (note.event is ChannelCreateEvent) {
|
val note = remember(noteState) { noteState?.note } ?: return
|
||||||
CreateClickableText(
|
|
||||||
clickablePart = noteIdDisplayNote,
|
val channelHex = remember(noteState) { note.channelHex() }
|
||||||
suffix = addedCharts,
|
val noteIdDisplayNote = remember(noteState) { "@${note.idDisplayNote()}" }
|
||||||
route = remember(noteState) { "Channel/${nip19.hex}" },
|
val addedCharts = remember { "${nip19.additionalChars} " }
|
||||||
nav = nav
|
|
||||||
)
|
if (note.event is ChannelCreateEvent || nip19.kind == ChannelCreateEvent.kind) {
|
||||||
} else if (note.event is PrivateDmEvent) {
|
CreateClickableText(
|
||||||
CreateClickableText(
|
clickablePart = noteIdDisplayNote,
|
||||||
clickablePart = noteIdDisplayNote,
|
suffix = addedCharts,
|
||||||
suffix = addedCharts,
|
route = remember(noteState) { "Channel/${nip19.hex}" },
|
||||||
route = remember(noteState) { "Room/${note.author?.pubkeyHex}" },
|
nav = nav
|
||||||
nav = nav
|
)
|
||||||
)
|
} else if (note.event is PrivateDmEvent || nip19.kind == PrivateDmEvent.kind) {
|
||||||
} else if (channelHex != null) {
|
CreateClickableText(
|
||||||
LoadChannel(baseChannelHex = channelHex) { baseChannel ->
|
clickablePart = noteIdDisplayNote,
|
||||||
val channelState by baseChannel.live.observeAsState()
|
suffix = addedCharts,
|
||||||
val channelDisplayName by remember(channelState) {
|
route = remember(noteState) { "Room/${note.author?.pubkeyHex}" },
|
||||||
derivedStateOf {
|
nav = nav
|
||||||
channelState?.channel?.toBestDisplayName() ?: noteIdDisplayNote
|
)
|
||||||
}
|
} else if (channelHex != null) {
|
||||||
|
LoadChannel(baseChannelHex = channelHex) { baseChannel ->
|
||||||
|
val channelState by baseChannel.live.observeAsState()
|
||||||
|
val channelDisplayName by remember(channelState) {
|
||||||
|
derivedStateOf {
|
||||||
|
channelState?.channel?.toBestDisplayName() ?: noteIdDisplayNote
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateClickableText(
|
|
||||||
clickablePart = channelDisplayName,
|
|
||||||
suffix = addedCharts,
|
|
||||||
route = remember(noteState) { "Channel/${baseChannel.idHex}" },
|
|
||||||
nav = nav
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
CreateClickableText(
|
CreateClickableText(
|
||||||
clickablePart = noteIdDisplayNote,
|
clickablePart = channelDisplayName,
|
||||||
suffix = addedCharts,
|
suffix = addedCharts,
|
||||||
route = remember(noteState) { "Note/${nip19.hex}" },
|
route = remember(noteState) { "Channel/${baseChannel.idHex}" },
|
||||||
nav = nav
|
nav = nav
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
|
CreateClickableText(
|
||||||
if (noteBase == null) {
|
clickablePart = noteIdDisplayNote,
|
||||||
Text(
|
suffix = addedCharts,
|
||||||
remember {
|
route = remember(noteState) { "Event/${nip19.hex}" },
|
||||||
"@${nip19.hex}${nip19.additionalChars} "
|
nav = nav
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user