Skip to content

Commit d586476

Browse files
committed
Adding a markdown helper. Fixes #38
1 parent e590369 commit d586476

File tree

12 files changed

+576
-112
lines changed

12 files changed

+576
-112
lines changed

app/src/main/java/com/jerboa/ui/components/comment/edit/CommentEdit.kt

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.jerboa.ui.components.comment.edit
22

33
import android.net.Uri
4-
import androidx.compose.foundation.layout.padding
54
import androidx.compose.foundation.lazy.LazyColumn
65
import androidx.compose.foundation.lazy.rememberLazyListState
76
import androidx.compose.material.*
@@ -10,14 +9,14 @@ import androidx.compose.material.icons.filled.Close
109
import androidx.compose.material.icons.filled.Save
1110
import androidx.compose.runtime.Composable
1211
import androidx.compose.ui.Modifier
12+
import androidx.compose.ui.text.input.TextFieldValue
1313
import androidx.navigation.NavController
1414
import androidx.navigation.compose.rememberNavController
1515
import com.jerboa.datatypes.CommentView
16-
import com.jerboa.ui.components.common.PickImage
17-
import com.jerboa.ui.components.common.ReplyTextField
16+
import com.jerboa.db.Account
17+
import com.jerboa.ui.components.common.MarkdownTextField
1818
import com.jerboa.ui.components.common.simpleVerticalScrollbar
1919
import com.jerboa.ui.theme.APP_BAR_ELEVATION
20-
import com.jerboa.ui.theme.MEDIUM_PADDING
2120

