diff --git a/web/components/ui/Content/Content.tsx b/web/components/ui/Content/Content.tsx index 50d7f659d..877054960 100644 --- a/web/components/ui/Content/Content.tsx +++ b/web/components/ui/Content/Content.tsx @@ -18,7 +18,6 @@ import { serverStatusState, } from '../../stores/ClientConfigStore'; import { ClientConfig } from '../../../interfaces/client-config.model'; -import { CustomPageContent } from '../CustomPageContent/CustomPageContent'; import styles from './Content.module.scss'; import { Sidebar } from '../Sidebar/Sidebar'; @@ -30,26 +29,16 @@ import { OfflineBanner } from '../OfflineBanner/OfflineBanner'; import { AppStateOptions } from '../../stores/application-state'; import { FollowButton } from '../../action-buttons/FollowButton'; import { NotifyButton } from '../../action-buttons/NotifyButton'; -import { ContentHeader } from '../../common/ContentHeader/ContentHeader'; import { ServerStatus } from '../../../interfaces/server-status.model'; import { Statusbar } from '../Statusbar/Statusbar'; import { ChatMessage } from '../../../interfaces/chat-message.model'; import { ExternalAction } from '../../../interfaces/external-action'; import { Modal } from '../Modal/Modal'; -import { ActionButtonMenu } from '../../action-buttons/ActionButtonMenu/ActionButtonMenu'; +import { DesktopContent } from './DesktopContent'; +import { MobileContent } from './MobileContent'; // Lazy loaded components -const FollowerCollection = dynamic( - () => - import('../followers/FollowerCollection/FollowerCollection').then( - mod => mod.FollowerCollection, - ), - { - ssr: false, - }, -); - const FollowModal = dynamic( () => import('../../modals/FollowModal/FollowModal').then(mod => mod.FollowModal), { @@ -85,140 +74,6 @@ const OwncastPlayer = dynamic( }, ); -const ChatContainer = dynamic( - () => import('../../chat/ChatContainer/ChatContainer').then(mod => mod.ChatContainer), - { - ssr: false, - }, -); - -const Tabs = dynamic(() => import('antd').then(mod => mod.Tabs), { - ssr: false, -}); - -const DesktopContent = ({ - name, - streamTitle, - summary, - tags, - socialHandles, - extraPageContent, - setShowFollowModal, - supportFediverseFeatures, -}) => { - const aboutTabContent = ; - const followersTabContent = ( -
- setShowFollowModal(true)} /> -
- ); - - const items = [{ label: 'About', key: '2', children: aboutTabContent }]; - if (supportFediverseFeatures) { - items.push({ label: 'Followers', key: '3', children: followersTabContent }); - } - - return ( - <> -
- -
- -
- {items.length > 1 ? : aboutTabContent} -
- - ); -}; - -const MobileContent = ({ - name, - streamTitle, - summary, - tags, - socialHandles, - extraPageContent, - messages, - currentUser, - showChat, - actions, - setExternalActionToDisplay, - setShowNotifyPopup, - setShowFollowModal, - supportFediverseFeatures, - supportsBrowserNotifications, -}) => { - if (!currentUser) { - return ; - } - const { id, displayName } = currentUser; - - const chatContent = showChat && ( - - ); - - const aboutTabContent = ( - <> - - - - ); - const followersTabContent = ( - setShowFollowModal(true)} /> - ); - - const items = [ - showChat && { label: 'Chat', key: '0', children: chatContent }, - { label: 'About', key: '2', children: aboutTabContent }, - { label: 'Followers', key: '3', children: followersTabContent }, - ]; - - const replacementTabBar = (props, DefaultTabBar) => ( -
- - setShowNotifyPopup(true)} - followItemSelected={() => setShowFollowModal(true)} - /> -
- ); - - return ( -
- -
- ); -}; - const ExternalModal = ({ externalActionToDisplay, setExternalActionToDisplay }) => { const { title, description, url } = externalActionToDisplay; return ( @@ -423,6 +278,9 @@ export const Content: FC = () => { setShowFollowModal={setShowFollowModal} supportFediverseFeatures={supportFediverseFeatures} supportsBrowserNotifications={supportsBrowserNotifications} + notifyItemSelected={() => setShowNotifyModal(true)} + followItemSelected={() => setShowFollowModal(true)} + externalActionSelected={externalActionSelected} /> ) : ( void; + supportFediverseFeatures: boolean; +}; + +// lazy loaded components + +const Tabs: ComponentType = 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 = ({ + name, + streamTitle, + summary, + tags, + socialHandles, + extraPageContent, + setShowFollowModal, + supportFediverseFeatures, +}) => { + const aboutTabContent = ; + const followersTabContent = ( +
+ setShowFollowModal(true)} /> +
+ ); + + const items = [{ label: 'About', key: '2', children: aboutTabContent }]; + if (supportFediverseFeatures) { + items.push({ label: 'Followers', key: '3', children: followersTabContent }); + } + + return ( + <> +
+ +
+ +
+ {items.length > 1 ? : aboutTabContent} +
+ + ); +}; diff --git a/web/components/ui/Content/MobileContent.tsx b/web/components/ui/Content/MobileContent.tsx new file mode 100644 index 000000000..740a891d6 --- /dev/null +++ b/web/components/ui/Content/MobileContent.tsx @@ -0,0 +1,136 @@ +import React, { ComponentType, FC } from 'react'; +import dynamic from 'next/dynamic'; +import { Skeleton, 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'; +import { ChatMessage } from '../../../interfaces/chat-message.model'; +import { CurrentUser } from '../../../interfaces/current-user'; +import { ActionButtonMenu } from '../../action-buttons/ActionButtonMenu/ActionButtonMenu'; +import { ExternalAction } from '../../../interfaces/external-action'; + +export type MobileContentProps = { + name: string; + streamTitle: string; + summary: string; + tags: string[]; + socialHandles: SocialLink[]; + extraPageContent: string; + notifyItemSelected: () => void; + followItemSelected: () => void; + setExternalActionToDisplay: (action: ExternalAction) => void; + setShowNotifyPopup: (show: boolean) => void; + setShowFollowModal: (show: boolean) => void; + supportFediverseFeatures: boolean; + messages: ChatMessage[]; + currentUser: CurrentUser; + showChat: boolean; + actions: ExternalAction[]; + externalActionSelected: (action: ExternalAction) => void; + supportsBrowserNotifications: boolean; +}; + +// lazy loaded components + +const Tabs: ComponentType = dynamic(() => import('antd').then(mod => mod.Tabs), { + ssr: false, +}); + +const FollowerCollection = dynamic( + () => + import('../followers/FollowerCollection/FollowerCollection').then( + mod => mod.FollowerCollection, + ), + { + ssr: false, + }, +); + +const ChatContainer = dynamic( + () => import('../../chat/ChatContainer/ChatContainer').then(mod => mod.ChatContainer), + { + ssr: false, + }, +); + +export const MobileContent: FC = ({ + name, + streamTitle, + summary, + tags, + socialHandles, + extraPageContent, + messages, + currentUser, + showChat, + actions, + setExternalActionToDisplay, + setShowNotifyPopup, + setShowFollowModal, + supportFediverseFeatures, + supportsBrowserNotifications, +}) => { + if (!currentUser) { + return ; + } + const { id, displayName } = currentUser; + + const chatContent = showChat && ( + + ); + + const aboutTabContent = ( + <> + + + + ); + const followersTabContent = ( + setShowFollowModal(true)} /> + ); + + const items = [ + showChat && { label: 'Chat', key: '0', children: chatContent }, + { label: 'About', key: '2', children: aboutTabContent }, + { label: 'Followers', key: '3', children: followersTabContent }, + ]; + + const replacementTabBar = (props, DefaultTabBar) => ( +
+ + setShowNotifyPopup(true)} + followItemSelected={() => setShowFollowModal(true)} + /> +
+ ); + + return ( +
+ +
+ ); +};