|
9 | 9 | isSizedGridColumn,
|
10 | 10 | type Item,
|
11 | 11 | } from "../src/index.js";
|
12 |
| -import type { CustomCell } from "../src/internal/data-grid/data-grid-types.js"; |
| 12 | +import type { CustomCell, SizedGridColumn } from "../src/internal/data-grid/data-grid-types.js"; |
13 | 13 | import type { DataEditorRef } from "../src/data-editor/data-editor.js";
|
14 | 14 | import { assert } from "../src/common/support.js";
|
15 | 15 | import { vi, type Mock, expect, describe, test, beforeEach, afterEach } from "vitest";
|
@@ -1352,7 +1352,7 @@ describe("data-editor", () => {
|
1352 | 1352 | expect(document.body.contains(overlay)).toBe(false);
|
1353 | 1353 | });
|
1354 | 1354 |
|
1355 |
| - test("Open markdown overlay", async () => { |
| 1355 | + test("Open and close markdown overlay", async () => { |
1356 | 1356 | vi.useFakeTimers();
|
1357 | 1357 | render(<DataEditor {...basicProps} />, {
|
1358 | 1358 | wrapper: Context,
|
@@ -1384,6 +1384,125 @@ describe("data-editor", () => {
|
1384 | 1384 | expect(document.body.contains(overlay)).toBe(false);
|
1385 | 1385 | });
|
1386 | 1386 |
|
| 1387 | + test("Open and close overlays", async () => { |
| 1388 | + vi.useFakeTimers(); |
| 1389 | + |
| 1390 | + const columns = basicProps.columns.slice(0, 5); |
| 1391 | + const getCellContent: (typeof basicProps)["getCellContent"] = c => { |
| 1392 | + const [col, row] = c; |
| 1393 | + switch (col) { |
| 1394 | + case 0: { |
| 1395 | + return { |
| 1396 | + kind: GridCellKind.Bubble, |
| 1397 | + allowOverlay: true, |
| 1398 | + data: ["Foobar"], |
| 1399 | + readOnly: true, |
| 1400 | + }; |
| 1401 | + } |
| 1402 | + case 1: { |
| 1403 | + return { |
| 1404 | + kind: GridCellKind.Drilldown, |
| 1405 | + allowOverlay: true, |
| 1406 | + data: [ |
| 1407 | + { |
| 1408 | + img: "https://cdn.pixabay.com/photo/2017/02/20/18/03/cat-2083492_1280.jpg", |
| 1409 | + text: "Foobar", |
| 1410 | + }, |
| 1411 | + ], |
| 1412 | + readOnly: true, |
| 1413 | + }; |
| 1414 | + } |
| 1415 | + case 2: { |
| 1416 | + return { |
| 1417 | + kind: GridCellKind.Image, |
| 1418 | + data: [ |
| 1419 | + "https://i.imgur.com/5J0BftG.jpg", |
| 1420 | + "https://preview.redd.it/7jlqkp2cyap51.jpg?width=575&auto=webp&s=26fa9ed15b16fb450ee08ed1f2f0ccb5e0223581", |
| 1421 | + ], |
| 1422 | + allowOverlay: true, |
| 1423 | + readOnly: true, |
| 1424 | + }; |
| 1425 | + } |
| 1426 | + case 3: { |
| 1427 | + return { |
| 1428 | + kind: GridCellKind.Markdown, |
| 1429 | + allowOverlay: true, |
| 1430 | + data: `# Header: ${col}, ${row}`, |
| 1431 | + readOnly: true, |
| 1432 | + }; |
| 1433 | + } |
| 1434 | + case 4: { |
| 1435 | + return { |
| 1436 | + kind: GridCellKind.Number, |
| 1437 | + allowOverlay: true, |
| 1438 | + data: row, |
| 1439 | + displayData: row.toString(), |
| 1440 | + readOnly: true, |
| 1441 | + }; |
| 1442 | + } |
| 1443 | + case 5: { |
| 1444 | + return { |
| 1445 | + kind: GridCellKind.Uri, |
| 1446 | + allowOverlay: true, |
| 1447 | + data: "https://www.google.com", |
| 1448 | + readOnly: true, |
| 1449 | + }; |
| 1450 | + } |
| 1451 | + } |
| 1452 | + |
| 1453 | + return basicProps.getCellContent(c); |
| 1454 | + }; |
| 1455 | + |
| 1456 | + render( |
| 1457 | + <DataEditor |
| 1458 | + {...basicProps} |
| 1459 | + columns={columns} |
| 1460 | + getCellContent={getCellContent} |
| 1461 | + />, |
| 1462 | + { |
| 1463 | + wrapper: Context, |
| 1464 | + } |
| 1465 | + ); |
| 1466 | + prep(); |
| 1467 | + |
| 1468 | + const canvas = screen.getByTestId("data-grid-canvas"); |
| 1469 | + |
| 1470 | + let clientX = 10; |
| 1471 | + for (const col of columns) { |
| 1472 | + // Double click to open overlay |
| 1473 | + sendClick(canvas, { |
| 1474 | + clientX, |
| 1475 | + clientY: 36 + 32 + 16, // Row 1 (0 indexed) |
| 1476 | + }); |
| 1477 | + |
| 1478 | + sendClick(canvas, { |
| 1479 | + clientX, |
| 1480 | + clientY: 36 + 32 + 16, // Row 1 (0 indexed) |
| 1481 | + }); |
| 1482 | + |
| 1483 | + // Single click on overlay editor |
| 1484 | + sendClick(canvas, { |
| 1485 | + clientX, |
| 1486 | + clientY: 36 + 32 + 16, // Row 1 (0 indexed) |
| 1487 | + }); |
| 1488 | + |
| 1489 | + const overlay = screen.getByTestId("data-grid-overlay-editor") |
| 1490 | + expect(document.body.contains(overlay)).toBe(true); |
| 1491 | + |
| 1492 | + vi.useFakeTimers(); |
| 1493 | + fireEvent.keyDown(canvas, { |
| 1494 | + key: "Escape", |
| 1495 | + }); |
| 1496 | + act(() => { |
| 1497 | + vi.runAllTimers(); |
| 1498 | + }); |
| 1499 | + |
| 1500 | + expect(document.body.contains(overlay)).toBe(false); |
| 1501 | + |
| 1502 | + clientX += (col as SizedGridColumn).width; |
| 1503 | + } |
| 1504 | + }) |
| 1505 | + |
1387 | 1506 | test("Open overlay with keypress", async () => {
|
1388 | 1507 | vi.useFakeTimers();
|
1389 | 1508 | render(<DataEditor {...basicProps} />, {
|
|
0 commit comments