diff --git a/public/assets/disconnected.png b/public/assets/disconnected.png new file mode 100644 index 00000000..a40aa2bb Binary files /dev/null and b/public/assets/disconnected.png differ diff --git a/public/assets/offline.png b/public/assets/offline.png new file mode 100644 index 00000000..f1ed1dde Binary files /dev/null and b/public/assets/offline.png differ diff --git a/src/components/BoardAvatar.jsx b/src/components/BoardAvatar.jsx new file mode 100644 index 00000000..deace73b --- /dev/null +++ b/src/components/BoardAvatar.jsx @@ -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 ( +
+ board logo + {!isOnline && ( + offline + )} +
+ ); +}; + +export default BoardAvatar; \ No newline at end of file diff --git a/src/components/styled/Home.styled.jsx b/src/components/styled/Home.styled.jsx index 74d9e66f..6546bb6d 100644 --- a/src/components/styled/Home.styled.jsx +++ b/src/components/styled/Home.styled.jsx @@ -230,14 +230,29 @@ export const BoardsContent = styled.div` border: 1px solid #800; display: inline-block; overflow: hidden; + position: relative; } - .board-avatar-container img { + + .board-avatar-container img.board-avatar { width: 100%; height: 100%; 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 { margin-bottom: 5px; padding: 0 2px; diff --git a/src/components/views/Home.jsx b/src/components/views/Home.jsx index 92aa598f..fbd1c312 100644 --- a/src/components/views/Home.jsx +++ b/src/components/views/Home.jsx @@ -4,24 +4,11 @@ import { useAccount, useSubplebbit } from '@plebbit/plebbit-react-hooks'; import useGeneralStore from '../../hooks/stores/useGeneralStore'; 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 BoardAvatar from '../BoardAvatar'; import packageJson from '../../../package.json' 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 board logo; -}; - - const Home = () => { const { setBodyStyle,