Implement mentions rendering

This commit is contained in:
Paul Frazee 2022-10-03 16:02:03 -05:00
parent 2058505bf1
commit 195d2f7d2b
7 changed files with 177 additions and 19 deletions

View file

@ -6,9 +6,15 @@
// import {ReactNativeStore} from './auth'
import AdxApi from '../../third-party/api'
import {ServiceClient} from '../../third-party/api/src/index'
import {
TextSlice,
Entity as Entities,
} from '../../third-party/api/src/types/todo/social/post'
import {AdxUri} from '../../third-party/uri'
import {RootStoreModel} from '../models/root-store'
type Entity = Entities[0]
export function doPolyfill() {
AdxApi.xrpc.fetch = fetchHandler
}
@ -32,11 +38,13 @@ export async function post(
}
}
}
const entities = extractEntities(text)
return await store.api.todo.social.post.create(
{did: store.me.did || ''},
{
text,
reply,
entities,
createdAt: new Date().toISOString(),
},
)
@ -196,3 +204,20 @@ async function iterateAll(
}
} while (res.records.length === 100)
}*/
function extractEntities(text: string): Entity[] | undefined {
let match
let ents: Entity[] = []
const re = /(^|\s)@([a-zA-Z0-9\.-]+)(\b)/g
while ((match = re.exec(text))) {
ents.push({
type: 'mention',
value: match[2],
index: [
match.index + 1, // skip the (^|\s) but include the '@'
match.index + 2 + match[2].length,
],
})
}
return ents.length > 0 ? ents : undefined
}