mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
add offline indicator in popular boards section
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 859 B |
Binary file not shown.
|
After Width: | Height: | Size: 2.1 KiB |
@@ -0,0 +1,30 @@
|
|||||||
|
import React, { useEffect, useState } from "react";
|
||||||
|
import { useSubplebbit } from "@plebbit/plebbit-react-hooks";
|
||||||
|
|
||||||
|
const BoardAvatar = ({ address }) => {
|
||||||
|
const [avatarUrl, setAvatarUrl] = useState("assets/plebchan.png");
|
||||||
|
const subplebbit = useSubplebbit({ subplebbitAddress: address });
|
||||||
|
|
||||||
|
const isOnline = subplebbit.updatedAt > Date.now() / 1000 - 60 * 20;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (subplebbit.suggested?.avatarUrl) {
|
||||||
|
setAvatarUrl(subplebbit.suggested.avatarUrl);
|
||||||
|
}
|
||||||
|
}, [subplebbit.suggested?.avatarUrl, subplebbit]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="board-avatar-container">
|
||||||
|
<img
|
||||||
|
className={isOnline ? "board-avatar" : "board-avatar offline"}
|
||||||
|
alt="board logo"
|
||||||
|
src={avatarUrl}
|
||||||
|
/>
|
||||||
|
{!isOnline && (
|
||||||
|
<img className="offline-indicator" alt="offline" src="assets/offline.png" />
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default BoardAvatar;
|
||||||
@@ -230,14 +230,29 @@ export const BoardsContent = styled.div`
|
|||||||
border: 1px solid #800;
|
border: 1px solid #800;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.board-avatar-container img {
|
|
||||||
|
.board-avatar-container img.board-avatar {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.board-avatar-container img.offline {
|
||||||
|
filter: brightness(50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.offline-indicator {
|
||||||
|
position: absolute;
|
||||||
|
top: calc(50% - 10px);
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
.board-text {
|
.board-text {
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
padding: 0 2px;
|
padding: 0 2px;
|
||||||
|
|||||||
@@ -4,24 +4,11 @@ import { useAccount, useSubplebbit } from '@plebbit/plebbit-react-hooks';
|
|||||||
import useGeneralStore from '../../hooks/stores/useGeneralStore';
|
import useGeneralStore from '../../hooks/stores/useGeneralStore';
|
||||||
import { Link, useNavigate } from 'react-router-dom';
|
import { Link, useNavigate } from 'react-router-dom';
|
||||||
import { Container, Header, Logo, Page, Search, About, AboutTitle, AboutContent, Boards, BoardsTitle, BoardsContent, Footer } from '../styled/Home.styled';
|
import { Container, Header, Logo, Page, Search, About, AboutTitle, AboutContent, Boards, BoardsTitle, BoardsContent, Footer } from '../styled/Home.styled';
|
||||||
|
import BoardAvatar from '../BoardAvatar';
|
||||||
import packageJson from '../../../package.json'
|
import packageJson from '../../../package.json'
|
||||||
const {version} = packageJson
|
const {version} = packageJson
|
||||||
|
|
||||||
|
|
||||||
const BoardAvatar = ({ address }) => {
|
|
||||||
const [avatarUrl, setAvatarUrl] = useState('assets/plebchan.png');
|
|
||||||
const subplebbit = useSubplebbit({ subplebbitAddress: address });
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
if (subplebbit.suggested?.avatarUrl) {
|
|
||||||
setAvatarUrl(subplebbit.suggested.avatarUrl);
|
|
||||||
}
|
|
||||||
}, [subplebbit.suggested?.avatarUrl, subplebbit]);
|
|
||||||
|
|
||||||
return <img alt="board logo" src={avatarUrl} />;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
const Home = () => {
|
const Home = () => {
|
||||||
const {
|
const {
|
||||||
setBodyStyle,
|
setBodyStyle,
|
||||||
|
|||||||
Reference in New Issue
Block a user