diff --git a/src/components/hoc/group-lookup-hoc.tsx b/src/components/hoc/group-lookup-hoc.tsx deleted file mode 100644 index 570ec2e69..000000000 --- a/src/components/hoc/group-lookup-hoc.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import React from 'react'; - -import { useGroupLookup } from 'soapbox/api/hooks'; -import ColumnLoading from 'soapbox/features/ui/components/column-loading'; - -import { Layout } from '../ui'; - -interface IGroupLookup { - params: { - groupSlug: string; - }; -} - -interface IMaybeGroupLookup { - params?: { - groupSlug?: string; - groupId?: string; - }; -} - -function GroupLookupHoc(Component: React.ComponentType<{ params: { groupId: string } }>) { - const GroupLookup: React.FC = (props) => { - const { entity: group } = useGroupLookup(props.params.groupSlug); - - if (!group) return ( - <> - - - - - - - ); - - const newProps = { - ...props, - params: { - ...props.params, - id: group.id, - groupId: group.id, - }, - }; - - return ( - - ); - }; - - const MaybeGroupLookup: React.FC = (props) => { - const { params } = props; - - if (params?.groupId) { - return ; - } else { - return ; - } - }; - - return MaybeGroupLookup; -} - -export default GroupLookupHoc; \ No newline at end of file diff --git a/src/components/hoc/with-hoc.tsx b/src/components/hoc/with-hoc.tsx deleted file mode 100644 index d5752a45f..000000000 --- a/src/components/hoc/with-hoc.tsx +++ /dev/null @@ -1,11 +0,0 @@ -type HOC = (Component: React.ComponentType

) => React.ComponentType -type AsyncComponent

