From d8f20347eb8d3b8e524eda41cc9e12a22d318824 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Thu, 6 Aug 2026 04:04:30 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20=EC=95=84?= =?UTF-8?q?=EC=9D=B4=EC=BD=98=20=EB=B2=84=ED=8A=BC=20=ED=88=B4=ED=8C=81=20?= =?UTF-8?q?=EB=B0=8F=20=EC=A0=91=EA=B7=BC=EC=84=B1=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/features/score/ScoreView.test.tsx | 9 +++++-- apps/desktop/src/features/score/ScoreView.tsx | 11 ++++++-- .../src/features/score/ScoreViewer.test.tsx | 18 +++++++++---- .../src/features/score/ScoreViewer.tsx | 25 ++++++++++++++++--- 4 files changed, 50 insertions(+), 13 deletions(-) diff --git a/apps/desktop/src/features/score/ScoreView.test.tsx b/apps/desktop/src/features/score/ScoreView.test.tsx index de4ccb95..8f17f4d4 100644 --- a/apps/desktop/src/features/score/ScoreView.test.tsx +++ b/apps/desktop/src/features/score/ScoreView.test.tsx @@ -1,4 +1,4 @@ -import { act, fireEvent, render, screen, waitFor } from "@testing-library/react"; +import { act, createEvent, fireEvent, render, screen, waitFor } from "@testing-library/react"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { RehearsalSong, ScoreAttachment } from "@bandscope/shared-types"; import { invoke } from "@tauri-apps/api/core"; @@ -97,7 +97,12 @@ describe("ScoreView", () => { expect(screen.getByText("Scores attach to the active analysis project.")).toBeInTheDocument(); expect(screen.getByRole("button", { name: "Add score" })).toBeDisabled(); expect(screen.getByRole("button", { name: "Open score: opener.pdf" })).toBeDisabled(); - expect(screen.getByRole("button", { name: "Remove: opener.pdf" })).toBeDisabled(); + expect(screen.getByRole("button", { name: "Remove: opener.pdf" })).toHaveAttribute("aria-disabled", "true"); + + const removeBtn = screen.getByRole("button", { name: "Remove: opener.pdf" }); + const removeEvent = createEvent.click(removeBtn); + fireEvent(removeBtn, removeEvent); + expect(removeEvent.defaultPrevented).toBe(true); fireEvent.click(screen.getByRole("button", { name: "Open score: opener.pdf" })); expect(mockInvoke).not.toHaveBeenCalled(); diff --git a/apps/desktop/src/features/score/ScoreView.tsx b/apps/desktop/src/features/score/ScoreView.tsx index 72732450..d0205bdf 100644 --- a/apps/desktop/src/features/score/ScoreView.tsx +++ b/apps/desktop/src/features/score/ScoreView.tsx @@ -195,8 +195,15 @@ export function ScoreView({ song, projectId, onSongUpdate }: ScoreViewProps) { @@ -304,9 +314,16 @@ export function ScoreViewer({ data, fileName, onStatusChange }: ScoreViewerProps variant="outline" size="icon-lg" className="size-14" + title={t("scoreViewerNextPage")} aria-label={t("scoreViewerNextPage")} - disabled={pageNumber >= pageCount} - onClick={goToNextPage} + aria-disabled={pageNumber >= pageCount ? "true" : undefined} + onClick={(e) => { + if (pageNumber >= pageCount) { + e.preventDefault(); + return; + } + goToNextPage(); + }} >