using register

This commit is contained in:
João Ferreiro
2022-12-12 18:07:30 +00:00
parent 89ddcdfa52
commit 441dd29685
32 changed files with 358 additions and 114 deletions
@@ -41,7 +41,7 @@
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
@@ -1,14 +1,14 @@
import React, {useEffect, useState, useRef} from 'react'
import {StyleSheet, Text, TextInput, View} from 'react-native'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {ProfileFollows as ProfileFollowsComponent} from '../com/profile/ProfileFollows'
import {Selector} from '../com/util/Selector'
import {colors} from '../lib/styles'
import {ScreenParams} from '../routes'
import {useStores} from '../../state'
import {useAnimatedValue} from '../lib/useAnimatedValue'
import {ProfileFollows as ProfileFollowsComponent} from '../../com/profile/ProfileFollows'
import {Selector} from '../../com/util/Selector'
import {colors} from '../../lib/styles'
import {ScreenParams} from '../../routes'
import {useStores} from '../../../state'
import {useAnimatedValue} from '../../lib/useAnimatedValue'
export const Contacts = ({navIdx, visible, params}: ScreenParams) => {
export default ({navIdx, visible, params}: ScreenParams) => {
const store = useStores()
const selectorInterp = useAnimatedValue(0)
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const Contacts = register({
loader: () => import('./Contacts'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -3,16 +3,16 @@ import {StyleSheet, Text, TouchableOpacity, View} from 'react-native'
import {observer} from 'mobx-react-lite'
import useAppState from 'react-native-appstate-hook'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {ViewHeader} from '../com/util/ViewHeader'
import {Feed} from '../com/posts/Feed'
import {useStores} from '../../state'
import {FeedModel} from '../../state/models/feed-view'
import {ScreenParams} from '../routes'
import {s, colors} from '../lib/styles'
import {ViewHeader} from '../../com/util/ViewHeader'
import {Feed} from '../../com/posts/Feed'
import {useStores} from '../../../state'
import {FeedModel} from '../../../state/models/feed-view'
import {ScreenParams} from '../../routes'
import {s, colors} from '../../lib/styles'
const HITSLOP = {left: 20, top: 20, right: 20, bottom: 20}
export const Home = observer(function Home({
export default observer(function Home({
navIdx,
visible,
scrollElRef,
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const Home = register({
loader: () => import('./Home'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -14,19 +14,20 @@ import Svg, {Circle, Line, Text as SvgText} from 'react-native-svg'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import * as EmailValidator from 'email-validator'
import {observer} from 'mobx-react-lite'
import {Picker} from '../com/util/Picker'
import {TextLink} from '../com/util/Link'
import {s, colors} from '../lib/styles'
import {Picker} from '../../com/util/Picker'
import {TextLink} from '../../com/util/Link'
import {s, colors} from '../../lib/styles'
import {
makeValidHandle,
createFullHandle,
toNiceDomain,
} from '../../lib/strings'
import {useStores, DEFAULT_SERVICE} from '../../state'
import {ServiceDescription} from '../../state/models/session'
import {ServerInputModel} from '../../state/models/shell-ui'
import {ComAtprotoAccountCreate} from '../../third-party/api/index'
import {isNetworkError} from '../../lib/errors'
} from '../../../lib/strings'
import {useStores, DEFAULT_SERVICE} from '../../../state'
import {ServiceDescription} from '../../../state/models/session'
import {ServerInputModel} from '../../../state/models/shell-ui'
import {ComAtprotoAccountCreate} from '../../../third-party/api/index'
import {isNetworkError} from '../../../lib/errors'
import {investigate} from 'react-native-bundle-splitter/dist/utils'
enum ScreenState {
SigninOrCreateAccount,
@@ -589,6 +590,12 @@ export const Login = observer(
ScreenState.SigninOrCreateAccount,
)
console.log(
`Bundle:\nloaded:${investigate().loaded.length}\nwaiting:${
investigate().waiting.length
}`,
)
return (
<View style={styles.outer}>
{screenState === ScreenState.SigninOrCreateAccount ? (
@@ -1,9 +1,9 @@
import React from 'react'
import {Text, Button, View} from 'react-native'
import {ViewHeader} from '../com/util/ViewHeader'
import {useStores} from '../../state'
import {ViewHeader} from '../../com/util/ViewHeader'
import {useStores} from '../../../state'
export const NotFound = () => {
export default () => {
const stores = useStores()
return (
<View>
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const NotFound = register({
loader: () => import('./NotFound'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -1,12 +1,12 @@
import React, {useState, useEffect} from 'react'
import {View} from 'react-native'
import {ViewHeader} from '../com/util/ViewHeader'
import {Feed} from '../com/notifications/Feed'
import {useStores} from '../../state'
import {NotificationsViewModel} from '../../state/models/notifications-view'
import {ScreenParams} from '../routes'
import {ViewHeader} from '../../com/util/ViewHeader'
import {Feed} from '../../com/notifications/Feed'
import {useStores} from '../../../state'
import {NotificationsViewModel} from '../../../state/models/notifications-view'
import {ScreenParams} from '../../routes'
export const Notifications = ({navIdx, visible}: ScreenParams) => {
export default ({navIdx, visible}: ScreenParams) => {
const store = useStores()
useEffect(() => {
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const Notifications = register({
loader: () => import('./Notifications'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -1,12 +1,12 @@
import React, {useEffect} from 'react'
import {View} from 'react-native'
import {observer} from 'mobx-react-lite'
import {FeatureExplainer} from '../com/onboard/FeatureExplainer'
import {Follows} from '../com/onboard/Follows'
import {OnboardStage, OnboardStageOrder} from '../../state/models/onboard'
import {useStores} from '../../state'
import {FeatureExplainer} from '../../com/onboard/FeatureExplainer'
import {Follows} from '../../com/onboard/Follows'
import {OnboardStage, OnboardStageOrder} from '../../../state/models/onboard'
import {useStores} from '../../../state'
export const Onboard = observer(() => {
export default observer(() => {
const store = useStores()
useEffect(() => {
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const Onboard = register({
loader: () => import('./Onboard'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -1,12 +1,12 @@
import React, {useEffect} from 'react'
import {View} from 'react-native'
import {ViewHeader} from '../com/util/ViewHeader'
import {PostVotedBy as PostLikedByComponent} from '../com/post-thread/PostVotedBy'
import {ScreenParams} from '../routes'
import {useStores} from '../../state'
import {makeRecordUri} from '../../lib/strings'
import {ViewHeader} from '../../com/util/ViewHeader'
import {PostVotedBy as PostLikedByComponent} from '../../com/post-thread/PostVotedBy'
import {ScreenParams} from '../../routes'
import {useStores} from '../../../state'
import {makeRecordUri} from '../../../lib/strings'
export const PostDownvotedBy = ({navIdx, visible, params}: ScreenParams) => {
export default ({navIdx, visible, params}: ScreenParams) => {
const store = useStores()
const {name, rkey} = params
const uri = makeRecordUri(name, 'app.bsky.feed.post', rkey)
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const PostDownvotedBy = register({
loader: () => import('./PostDownvotedBy'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -1,12 +1,12 @@
import React, {useEffect} from 'react'
import {View} from 'react-native'
import {ViewHeader} from '../com/util/ViewHeader'
import {PostRepostedBy as PostRepostedByComponent} from '../com/post-thread/PostRepostedBy'
import {ScreenParams} from '../routes'
import {useStores} from '../../state'
import {makeRecordUri} from '../../lib/strings'
import {ViewHeader} from '../../com/util/ViewHeader'
import {PostRepostedBy as PostRepostedByComponent} from '../../com/post-thread/PostRepostedBy'
import {ScreenParams} from '../../routes'
import {useStores} from '../../../state'
import {makeRecordUri} from '../../../lib/strings'
export const PostRepostedBy = ({navIdx, visible, params}: ScreenParams) => {
export default ({navIdx, visible, params}: ScreenParams) => {
const store = useStores()
const {name, rkey} = params
const uri = makeRecordUri(name, 'app.bsky.feed.post', rkey)
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const PostRepostedBy = register({
loader: () => import('./PostRepostedBy'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -1,13 +1,13 @@
import React, {useEffect, useMemo, useState} from 'react'
import {View} from 'react-native'
import {makeRecordUri} from '../../lib/strings'
import {ViewHeader} from '../com/util/ViewHeader'
import {PostThread as PostThreadComponent} from '../com/post-thread/PostThread'
import {PostThreadViewModel} from '../../state/models/post-thread-view'
import {ScreenParams} from '../routes'
import {useStores} from '../../state'
import {makeRecordUri} from '../../../lib/strings'
import {ViewHeader} from '../../com/util/ViewHeader'
import {PostThread as PostThreadComponent} from '../../com/post-thread/PostThread'
import {PostThreadViewModel} from '../../../state/models/post-thread-view'
import {ScreenParams} from '../../routes'
import {useStores} from '../../../state'
export const PostThread = ({navIdx, visible, params}: ScreenParams) => {
export default ({navIdx, visible, params}: ScreenParams) => {
const store = useStores()
const {name, rkey} = params
const [viewSubtitle, setViewSubtitle] = useState<string>(`by ${name}`)
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const PostThread = register({
loader: () => import('./PostThread'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -1,12 +1,12 @@
import React, {useEffect} from 'react'
import {View} from 'react-native'
import {ViewHeader} from '../com/util/ViewHeader'
import {PostVotedBy as PostLikedByComponent} from '../com/post-thread/PostVotedBy'
import {ScreenParams} from '../routes'
import {useStores} from '../../state'
import {makeRecordUri} from '../../lib/strings'
import {ViewHeader} from '../../com/util/ViewHeader'
import {PostVotedBy as PostLikedByComponent} from '../../com/post-thread/PostVotedBy'
import {ScreenParams} from '../../routes'
import {useStores} from '../../../state'
import {makeRecordUri} from '../../../lib/strings'
export const PostUpvotedBy = ({navIdx, visible, params}: ScreenParams) => {
export default ({navIdx, visible, params}: ScreenParams) => {
const store = useStores()
const {name, rkey} = params
const uri = makeRecordUri(name, 'app.bsky.feed.post', rkey)
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const PostUpvotedBy = register({
loader: () => import('./PostUpvotedBy'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -2,28 +2,28 @@ import React, {useEffect, useState, useMemo} from 'react'
import {StyleSheet, Text, View} from 'react-native'
import {observer} from 'mobx-react-lite'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {ViewSelector} from '../com/util/ViewSelector'
import {ScreenParams} from '../routes'
import {ProfileUiModel, Sections} from '../../state/models/profile-ui'
import {MembershipItem} from '../../state/models/memberships-view'
import {useStores} from '../../state'
import {ConfirmModel} from '../../state/models/shell-ui'
import {ProfileHeader} from '../com/profile/ProfileHeader'
import {FeedItem} from '../com/posts/FeedItem'
import {ProfileCard} from '../com/profile/ProfileCard'
import {PostFeedLoadingPlaceholder} from '../com/util/LoadingPlaceholder'
import {ErrorScreen} from '../com/util/ErrorScreen'
import {ErrorMessage} from '../com/util/ErrorMessage'
import {EmptyState} from '../com/util/EmptyState'
import {ViewHeader} from '../com/util/ViewHeader'
import * as Toast from '../com/util/Toast'
import {s, colors} from '../lib/styles'
import {ViewSelector} from '../../com/util/ViewSelector'
import {ScreenParams} from '../../routes'
import {ProfileUiModel, Sections} from '../../../state/models/profile-ui'
import {MembershipItem} from '../../../state/models/memberships-view'
import {useStores} from '../../../state'
import {ConfirmModel} from '../../../state/models/shell-ui'
import {ProfileHeader} from '../../com/profile/ProfileHeader'
import {FeedItem} from '../../com/posts/FeedItem'
import {ProfileCard} from '../../com/profile/ProfileCard'
import {PostFeedLoadingPlaceholder} from '../../com/util/LoadingPlaceholder'
import {ErrorScreen} from '../../com/util/ErrorScreen'
import {ErrorMessage} from '../../com/util/ErrorMessage'
import {EmptyState} from '../../com/util/EmptyState'
import {ViewHeader} from '../../com/util/ViewHeader'
import * as Toast from '../../com/util/Toast'
import {s, colors} from '../../lib/styles'
const LOADING_ITEM = {_reactKey: '__loading__'}
const END_ITEM = {_reactKey: '__end__'}
const EMPTY_ITEM = {_reactKey: '__empty__'}
export const Profile = observer(({navIdx, visible, params}: ScreenParams) => {
export default observer(({navIdx, visible, params}: ScreenParams) => {
const store = useStores()
const [hasSetup, setHasSetup] = useState<boolean>(false)
const uiState = useMemo(
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const Profile = register({
loader: () => import('./Profile'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -1,11 +1,11 @@
import React, {useEffect} from 'react'
import {View} from 'react-native'
import {ViewHeader} from '../com/util/ViewHeader'
import {ProfileFollowers as ProfileFollowersComponent} from '../com/profile/ProfileFollowers'
import {ScreenParams} from '../routes'
import {useStores} from '../../state'
import {ViewHeader} from '../../com/util/ViewHeader'
import {ProfileFollowers as ProfileFollowersComponent} from '../../com/profile/ProfileFollowers'
import {ScreenParams} from '../../routes'
import {useStores} from '../../../state'
export const ProfileFollowers = ({navIdx, visible, params}: ScreenParams) => {
export default ({navIdx, visible, params}: ScreenParams) => {
const store = useStores()
const {name} = params
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const ProfileFollowers = register({
loader: () => import('./ProfileFollowers'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -1,11 +1,11 @@
import React, {useEffect} from 'react'
import {View} from 'react-native'
import {ViewHeader} from '../com/util/ViewHeader'
import {ProfileFollows as ProfileFollowsComponent} from '../com/profile/ProfileFollows'
import {ScreenParams} from '../routes'
import {useStores} from '../../state'
import {ViewHeader} from '../../com/util/ViewHeader'
import {ProfileFollows as ProfileFollowsComponent} from '../../com/profile/ProfileFollows'
import {ScreenParams} from '../../routes'
import {useStores} from '../../../state'
export const ProfileFollows = ({navIdx, visible, params}: ScreenParams) => {
export default ({navIdx, visible, params}: ScreenParams) => {
const store = useStores()
const {name} = params
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const ProfileFollows = register({
loader: () => import('./ProfileFollows'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -1,11 +1,11 @@
import React, {useEffect} from 'react'
import {View} from 'react-native'
import {ViewHeader} from '../com/util/ViewHeader'
import {ProfileMembers as ProfileMembersComponent} from '../com/profile/ProfileMembers'
import {ScreenParams} from '../routes'
import {useStores} from '../../state'
import {ViewHeader} from '../../com/util/ViewHeader'
import {ProfileMembers as ProfileMembersComponent} from '../../com/profile/ProfileMembers'
import {ScreenParams} from '../../routes'
import {useStores} from '../../../state'
export const ProfileMembers = ({navIdx, visible, params}: ScreenParams) => {
export default ({navIdx, visible, params}: ScreenParams) => {
const store = useStores()
const {name} = params
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const ProfileMembers = register({
loader: () => import('./ProfileMembers'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -8,16 +8,16 @@ import {
TouchableOpacity,
View,
} from 'react-native'
import {ViewHeader} from '../com/util/ViewHeader'
import {SuggestedFollows} from '../com/discover/SuggestedFollows'
import {UserAvatar} from '../com/util/UserAvatar'
import {ScreenParams} from '../routes'
import {useStores} from '../../state'
import {UserAutocompleteViewModel} from '../../state/models/user-autocomplete-view'
import {s, colors} from '../lib/styles'
import {MagnifyingGlassIcon} from '../lib/icons'
import {ViewHeader} from '../../com/util/ViewHeader'
import {SuggestedFollows} from '../../com/discover/SuggestedFollows'
import {UserAvatar} from '../../com/util/UserAvatar'
import {ScreenParams} from '../../routes'
import {useStores} from '../../../state'
import {UserAutocompleteViewModel} from '../../../state/models/user-autocomplete-view'
import {s, colors} from '../../lib/styles'
import {MagnifyingGlassIcon} from '../../lib/icons'
export const Search = ({navIdx, visible, params}: ScreenParams) => {
export default ({navIdx, visible, params}: ScreenParams) => {
const store = useStores()
const textInput = useRef<TextInput>(null)
const [query, setQuery] = useState<string>('')
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const Search = register({
loader: () => import('./Search'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})
@@ -1,17 +1,14 @@
import React, {useEffect} from 'react'
import {StyleSheet, Text, TouchableOpacity, View} from 'react-native'
import {observer} from 'mobx-react-lite'
import {useStores} from '../../state'
import {ScreenParams} from '../routes'
import {s, colors} from '../lib/styles'
import {ViewHeader} from '../com/util/ViewHeader'
import {Link} from '../com/util/Link'
import {UserAvatar} from '../com/util/UserAvatar'
import {useStores} from '../../../state'
import {ScreenParams} from '../../routes'
import {s, colors} from '../../lib/styles'
import {ViewHeader} from '../../com/util/ViewHeader'
import {Link} from '../../com/util/Link'
import {UserAvatar} from '../../com/util/UserAvatar'
export const Settings = observer(function Settings({
navIdx,
visible,
}: ScreenParams) {
export default observer(function Settings({navIdx, visible}: ScreenParams) {
const store = useStores()
useEffect(() => {
+16
View File
@@ -0,0 +1,16 @@
import React from 'react'
import {View, ActivityIndicator, StyleSheet} from 'react-native'
import {register} from 'react-native-bundle-splitter'
export const Settings = register({
loader: () => import('./Settings'),
placeholder: () => (
<View style={styles.loading}>
<ActivityIndicator />
</View>
),
})
const styles = StyleSheet.create({
loading: {flex: 1, justifyContent: 'center'},
})