feat: added more menu
This commit is contained in:
parent
a43f84ae58
commit
e0f7349374
24
package.json
24
package.json
@ -12,32 +12,32 @@
|
|||||||
"analyze": "vite-bundle-visualizer"
|
"analyze": "vite-bundle-visualizer"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nostr-dev-kit/ndk": "^0.8.12",
|
"@nostr-dev-kit/ndk": "^1.3.0",
|
||||||
"@nostr-dev-kit/ndk-react": "^0.1.1",
|
"@nostr-dev-kit/ndk-react": "^0.1.1",
|
||||||
"lodash": "^4.17.21",
|
"lodash": "^4.17.21",
|
||||||
"nostr-tools": "^1.14.0",
|
"nostr-tools": "^1.15.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-helmet": "^6.1.0",
|
"react-helmet": "^6.1.0",
|
||||||
"react-lazy-load": "^4.0.1",
|
"react-lazy-load": "^4.0.1",
|
||||||
"react-router-dom": "^6.15.0",
|
"react-router-dom": "^6.16.0",
|
||||||
"react-swipeable": "^7.0.1"
|
"react-swipeable": "^7.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/lodash": "^4.14.197",
|
"@types/lodash": "^4.14.199",
|
||||||
"@types/react": "^18.2.20",
|
"@types/react": "^18.2.22",
|
||||||
"@types/react-dom": "^18.2.7",
|
"@types/react-dom": "^18.2.7",
|
||||||
"@types/react-helmet": "^6.1.6",
|
"@types/react-helmet": "^6.1.6",
|
||||||
"@types/react-swipeable": "^5.2.0",
|
"@types/react-swipeable": "^5.2.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^6.3.0",
|
"@typescript-eslint/eslint-plugin": "^6.7.3",
|
||||||
"@typescript-eslint/parser": "^6.3.0",
|
"@typescript-eslint/parser": "^6.7.3",
|
||||||
"@vitejs/plugin-react": "^4.0.4",
|
"@vitejs/plugin-react": "^4.1.0",
|
||||||
"@webbtc/webln-types": "^1.0.14",
|
"@webbtc/webln-types": "^2.0.1",
|
||||||
"eslint": "^8.47.0",
|
"eslint": "^8.50.0",
|
||||||
"eslint-plugin-react-hooks": "^4.6.0",
|
"eslint-plugin-react-hooks": "^4.6.0",
|
||||||
"eslint-plugin-react-refresh": "^0.4.3",
|
"eslint-plugin-react-refresh": "^0.4.3",
|
||||||
"prettier": "^3.0.1",
|
"prettier": "^3.0.3",
|
||||||
"typescript": "^5.1.6",
|
"typescript": "^5.2.2",
|
||||||
"vite": "^4.4.9",
|
"vite": "^4.4.9",
|
||||||
"vite-bundle-visualizer": "^0.10.0"
|
"vite-bundle-visualizer": "^0.10.0"
|
||||||
}
|
}
|
||||||
|
@ -154,7 +154,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.details-actions .more .more-menu {
|
.details-actions .more .more-menu {
|
||||||
display: flex;
|
display: none;
|
||||||
|
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 20px;
|
top: 20px;
|
||||||
@ -166,6 +167,10 @@
|
|||||||
gap: 6px;
|
gap: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.details-actions .more .more-menu.show {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
.details-actions .more .more-action {
|
.details-actions .more .more-action {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -174,6 +179,10 @@
|
|||||||
line-height: 2em;
|
line-height: 2em;
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
padding-right: 0.5em;
|
padding-right: 0.5em;
|
||||||
|
text-wrap: nowrap;
|
||||||
|
}
|
||||||
|
.details-actions .more .more-action:hover {
|
||||||
|
background-color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
.details-actions .more .more-action:hover {
|
.details-actions .more .more-action:hover {
|
||||||
@ -250,5 +259,11 @@
|
|||||||
right: 0px;
|
right: 0px;
|
||||||
top: auto;
|
top: auto;
|
||||||
left: auto;
|
left: auto;
|
||||||
|
text-wrap: nowrap;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.details-actions .more .more-menu.show {
|
||||||
|
display: block;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import { useGlobalState } from '../../utils/globalState';
|
|||||||
import IconBolt from '../Icons/IconBolt';
|
import IconBolt from '../Icons/IconBolt';
|
||||||
import useWindowSize from '../../utils/useWindowSize';
|
import useWindowSize from '../../utils/useWindowSize';
|
||||||
import IconLink from '../Icons/IconLink';
|
import IconLink from '../Icons/IconLink';
|
||||||
|
import IconDots from '../Icons/IconDots';
|
||||||
|
|
||||||
type DetailsViewProps = {
|
type DetailsViewProps = {
|
||||||
images: NostrImage[];
|
images: NostrImage[];
|
||||||
@ -28,6 +29,7 @@ const DetailsView = ({ images, activeImageIdx, setActiveImageIdx }: DetailsViewP
|
|||||||
const [zapState, setZapState] = useState<ZapState>('none');
|
const [zapState, setZapState] = useState<ZapState>('none');
|
||||||
const [heartState, setHeartState] = useState<HeartState>('none');
|
const [heartState, setHeartState] = useState<HeartState>('none');
|
||||||
const [state, setState] = useGlobalState();
|
const [state, setState] = useGlobalState();
|
||||||
|
const [showMoreMenu, setShowMoreMenu] = useState(false);
|
||||||
const size = useWindowSize();
|
const size = useWindowSize();
|
||||||
const currentImage = useMemo(
|
const currentImage = useMemo(
|
||||||
() => (activeImageIdx !== undefined ? images[activeImageIdx] : undefined),
|
() => (activeImageIdx !== undefined ? images[activeImageIdx] : undefined),
|
||||||
@ -47,7 +49,7 @@ const DetailsView = ({ images, activeImageIdx, setActiveImageIdx }: DetailsViewP
|
|||||||
const { nav, currentSettings } = useNav();
|
const { nav, currentSettings } = useNav();
|
||||||
|
|
||||||
const fetchLikeAndZaps = async (noteIds: string[], selfNPub: string) => {
|
const fetchLikeAndZaps = async (noteIds: string[], selfNPub: string) => {
|
||||||
const filter: NDKFilter = { kinds: [Kind.Reaction], '#e': noteIds };
|
const filter: NDKFilter = { kinds: [7], '#e': noteIds }; // Kind Reaction
|
||||||
|
|
||||||
filter.authors = [nip19.decode(selfNPub).data as string];
|
filter.authors = [nip19.decode(selfNPub).data as string];
|
||||||
|
|
||||||
@ -142,7 +144,7 @@ const DetailsView = ({ images, activeImageIdx, setActiveImageIdx }: DetailsViewP
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<CloseButton onClick={() => setActiveImageIdx(undefined)}></CloseButton>
|
<CloseButton onClick={() => setActiveImageIdx(undefined)}></CloseButton>
|
||||||
<div className="details">
|
<div className="details" onClick={() => setShowMoreMenu(false)}>
|
||||||
{nextImage && !isVideo(nextImage.url) && (
|
{nextImage && !isVideo(nextImage.url) && (
|
||||||
<img src={nextImageProxyUrl} loading="eager" style={{ display: 'none' }} />
|
<img src={nextImageProxyUrl} loading="eager" style={{ display: 'none' }} />
|
||||||
)}
|
)}
|
||||||
@ -189,20 +191,30 @@ const DetailsView = ({ images, activeImageIdx, setActiveImageIdx }: DetailsViewP
|
|||||||
<IconLink></IconLink>
|
<IconLink></IconLink>
|
||||||
</a>
|
</a>
|
||||||
)}
|
)}
|
||||||
{/*
|
{
|
||||||
<div className="more">
|
<div className="more" onClick={(e) => {e.stopPropagation(); setShowMoreMenu(s=>!s)}}>
|
||||||
<IconDots></IconDots>
|
<IconDots></IconDots>
|
||||||
<div className="more-menu">
|
<div className={`more-menu ${showMoreMenu ? 'show': '' }`} >
|
||||||
|
<a className="more-action" target="_blank"
|
||||||
|
href={`https://nostrapp.link/#${nip19.noteEncode(currentImage?.noteId)}?select=true`}>
|
||||||
|
<IconLink></IconLink>Open note with...
|
||||||
|
</a>
|
||||||
|
<a className="more-action" target="_blank"
|
||||||
|
href={`https://nostrapp.link/#${currentImage?.author}`}>
|
||||||
|
<IconLink></IconLink>Open author profile
|
||||||
|
</a>
|
||||||
|
{/*
|
||||||
<a className="more-action">
|
<a className="more-action">
|
||||||
<IconLink></IconLink> eiofjiodsjfp9dsf
|
<IconLink></IconLink>Repost
|
||||||
</a>
|
</a>
|
||||||
<a className="more-action">
|
<a className="more-action">
|
||||||
<IconLink></IconLink> usdhfoidshfo
|
<IconLink></IconLink>Follow author
|
||||||
</a>
|
</a>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
*/}
|
*/}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
|
||||||
{currentImage.tags.length > 0 && (
|
{currentImage.tags.length > 0 && (
|
||||||
<div>
|
<div>
|
||||||
|
@ -110,10 +110,12 @@ export const mixedAdultNPubs = [
|
|||||||
*/
|
*/
|
||||||
export const adultNPubs = [
|
export const adultNPubs = [
|
||||||
'npub10m75ad8pc6wtlt67f6wjeug4hpqurc68842ve5ne47u9lkjqa0lq8ja88s', // 313Chris:hellokitty_headbang:
|
'npub10m75ad8pc6wtlt67f6wjeug4hpqurc68842ve5ne47u9lkjqa0lq8ja88s', // 313Chris:hellokitty_headbang:
|
||||||
|
'npub10y6rhnutt52wwt5f7544tq4as6jt03aq7j8mle7wcymjjudanm4q4hvzaw', // NSFW
|
||||||
'npub13806pd9p833wkgyemeqddjzdksunlq9gszq4yjnhw4l57sjjhwlq6m79nj', // Orvalho
|
'npub13806pd9p833wkgyemeqddjzdksunlq9gszq4yjnhw4l57sjjhwlq6m79nj', // Orvalho
|
||||||
'npub13n6ednsew67xk7hgse670z7849q5h8su5rgydxtl4lq3r5cx4ecqsd9af4', // Everybody, Every Body
|
'npub13n6ednsew67xk7hgse670z7849q5h8su5rgydxtl4lq3r5cx4ecqsd9af4', // Everybody, Every Body
|
||||||
'npub16932qv3sz53t9fdlm2n7scct5ahe9fy9vsct36qd0wcwxm94gyks47dcg6', // Preggers
|
'npub16932qv3sz53t9fdlm2n7scct5ahe9fy9vsct36qd0wcwxm94gyks47dcg6', // Preggers
|
||||||
'npub16ye5pezunzcx8y0ecjquks0sr5jkj6lrhfjyu2n9qxt5cxgzrvcqgnvx8s', // Aru Moon
|
'npub16ye5pezunzcx8y0ecjquks0sr5jkj6lrhfjyu2n9qxt5cxgzrvcqgnvx8s', // Aru Moon
|
||||||
|
'npub17693mv2qu7mv67zqpcup9n502gmkuhytkxq3sw7qp50vlptq8f7syzv93d', // sha0wgoone
|
||||||
'npub177wu03dgx6zt9a9hdey079prfw5lvj5dhm20z4k96tf6um6zjk7qyzdumj', // Eoun
|
'npub177wu03dgx6zt9a9hdey079prfw5lvj5dhm20z4k96tf6um6zjk7qyzdumj', // Eoun
|
||||||
'npub19xwjw7f23nsmnsd0j72mvhrdswt4cp6urc5el2zuu8se3yfu87ess524je', // Gone Wild (NSFW)
|
'npub19xwjw7f23nsmnsd0j72mvhrdswt4cp6urc5el2zuu8se3yfu87ess524je', // Gone Wild (NSFW)
|
||||||
'npub1acwrv7aqgu949mw0zxmw2akgsjqp574nnq4vcl9wln5355q79w5ssv9qxg', // Arianna
|
'npub1acwrv7aqgu949mw0zxmw2akgsjqp574nnq4vcl9wln5355q79w5ssv9qxg', // Arianna
|
||||||
@ -125,6 +127,7 @@ export const adultNPubs = [
|
|||||||
'npub1e4n8nah09he25slv00dz3kav3jsu5jvp83aya234ejumcmu2xseqwrp6pl', // Svenno(NSFW)
|
'npub1e4n8nah09he25slv00dz3kav3jsu5jvp83aya234ejumcmu2xseqwrp6pl', // Svenno(NSFW)
|
||||||
'npub1femd0mrawr0jmtjr2jwa2nm90haxrpglzdt6tt0djrsav39e53asf74aer', // FemDom Raw
|
'npub1femd0mrawr0jmtjr2jwa2nm90haxrpglzdt6tt0djrsav39e53asf74aer', // FemDom Raw
|
||||||
'npub1fh8e9pnm8rfln0k7c6uh8wrvmva8enkdzsgzsc7v9jk97up23ewqs6kuue', // nostrporn
|
'npub1fh8e9pnm8rfln0k7c6uh8wrvmva8enkdzsgzsc7v9jk97up23ewqs6kuue', // nostrporn
|
||||||
|
'npub1fut75jn7hztc248vz3g8vfsdtwuy95l6khw533k6dsstsdrxkussf9ax6g', // bliss (not many nude art posts)
|
||||||
'npub1ga79p6qsjh0xd343q3du2unf2gl6gk0rde36c06mafxkrssmnnesxyzcss', // Orange Incest 🔞
|
'npub1ga79p6qsjh0xd343q3du2unf2gl6gk0rde36c06mafxkrssmnnesxyzcss', // Orange Incest 🔞
|
||||||
'npub1grssdyrmdgy5gw5umg50u6rrl9nk738lw4qg2thpcqqaf3lypkqsxt7lhg', // Shades of Red
|
'npub1grssdyrmdgy5gw5umg50u6rrl9nk738lw4qg2thpcqqaf3lypkqsxt7lhg', // Shades of Red
|
||||||
'npub1hjdtj67ckrq0lzga2mchny3wmgn6rptp826djd6edgyru7x6dszq093c0a', // ai
|
'npub1hjdtj67ckrq0lzga2mchny3wmgn6rptp826djd6edgyru7x6dszq093c0a', // ai
|
||||||
@ -139,6 +142,7 @@ export const adultNPubs = [
|
|||||||
'npub1jvp6kfs2d3m98lyw5wcyr4fnctr83s0rc3mj5p0f75ach6vcd8rst6wqnu', // VelectBlue Art
|
'npub1jvp6kfs2d3m98lyw5wcyr4fnctr83s0rc3mj5p0f75ach6vcd8rst6wqnu', // VelectBlue Art
|
||||||
'npub1kade5vf37snr4hv5hgstav6j5ygry6z09kkq0flp47p8cmeuz5zs7zz2an', // Aeontropy
|
'npub1kade5vf37snr4hv5hgstav6j5ygry6z09kkq0flp47p8cmeuz5zs7zz2an', // Aeontropy
|
||||||
'npub1klxseqx4et3grzgvajtlm47tz7tqmxygwj49kx3frsuls9cf8lhqhhhr5q', // Riley_R_Fan
|
'npub1klxseqx4et3grzgvajtlm47tz7tqmxygwj49kx3frsuls9cf8lhqhhhr5q', // Riley_R_Fan
|
||||||
|
'npub1kq67ngznkldmecycjfmjt4deuvyxgpn4zcpq8cvfmdl2hufzzccs6nc9q8', // Sargas
|
||||||
'npub1kul999wnt8gwa6l2vyuewhnmmp25gq7dly9zmgsw52x8csmqjgts7278rx', // 𝓟𝓮𝓽𝓲𝓽𝓮 𝓟𝓻𝓲𝓷𝓬𝓮𝓼𝓼
|
'npub1kul999wnt8gwa6l2vyuewhnmmp25gq7dly9zmgsw52x8csmqjgts7278rx', // 𝓟𝓮𝓽𝓲𝓽𝓮 𝓟𝓻𝓲𝓷𝓬𝓮𝓼𝓼
|
||||||
'npub1m5fdz9gqa2qeudpy47zllmv9gqe3zzj44dkt9lh2kes3mlex7e6se348vy', // Marble Sculture
|
'npub1m5fdz9gqa2qeudpy47zllmv9gqe3zzj44dkt9lh2kes3mlex7e6se348vy', // Marble Sculture
|
||||||
'npub1mgusda7ujnyuhhudwkyrp763k4dd9xspktekl0tg5v0j76yph8ssyrfdpm', // anisyia
|
'npub1mgusda7ujnyuhhudwkyrp763k4dd9xspktekl0tg5v0j76yph8ssyrfdpm', // anisyia
|
||||||
@ -151,6 +155,7 @@ export const adultNPubs = [
|
|||||||
'npub1qg550au9hqmpgye4kfrtj7yt85dn60ty5hk0hcm7pktq6g6mzugsufnfcx', // Poppy Clements
|
'npub1qg550au9hqmpgye4kfrtj7yt85dn60ty5hk0hcm7pktq6g6mzugsufnfcx', // Poppy Clements
|
||||||
'npub1qnpzqvzjxy79wpuvylw65gkh8n7pk62up9nc63a45a23mv0sf6us62qk5n', // 🔞▶️Play & ⏸️Pause 🔞
|
'npub1qnpzqvzjxy79wpuvylw65gkh8n7pk62up9nc63a45a23mv0sf6us62qk5n', // 🔞▶️Play & ⏸️Pause 🔞
|
||||||
'npub1rv08kght99a7xwckm0qpmzw09m5gwppequgqd8lwu74eakgaavwsp5cjtw', // CuratedNSFW
|
'npub1rv08kght99a7xwckm0qpmzw09m5gwppequgqd8lwu74eakgaavwsp5cjtw', // CuratedNSFW
|
||||||
|
'npub1sg7rwnf96a0fhl85xlvq0unumqqh89qaygwcdy5d3ue8209ekt2suhxg7u', // Anime Mommies Bot
|
||||||
'npub1skvfwq29xn92k08mu2584kx5x6ymz62askpnzjp9d3s8us68pemsmt78a4', // pornstarxyz
|
'npub1skvfwq29xn92k08mu2584kx5x6ymz62askpnzjp9d3s8us68pemsmt78a4', // pornstarxyz
|
||||||
'npub1suddec4n2jv50pgn9eea35r4k83ahr4mcj0zv2uec36w6jeuwagq82xjgl', // quiet.enjoyer
|
'npub1suddec4n2jv50pgn9eea35r4k83ahr4mcj0zv2uec36w6jeuwagq82xjgl', // quiet.enjoyer
|
||||||
'npub1t252vm7u5qmfwv3k70g6rl2ue7ctvtvrnd60vy8jh5suglv8pw2snyyzfq', // 20th Century Foxes (NSFW)
|
'npub1t252vm7u5qmfwv3k70g6rl2ue7ctvtvrnd60vy8jh5suglv8pw2snyyzfq', // 20th Century Foxes (NSFW)
|
||||||
@ -163,10 +168,6 @@ export const adultNPubs = [
|
|||||||
'npub1y77j6jm5hw34xl5m85aumltv88arh2s7q383allkpfe4muarzc5qzfgru0', // sexy-models
|
'npub1y77j6jm5hw34xl5m85aumltv88arh2s7q383allkpfe4muarzc5qzfgru0', // sexy-models
|
||||||
'npub1ylrnf0xfp9wsmqthxlqjqyqj9yy27pnchjwjq93v3mq66ts7ftjs6x7dcq', // Welcome To The Jungle
|
'npub1ylrnf0xfp9wsmqthxlqjqyqj9yy27pnchjwjq93v3mq66ts7ftjs6x7dcq', // Welcome To The Jungle
|
||||||
'npub1z0xv9t5w6evrcg860kmgqq5tfj55mz84ta40uszjnfp9uhw2clkq63yrak', // ???
|
'npub1z0xv9t5w6evrcg860kmgqq5tfj55mz84ta40uszjnfp9uhw2clkq63yrak', // ???
|
||||||
'npub1sg7rwnf96a0fhl85xlvq0unumqqh89qaygwcdy5d3ue8209ekt2suhxg7u', // Anime Mommies Bot
|
|
||||||
'npub1kq67ngznkldmecycjfmjt4deuvyxgpn4zcpq8cvfmdl2hufzzccs6nc9q8', // Sargas
|
|
||||||
'npub10y6rhnutt52wwt5f7544tq4as6jt03aq7j8mle7wcymjjudanm4q4hvzaw', // NSFW
|
|
||||||
'npub17693mv2qu7mv67zqpcup9n502gmkuhytkxq3sw7qp50vlptq8f7syzv93d', // sha0wgoone
|
|
||||||
|
|
||||||
'npub1t07mr7m65lg3ecr5eapu6qe4ayt2wgjpqjs8x58m5kx2r2cutsyqyzzzs9', // NOT NSFW but spammy ai pictures
|
'npub1t07mr7m65lg3ecr5eapu6qe4ayt2wgjpqjs8x58m5kx2r2cutsyqyzzzs9', // NOT NSFW but spammy ai pictures
|
||||||
'npub1curnt7jtq8mhl9fcswnwvuvc9ccm6lvsdv4kzydx75v92kldrvdqh7sq09', // NOT NSFW but spammy ai pictures
|
'npub1curnt7jtq8mhl9fcswnwvuvc9ccm6lvsdv4kzydx75v92kldrvdqh7sq09', // NOT NSFW but spammy ai pictures
|
||||||
|
@ -22,7 +22,7 @@ export type NostrImage = {
|
|||||||
|
|
||||||
export const buildFilter = (tags: string[], npubs: string[], withReposts = false) => {
|
export const buildFilter = (tags: string[], npubs: string[], withReposts = false) => {
|
||||||
const filter: NDKFilter = {
|
const filter: NDKFilter = {
|
||||||
kinds: [1, 1063] as Kind[],
|
kinds: [1, 1063] as number[],
|
||||||
};
|
};
|
||||||
|
|
||||||
if (withReposts) {
|
if (withReposts) {
|
||||||
|
Loading…
Reference in New Issue
Block a user