= () => Promise<{ default: React.ComponentType

}> - -const withHoc = (asyncComponent: AsyncComponent

, hoc: HOC) => { - return async () => { - const { default: component } = await asyncComponent(); - return { default: hoc(component) }; - }; -}; - -export default withHoc; \ No newline at end of file diff --git a/src/features/ui/components/bundle-column-error.tsx b/src/features/ui/components/bundle-column-error.tsx deleted file mode 100644 index 4653610da..000000000 --- a/src/features/ui/components/bundle-column-error.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import React from 'react'; -import { defineMessages, useIntl } from 'react-intl'; - -import { Column, Stack, Text, IconButton } from 'soapbox/components/ui'; - -const messages = defineMessages({ - title: { id: 'bundle_column_error.title', defaultMessage: 'Network error' }, - body: { id: 'bundle_column_error.body', defaultMessage: 'Something went wrong while loading this page.' }, - retry: { id: 'bundle_column_error.retry', defaultMessage: 'Try again' }, -}); - -interface IBundleColumnError { - onRetry: () => void; -} - -const BundleColumnError: React.FC = ({ onRetry }) => { - const intl = useIntl(); - - const handleRetry = () => { - onRetry(); - }; - - return ( - - - - - {intl.formatMessage(messages.body)} - - - ); -}; - -export default BundleColumnError; diff --git a/src/features/ui/components/bundle-modal-error.tsx b/src/features/ui/components/bundle-modal-error.tsx deleted file mode 100644 index 1b33d3d22..000000000 --- a/src/features/ui/components/bundle-modal-error.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react'; -import { defineMessages, useIntl } from 'react-intl'; - -import { Modal } from 'soapbox/components/ui'; - -const messages = defineMessages({ - error: { id: 'bundle_modal_error.message', defaultMessage: 'Something went wrong while loading this modal.' }, - retry: { id: 'bundle_modal_error.retry', defaultMessage: 'Try again' }, - close: { id: 'bundle_modal_error.close', defaultMessage: 'Close' }, -}); - -interface IBundleModalError { - onRetry: () => void; - onClose: () => void; -} - -const BundleModalError: React.FC = ({ onRetry, onClose }) => { - const intl = useIntl(); - - const handleRetry = () => { - onRetry(); - }; - - return ( - - ); -}; - -export default BundleModalError; diff --git a/src/features/ui/components/modal-root.tsx b/src/features/ui/components/modal-root.tsx index b4097d220..5dc8bd6ca 100644 --- a/src/features/ui/components/modal-root.tsx +++ b/src/features/ui/components/modal-root.tsx @@ -40,12 +40,10 @@ import { import BundleContainer from '../containers/bundle-container'; -import { BundleProps } from './bundle'; -import BundleModalError from './bundle-modal-error'; import ModalLoading from './modal-loading'; /* eslint sort-keys: "error" */ -const MODAL_COMPONENTS = { +const MODAL_COMPONENTS: Record> = { 'ACCOUNT_MODERATION': AccountModerationModal, 'ACTIONS': ActionsModal, 'BIRTHDAYS': BirthdaysModal, @@ -108,10 +106,6 @@ export default class ModalRoot extends React.PureComponent { return !['MEDIA', 'VIDEO', 'BOOST', 'CONFIRM', 'ACTIONS'].includes(modalId) ? : null; }; - renderError: React.ComponentType<{ onRetry: (props?: BundleProps) => void }> = (props) => { - return ; - }; - onClickClose = (_?: ModalType) => { const { onClose, type } = this.props; onClose(type); @@ -124,7 +118,7 @@ export default class ModalRoot extends React.PureComponent { return ( {visible && ( - + {(SpecificComponent) => } )} diff --git a/src/features/ui/index.tsx b/src/features/ui/index.tsx index cbc8590b5..39db6599b 100644 --- a/src/features/ui/index.tsx +++ b/src/features/ui/index.tsx @@ -15,8 +15,6 @@ import { fetchSuggestionsForTimeline } from 'soapbox/actions/suggestions'; import { expandHomeTimeline } from 'soapbox/actions/timelines'; import { useUserStream } from 'soapbox/api/hooks'; import { useSignerStream } from 'soapbox/api/hooks/nostr/useSignerStream'; -import GroupLookupHoc from 'soapbox/components/hoc/group-lookup-hoc'; -import withHoc from 'soapbox/components/hoc/with-hoc'; import SidebarNavigation from 'soapbox/components/sidebar-navigation'; import ThumbNavigation from 'soapbox/components/thumb-navigation'; import { Layout } from 'soapbox/components/ui'; @@ -147,16 +145,6 @@ import { WrappedRoute } from './util/react-router-helpers'; // Without this it ends up in ~8 very commonly used bundles. import 'soapbox/components/status'; -const GroupTagsSlug = withHoc(GroupTags as any, GroupLookupHoc); -const GroupTagTimelineSlug = withHoc(GroupTagTimeline as any, GroupLookupHoc); -const GroupTimelineSlug = withHoc(GroupTimeline as any, GroupLookupHoc); -const GroupMembersSlug = withHoc(GroupMembers as any, GroupLookupHoc); -const GroupGallerySlug = withHoc(GroupGallery as any, GroupLookupHoc); -const ManageGroupSlug = withHoc(ManageGroup as any, GroupLookupHoc); -const EditGroupSlug = withHoc(EditGroup as any, GroupLookupHoc); -const GroupBlockedMembersSlug = withHoc(GroupBlockedMembers as any, GroupLookupHoc); -const GroupMembershipRequestsSlug = withHoc(GroupMembershipRequests as any, GroupLookupHoc); - interface ISwitchingColumnsArea { children: React.ReactNode; } @@ -310,18 +298,6 @@ const SwitchingColumnsArea: React.FC = ({ children }) => {features.groups && } {features.groups && } - {features.groupsTags && } - {features.groupsTags && } - {features.groups && } - {features.groups && } - {features.groups && } - {features.groups && } - {features.groups && } - {features.groups && } - {features.groups && } - {features.groups && } - {features.groups && } - {features.scheduledStatuses && } diff --git a/src/features/ui/util/react-router-helpers.tsx b/src/features/ui/util/react-router-helpers.tsx index 02a5fb180..e202af4a4 100644 --- a/src/features/ui/util/react-router-helpers.tsx +++ b/src/features/ui/util/react-router-helpers.tsx @@ -4,7 +4,6 @@ import { Redirect, Route, useHistory, RouteProps, RouteComponentProps, match as import { Layout } from 'soapbox/components/ui'; import { useOwnAccount, useSettings } from 'soapbox/hooks'; -import BundleColumnError from '../components/bundle-column-error'; import ColumnForbidden from '../components/column-forbidden'; import ColumnLoading from '../components/column-loading'; import ColumnsArea from '../components/columns-area'; @@ -48,7 +47,7 @@ const WrappedRoute: React.FC = ({ const renderComponent = ({ match }: RouteComponentProps) => { if (Page) { return ( - + {Component => ( @@ -63,7 +62,7 @@ const WrappedRoute: React.FC = ({ } return ( - + {Component => ( @@ -89,7 +88,6 @@ const WrappedRoute: React.FC = ({ const renderLoading = () => renderWithLayout(); const renderForbidden = () => renderWithLayout(); - const renderError = (props: any) => renderWithLayout(); const loginRedirect = () => { const actualUrl = encodeURIComponent(`${history.location.pathname}${history.location.search}`); diff --git a/src/pages/event-page.tsx b/src/pages/event-page.tsx index f10a865fa..a8fd7bb4b 100644 --- a/src/pages/event-page.tsx +++ b/src/pages/event-page.tsx @@ -31,7 +31,7 @@ const EventPage: React.FC = ({ params, children }) => { const history = useHistory(); const statusId = params?.statusId!; - const status = useAppSelector(state => getStatus(state, { id: statusId })); + const status = useAppSelector(state => getStatus(state, { id: statusId }) || undefined); const event = status?.event; diff --git a/src/pages/group-page.tsx b/src/pages/group-page.tsx index 5124076be..fac6ca6a4 100644 --- a/src/pages/group-page.tsx +++ b/src/pages/group-page.tsx @@ -3,7 +3,6 @@ import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { useRouteMatch } from 'react-router-dom'; import { useGroup, useGroupMembershipRequests } from 'soapbox/api/hooks'; -import GroupLookupHoc from 'soapbox/components/hoc/group-lookup-hoc'; import { Column, Icon, Layout, Stack, Text, Tabs } from 'soapbox/components/ui'; import GroupHeader from 'soapbox/features/group/components/group-header'; import LinkFooter from 'soapbox/features/ui/components/link-footer'; @@ -191,4 +190,4 @@ const GroupPage: React.FC = ({ params, children }) => { ); }; -export default GroupLookupHoc(GroupPage as any) as any; +export default GroupPage; diff --git a/src/pages/remote-instance-page.tsx b/src/pages/remote-instance-page.tsx index 60a61e16d..b53844213 100644 --- a/src/pages/remote-instance-page.tsx +++ b/src/pages/remote-instance-page.tsx @@ -13,15 +13,15 @@ import { federationRestrictionsDisclosed } from 'soapbox/utils/state'; import { Layout } from '../components/ui'; interface IRemoteInstancePage { - params: { - instance: string; + params?: { + instance?: string; }; children: React.ReactNode; } /** Page for viewing a remote instance timeline. */ const RemoteInstancePage: React.FC = ({ children, params }) => { - const host = params.instance; + const host = params!.instance!; const { account } = useOwnAccount(); const disclosed = useAppSelector(federationRestrictionsDisclosed);