1
0
Fork 0

More media-first adjustments

This commit is contained in:
Lim Chee Aun 2024-04-13 17:10:13 +08:00
parent 7be620808f
commit 260bb8746d
2 changed files with 157 additions and 141 deletions

View file

@ -21,6 +21,7 @@ import pmem from '../utils/pmem';
import showToast from '../utils/show-toast'; import showToast from '../utils/show-toast';
import states from '../utils/states'; import states from '../utils/states';
import { saveStatus } from '../utils/states'; import { saveStatus } from '../utils/states';
import { isMediaFirstInstance } from '../utils/store-utils';
import useTitle from '../utils/useTitle'; import useTitle from '../utils/useTitle';
const LIMIT = 20; const LIMIT = 20;
@ -68,6 +69,8 @@ function AccountStatuses() {
searchOffsetRef.current = 0; searchOffsetRef.current = 0;
}, allSearchParams); }, allSearchParams);
const mediaFirst = useMemo(() => isMediaFirstInstance(), []);
const sameCurrentInstance = useMemo( const sameCurrentInstance = useMemo(
() => instance === currentInstance, () => instance === currentInstance,
[instance, currentInstance], [instance, currentInstance],
@ -186,7 +189,7 @@ function AccountStatuses() {
limit: LIMIT, limit: LIMIT,
exclude_replies: excludeReplies, exclude_replies: excludeReplies,
exclude_reblogs: excludeBoosts, exclude_reblogs: excludeBoosts,
only_media: media, only_media: media || undefined,
tagged, tagged,
}); });
} }
@ -270,6 +273,9 @@ function AccountStatuses() {
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
// No need, because the whole filter bar is hidden
// TODO: Revisit this
if (!mediaFirst) {
try { try {
const featuredTags = await masto.v1.accounts const featuredTags = await masto.v1.accounts
.$select(id) .$select(id)
@ -279,8 +285,9 @@ function AccountStatuses() {
} catch (e) { } catch (e) {
console.error(e); console.error(e);
} }
}
})(); })();
}, [id]); }, [id, mediaFirst]);
const { displayName, acct, emojis } = account || {}; const { displayName, acct, emojis } = account || {};
@ -299,6 +306,7 @@ function AccountStatuses() {
authenticated={authenticated} authenticated={authenticated}
standalone standalone
/> />
{!mediaFirst && (
<div <div
class="filter-bar" class="filter-bar"
ref={filterBarRef} ref={filterBarRef}
@ -430,6 +438,7 @@ function AccountStatuses() {
/> />
))} ))}
</div> </div>
)}
</> </>
); );
}, [ }, [
@ -492,7 +501,7 @@ function AccountStatuses() {
errorText="Unable to load posts" errorText="Unable to load posts"
fetchItems={fetchAccountStatuses} fetchItems={fetchAccountStatuses}
useItemID useItemID
view={media ? 'media' : undefined} view={media || mediaFirst ? 'media' : undefined}
boostsCarousel={snapStates.settings.boostsCarousel} boostsCarousel={snapStates.settings.boostsCarousel}
timelineStart={TimelineStart} timelineStart={TimelineStart}
refresh={[ refresh={[

View file

@ -5,7 +5,7 @@ import {
MenuHeader, MenuHeader,
MenuItem, MenuItem,
} from '@szhsin/react-menu'; } from '@szhsin/react-menu';
import { useEffect, useRef, useState } from 'preact/hooks'; import { useEffect, useMemo, useRef, useState } from 'preact/hooks';
import { useNavigate, useParams, useSearchParams } from 'react-router-dom'; import { useNavigate, useParams, useSearchParams } from 'react-router-dom';
import Icon from '../components/icon'; import Icon from '../components/icon';
@ -18,6 +18,7 @@ import { filteredItems } from '../utils/filters';
import showToast from '../utils/show-toast'; import showToast from '../utils/show-toast';
import states from '../utils/states'; import states from '../utils/states';
import { saveStatus } from '../utils/states'; import { saveStatus } from '../utils/states';
import { isMediaFirstInstance } from '../utils/store-utils';
import useTitle from '../utils/useTitle'; import useTitle from '../utils/useTitle';
const LIMIT = 20; const LIMIT = 20;
@ -55,6 +56,8 @@ function Hashtags({ media: mediaView, columnMode, ...props }) {
useTitle(title, `/:instance?/t/:hashtag`); useTitle(title, `/:instance?/t/:hashtag`);
const latestItem = useRef(); const latestItem = useRef();
const mediaFirst = useMemo(() => isMediaFirstInstance(), []);
// const hashtagsIterator = useRef(); // const hashtagsIterator = useRef();
const maxID = useRef(undefined); const maxID = useRef(undefined);
async function fetchHashtags(firstLoad) { async function fetchHashtags(firstLoad) {
@ -85,7 +88,7 @@ function Hashtags({ media: mediaView, columnMode, ...props }) {
// value = filteredItems(value, 'public'); // value = filteredItems(value, 'public');
value.forEach((item) => { value.forEach((item) => {
saveStatus(item, instance, { saveStatus(item, instance, {
skipThreading: media, // If media view, no need to form threads skipThreading: media || mediaFirst, // If media view, no need to form threads
}); });
}); });
@ -156,7 +159,7 @@ function Hashtags({ media: mediaView, columnMode, ...props }) {
fetchItems={fetchHashtags} fetchItems={fetchHashtags}
checkForUpdates={checkForUpdates} checkForUpdates={checkForUpdates}
useItemID useItemID
view={media ? 'media' : undefined} view={media || mediaFirst ? 'media' : undefined}
refresh={media} refresh={media}
// allowFilters // allowFilters
filterContext="public" filterContext="public"
@ -233,6 +236,8 @@ function Hashtags({ media: mediaView, columnMode, ...props }) {
<MenuDivider /> <MenuDivider />
</> </>
)} )}
{!mediaFirst && (
<>
<MenuHeader className="plain">Filters</MenuHeader> <MenuHeader className="plain">Filters</MenuHeader>
<MenuItem <MenuItem
type="checkbox" type="checkbox"
@ -250,6 +255,8 @@ function Hashtags({ media: mediaView, columnMode, ...props }) {
<span class="menu-grow">Media only</span> <span class="menu-grow">Media only</span>
</MenuItem> </MenuItem>
<MenuDivider /> <MenuDivider />
</>
)}
<FocusableItem className="menu-field" disabled={reachLimit}> <FocusableItem className="menu-field" disabled={reachLimit}>
{({ ref }) => ( {({ ref }) => (
<form <form