Move to expo and react-navigation (#288)
* WIP - adding expo * WIP - adding expo 2 * Fix tsc * Finish adding expo * Disable the 'require cycle' warning * Tweak plist * Modify some dependency versions to make expo happy * Fix icon fill * Get Web compiling for expo * 1.7 * Switch to react-navigation in expo2 (#287) * WIP Switch to react-navigation * WIP Switch to react-navigation 2 * WIP Switch to react-navigation 3 * Convert all screens to react navigation * Update BottomBar for react navigation * Update mobile menu to be react-native drawer * Fixes to drawer and bottombar * Factor out some helpers * Replace the navigation model with react-navigation * Restructure the shell folder and fix the header positioning * Restore the error boundary * Fix tsc * Implement not-found page * Remove react-native-gesture-handler (no longer used) * Handle notifee card presses * Handle all navigations from the state layer * Fix drawer behaviors * Fix two linking issues * Switch to our react-native-progress fork to fix an svg rendering issue * Get Web working with react-navigation * Refactor routes and navigation for a bit more clarity * Remove dead code * Rework Web shell to left/right nav to make this easier * Fix ViewHeader for desktop web * Hide profileheader back btn on desktop web * Move the compose button to the left nav * Implement reply prompt in threads for desktop web * Composer refactors * Factor out all platform-specific text input behaviors from the composer * Small fix * Update the web build to use tiptap for the composer * Tune up the mention autocomplete dropdown * Simplify the default avatar and banner * Fixes to link cards in web composer * Fix dropdowns on web * Tweak load latest on desktop * Add web beta message and feedback link * Fix up links in desktop web
This commit is contained in:
parent
503e03d91e
commit
56cf890deb
222 changed files with 8705 additions and 6338 deletions
|
|
@ -1,19 +1,20 @@
|
|||
import {LikelyType, LinkMeta} from './link-meta'
|
||||
import {match as matchRoute} from 'view/routes'
|
||||
// import {match as matchRoute} from 'view/routes'
|
||||
import {convertBskyAppUrlIfNeeded, makeRecordUri} from '../strings/url-helpers'
|
||||
import {RootStoreModel} from 'state/index'
|
||||
import {PostThreadViewModel} from 'state/models/post-thread-view'
|
||||
import {ComposerOptsQuote} from 'state/models/shell-ui'
|
||||
|
||||
import {Home} from 'view/screens/Home'
|
||||
import {Search} from 'view/screens/Search'
|
||||
import {Notifications} from 'view/screens/Notifications'
|
||||
import {PostThread} from 'view/screens/PostThread'
|
||||
import {PostUpvotedBy} from 'view/screens/PostUpvotedBy'
|
||||
import {PostRepostedBy} from 'view/screens/PostRepostedBy'
|
||||
import {Profile} from 'view/screens/Profile'
|
||||
import {ProfileFollowers} from 'view/screens/ProfileFollowers'
|
||||
import {ProfileFollows} from 'view/screens/ProfileFollows'
|
||||
// TODO
|
||||
// import {Home} from 'view/screens/Home'
|
||||
// import {Search} from 'view/screens/Search'
|
||||
// import {Notifications} from 'view/screens/Notifications'
|
||||
// import {PostThread} from 'view/screens/PostThread'
|
||||
// import {PostUpvotedBy} from 'view/screens/PostUpvotedBy'
|
||||
// import {PostRepostedBy} from 'view/screens/PostRepostedBy'
|
||||
// import {Profile} from 'view/screens/Profile'
|
||||
// import {ProfileFollowers} from 'view/screens/ProfileFollowers'
|
||||
// import {ProfileFollows} from 'view/screens/ProfileFollows'
|
||||
|
||||
// NOTE
|
||||
// this is a hack around the lack of hosted social metadata
|
||||
|
|
@ -24,77 +25,77 @@ export async function extractBskyMeta(
|
|||
url: string,
|
||||
): Promise<LinkMeta> {
|
||||
url = convertBskyAppUrlIfNeeded(url)
|
||||
const route = matchRoute(url)
|
||||
// const route = matchRoute(url)
|
||||
let meta: LinkMeta = {
|
||||
likelyType: LikelyType.AtpData,
|
||||
url,
|
||||
title: route.defaultTitle,
|
||||
// title: route.defaultTitle,
|
||||
}
|
||||
|
||||
if (route.Com === Home) {
|
||||
meta = {
|
||||
...meta,
|
||||
title: 'Bluesky',
|
||||
description: 'A new kind of social network',
|
||||
}
|
||||
} else if (route.Com === Search) {
|
||||
meta = {
|
||||
...meta,
|
||||
title: 'Search - Bluesky',
|
||||
description: 'A new kind of social network',
|
||||
}
|
||||
} else if (route.Com === Notifications) {
|
||||
meta = {
|
||||
...meta,
|
||||
title: 'Notifications - Bluesky',
|
||||
description: 'A new kind of social network',
|
||||
}
|
||||
} else if (
|
||||
route.Com === PostThread ||
|
||||
route.Com === PostUpvotedBy ||
|
||||
route.Com === PostRepostedBy
|
||||
) {
|
||||
// post and post-related screens
|
||||
const threadUri = makeRecordUri(
|
||||
route.params.name,
|
||||
'app.bsky.feed.post',
|
||||
route.params.rkey,
|
||||
)
|
||||
const threadView = new PostThreadViewModel(store, {
|
||||
uri: threadUri,
|
||||
depth: 0,
|
||||
})
|
||||
await threadView.setup().catch(_err => undefined)
|
||||
const title = [
|
||||
route.Com === PostUpvotedBy
|
||||
? 'Likes on a post by'
|
||||
: route.Com === PostRepostedBy
|
||||
? 'Reposts of a post by'
|
||||
: 'Post by',
|
||||
threadView.thread?.post.author.displayName ||
|
||||
threadView.thread?.post.author.handle ||
|
||||
'a bluesky user',
|
||||
].join(' ')
|
||||
meta = {
|
||||
...meta,
|
||||
title,
|
||||
description: threadView.thread?.postRecord?.text,
|
||||
}
|
||||
} else if (
|
||||
route.Com === Profile ||
|
||||
route.Com === ProfileFollowers ||
|
||||
route.Com === ProfileFollows
|
||||
) {
|
||||
// profile and profile-related screens
|
||||
const profile = await store.profiles.getProfile(route.params.name)
|
||||
if (profile?.data) {
|
||||
meta = {
|
||||
...meta,
|
||||
title: profile.data.displayName || profile.data.handle,
|
||||
description: profile.data.description,
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (route.Com === Home) {
|
||||
// meta = {
|
||||
// ...meta,
|
||||
// title: 'Bluesky',
|
||||
// description: 'A new kind of social network',
|
||||
// }
|
||||
// } else if (route.Com === Search) {
|
||||
// meta = {
|
||||
// ...meta,
|
||||
// title: 'Search - Bluesky',
|
||||
// description: 'A new kind of social network',
|
||||
// }
|
||||
// } else if (route.Com === Notifications) {
|
||||
// meta = {
|
||||
// ...meta,
|
||||
// title: 'Notifications - Bluesky',
|
||||
// description: 'A new kind of social network',
|
||||
// }
|
||||
// } else if (
|
||||
// route.Com === PostThread ||
|
||||
// route.Com === PostUpvotedBy ||
|
||||
// route.Com === PostRepostedBy
|
||||
// ) {
|
||||
// // post and post-related screens
|
||||
// const threadUri = makeRecordUri(
|
||||
// route.params.name,
|
||||
// 'app.bsky.feed.post',
|
||||
// route.params.rkey,
|
||||
// )
|
||||
// const threadView = new PostThreadViewModel(store, {
|
||||
// uri: threadUri,
|
||||
// depth: 0,
|
||||
// })
|
||||
// await threadView.setup().catch(_err => undefined)
|
||||
// const title = [
|
||||
// route.Com === PostUpvotedBy
|
||||
// ? 'Likes on a post by'
|
||||
// : route.Com === PostRepostedBy
|
||||
// ? 'Reposts of a post by'
|
||||
// : 'Post by',
|
||||
// threadView.thread?.post.author.displayName ||
|
||||
// threadView.thread?.post.author.handle ||
|
||||
// 'a bluesky user',
|
||||
// ].join(' ')
|
||||
// meta = {
|
||||
// ...meta,
|
||||
// title,
|
||||
// description: threadView.thread?.postRecord?.text,
|
||||
// }
|
||||
// } else if (
|
||||
// route.Com === Profile ||
|
||||
// route.Com === ProfileFollowers ||
|
||||
// route.Com === ProfileFollows
|
||||
// ) {
|
||||
// // profile and profile-related screens
|
||||
// const profile = await store.profiles.getProfile(route.params.name)
|
||||
// if (profile?.data) {
|
||||
// meta = {
|
||||
// ...meta,
|
||||
// title: profile.data.displayName || profile.data.handle,
|
||||
// description: profile.data.description,
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
return meta
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue