You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.0 KiB
78 lines
2.0 KiB
import React, { ComponentType, FC } from 'react'; |
|
import dynamic from 'next/dynamic'; |
|
import { TabsProps } from 'antd'; |
|
import { SocialLink } from '../../../interfaces/social-link.model'; |
|
import styles from './Content.module.scss'; |
|
import { CustomPageContent } from '../CustomPageContent/CustomPageContent'; |
|
import { ContentHeader } from '../../common/ContentHeader/ContentHeader'; |
|
|
|
export type DesktopContentProps = { |
|
name: string; |
|
summary: string; |
|
tags: string[]; |
|
socialHandles: SocialLink[]; |
|
extraPageContent: string; |
|
setShowFollowModal: (show: boolean) => void; |
|
supportFediverseFeatures: boolean; |
|
}; |
|
|
|
// lazy loaded components |
|
|
|
const Tabs: ComponentType<TabsProps> = dynamic(() => import('antd').then(mod => mod.Tabs), { |
|
ssr: false, |
|
}); |
|
|
|
const FollowerCollection = dynamic( |
|
() => |
|
import('../followers/FollowerCollection/FollowerCollection').then( |
|
mod => mod.FollowerCollection, |
|
), |
|
{ |
|
ssr: false, |
|
}, |
|
); |
|
|
|
export const DesktopContent: FC<DesktopContentProps> = ({ |
|
name, |
|
summary, |
|
tags, |
|
socialHandles, |
|
extraPageContent, |
|
setShowFollowModal, |
|
supportFediverseFeatures, |
|
}) => { |
|
const aboutTabContent = ( |
|
<div className={styles.bottomPageContentContainer}> |
|
<CustomPageContent content={extraPageContent} /> |
|
</div> |
|
); |
|
|
|
const followersTabContent = ( |
|
<div className={styles.bottomPageContentContainer}> |
|
<FollowerCollection name={name} onFollowButtonClick={() => setShowFollowModal(true)} /> |
|
</div> |
|
); |
|
|
|
const items = [{ label: 'About', key: '2', children: aboutTabContent }]; |
|
if (supportFediverseFeatures) { |
|
items.push({ label: 'Followers', key: '3', children: followersTabContent }); |
|
} |
|
|
|
return ( |
|
<> |
|
<div className={styles.lowerHalf} id="skip-to-content"> |
|
<ContentHeader |
|
name={name} |
|
summary={summary} |
|
tags={tags} |
|
links={socialHandles} |
|
logo="/logo" |
|
/> |
|
</div> |
|
|
|
<div className={styles.lowerSection}> |
|
{items.length > 1 ? <Tabs defaultActiveKey="0" items={items} /> : aboutTabContent} |
|
</div> |
|
</> |
|
); |
|
};
|
|
|