Skip to content

Commit

Permalink
more accurate preventKeyDownEvent
Browse files Browse the repository at this point in the history
  • Loading branch information
sspenst committed Oct 4, 2023
1 parent aaa12ac commit 5bf2373
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 24 deletions.
24 changes: 16 additions & 8 deletions components/level/gameLayout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,6 @@ export default function GameLayout({ controls, disableCheckpoints, gameState, hi
setShowHeader(!fullScreen);
}, [fullScreen, setShowHeader]);

useEffect(() => {
setPreventKeyDownEvent(isCheckpointOpen || isLevelInfoOpen);
}, [isCheckpointOpen, isLevelInfoOpen, setPreventKeyDownEvent]);

return (
<div className='flex flex-row h-full w-full' id='game-layout' style={{
backgroundColor: 'var(--bg-color)',
Expand All @@ -58,7 +54,10 @@ export default function GameLayout({ controls, disableCheckpoints, gameState, hi
<div className='flex items-center justify-center py-1 px-2 gap-1 block xl:hidden'>
<button
className='flex gap-2 items-center truncate'
onClick={() => setIsLevelInfoOpen(true)}
onClick={() => {
setIsLevelInfoOpen(true);
setPreventKeyDownEvent(true);
}}
style={{
color: level.userMoves ? (level.userMoves === level.leastMoves ? 'var(--color-complete)' : 'var(--color-incomplete)') : 'var(--color)',
}}
Expand All @@ -82,7 +81,10 @@ export default function GameLayout({ controls, disableCheckpoints, gameState, hi
</div>
</div>
<LevelInfoModal
closeModal={() => setIsLevelInfoOpen(false)}
closeModal={() => {
setIsLevelInfoOpen(false);
setPreventKeyDownEvent(false);
}}
isOpen={isLevelInfoOpen}
level={level}
/>
Expand All @@ -104,15 +106,21 @@ export default function GameLayout({ controls, disableCheckpoints, gameState, hi
data-tooltip-content='Checkpoints'
data-tooltip-id='checkpoint-tooltip'
id='checkpointBtn'
onClick={() => setIsCheckpointOpen(!isCheckpointOpen)}
onClick={() => {
setIsCheckpointOpen(!isCheckpointOpen);
setPreventKeyDownEvent(true);
}}
>
<svg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' strokeWidth={1.5} stroke='currentColor' className='w-6 h-6'>
<path strokeLinecap='round' strokeLinejoin='round' d='M3 3v1.5M3 21v-6m0 0l2.77-.693a9 9 0 016.208.682l.108.054a9 9 0 006.086.71l3.114-.732a48.524 48.524 0 01-.005-10.499l-3.11.732a9 9 0 01-6.085-.711l-.108-.054a9 9 0 00-6.208-.682L3 4.5M3 15V4.5' />
</svg>
</button>
<StyledTooltip id='checkpoint-tooltip' />
<CheckpointsModal
closeModal={() => setIsCheckpointOpen(false)}
closeModal={() => {
setIsCheckpointOpen(false);
setPreventKeyDownEvent(true);
}}
isOpen={isCheckpointOpen}
/>
</>
Expand Down
16 changes: 9 additions & 7 deletions components/level/gameWrapper.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { PageContext } from '@root/contexts/pageContext';
import React, { useContext, useEffect, useState } from 'react';
import React, { useContext, useState } from 'react';
import Collection from '../../models/db/collection';
import { EnrichedLevel } from '../../models/db/level';
import User from '../../models/db/user';
Expand All @@ -19,10 +19,6 @@ export default function GameWrapper({ chapter, collection, level, onNext, onPrev
const [postGameModalOpen, setShowPostGameModalOpen] = useState(false);
const { setPreventKeyDownEvent } = useContext(PageContext);

useEffect(() => {
setPreventKeyDownEvent(postGameModalOpen);
}, [postGameModalOpen, setPreventKeyDownEvent]);

return (
<>
<Game
Expand All @@ -34,11 +30,17 @@ export default function GameWrapper({ chapter, collection, level, onNext, onPrev
level={level}
onNext={collection ? onNext : undefined}
onPrev={collection ? onPrev : undefined}
onSolve={() => setTimeout(() => setShowPostGameModalOpen(true), 200)}
onSolve={() => setTimeout(() => {
setShowPostGameModalOpen(true);
setPreventKeyDownEvent(true);
}, 200)}
/>
<PostGameModal
chapter={chapter}
closeModal={() => setShowPostGameModalOpen(false)}
closeModal={() => {
setShowPostGameModalOpen(false);
setPreventKeyDownEvent(false);
}}
collection={collection}
isOpen={postGameModalOpen}
level={level}
Expand Down
11 changes: 9 additions & 2 deletions components/level/reviews/formattedReview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,14 @@ export function Stars({ stars }: StarsProps) {

interface FormattedReviewProps {
hideBorder?: boolean;
inModal?: boolean;
level?: EnrichedLevel;
onEditClick?: () => void;
review: ReviewWithStats;
user: User | undefined;
}

export default function FormattedReview({ hideBorder, level, onEditClick, review, user }: FormattedReviewProps) {
export default function FormattedReview({ hideBorder, inModal, level, onEditClick, review, user }: FormattedReviewProps) {
return (
<div className='flex align-center justify-center text-left break-words'>
<div
Expand All @@ -88,7 +89,13 @@ export default function FormattedReview({ hideBorder, level, onEditClick, review
<FormattedUser id={level ? `review-${level._id.toString()}` : 'review'} user={user} />
<FormattedDate ts={review.ts} />
</div>
{onEditClick && user && <ReviewDropdown onEditClick={onEditClick} userId={user._id.toString()} />}
{onEditClick && user && (
<ReviewDropdown
inModal={inModal}
onEditClick={onEditClick}
userId={user._id.toString()}
/>
)}
</div>
{level && <FormattedLevelLink id={`review-${user?._id.toString() ?? 'deleted'}`} level={level} />}
</div>
Expand Down
21 changes: 14 additions & 7 deletions components/level/reviews/reviewDropdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@ import { LevelContext } from '@root/contexts/levelContext';
import { PageContext } from '@root/contexts/pageContext';
import isCurator from '@root/helpers/isCurator';
import classNames from 'classnames';
import React, { Fragment, useContext, useEffect, useState } from 'react';
import React, { Fragment, useContext, useState } from 'react';
import DeleteReviewModal from '../../modal/deleteReviewModal';

interface ReviewDropdownProps {
inModal?: boolean;
onEditClick: () => void;
userId: string;
}

export default function ReviewDropdown({ onEditClick, userId }: ReviewDropdownProps) {
export default function ReviewDropdown({ inModal, onEditClick, userId }: ReviewDropdownProps) {
const [isDeleteReviewOpen, setIsDeleteReviewOpen] = useState(false);
const levelContext = useContext(LevelContext);
const { setPreventKeyDownEvent } = useContext(PageContext);
Expand All @@ -21,10 +22,6 @@ export default function ReviewDropdown({ onEditClick, userId }: ReviewDropdownPr
const canEdit = userId === user?._id.toString() || isCurator(user);
const isNotAuthor = user?._id.toString() !== userId;

useEffect(() => {
setPreventKeyDownEvent(isDeleteReviewOpen);
}, [isDeleteReviewOpen, setPreventKeyDownEvent]);

if (!canEdit) {
return null;
}
Expand Down Expand Up @@ -71,7 +68,13 @@ export default function ReviewDropdown({ onEditClick, userId }: ReviewDropdownPr
{({ active }) => (
<div
className={classNames('flex w-full items-center rounded-md cursor-pointer px-3 py-2 gap-3', { 'text-red-500': isNotAuthor })}
onClick={() => setIsDeleteReviewOpen(true)}
onClick={() => {
setIsDeleteReviewOpen(true);

if (!inModal) {
setPreventKeyDownEvent(true);
}
}}
style={{
backgroundColor: active ? 'var(--bg-color-3)' : undefined,
}}
Expand All @@ -91,6 +94,10 @@ export default function ReviewDropdown({ onEditClick, userId }: ReviewDropdownPr
closeModal={() => {
setIsDeleteReviewOpen(false);
levelContext?.getReviews();

if (!inModal) {
setPreventKeyDownEvent(false);
}
}}
isOpen={isDeleteReviewOpen}
userId={userId}
Expand Down
1 change: 1 addition & 0 deletions components/level/reviews/reviewForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ export default function ReviewForm({ inModal, review }: ReviewFormProps) {
<>
<FormattedReview
hideBorder={true}
inModal={inModal}
key={'user-formatted-review'}
onEditClick={() => setIsEditing(true)}
review={review}
Expand Down

0 comments on commit 5bf2373

Please sign in to comment.