Skip to content

Commit

Permalink
Improve keyboard interactions on ordered timeline
Browse files Browse the repository at this point in the history
  • Loading branch information
jayvarner committed Nov 5, 2024
1 parent ebec0af commit 9569425
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 13 deletions.
50 changes: 38 additions & 12 deletions app/components/home/OrderedTimeline.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,25 +76,52 @@ export default function OrderedTimeline({
setCurrentImageIndex(sortedImages.indexOf(image));
};

const keyUp = (event: KeyboardEvent) => {
const { key } = event;
const toStart = () => {
setSelectedImage(sortedImages[0])
setCurrentImageIndex(0);
}

const toEnd = () => {
setSelectedImage(sortedImages[sortedImages.length - 1])
setCurrentImageIndex(sortedImages.length - 1);
}

const moveRight = () => {
setSelectedImage(sortedImages[currentImageIndex + 1])
setCurrentImageIndex(currentImageIndex + 1);
}

const moveLeft = () => {
setSelectedImage(sortedImages[currentImageIndex - 1])
setCurrentImageIndex(currentImageIndex - 1);
}

const keyUp = (event: KeyboardEvent, image: TFigure) => {
event.preventDefault();
const { key, shiftKey } = event;
switch (key) {
case "ArrowRight":
if (currentImageIndex < imageData.length - 1) {
setCurrentImageIndex(currentImageIndex + 1);
moveRight()
} else {
setCurrentImageIndex(0);
toStart()
}
break;
case "ArrowLeft":
if (currentImageIndex > 0) {
setCurrentImageIndex(currentImageIndex - 1);
moveLeft()
} else {
toEnd()
}
break;
case "Tab":
if (shiftKey) {
moveLeft()
} else {
setCurrentImageIndex(imageData.length - 1);
moveRight()
}
break;
}
event.preventDefault();
};

return (
Expand All @@ -105,10 +132,9 @@ export default function OrderedTimeline({
onMouseDown={({ pageX }) => mouseDown(pageX)}
onMouseUp={() => setMouseIsDown(false)}
onMouseMove={(event) => mouseMove(event)}
onKeyDown={keyUp}
tabIndex={0}
// TODO: Rethink after homepage design changes
// onFocus={() => sliderRef.current.scrollIntoView({ block: "end" })}
onKeyDown={(event) => event.preventDefault()}
onKeyUp={(event) => event.preventDefault()}
>
{Object.entries(imagesByYear).map(([year, images]) => (
<div key={year} style={{ minWidth: `${images.length * 10 + 150}px` }}>
Expand All @@ -123,8 +149,8 @@ export default function OrderedTimeline({
key={`otl-${image.fileName}`}
tabIndex={0}
onClick={() => updateSelected(image)}
onFocus={() => setSelectedImage(image)}
onKeyUp={() => setSelectedImage(image)}
onFocus={() => setSelectedImage(sortedImages[currentImageIndex])}
onKeyUp={(event) => keyUp(event, image)}
>
<picture>
<source srcSet={`https://iiif.ecds.io/iiif/3/dxd/${image.chapter}/${image.fileName}.tiff/full/150,/0/default.webp`} type="image/webp" />
Expand Down
1 change: 0 additions & 1 deletion app/components/home/timelineUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ export enum TimelineType {
}

const filterFigures = (figures: TFilteredFigures) => {
console.log("🚀 ~ filterFigures ~ figures:", figures);
return figures[1].frontPage && figures[1].width;
};

Expand Down

0 comments on commit 9569425

Please sign in to comment.