import { useState, useEffect, MouseEvent } from "react"; import FavoredMessage from "../../common/component/Message/FavoredMessage"; import dayjs from "dayjs"; import IconAudio from "../../assets/icons/file.audio.svg"; import IconVideo from "../../assets/icons/file.video.svg"; import IconUnknown from "../../assets/icons/file.unknown.svg"; import IconImage from "../../assets/icons/file.image.svg"; import IconChannel from "../../assets/icons/channel.svg"; import IconRemove from "../../assets/icons/close.svg"; import { ContentTypes } from "../../app/config"; import { useAppSelector } from "../../app/store"; import { Favorite } from "../../app/slices/favorites"; import { useTranslation } from "react-i18next"; import clsx from "clsx"; import useFavMessage from "../../common/hook/useFavMessage"; type filter = "audio" | "video" | "image" | ""; function FavsPage() { const { t } = useTranslation("fav"); const [filter, setFilter] = useState(""); const [favs, setFavs] = useState([]); const { removeFavorite } = useFavMessage({}); const Filters = [ { icon: , title: t("all_items"), filter: "" }, { icon: , title: t("image"), filter: "image" }, { icon: , title: t("video"), filter: "video" }, { icon: , title: t("audio"), filter: "audio" } ]; const { favorites, channelData, userData } = useAppSelector((store) => { return { favorites: store.favorites, userData: store.users.byId, channelData: store.channels.byId }; }); const handleFilter = (ftr: filter) => { setFilter(ftr); }; useEffect(() => { if (!filter) { setFavs(favorites); } else { switch (filter) { case "audio": { setFavs( favorites.filter((f) => { const msgs = f.messages || []; return msgs.every((m) => { const file_type = m.properties?.content_type; return m.content_type == ContentTypes.file && file_type.startsWith("audio"); }); }) ); } break; case "video": { setFavs( favorites.filter((f) => { const msgs = f.messages || []; return msgs.every((m) => { const file_type = m.properties?.content_type; return m.content_type == ContentTypes.file && file_type.startsWith("video"); }); }) ); } break; // case "file": // { // const tmps = favorites.filter((f) => { // const msgs = f.messages || []; // return msgs.every((m) => { // return m.content_type == ContentTypes.file; // }); // }); // setFavs(tmps); // } // break; case "image": { const tmps = favorites.filter((f) => { const msgs = f.messages || []; return msgs.every((m) => { const file_type = m.properties?.content_type; return m.content_type == ContentTypes.file && file_type.startsWith("image"); }); }); setFavs(tmps); } break; default: break; } } }, [filter, favorites]); const handleRemove = (evt: MouseEvent) => { const { id = "" } = evt.currentTarget.dataset; // console.log("remove fav", id); removeFavorite(id); }; return (
    {Filters.map(({ icon, title, filter: f }) => { return (
  • {icon} {title}
  • ); })}
{favs.map(({ id, created_at, messages }) => { if (!messages || messages.length == 0) return null; const [ { source: { gid, uid } } ] = messages; const tip = {gid ? <> {channelData[gid]?.name} : <> From {userData[uid]?.name} } ; return (

{tip} {dayjs(created_at).format("YYYY-MM-DD")}

); })}
); } export default FavsPage;