Remove scenes from the profile view

This commit is contained in:
Paul Frazee
2023-01-16 13:50:29 -06:00
parent fd6ebf3dfe
commit ff7f73cd8c
3 changed files with 3 additions and 181 deletions
+2 -37
View File
@@ -8,17 +8,9 @@ import {FeedModel} from './feed-view'
export enum Sections {
Posts = 'Posts',
PostsWithReplies = 'Posts & replies',
Scenes = 'Scenes',
Trending = 'Trending',
Members = 'Members',
}
const USER_SELECTOR_ITEMS = [
Sections.Posts,
Sections.PostsWithReplies,
Sections.Scenes,
]
const SCENE_SELECTOR_ITEMS = [Sections.Trending, Sections.Members]
const USER_SELECTOR_ITEMS = [Sections.Posts, Sections.PostsWithReplies]
export interface ProfileUiParams {
user: string
@@ -28,8 +20,6 @@ export class ProfileUiModel {
// data
profile: ProfileViewModel
feed: FeedModel
memberships: MembershipsViewModel
members: MembersViewModel
// ui state
selectedViewIndex = 0
@@ -51,24 +41,15 @@ export class ProfileUiModel {
author: params.user,
limit: 10,
})
this.memberships = new MembershipsViewModel(rootStore, {actor: params.user})
this.members = new MembersViewModel(rootStore, {actor: params.user})
}
get currentView(): FeedModel | MembershipsViewModel | MembersViewModel {
if (
this.selectedView === Sections.Posts ||
this.selectedView === Sections.PostsWithReplies ||
this.selectedView === Sections.Trending
this.selectedView === Sections.PostsWithReplies
) {
return this.feed
}
if (this.selectedView === Sections.Scenes) {
return this.memberships
}
if (this.selectedView === Sections.Members) {
return this.members
}
throw new Error(`Invalid selector value: ${this.selectedViewIndex}`)
}
@@ -85,15 +66,9 @@ export class ProfileUiModel {
return this.profile.isUser
}
get isScene() {
return this.profile.isScene
}
get selectorItems() {
if (this.isUser) {
return USER_SELECTOR_ITEMS
} else if (this.isScene) {
return SCENE_SELECTOR_ITEMS
} else {
return USER_SELECTOR_ITEMS
}
@@ -119,16 +94,6 @@ export class ProfileUiModel {
.setup()
.catch(err => this.rootStore.log.error('Failed to fetch feed', err)),
])
if (this.isUser) {
await this.memberships
.setup()
.catch(err => this.rootStore.log.error('Failed to fetch members', err))
}
if (this.isScene) {
await this.members
.setup()
.catch(err => this.rootStore.log.error('Failed to fetch members', err))
}
}
async update() {
-5
View File
@@ -13,7 +13,6 @@ import {RootStoreModel} from './root-store'
import * as apilib from '../lib/api'
export const ACTOR_TYPE_USER = 'app.bsky.system.actorUser'
export const ACTOR_TYPE_SCENE = 'app.bsky.system.actorScene'
export class ProfileViewMyStateModel {
follow?: string
@@ -85,10 +84,6 @@ export class ProfileViewModel {
return this.declaration.actorType === ACTOR_TYPE_USER
}
get isScene() {
return this.declaration.actorType === ACTOR_TYPE_SCENE
}
// public api
// =
+1 -139
View File
@@ -1,15 +1,12 @@
import React, {useMemo} from 'react'
import React from 'react'
import {observer} from 'mobx-react-lite'
import {StyleSheet, TouchableOpacity, View} from 'react-native'
import LinearGradient from 'react-native-linear-gradient'
import {FontAwesomeIcon} from '@fortawesome/react-native-fontawesome'
import {AtUri} from '../../../third-party/uri'
import {ProfileViewModel} from '../../../state/models/profile-view'
import {useStores} from '../../../state'
import {
ConfirmModal,
EditProfileModal,
InviteToSceneModal,
ReportAccountModal,
ProfileImageLightbox,
} from '../../../state/models/shell-ui'
@@ -23,7 +20,6 @@ import {Text} from '../util/text/Text'
import {RichText} from '../util/text/RichText'
import {UserAvatar} from '../util/UserAvatar'
import {UserBanner} from '../util/UserBanner'
import {UserInfoText} from '../util/UserInfoText'
import {usePalette} from '../../lib/hooks/usePalette'
export const ProfileHeader = observer(function ProfileHeader({
@@ -35,10 +31,6 @@ export const ProfileHeader = observer(function ProfileHeader({
}) {
const pal = usePalette('default')
const store = useStores()
const isMember = useMemo(
() => view.isScene && view.myState.member,
[view.myState.member],
)
const onPressAvi = () => {
store.shell.openLightbox(new ProfileImageLightbox(view))
@@ -64,31 +56,6 @@ export const ProfileHeader = observer(function ProfileHeader({
const onPressFollows = () => {
store.nav.navigate(`/profile/${view.handle}/follows`)
}
const onPressMembers = () => {
store.nav.navigate(`/profile/${view.handle}/members`)
}
const onPressInviteMembers = () => {
store.shell.openModal(new InviteToSceneModal(view))
}
const onPressLeaveScene = () => {
store.shell.openModal(
new ConfirmModal(
'Leave this scene?',
`You'll be able to come back unless your invite is revoked.`,
onPressConfirmLeaveScene,
),
)
}
const onPressConfirmLeaveScene = async () => {
if (view.myState.member) {
await store.api.app.bsky.graph.confirmation.delete({
did: store.me.did || '',
rkey: new AtUri(view.myState.member).rkey,
})
Toast.show(`Scene left`)
}
onRefreshAll()
}
const onPressMuteAccount = async () => {
try {
await view.muteAccount()
@@ -157,7 +124,6 @@ export const ProfileHeader = observer(function ProfileHeader({
// =
const gradient = getGradient(view.handle)
const isMe = store.me.did === view.did
const isCreator = view.isScene && view.creator === store.me.did
let dropdownItems: DropdownItem[] | undefined
if (!isMe) {
dropdownItems = dropdownItems || []
@@ -170,21 +136,6 @@ export const ProfileHeader = observer(function ProfileHeader({
onPress: onPressReportAccount,
})
}
if (isCreator || isMember) {
dropdownItems = dropdownItems || []
if (isCreator) {
dropdownItems.push({
label: 'Edit Profile',
onPress: onPressEditProfile,
})
}
if (isMember) {
dropdownItems.push({
label: 'Leave Scene...',
onPress: onPressLeaveScene,
})
}
}
return (
<View style={pal.view}>
<UserBanner handle={view.handle} banner={view.banner} />
@@ -244,15 +195,6 @@ export const ProfileHeader = observer(function ProfileHeader({
</Text>
</View>
<View style={styles.handleLine}>
{view.isScene ? (
<View
style={[
styles.typeLabelWrapper,
{backgroundColor: pal.colors.backgroundLight},
]}>
<Text style={[styles.typeLabel, pal.textLight]}>Scene</Text>
</View>
) : undefined}
<Text style={pal.textLight}>@{view.handle}</Text>
</View>
<View style={styles.metricsLine}>
@@ -278,18 +220,6 @@ export const ProfileHeader = observer(function ProfileHeader({
</Text>
</TouchableOpacity>
) : undefined}
{view.isScene ? (
<TouchableOpacity
style={[s.flexRow, s.mr10]}
onPress={onPressMembers}>
<Text type="body2" style={[s.bold, s.mr2, pal.text]}>
{view.membersCount}
</Text>
<Text type="body2" style={[pal.textLight]}>
{pluralize(view.membersCount, 'member')}
</Text>
</TouchableOpacity>
) : undefined}
<View style={[s.flexRow, s.mr10]}>
<Text type="body2" style={[s.bold, s.mr2, pal.text]}>
{view.postsCount}
@@ -307,35 +237,6 @@ export const ProfileHeader = observer(function ProfileHeader({
entities={view.descriptionEntities}
/>
) : undefined}
{view.isScene && view.creator ? (
<View style={styles.detailLine}>
<FontAwesomeIcon
icon={['far', 'user']}
style={[pal.textLight, s.mr5]}
/>
<Text type="body2" style={[s.mr2, pal.textLight]}>
Created by
</Text>
<UserInfoText
type="body2"
style={[pal.link]}
did={view.creator}
prefix="@"
asLink
/>
</View>
) : undefined}
{view.isScene && view.myState.member ? (
<View style={styles.detailLine}>
<FontAwesomeIcon
icon={['far', 'circle-check']}
style={[pal.textLight, s.mr5]}
/>
<Text type="body2" style={[s.mr2, pal.textLight]}>
You are a member
</Text>
</View>
) : undefined}
{view.myState.muted ? (
<View style={[styles.detailLine, pal.btn, s.p5]}>
<FontAwesomeIcon
@@ -348,26 +249,6 @@ export const ProfileHeader = observer(function ProfileHeader({
</View>
) : undefined}
</View>
{view.isScene && view.creator === store.me.did ? (
<View style={[styles.sceneAdminContainer, pal.border]}>
<TouchableOpacity onPress={onPressInviteMembers}>
<LinearGradient
colors={[gradient[1], gradient[0]]}
start={{x: 0, y: 0}}
end={{x: 1, y: 1}}
style={[styles.btn, styles.gradientBtn, styles.sceneAdminBtn]}>
<FontAwesomeIcon
icon="user-plus"
style={[s.mr5, s.white]}
size={15}
/>
<Text type="button" style={[s.bold, s.white]}>
Invite Members
</Text>
</LinearGradient>
</TouchableOpacity>
</View>
) : undefined}
<TouchableOpacity
style={[pal.view, {borderColor: pal.colors.background}, styles.avi]}
onPress={onPressAvi}>
@@ -435,15 +316,6 @@ const styles = StyleSheet.create({
flexDirection: 'row',
marginBottom: 8,
},
typeLabelWrapper: {
paddingHorizontal: 4,
borderRadius: 4,
marginRight: 5,
},
typeLabel: {
fontSize: 15,
fontWeight: 'bold',
},
metricsLine: {
flexDirection: 'row',
@@ -459,14 +331,4 @@ const styles = StyleSheet.create({
alignItems: 'center',
marginBottom: 5,
},
sceneAdminContainer: {
borderTopWidth: 1,
borderBottomWidth: 1,
paddingVertical: 12,
paddingHorizontal: 12,
},
sceneAdminBtn: {
paddingVertical: 8,
},
})