Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/containers/content/UserContent/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ const UserContent = T.model('UserContent', {
following: T.optional(T.boolean, false),

pagedEditableCommunities: T.optional(PagedCommunities, emptyPagi),
subscribedCommunities: T.optional(PagedCommunities, emptyPagi),
pagedWorks: T.optional(PagedWorks, emptyPagi),
})
.views((self) => ({
Expand All @@ -50,6 +51,7 @@ const UserContent = T.model('UserContent', {
get pagedEditableCommunitiesData(): TPagedCommunities {
return toJS(self.pagedEditableCommunities)
},

get hasContentBg(): boolean {
const root = getParent(self) as TRootStore

Expand Down
25 changes: 0 additions & 25 deletions src/containers/user/UserProfile/Activities/BriefInfo.js

This file was deleted.

35 changes: 35 additions & 0 deletions src/containers/user/UserProfile/Activities/BriefInfo.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { FC, memo } from 'react'

import { TUserActivity } from '@/spec'
import {
Wrapper,
DateInfo,
DayNum,
MonthNum,
Divider,
Desc,
} from '../styles/activities/brief_info'

type TProps = {
activity: TUserActivity
first: boolean
}

const BriefInfo: FC<TProps> = ({ activity, first }) => {
const date = new Date(activity.insertedAt)
const month = date.getMonth() + 1
const day = date.getDate()

return (
<Wrapper first={first}>
<DateInfo>
<DayNum>{day}</DayNum>
<Divider>/</Divider>
<MonthNum>{month}月</MonthNum>
</DateInfo>
<Desc>发布帖子</Desc>
</Wrapper>
)
}

export default memo(BriefInfo)
22 changes: 0 additions & 22 deletions src/containers/user/UserProfile/Activities/DetailInfo.js

This file was deleted.

33 changes: 33 additions & 0 deletions src/containers/user/UserProfile/Activities/DetailInfo.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { FC, memo } from 'react'

import type { TUserActivity } from '@/spec'

import {
Wrapper,
IconWrapper,
Icon,
Content,
Title,
Digest,
} from '../styles/activities/detail_info'

type TProps = {
activity: TUserActivity
first: boolean
}

const DetailInfo: FC<TProps> = ({ activity, first }) => {
return (
<Wrapper first={first}>
<IconWrapper first={first}>
<Icon />
</IconWrapper>
<Content>
<Title>{activity.articleTitle}</Title>
<Digest>{activity.digest}</Digest>
</Content>
</Wrapper>
)
}

export default memo(DetailInfo)
17 changes: 0 additions & 17 deletions src/containers/user/UserProfile/Activities/EventBlock.js

This file was deleted.

24 changes: 24 additions & 0 deletions src/containers/user/UserProfile/Activities/EventBlock.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { FC, memo } from 'react'

import type { TUserActivity } from '@/spec'

import BriefInfo from './BriefInfo'
import DetailInfo from './DetailInfo'

import { Wrapper } from '../styles/activities/event_block'

type TProps = {
activity: TUserActivity
first: boolean
}

const EventBlock: FC<TProps> = ({ activity, first }) => {
return (
<Wrapper>
<BriefInfo activity={activity} first={first} />
<DetailInfo activity={activity} first={first} />
</Wrapper>
)
}

export default memo(EventBlock)
19 changes: 0 additions & 19 deletions src/containers/user/UserProfile/Activities/index.js

This file was deleted.

26 changes: 26 additions & 0 deletions src/containers/user/UserProfile/Activities/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { FC, memo } from 'react'

import type { TUserActivity } from '@/spec'
import EventBlock from './EventBlock'

import { Wrapper, Title, EmptyHint, Divider } from '../styles/activities'

type TProps = {
items: TUserActivity[]
}

const Activities: FC<TProps> = ({ items }) => {
if (items.length === 0) return <EmptyHint>暂无动态</EmptyHint>

return (
<Wrapper>
<Title>最新动态</Title>
<Divider />
{items.map((activity, index) => (
<EventBlock key={activity.id} activity={activity} first={index === 0} />
))}
</Wrapper>
)
}

export default memo(Activities)
6 changes: 5 additions & 1 deletion src/containers/user/UserProfile/ContributeMap.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import { buildLog } from '@/utils/logger'
import {
Wrapper,
Title,
TitleCount,
Header,
Divider,
DotText,
Expand Down Expand Up @@ -70,7 +71,10 @@ const UserContributeMap: FC<TProps> = ({ user }) => {
return (
<Wrapper className="banner-heatmap">
<Header>
<Title>过去 1 年共创作 {contributes.totalCount} 次内容</Title>
<Title>
过去 <TitleCount>1</TitleCount> 年共创作{' '}
<TitleCount>{contributes.totalCount}</TitleCount> 次内容
</Title>
<DotList>
<DotText>潜水&nbsp;&nbsp;</DotText>
<ColorDot scale="empty" />
Expand Down
18 changes: 11 additions & 7 deletions src/containers/user/UserProfile/NumbersPad.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { FC, memo } from 'react'

import type { TUser } from '@/spec'
import type { TUser, TPagedCommunities } from '@/spec'
import FollowButton from '@/widgets/Buttons/FollowButton'
import Button from '@/widgets/Buttons/Button'
import { Br } from '@/widgets/Common'
import Tooltip from '@/widgets/Tooltip'
import { mockCommunities } from '@/utils/mock'

import CommunityList from '@/widgets/CommunityList'

Expand All @@ -25,9 +24,10 @@ import {

type TProps = {
user: TUser
subscribedCommunities: TPagedCommunities
}

const Numberspad: FC<TProps> = ({ user }) => {
const Numberspad: FC<TProps> = ({ user, subscribedCommunities }) => {
return (
<Wrapper>
<GravitySection>
Expand Down Expand Up @@ -56,14 +56,18 @@ const Numberspad: FC<TProps> = ({ user }) => {
<JoinSection>
<CommunitiesWrapper>
<CommunityList
items={mockCommunities(7)}
items={subscribedCommunities.entries}
size={16}
bottom={2}
bottom={1}
right={8}
totalCount={10}
totalCount={subscribedCommunities.totalCount}
/>
</CommunitiesWrapper>
<Title>加入的子社区</Title>
{subscribedCommunities.totalCount === 1 ? (
<Title>加入的社区</Title>
) : (
<Title>加入的子社区</Title>
)}
</JoinSection>
<Divider />
<FollowSection>
Expand Down
9 changes: 6 additions & 3 deletions src/containers/user/UserProfile/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,19 @@ const UserProfileContainer: FC<TProps> = ({
}) => {
useInit(store)

const { viewingUser } = store
const { viewingUser, pagedSubscribedCommunitiesData, activities } = store

return (
<Wrapper testid={testid}>
<NumbersPad user={viewingUser} />
<NumbersPad
user={viewingUser}
subscribedCommunities={pagedSubscribedCommunitiesData}
/>
<ContributesWrapper>
<ContributeMap user={viewingUser} />
</ContributesWrapper>

<Activities />
<Activities items={activities} />
</Wrapper>
)
}
Expand Down
57 changes: 53 additions & 4 deletions src/containers/user/UserProfile/logic.ts
Original file line number Diff line number Diff line change
@@ -1,27 +1,76 @@
import { useEffect } from 'react'
// import { } from 'ramda'

import { TYPE, ERR, ARTICLE_THREAD } from '@/constant'
import { errRescue } from '@/utils/helper'
import { buildLog } from '@/utils/logger'
// import S from './service'
import asyncSuit from '@/utils/async'

import S from './schema'
import type { TStore } from './store'

let store: TStore | undefined
let sub$ = null

/* eslint-disable-next-line */
const log = buildLog('L:UserProfile')

export const someMethod = (): void => {
/* todo */
const { SR71, $solver, asyncRes, asyncErr } = asyncSuit

const sr71$ = new SR71()

export const loadPublishedArticles = (): void => {
const { viewingUser: user, isLogin } = store
const filter = { page: 1, size: 30 }
const userHasLogin = isLogin

store.mark({ resState: TYPE.RES_STATE.LOADING })
sr71$.query(S.getPagedPublishedArticlesSchema(ARTICLE_THREAD.POST), {
login: user.login,
filter,
userHasLogin,
})
}

// ###############################
// init & uninit handlers
// ###############################

const DataSolver = [
{
match: asyncRes('pagedPublishedPosts'),
action: ({ pagedPublishedPosts }) => {
console.log('got it: ', pagedPublishedPosts)
store.mark({ pagedPosts: pagedPublishedPosts })
},
},
]

const ErrSolver = [
{
match: asyncErr(ERR.GRAPHQL),
action: () => {
//
},
},
{
match: asyncErr(ERR.NETWORK),
action: () => {
errRescue({ type: ERR.NETWORK, path: 'PublishedArticles' })
},
},
]

export const useInit = (_store: TStore): void => {
useEffect(() => {
store = _store
log('useInit: ', store)
// return () => store.reset()
sub$ = sr71$.data().subscribe($solver(DataSolver, ErrSolver))

loadPublishedArticles()
return () => {
sr71$.stop()
sub$.unsubscribe()
}
}, [_store])
}
Loading