|
1 | 1 | import { DiffModeEnum } from "@git-diff-view/react"; |
2 | | -import { Button, Group, Tooltip } from "@mantine/core"; |
| 2 | +import { Button, Group, Tooltip, Collapse, NumberInput, Stack } from "@mantine/core"; |
3 | 3 | import { useEffect, useState } from "react"; |
4 | 4 |
|
5 | 5 | import { useDiffConfig } from "../../hooks/useDiffConfig"; |
6 | 6 |
|
7 | 7 | import type { DiffFile } from "@git-diff-view/react"; |
8 | 8 |
|
9 | 9 | export const MainContentDiffConfig = ({ diffFile }: { diffFile?: DiffFile }) => { |
10 | | - const { mode, setEngine, setHighlight, setMode, setWrap, wrap, engine, highlight } = useDiffConfig(); |
| 10 | + const { |
| 11 | + mode, |
| 12 | + setEngine, |
| 13 | + setHighlight, |
| 14 | + setMode, |
| 15 | + setWrap, |
| 16 | + wrap, |
| 17 | + engine, |
| 18 | + highlight, |
| 19 | + rangeMode, |
| 20 | + setRangeMode, |
| 21 | + rangeStart, |
| 22 | + setRangeStart, |
| 23 | + rangeEnd, |
| 24 | + setRangeEnd, |
| 25 | + } = useDiffConfig(); |
11 | 26 |
|
12 | 27 | const [expandAll, setExpandAll] = useState(false); |
13 | 28 |
|
@@ -40,33 +55,58 @@ export const MainContentDiffConfig = ({ diffFile }: { diffFile?: DiffFile }) => |
40 | 55 | }; |
41 | 56 |
|
42 | 57 | return ( |
43 | | - <Group> |
44 | | - <Tooltip label="diff view mode"> |
45 | | - <Button onClick={() => setMode(mode === DiffModeEnum.Split ? DiffModeEnum.Unified : DiffModeEnum.Split)}> |
46 | | - {mode === DiffModeEnum.Split ? "split" : "unified"} |
47 | | - </Button> |
48 | | - </Tooltip> |
49 | | - <Tooltip label="code line mode"> |
50 | | - <Button onClick={() => setWrap(!wrap)}>{wrap ? "wrap" : "no wrap"}</Button> |
51 | | - </Tooltip> |
52 | | - <Tooltip label="highlight status"> |
53 | | - <Button onClick={() => setHighlight(!highlight)}>highlight {highlight ? "enable" : "disable"}</Button> |
54 | | - </Tooltip> |
55 | | - <Tooltip label="highlight engine"> |
56 | | - <Button disabled={!highlight} onClick={() => setEngine(engine === "lowlight" ? "shiki" : "lowlight")}> |
57 | | - {engine} |
58 | | - </Button> |
59 | | - </Tooltip> |
60 | | - <Tooltip label="expand all lines"> |
61 | | - <Button |
62 | | - onClick={() => { |
63 | | - toggleExpandAll(); |
64 | | - setExpandAll(!expandAll); |
65 | | - }} |
66 | | - > |
67 | | - {expandAll ? "collapse all" : "expand all"} |
68 | | - </Button> |
69 | | - </Tooltip> |
70 | | - </Group> |
| 58 | + <Stack gap="sm"> |
| 59 | + <Group> |
| 60 | + <Tooltip label="diff view mode"> |
| 61 | + <Button onClick={() => setMode(mode === DiffModeEnum.Split ? DiffModeEnum.Unified : DiffModeEnum.Split)}> |
| 62 | + {mode === DiffModeEnum.Split ? "split" : "unified"} |
| 63 | + </Button> |
| 64 | + </Tooltip> |
| 65 | + <Tooltip label="code line mode"> |
| 66 | + <Button onClick={() => setWrap(!wrap)}>{wrap ? "wrap" : "no wrap"}</Button> |
| 67 | + </Tooltip> |
| 68 | + <Tooltip label="highlight status"> |
| 69 | + <Button onClick={() => setHighlight(!highlight)}>highlight {highlight ? "enable" : "disable"}</Button> |
| 70 | + </Tooltip> |
| 71 | + <Tooltip label="highlight engine"> |
| 72 | + <Button disabled={!highlight} onClick={() => setEngine(engine === "lowlight" ? "shiki" : "lowlight")}> |
| 73 | + {engine} |
| 74 | + </Button> |
| 75 | + </Tooltip> |
| 76 | + <Tooltip label="expand all lines"> |
| 77 | + <Button |
| 78 | + onClick={() => { |
| 79 | + toggleExpandAll(); |
| 80 | + setExpandAll(!expandAll); |
| 81 | + }} |
| 82 | + > |
| 83 | + {expandAll ? "collapse all" : "expand all"} |
| 84 | + </Button> |
| 85 | + </Tooltip> |
| 86 | + <Tooltip label="show only a portion of the diff"> |
| 87 | + <Button onClick={() => setRangeMode(!rangeMode)}>{rangeMode ? "disable range" : "enable range"}</Button> |
| 88 | + </Tooltip> |
| 89 | + </Group> |
| 90 | + <Collapse in={rangeMode}> |
| 91 | + <Group gap="sm"> |
| 92 | + <NumberInput |
| 93 | + size="xs" |
| 94 | + value={rangeStart} |
| 95 | + min={0} |
| 96 | + label="Range Start" |
| 97 | + max={diffFile?.splitLineLength} |
| 98 | + onChange={(n) => setRangeStart(Number(n))} |
| 99 | + /> |
| 100 | + <NumberInput |
| 101 | + size="xs" |
| 102 | + value={rangeEnd} |
| 103 | + min={0} |
| 104 | + label="Range End" |
| 105 | + max={diffFile?.splitLineLength} |
| 106 | + onChange={(n) => setRangeEnd(Number(n))} |
| 107 | + /> |
| 108 | + </Group> |
| 109 | + </Collapse> |
| 110 | + </Stack> |
71 | 111 | ); |
72 | 112 | }; |
0 commit comments