[]
-
- []
-
+ {showCatalogButton && (
+
+ []
+
+ )}
[]
@@ -155,6 +162,8 @@ export const ThreadFooterFirstRow = ({ postCid, threadNumber, communityAddress,
const isInAllView = isAllView(location.pathname);
const isInSubscriptionsView = isSubscriptionsView(location.pathname, params);
const isInModView = isModView(location.pathname);
+ const directories = useDirectories();
+ const showCatalogButton = shouldShowCatalogButton(params.boardIdentifier, directories, { isInAllView, isInSubscriptionsView, isInModView });
const handlePostReplyClick = () => {
if (isThreadClosed) return;
@@ -167,9 +176,11 @@ export const ThreadFooterFirstRow = ({ postCid, threadNumber, communityAddress,
[]
-
- []
-
+ {showCatalogButton && (
+
+ []
+
+ )}
[]
@@ -234,6 +245,8 @@ export const ThreadFooterMobile = ({ postCid, threadNumber, communityAddress, is
const isInAllView = isAllView(location.pathname);
const isInSubscriptionsView = isSubscriptionsView(location.pathname, params);
const isInModView = isModView(location.pathname);
+ const directories = useDirectories();
+ const showCatalogButton = shouldShowCatalogButton(params.boardIdentifier, directories, { isInAllView, isInSubscriptionsView, isInModView });
const communityIdentifier = useCommunityIdentifier(communityAddress);
const post = useComment({ commentCid: postCid, autoUpdate: autoUpdateEnabled, community: communityIdentifier });
@@ -258,7 +271,9 @@ export const ThreadFooterMobile = ({ postCid, threadNumber, communityAddress, is
-
+ {showCatalogButton && (
+
+ )}
diff --git a/src/lib/utils/__tests__/route-utils.test.ts b/src/lib/utils/__tests__/route-utils.test.ts
index 4cee4d1d..3965997c 100644
--- a/src/lib/utils/__tests__/route-utils.test.ts
+++ b/src/lib/utils/__tests__/route-utils.test.ts
@@ -13,6 +13,7 @@ import {
isDirectoryListRoute,
isDirectoryRoute,
isFeedRoute,
+ isFlashBoardRoute,
isLegacyBoardModQueueRoute,
isModQueueRoute,
isPendingPostRoute,
@@ -33,6 +34,7 @@ const communities = [
title: '/mu/ - Music',
},
{ address: 'random.eth', directoryCode: 'b', title: 'Random' },
+ { address: 'flash-posting.bso', directoryCode: 'f', title: '/f/ - Flash' },
];
beforeEach(() => {
@@ -66,6 +68,11 @@ describe('directory mapping helpers', () => {
expect(isDirectoryRoute('business.eth', communities)).toBe(false);
expect(isDirectoryBoard('biz', communities)).toBe(true);
expect(isDirectoryBoard('business.eth', communities)).toBe(false);
+
+ expect(isFlashBoardRoute('f', communities)).toBe(true);
+ expect(isFlashBoardRoute('flash-posting.bso', communities)).toBe(true);
+ expect(isFlashBoardRoute('mu', communities)).toBe(false);
+ expect(isFlashBoardRoute('music-posting.bso', communities)).toBe(false);
});
});
diff --git a/src/lib/utils/route-utils.ts b/src/lib/utils/route-utils.ts
index 3a9247f1..abbd9df9 100644
--- a/src/lib/utils/route-utils.ts
+++ b/src/lib/utils/route-utils.ts
@@ -1,4 +1,5 @@
import { DirectoryCommunity, findDirectoryByAddress, normalizeBoardAddress } from '../../hooks/use-directories';
+import { isFlashDirectory, isFlashDirectoryCode } from '../flash-tags';
import { getEffectiveTimeFilterName, getSearchWithTimeFilter } from './time-filter-utils';
/**
@@ -122,6 +123,17 @@ export const isDirectoryRoute = (boardIdentifier: string, communities: Directory
return directoryToAddress.has(boardIdentifier);
};
+/** True when the board route segment refers to a flash (/f/) upload directory board. */
+export const isFlashBoardRoute = (boardIdentifier: string | undefined, communities: DirectoryCommunity[]): boolean => {
+ if (isFlashDirectoryCode(boardIdentifier)) {
+ return true;
+ }
+ if (!boardIdentifier) {
+ return false;
+ }
+ return isFlashDirectory(findDirectoryByAddress(communities, boardIdentifier));
+};
+
/** @deprecated Use {@link isDirectoryRoute} */
export const isDirectoryBoard = isDirectoryRoute;
diff --git a/src/views/archive/archive.tsx b/src/views/archive/archive.tsx
index 9ed7731a..b316f3a0 100644
--- a/src/views/archive/archive.tsx
+++ b/src/views/archive/archive.tsx
@@ -3,7 +3,7 @@ import { Link, useParams } from 'react-router-dom';
import { useFeed, useCommunity } from '@bitsocial/bitsocial-react-hooks';
import { useTranslation } from 'react-i18next';
import { shouldShowSnow } from '../../lib/snow';
-import { BottomButton, CatalogButton, ReturnButton, TopButton } from '../../components/board-buttons/board-buttons';
+import { BottomButton, BracketedCatalogButton, CatalogButton, ReturnButton, TopButton } from '../../components/board-buttons/board-buttons';
import ErrorDisplay from '../../components/error-display/error-display';
import { PageFooterDesktop, PageFooterMobile, ThreadFooterStyleRow } from '../../components/footer';
import LoadingEllipsis from '../../components/loading-ellipsis';
@@ -106,9 +106,7 @@ const ArchiveDesktopTopControls = ({ communityAddress }: { communityAddress: str
[]
-
- []
-
+
[]
@@ -120,9 +118,7 @@ const ArchiveDesktopFooterControls = ({ communityAddress }: { communityAddress:
[]
-
- []
-
+
[]
diff --git a/src/views/directory/directory.tsx b/src/views/directory/directory.tsx
index b540030f..f126cf12 100644
--- a/src/views/directory/directory.tsx
+++ b/src/views/directory/directory.tsx
@@ -3,7 +3,7 @@ import { Link, Navigate, useParams } from 'react-router-dom';
import { Trans, useTranslation } from 'react-i18next';
import { useCommunity } from '@bitsocial/bitsocial-react-hooks';
import { shouldShowSnow } from '../../lib/snow';
-import { BottomButton, CatalogButton, ReturnButton, TopButton } from '../../components/board-buttons/board-buttons';
+import { BottomButton, BracketedCatalogButton, CatalogButton, ReturnButton, TopButton } from '../../components/board-buttons/board-buttons';
import { PageFooterDesktop, PageFooterMobile, ThreadFooterStyleRow } from '../../components/footer';
import LoadingEllipsis from '../../components/loading-ellipsis';
import Tooltip from '../../components/tooltip';
@@ -49,9 +49,7 @@ const DirectoryDesktopTopControls = ({ communityAddress }: { communityAddress: s
[]
-
- []
-
+
[]
@@ -63,9 +61,7 @@ const DirectoryDesktopFooterControls = ({ communityAddress }: { communityAddress
[]
-
- []
-
+
[]