import { useContext, useEffect } from "react"; import appContext from "../stores/appContext"; import useToggle from "../hooks/useToggle"; import useLoading from "../hooks/useLoading"; import Only from "./common/OnlyWhen"; import utils from "../helpers/utils"; import toastHelper from "./Toast"; import { locationService, queryService } from "../services"; import showCreateQueryDialog from "./CreateQueryDialog"; import "../less/query-list.less"; interface Props {} const QueryList: React.FC = () => { const { queryState: { queries }, locationState: { query: { filter }, }, } = useContext(appContext); const loadingState = useLoading(); const sortedQueries = queries .sort((a, b) => utils.getTimeStampByDate(b.createdAt) - utils.getTimeStampByDate(a.createdAt)) .sort((a, b) => utils.getTimeStampByDate(b.pinnedAt ?? 0) - utils.getTimeStampByDate(a.pinnedAt ?? 0)); useEffect(() => { queryService .getMyAllQueries() .catch(() => { // do nth }) .finally(() => { loadingState.setFinish(); }); }, []); return (

快速检索 showCreateQueryDialog()}> +

showCreateQueryDialog()}> 创建检索
{sortedQueries.map((q) => { return ; })}
); }; interface QueryItemContainerProps { query: Model.Query; isActive: boolean; } const QueryItemContainer: React.FC = (props: QueryItemContainerProps) => { const { query, isActive } = props; const [showActionBtns, toggleShowActionBtns] = useToggle(false); const [showConfirmDeleteBtn, toggleConfirmDeleteBtn] = useToggle(false); const handleQueryClick = () => { if (isActive) { locationService.setMemoFilter(""); } else { if (!["/", "/recycle"].includes(locationService.getState().pathname)) { locationService.setPathname("/"); } locationService.setMemoFilter(query.id); } }; const handleShowActionBtnClick = (event: React.MouseEvent) => { event.stopPropagation(); toggleShowActionBtns(); }; const handleActionBtnContainerMouseLeave = () => { toggleShowActionBtns(false); }; const handleDeleteMemoClick = async (event: React.MouseEvent) => { event.stopPropagation(); if (showConfirmDeleteBtn) { try { await queryService.deleteQuery(query.id); } catch (error: any) { toastHelper.error(error.message); } } else { toggleConfirmDeleteBtn(); } }; const handleEditQueryBtnClick = (event: React.MouseEvent) => { event.stopPropagation(); showCreateQueryDialog(query.id); }; const handlePinQueryBtnClick = async (event: React.MouseEvent) => { event.stopPropagation(); try { if (query.pinnedAt) { await queryService.unpinQuery(query.id); queryService.editQuery({ ...query, pinnedAt: "", }); } else { await queryService.pinQuery(query.id); queryService.editQuery({ ...query, pinnedAt: utils.getDateTimeString(Date.now()), }); } } catch (error) { // do nth } }; const handleDeleteBtnMouseLeave = () => { toggleConfirmDeleteBtn(false); }; return ( <>
# {query.title}
{query.pinnedAt ? "取消置顶" : "置顶"} 编辑 {showConfirmDeleteBtn ? "确定删除!" : "删除"}
); }; export default QueryList;