fix: issue where UIMarkdown sometimes does not render
Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
parent
73be3d56ee
commit
9bf7dae138
|
|
@ -1,8 +1,6 @@
|
||||||
package chat.revolt.components.generic
|
package chat.revolt.components.generic
|
||||||
|
|
||||||
import android.text.SpannableStringBuilder
|
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.util.Log
|
|
||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.compose.material3.LocalContentColor
|
import androidx.compose.material3.LocalContentColor
|
||||||
|
|
@ -10,9 +8,6 @@ import androidx.compose.material3.LocalTextStyle
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.surfaceColorAtElevation
|
import androidx.compose.material3.surfaceColorAtElevation
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.toArgb
|
import androidx.compose.ui.graphics.toArgb
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
|
|
@ -51,42 +46,6 @@ fun UIMarkdown(
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val foregroundColor = LocalContentColor.current
|
val foregroundColor = LocalContentColor.current
|
||||||
val codeBlockColor = MaterialTheme.colorScheme.surfaceColorAtElevation(2.dp)
|
val codeBlockColor = MaterialTheme.colorScheme.surfaceColorAtElevation(2.dp)
|
||||||
val spannableStringBuilder = remember { mutableStateOf(SpannableStringBuilder()) }
|
|
||||||
|
|
||||||
LaunchedEffect(text) {
|
|
||||||
val parser = MarkdownParser()
|
|
||||||
.addRules(
|
|
||||||
SimpleMarkdownRules.createEscapeRule()
|
|
||||||
)
|
|
||||||
.addRevoltRules(context)
|
|
||||||
.addRules(
|
|
||||||
createCodeRule(context, codeBlockColor.toArgb()),
|
|
||||||
createInlineCodeRule(context, codeBlockColor.toArgb())
|
|
||||||
)
|
|
||||||
.addRules(
|
|
||||||
SimpleMarkdownRules.createSimpleMarkdownRules(
|
|
||||||
includeEscapeRule = false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
spannableStringBuilder.value = SimpleRenderer.render(
|
|
||||||
source = text,
|
|
||||||
parser = parser,
|
|
||||||
initialState = MarkdownState(0),
|
|
||||||
renderContext = MarkdownContext(
|
|
||||||
memberMap = mapOf(),
|
|
||||||
userMap = RevoltAPI.userCache.toMap(),
|
|
||||||
channelMap = RevoltAPI.channelCache.mapValues { ch ->
|
|
||||||
ch.value.name ?: ch.value.id ?: "{this does not exist 🤫}"
|
|
||||||
},
|
|
||||||
emojiMap = RevoltAPI.emojiCache,
|
|
||||||
serverId = null,
|
|
||||||
useLargeEmojis = false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
Log.d("Markdown", "Rendered: ${spannableStringBuilder.value}")
|
|
||||||
}
|
|
||||||
|
|
||||||
AndroidView(
|
AndroidView(
|
||||||
factory = {
|
factory = {
|
||||||
|
|
@ -108,7 +67,38 @@ fun UIMarkdown(
|
||||||
},
|
},
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
update = {
|
update = {
|
||||||
it.text = spannableStringBuilder.value
|
val parser = MarkdownParser()
|
||||||
|
.addRules(
|
||||||
|
SimpleMarkdownRules.createEscapeRule()
|
||||||
|
)
|
||||||
|
.addRevoltRules(context)
|
||||||
|
.addRules(
|
||||||
|
createCodeRule(context, codeBlockColor.toArgb()),
|
||||||
|
createInlineCodeRule(context, codeBlockColor.toArgb())
|
||||||
|
)
|
||||||
|
.addRules(
|
||||||
|
SimpleMarkdownRules.createSimpleMarkdownRules(
|
||||||
|
includeEscapeRule = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
val spannableStringBuilder = SimpleRenderer.render(
|
||||||
|
source = text,
|
||||||
|
parser = parser,
|
||||||
|
initialState = MarkdownState(0),
|
||||||
|
renderContext = MarkdownContext(
|
||||||
|
memberMap = mapOf(),
|
||||||
|
userMap = RevoltAPI.userCache.toMap(),
|
||||||
|
channelMap = RevoltAPI.channelCache.mapValues { ch ->
|
||||||
|
ch.value.name ?: ch.value.id ?: "{this does not exist 🤫}"
|
||||||
|
},
|
||||||
|
emojiMap = RevoltAPI.emojiCache,
|
||||||
|
serverId = null,
|
||||||
|
useLargeEmojis = false
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
it.text = spannableStringBuilder
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue