Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,22 @@ const HidePopup = dynamicPopup(() =>
import("next-common/components/deletePopup/hidePopup"),
);

export default function PostHideMenu({ setShow = noop }) {
export default function PostHideMenu({
setShow = noop,
apiPath,
redirectPath = "/discussions",
itemName = "Post",
}) {
const [showHidePopup, setShowHidePopup] = useState(false);
const post = usePost();
const dispatch = useDispatch();
const router = useRouter();

const hidden = !!post.hide;
const hideApi = apiPath || `posts/${post._id}/hide`;

const doHide = useCallback(async () => {
const { error } = await nextApi.patch(`posts/${post._id}/hide`, {
const { error } = await nextApi.patch(hideApi, {
hide: !hidden,
});
if (error) {
Expand All @@ -32,11 +38,11 @@ export default function PostHideMenu({ setShow = noop }) {
setShowHidePopup(false);

if (!hidden) {
router.replace("/discussions");
router.replace(redirectPath);
} else {
router.replace(router.asPath);
}
}, [dispatch, hidden, post._id, router]);
}, [dispatch, hidden, hideApi, redirectPath, router]);

return (
<div>
Expand All @@ -48,7 +54,12 @@ export default function PostHideMenu({ setShow = noop }) {
}}
/>
{showHidePopup && (
<HidePopup hidden={hidden} setShow={setShowHidePopup} doHide={doHide} />
<HidePopup
hidden={hidden}
setShow={setShowHidePopup}
doHide={doHide}
itemName={itemName}
/>
)}
</div>
);
Expand Down
18 changes: 17 additions & 1 deletion packages/next-common/components/articleMoreMenu/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,19 @@ import {
EditMenuItem,
ReportMenu,
LinkOrUnlinkMenu,
PostHideMenu,
} from "next-common/components/articleMoreMenu/common";
import useIsAdmin from "next-common/hooks/useIsAdmin";
import { usePost } from "next-common/context/post";

export default function ArticleMoreMenu(props) {
const postType = useDetailType();
if (postType === detailPageCategory.GOV2_REFERENDUM) {
return <ReferendaArticleMoreMenu {...props} />;
}
if (postType === detailPageCategory.DEMOCRACY_REFERENDUM) {
return <CommonArticleMoreMenu {...props} postType={postType} />;
}
if (postType === detailPageCategory.POST) {
return <DiscussionArticleMoreMenu {...props} />;
}
Expand All @@ -31,8 +37,10 @@ export default function ArticleMoreMenu(props) {
return <CommonArticleMoreMenu {...props} />;
}

function CommonArticleMoreMenu({ isAuthor, editable, setIsEdit }) {
function CommonArticleMoreMenu({ isAuthor, editable, setIsEdit, postType }) {
const [show, setShow] = useState(false);
const post = usePost();
const isAdmin = useIsAdmin();
const ref = useRef();
useClickAway(ref, () => setShow(false));

Expand All @@ -52,6 +60,14 @@ function CommonArticleMoreMenu({ isAuthor, editable, setIsEdit }) {
/>
)}
{editable && isAuthor && <LinkOrUnlinkMenu setShow={setShow} />}
{isAdmin && postType === detailPageCategory.DEMOCRACY_REFERENDUM && (
<PostHideMenu
setShow={setShow}
apiPath={`democracy/referendums/${post?._id}/hide`}
redirectPath="/democracy/referenda"
itemName="Referendum"
/>
)}
<ReportMenu setShow={setShow} />
</OptionWrapper>
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,10 @@ import {
CancelReferendumMenu,
KillReferendumMenu,
AppendReferendaMenu,
PostHideMenu,
} from "./common";
import useIsAdmin from "next-common/hooks/useIsAdmin";
import { usePost } from "next-common/context/post";

export default function ReferendaArticleMoreMenu({
isAuthor,
Expand All @@ -22,6 +25,8 @@ export default function ReferendaArticleMoreMenu({
}) {
const ref = useRef();
const [show, setShow] = useState(false);
const post = usePost();
const isAdmin = useIsAdmin();
const { appendants } = useReferendaAppendantsContext();
const { newProposalQuickStart: { cancelReferendum, killReferendum } = {} } =
useChainSettings();
Expand All @@ -48,6 +53,14 @@ export default function ReferendaArticleMoreMenu({
{editable && isAuthor && !appendants?.length && (
<LinkOrUnlinkMenu setShow={setShow} />
)}
{isAdmin && (
<PostHideMenu
setShow={setShow}
apiPath={`gov2/referendums/${post?._id}/hide`}
redirectPath="/referenda"
itemName="Referendum"
/>
)}
<ReportMenu setShow={setShow} />
{cancelReferendum && <CancelReferendumMenu setShow={setShow} />}
{killReferendum && <KillReferendumMenu setShow={setShow} />}
Expand Down
7 changes: 4 additions & 3 deletions packages/next-common/components/deletePopup/hidePopup.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export default function HidePopup({
hidden = false,
setShow = noop,
doHide = noop,
itemName = "Post",
}) {
const [isLoading, setIsLoading] = useState(false);
const { ensureLogin } = useEnsureLogin();
Expand All @@ -29,13 +30,13 @@ export default function HidePopup({

return (
<Popup
title={hidden ? "Unhide Post" : "Hide Post"}
title={`${hidden ? "Unhide" : "Hide"} ${itemName}`}
onClose={() => setShow(false)}
>
<div className="text-[14px] text-textPrimary">
{hidden
? "This post will be visible to everyone again."
: "This post will be hidden from the list."}
? `This ${itemName.toLowerCase()} will be visible to everyone again.`
: `This ${itemName.toLowerCase()} will be hidden from the list.`}
</div>
<PopupButtonWrapper className="gap-[8px]">
<SecondaryButton onClick={() => setShow(false)}>Cancel</SecondaryButton>
Expand Down
26 changes: 25 additions & 1 deletion packages/next-common/sima/components/contentMenu.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,25 @@ export function PostContextMenu({ isAuthor, canEdit, setIsAppend, setIsEdit }) {
const post = usePost();
const type = useDetailType();
const isSimaDiscussion = type === detailPageCategory.POST;
const isGov2Referendum = type === detailPageCategory.GOV2_REFERENDUM;
const isDemocracyReferendum =
type === detailPageCategory.DEMOCRACY_REFERENDUM;
const isReferendum = isGov2Referendum || isDemocracyReferendum;
const isAdmin = useIsAdmin();

const canHide = isReferendum ? isAdmin : isAuthor || isAdmin;
let hideApi = null;
if (isGov2Referendum) {
hideApi = `gov2/referendums/${post?._id}/hide`;
} else if (isDemocracyReferendum) {
hideApi = `democracy/referendums/${post?._id}/hide`;
}
const redirectPath = isGov2Referendum
? "/referenda"
: isDemocracyReferendum
? "/democracy/referenda"
: "/discussions";

useClickAway(ref, () => setShow(false));

let linkOrUnlinkMenuItem = (
Expand Down Expand Up @@ -159,7 +176,14 @@ export function PostContextMenu({ isAuthor, canEdit, setIsAppend, setIsEdit }) {
)}
</>
)}
{(isAuthor || isAdmin) && <PostHideMenu setShow={setShow} />}
{canHide && (
<PostHideMenu
setShow={setShow}
apiPath={hideApi}
redirectPath={redirectPath}
itemName={isReferendum ? "Referendum" : "Post"}
/>
)}
</OptionWrapper>
</Wrapper>
{showLinkPopup && <PostLinkPopup setShow={setShowLinkPopup} />}
Expand Down
Loading