Add menu for Public timeline

Add menu item to switch between Local and Federated
This commit is contained in:
Lim Chee Aun 2023-02-25 11:25:50 +08:00
parent aca3cb677b
commit 1c8bba456d
3 changed files with 47 additions and 18 deletions

View file

@ -1053,11 +1053,13 @@ body:has(.status-deck) .media-post-link {
background-color: transparent; background-color: transparent;
} }
.szh-menu .szh-menu__item { .szh-menu .szh-menu__item {
display: block;
padding: 8px 16px !important; padding: 8px 16px !important;
transition: all 0.1s ease-in-out; transition: all 0.1s ease-in-out;
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
text-decoration: none;
} }
.szh-menu .szh-menu__item * { .szh-menu .szh-menu__item * {
vertical-align: middle; vertical-align: middle;

View file

@ -57,6 +57,7 @@ const ICONS = {
user: 'mingcute:user-4-line', user: 'mingcute:user-4-line',
following: 'mingcute:walk-line', following: 'mingcute:walk-line',
pin: 'mingcute:pin-line', pin: 'mingcute:pin-line',
bus: 'mingcute:bus-2-line',
}; };
const modules = import.meta.glob('/node_modules/@iconify-icons/mingcute/*.js'); const modules = import.meta.glob('/node_modules/@iconify-icons/mingcute/*.js');

View file

@ -1,4 +1,4 @@
// EXPERIMENTAL: This is a work in progress and may not work as expected. import { Menu, MenuDivider, MenuItem } from '@szhsin/react-menu';
import { useRef } from 'preact/hooks'; import { useRef } from 'preact/hooks';
import { useNavigate, useParams } from 'react-router-dom'; import { useNavigate, useParams } from 'react-router-dom';
@ -75,25 +75,51 @@ function Public({ local, ...props }) {
checkForUpdates={checkForUpdates} checkForUpdates={checkForUpdates}
headerStart={<></>} headerStart={<></>}
headerEnd={ headerEnd={
<button <Menu
type="button" portal={{
class="plain" target: document.body,
onClick={() => {
let newInstance = prompt(
'Enter a new instance e.g. "mastodon.social"',
);
if (!/\./.test(newInstance)) {
if (newInstance) alert('Invalid instance');
return;
}
if (newInstance) {
newInstance = newInstance.toLowerCase().trim();
navigate(isLocal ? `/${newInstance}/p/l` : `/${newInstance}/p`);
}
}} }}
// setDownOverflow
overflow="auto"
viewScroll="close"
position="anchor"
boundingBoxPadding="8 8 8 8"
menuButton={
<button type="button" class="plain">
<Icon icon="more" size="l" />
</button>
}
> >
<Icon icon="transfer" alt="Switch instance" /> <MenuItem href={isLocal ? `/#/${instance}/p` : `/#/${instance}/p/l`}>
</button> {isLocal ? (
<>
<Icon icon="transfer" /> <span>Switch to Federated</span>
</>
) : (
<>
<Icon icon="transfer" /> <span>Switch to Local</span>
</>
)}
</MenuItem>
<MenuDivider />
<MenuItem
onClick={() => {
let newInstance = prompt(
'Enter a new instance e.g. "mastodon.social"',
);
if (!/\./.test(newInstance)) {
if (newInstance) alert('Invalid instance');
return;
}
if (newInstance) {
newInstance = newInstance.toLowerCase().trim();
navigate(isLocal ? `/${newInstance}/p/l` : `/${newInstance}/p`);
}
}}
>
<Icon icon="bus" /> <span>Go to another instance</span>
</MenuItem>
</Menu>
} }
/> />
); );