2221
@Composable
2322
fun CommentEditHeader(
@@ -66,9 +65,10 @@ fun CommentEditHeader(
6665

6766
@Composable
6867
fun CommentEdit(
69-
content: String,
70-
onContentChange: (String) -> Unit,
68+
content: TextFieldValue,
69+
onContentChange: (TextFieldValue) -> Unit,
7170
onPickedImage: (image: Uri) -> Unit,
71+
account: Account?,
7272
) {
7373
val listState = rememberLazyListState()
7474

@@ -77,13 +77,7 @@ fun CommentEdit(
7777
modifier = Modifier.simpleVerticalScrollbar(listState)
7878
) {
7979
item {
80-
ReplyTextField(reply = content, onReplyChange = onContentChange)
81-
}
82-
item {
83-
PickImage(
84-
onPickedImage = onPickedImage,
85-
modifier = Modifier.padding(MEDIUM_PADDING)
86-
)
80+
MarkdownTextField(reply = content, onReplyChange = onContentChange, account = account)
8781
}
8882
}
8983
}

app/src/main/java/com/jerboa/ui/components/comment/edit/CommentEditActivity.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import androidx.compose.material.MaterialTheme
55
import androidx.compose.material.Scaffold
66
import androidx.compose.material.Surface
77
import androidx.compose.runtime.*
8-
import androidx.compose.runtime.saveable.rememberSaveable
98
import androidx.compose.ui.platform.LocalContext
109
import androidx.compose.ui.platform.LocalFocusManager
10+
import androidx.compose.ui.text.input.TextFieldValue
1111
import androidx.navigation.NavController
1212
import com.jerboa.api.uploadPictrsImage
1313
import com.jerboa.appendMarkdownImage
@@ -34,7 +34,8 @@ fun CommentEditActivity(
3434
val ctx = LocalContext.current
3535
val account = getCurrentAccount(accountViewModel = accountViewModel)
3636
val scope = rememberCoroutineScope()
37-
var content by rememberSaveable { mutableStateOf(commentEditViewModel.commentView.value?.comment?.content.orEmpty()) }
37+
38+
var content by remember { mutableStateOf(TextFieldValue(commentEditViewModel.commentView.value?.comment?.content.orEmpty())) }
3839

3940
val focusManager = LocalFocusManager.current
4041

@@ -47,7 +48,7 @@ fun CommentEditActivity(
4748
onSaveClick = {
4849
account?.also { acct ->
4950
commentEditViewModel.editComment(
50-
content = content,
51+
content = content.text,
5152
ctx = ctx,
5253
navController = navController,
5354
focusManager = focusManager,
@@ -63,14 +64,15 @@ fun CommentEditActivity(
6364
content = {
6465
CommentEdit(
6566
content = content,
67+
account = account,
6668
onContentChange = { content = it },
6769
onPickedImage = { uri ->
6870
val imageIs = imageInputStreamFromUri(ctx, uri)
6971
scope.launch {
7072
account?.also { acct ->
7173
val url = uploadPictrsImage(acct, imageIs, ctx)
7274
url?.also {
73-
content = appendMarkdownImage(content, it)
75+
content = TextFieldValue(appendMarkdownImage(content.text, it))
7476
}
7577
}
7678
}

app/src/main/java/com/jerboa/ui/components/comment/reply/CommentReply.kt

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ import androidx.compose.material.icons.filled.Close
1212
import androidx.compose.material.icons.filled.Send
1313
import androidx.compose.runtime.Composable
1414
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.text.input.TextFieldValue
1516
import androidx.compose.ui.tooling.preview.Preview
1617
import androidx.navigation.NavController
1718
import androidx.navigation.compose.rememberNavController
1819
import com.jerboa.datatypes.CommentView
1920
import com.jerboa.datatypes.PostView
2021
import com.jerboa.datatypes.sampleCommentView
22+
import com.jerboa.db.Account
2123
import com.jerboa.ui.components.comment.CommentNodeHeader
22-
import com.jerboa.ui.components.common.PickImage
23-
import com.jerboa.ui.components.common.ReplyTextField
24+
import com.jerboa.ui.components.common.MarkdownTextField
2425
import com.jerboa.ui.components.common.simpleVerticalScrollbar
2526
import com.jerboa.ui.components.post.PostNodeHeader
2627
import com.jerboa.ui.theme.LARGE_PADDING
@@ -122,11 +123,12 @@ fun RepliedPost(
122123
@Composable
123124
fun CommentReply(
124125
commentView: CommentView,
125-
reply: String,
126-
onReplyChange: (String) -> Unit,
126+
reply: TextFieldValue,
127+
onReplyChange: (TextFieldValue) -> Unit,
127128
onPersonClick: (personId: Int) -> Unit,
128129
onPickedImage: (image: Uri) -> Unit,
129130
isModerator: Boolean,
131+
account: Account?,
130132
) {
131133
val listState = rememberLazyListState()
132134

@@ -145,25 +147,19 @@ fun CommentReply(
145147
Divider(modifier = Modifier.padding(vertical = LARGE_PADDING))
146148
}
147149
item {
148-
ReplyTextField(reply = reply, onReplyChange = onReplyChange)
149-
}
150-
item {
151-
PickImage(
152-
onPickedImage = onPickedImage,
153-
modifier = Modifier.padding(MEDIUM_PADDING)
154-
)
150+
MarkdownTextField(reply = reply, onReplyChange = onReplyChange, account = account)
155151
}
156152
}
157153
}
158154

159155
@Composable
160156
fun PostReply(
161157
postView: PostView,
162-
reply: String,
163-
onReplyChange: (String) -> Unit,
158+
reply: TextFieldValue,
159+
onReplyChange: (TextFieldValue) -> Unit,
164160
onPersonClick: (personId: Int) -> Unit,
165-
onPickedImage: (image: Uri) -> Unit,
166161
isModerator: Boolean,
162+
account: Account?,
167163
) {
168164
val listState = rememberLazyListState()
169165

@@ -182,13 +178,7 @@ fun PostReply(
182178
Divider(modifier = Modifier.padding(vertical = LARGE_PADDING))
183179
}
184180
item {
185-
ReplyTextField(reply = reply, onReplyChange = onReplyChange)
186-
}
187-
item {
188-
PickImage(
189-
onPickedImage = onPickedImage,
190-
modifier = Modifier.padding(MEDIUM_PADDING)
191-
)
181+
MarkdownTextField(reply = reply, onReplyChange = onReplyChange, account = account)
192182
}
193183
}
194184
}

app/src/main/java/com/jerboa/ui/components/comment/reply/CommentReplyActivity.kt

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ import androidx.compose.material.MaterialTheme
77
import androidx.compose.material.Scaffold
88
import androidx.compose.material.Surface
99
import androidx.compose.runtime.*
10-
import androidx.compose.runtime.saveable.rememberSaveable
1110
import androidx.compose.ui.Modifier
1211
import androidx.compose.ui.platform.LocalContext
1312
import androidx.compose.ui.platform.LocalFocusManager
13+
import androidx.compose.ui.text.input.TextFieldValue
1414
import androidx.navigation.NavController
1515
import com.jerboa.api.uploadPictrsImage
1616
import com.jerboa.appendMarkdownImage
@@ -39,7 +39,7 @@ fun CommentReplyActivity(
3939
val ctx = LocalContext.current
4040
val account = getCurrentAccount(accountViewModel = accountViewModel)
4141
val scope = rememberCoroutineScope()
42-
var reply by rememberSaveable { mutableStateOf("") }
42+
var reply by remember { mutableStateOf(TextFieldValue("")) }
4343

4444
val focusManager = LocalFocusManager.current
4545

@@ -52,7 +52,7 @@ fun CommentReplyActivity(
5252
onSendClick = {
5353
account?.also { acct ->
5454
commentReplyViewModel.createComment(
55-
content = reply,
55+
content = reply.text,
5656
account = acct,
5757
ctx = ctx,
5858
navController = navController,
@@ -73,6 +73,7 @@ fun CommentReplyActivity(
7373
commentReplyViewModel.commentParentView.value?.also { commentView ->
7474
CommentReply(
7575
commentView = commentView,
76+
account = account,
7677
reply = reply,
7778
onReplyChange = { reply = it },
7879
onPersonClick = { personId ->
@@ -90,17 +91,27 @@ fun CommentReplyActivity(
9091
account?.also { acct ->
9192
val url = uploadPictrsImage(acct, imageIs, ctx)
9293
url?.also {
93-
reply = appendMarkdownImage(reply, it)
94+
reply = TextFieldValue(
95+
appendMarkdownImage(
96+
reply.text,
97+
it
98+
)
99+
)
94100
}
95101
}
96102
}
97103
},
98-
isModerator(commentView.creator, postViewModel.moderators)
104+
isModerator = isModerator(
105+
commentView.creator,
106+
postViewModel
107+
.moderators
108+
),
99109
)
100110
} ?: run {
101111
commentReplyViewModel.postView.value?.also { postView ->
102112
PostReply(
103113
postView = postView,
114+
account = account,
104115
reply = reply,
105116
onReplyChange = { reply = it },
106117
onPersonClick = { personId ->
@@ -112,17 +123,6 @@ fun CommentReplyActivity(
112123
ctx
113124
)
114125
},
115-
onPickedImage = { uri ->
116-
val imageIs = imageInputStreamFromUri(ctx, uri)
117-
scope.launch {
118-
account?.also { acct ->
119-
val url = uploadPictrsImage(acct, imageIs, ctx)
120-
url?.also {
121-
reply = appendMarkdownImage(reply, it)
122-
}
123-
}
124-
}
125-
},
126126
isModerator = isModerator(postView.creator, postViewModel.moderators)
127127
)
128128
}

app/src/main/java/com/jerboa/ui/components/common/AppBars.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ fun ActionBarButton(
258258
}
259259

260260
@Composable
261-
fun DotSpacer(padding: Dp = MEDIUM_PADDING) {
261+
fun DotSpacer(padding: Dp = SMALL_PADDING) {
262262
Text(
263263
text = "·",
264264
modifier = Modifier.padding(horizontal = padding)

0 commit comments

Comments
 (0)