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 (
+
+
+
+ );
+};