From a057bc1a73f853bebf1a23cc99885c527e739b03 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 28 Feb 2026 08:10:15 +0000 Subject: [PATCH 1/2] Enable swipe actions on climb list items in proposal feed Remove the disableSwipe prop from ClimbListItem in ProposalCard so users can swipe right to favorite and swipe left to add to queue directly from the proposals feed. https://claude.ai/code/session_01NmGGnHDYGNjvZ1VLSnz5Bz --- packages/web/app/components/social/proposal-card.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/web/app/components/social/proposal-card.tsx b/packages/web/app/components/social/proposal-card.tsx index 0877258b..5f6b938d 100644 --- a/packages/web/app/components/social/proposal-card.tsx +++ b/packages/web/app/components/social/proposal-card.tsx @@ -195,7 +195,6 @@ export default function ProposalCard({ proposal, isAdminOrLeader, onUpdate, onDe )} From 4f14eeb8232c722ab99ec608922c18143865db98 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 28 Feb 2026 08:17:09 +0000 Subject: [PATCH 2/2] feat: enable double-tap to set active climb in proposal feed Wire up the onSelect handler on ClimbListItem in ProposalCard so that double-tapping a climb preview sets it as the active climb via the queue context's setCurrentClimb. Uses useOptionalQueueContext so it gracefully does nothing when outside a queue provider. https://claude.ai/code/session_01NmGGnHDYGNjvZ1VLSnz5Bz --- packages/web/app/components/social/proposal-card.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/web/app/components/social/proposal-card.tsx b/packages/web/app/components/social/proposal-card.tsx index 5f6b938d..f3e7c732 100644 --- a/packages/web/app/components/social/proposal-card.tsx +++ b/packages/web/app/components/social/proposal-card.tsx @@ -33,6 +33,7 @@ import { VOTE_ON_PROPOSAL, RESOLVE_PROPOSAL, DELETE_PROPOSAL } from '@/app/lib/g import type { Proposal } from '@boardsesh/shared-schema'; import type { Climb, BoardDetails, BoardName } from '@/app/lib/types'; import ClimbListItem from '@/app/components/climb-card/climb-list-item'; +import { useOptionalQueueContext } from '@/app/components/graphql-queue'; import { convertLitUpHoldsStringToMap } from '@/app/components/board-renderer/util'; import { getBoardDetailsForBoard } from '@/app/lib/board-utils'; import { getDefaultBoardConfig } from '@/app/lib/default-board-configs'; @@ -61,6 +62,7 @@ interface ProposalCardProps { export default function ProposalCard({ proposal, isAdminOrLeader, onUpdate, onDelete, highlight }: ProposalCardProps) { const { token } = useWsAuthToken(); + const queueContext = useOptionalQueueContext(); const [loading, setLoading] = useState(false); const [snackbar, setSnackbar] = useState(''); const [localProposal, setLocalProposal] = useState(proposal); @@ -174,6 +176,12 @@ export default function ProposalCard({ proposal, isAdminOrLeader, onUpdate, onDe return { climb, boardDetails }; }, [localProposal]); + const handleSetActive = useCallback(() => { + if (climbAndBoardDetails && queueContext) { + queueContext.setCurrentClimb(climbAndBoardDetails.climb); + } + }, [climbAndBoardDetails, queueContext]); + const typeColor = TYPE_COLORS[localProposal.type] || themeTokens.neutral[500]; return ( @@ -195,6 +203,7 @@ export default function ProposalCard({ proposal, isAdminOrLeader, onUpdate, onDe )}