feat(mod queue): transfer posts across boards (#1182)

* feat(mod queue): transfer posts across boards

* fix(mod queue): polish transfer modal and reason

* fix(mod queue): recover abandoned transfer challenges

* fix(mod queue): address transfer review feedback

* fix(mod queue): hide transfer for unavailable posts

* fix(mod queue): prevent repeat transfer submit

* fix(mod queue): sync transfer state with queue actions

* fix(mod queue): omit transfer temp index

* fix(mod queue): harden transfer failure states

* fix(mod queue): keep hidden transfer lock

* fix(mod queue): release hidden transfer lock
This commit is contained in:
Tommaso Casaburi
2026-07-02 14:52:06 +07:00
committed by GitHub
parent 546ee99f12
commit b4a6f0a65a
55 changed files with 2688 additions and 154 deletions
@@ -30,6 +30,7 @@ import FailedPublishNotice from '../failed-publish-notice';
import LoadingEllipsis from '../loading-ellipsis/loading-ellipsis';
import PostAuthorFlags from '../post-author-flags';
import PostFlashTag from '../post-flash-tag';
import PostTransferredTag from '../post-transferred-tag';
import PostMenuMobile from './post-menu-mobile/post-menu-mobile';
import ReplyQuotePreview from '../reply-quote-preview/reply-quote-preview';
import Tooltip from '../tooltip/tooltip';
@@ -282,6 +283,7 @@ const PostInfoAndMedia = ({
</>
)}
<PostAuthorFlags author={author} comment={resolvedPost} enabled={showAuthorFlags} />
<PostTransferredTag comment={resolvedPost} />
<PostFlashTag comment={resolvedPost} directory={directoryEntry} />
{pinned && (
<span className={styles.stickyIconWrapper}>
@@ -535,6 +537,7 @@ const PostMobile = ({
isPublishing,
onApprove,
onReject,
onTransfer,
onRemoveFromModQueue,
}: PostProps) => {
const { t } = useTranslation();
@@ -857,6 +860,11 @@ const PostMobile = ({
<button type='button' className={`button ${styles.rejectButton}`} onClick={onReject} disabled={isPublishing}>
{t('reject')}
</button>
{onTransfer && (
<button type='button' className='button' onClick={onTransfer} disabled={isPublishing}>
{t('transfer')}
</button>
)}
</>
)}
</div>