Skip to content

Commit

Permalink
feat: add copy keybinding for table cell
Browse files Browse the repository at this point in the history
  • Loading branch information
invisal committed Feb 19, 2024
1 parent 24c8b2f commit a8fa153
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/app/(components)/OptimizeTable/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {
import React, {
useState,
ReactElement,
useRef,
Expand Down Expand Up @@ -56,6 +56,7 @@ interface TableCellListCommonProps {
state: OptimizeTableState;
event: React.MouseEvent;
}) => void;
onKeyDown?: (state: OptimizeTableState, event: React.KeyboardEvent) => void;
}

export interface OptimizeTableProps extends TableCellListCommonProps {
Expand Down Expand Up @@ -246,6 +247,7 @@ export default function OptimizeTable({
renderAhead,
onContextMenu,
onHeaderContextMenu,
onKeyDown,
}: OptimizeTableProps) {
const containerRef = useRef<HTMLDivElement>(null);

Expand Down Expand Up @@ -322,6 +324,10 @@ export default function OptimizeTable({

return (
<div
tabIndex={10}
onKeyDown={(e) => {
if (onKeyDown) onKeyDown(internalState, e);
}}
ref={containerRef}
className={styles.tableContainer}
onContextMenu={(e) => {
Expand Down Expand Up @@ -354,6 +360,7 @@ export default function OptimizeTable({
internalState,
onContextMenu,
onHeaderContextMenu,
onKeyDown,
revision,
]);
}
17 changes: 17 additions & 0 deletions src/components/result/ResultTable.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import OptimizeTable, {
import OptimizeTableState from "@/app/(components)/OptimizeTable/OptimizeTableState";
import { DatabaseValue } from "@/drivers/DatabaseDriver";
import { exportRowsToExcel, exportRowsToSqlInsert } from "@/lib/export-helper";
import { KEY_BINDING } from "@/lib/key-matcher";
import { openContextMenuFromEvent } from "@/messages/openContextMenu";
import { LucidePlus, LucideTrash2 } from "lucide-react";
import React, { useCallback, useState } from "react";
Expand Down Expand Up @@ -88,6 +89,7 @@ export default function ResultTable({ data, tableName }: ResultTableProps) {
openContextMenuFromEvent([
{
title: "Copy Cell Value",
shortcut: KEY_BINDING.copy.toString(),
onClick: () => {
const focus = state.getFocus();
if (focus) {
Expand Down Expand Up @@ -152,6 +154,20 @@ export default function ResultTable({ data, tableName }: ResultTableProps) {
[data, tableName]
);

const onKeyDown = useCallback(
(state: OptimizeTableState, e: React.KeyboardEvent) => {
if (KEY_BINDING.copy.match(e as React.KeyboardEvent<HTMLDivElement>)) {
const focus = state.getFocus();
if (focus) {
const y = focus.y;
const x = focus.x;
window.navigator.clipboard.writeText(state.getValue(y, x) as string);
}
}
},
[]
);

return (
<OptimizeTable
internalState={data}
Expand All @@ -161,6 +177,7 @@ export default function ResultTable({ data, tableName }: ResultTableProps) {
renderAhead={20}
renderCell={renderCell}
rowHeight={35}
onKeyDown={onKeyDown}
/>
);
}
1 change: 1 addition & 0 deletions src/lib/key-matcher.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,5 @@ export default class KeyMatcher {

export const KEY_BINDING = {
run: new KeyMatcher({ ctrl: true, key: "Enter" }),
copy: new KeyMatcher({ ctrl: true, key: "c" }),
};

0 comments on commit a8fa153

Please sign in to comment.