feat(qr-generate): register preview panel, update descriptions, update e2e test

This commit is contained in:
Siddharth Kumar Sah
2026-04-13 09:59:12 +08:00
parent 0091a5660a
commit 4a3883e5dd
4 changed files with 18 additions and 9 deletions
+9 -1
View File
@@ -130,6 +130,11 @@ const QrGenerateSettings = lazy(() =>
default: m.QrGenerateSettings, default: m.QrGenerateSettings,
})), })),
); );
const QrGeneratePreview = lazy(() =>
import("@/components/tools/qr-generate-preview").then((m) => ({
default: m.QrGeneratePreview,
})),
);
const BarcodeReadSettings = lazy(() => const BarcodeReadSettings = lazy(() =>
import("@/components/tools/barcode-read-settings").then((m) => ({ import("@/components/tools/barcode-read-settings").then((m) => ({
default: m.BarcodeReadSettings, default: m.BarcodeReadSettings,
@@ -276,7 +281,10 @@ export const toolRegistry = new Map<string, ToolRegistryEntry>([
["compare", { displayMode: "before-after", Settings: CompareSettings }], ["compare", { displayMode: "before-after", Settings: CompareSettings }],
["find-duplicates", { displayMode: "before-after", Settings: FindDuplicatesSettings }], ["find-duplicates", { displayMode: "before-after", Settings: FindDuplicatesSettings }],
["color-palette", { displayMode: "before-after", Settings: ColorPaletteSettings }], ["color-palette", { displayMode: "before-after", Settings: ColorPaletteSettings }],
["qr-generate", { displayMode: "no-dropzone", Settings: QrGenerateSettings }], [
"qr-generate",
{ displayMode: "no-dropzone", Settings: QrGenerateSettings, ResultsPanel: QrGeneratePreview },
],
["barcode-read", { displayMode: "before-after", Settings: BarcodeReadSettings }], ["barcode-read", { displayMode: "before-after", Settings: BarcodeReadSettings }],
// Layout & Composition // Layout & Composition
+1 -1
View File
@@ -230,7 +230,7 @@ export const TOOLS: Tool[] = [
{ {
id: "qr-generate", id: "qr-generate",
name: "QR Code Generator", name: "QR Code Generator",
description: "Generate QR codes from text or URLs", description: "Generate styled QR codes with custom colors, patterns, and logos",
category: "utilities", category: "utilities",
icon: "QrCode", icon: "QrCode",
route: "/qr-generate", route: "/qr-generate",
+1 -1
View File
@@ -88,7 +88,7 @@ export const en = {
"color-palette": { name: "Color Palette", description: "Extract dominant colors from image" }, "color-palette": { name: "Color Palette", description: "Extract dominant colors from image" },
"qr-generate": { "qr-generate": {
name: "QR Code Generator", name: "QR Code Generator",
description: "Generate QR codes from text or URLs", description: "Generate styled QR codes with custom colors, patterns, and logos",
}, },
"barcode-read": { "barcode-read": {
name: "Barcode Reader", name: "Barcode Reader",
+7 -6
View File
@@ -148,12 +148,13 @@ test.describe("Tool processing (core tools)", () => {
test("qr-generate creates QR code without file upload", async ({ loggedInPage: page }) => { test("qr-generate creates QR code without file upload", async ({ loggedInPage: page }) => {
await page.goto("/qr-generate"); await page.goto("/qr-generate");
// Fill in QR text // Fill in URL input (client-side generation, live preview)
await page.locator("textarea").first().fill("https://example.com"); await page.getByTestId("qr-input-url").fill("https://example.com");
await page.getByRole("button", { name: /generate qr/i }).click(); // Verify the live preview rendered (canvas or svg inside the preview area)
await waitForProcessing(page); await expect(page.locator("canvas, svg").first()).toBeVisible({ timeout: 5000 });
// QR has a "Download QR Code" button in the left panel // Download button should be enabled
await expect(page.getByText(/download qr/i).first()).toBeVisible({ timeout: 15_000 }); const downloadBtn = page.getByTestId("qr-generate-download");
await expect(downloadBtn).toBeEnabled();
}); });
test("vectorize processes image", async ({ loggedInPage: page }) => { test("vectorize processes image", async ({ loggedInPage: page }) => {