0.0.13 • Published 12 days ago

@git-diff-view/react v0.0.13

Weekly downloads
-
License
MIT
Repository
github
Last release
12 days ago

A React UI Component to render git diff data, support Split View and Unified View, just like GitHub and GitLab.

Usage

There are two ways to use this component:

  1. Use the DiffView component directly.
import { DiffView, DiffModeEnum } from "@git-diff-view/react";
import "@git-diff-view/react/styles/diff-view.css";

<DiffView<string>
  // use data
  data={{
    oldFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null };
    newFile?: { fileName?: string | null; fileLang?: string | null; content?: string | null };
    hunks: string[];
  }}
  extendData={{oldFile: {10: {data: 'foo'}}, newFile: {20: {data: 'bar'}}}}
  renderExtendLine={({ data }) => ReactNode}
  diffViewFontSize={number}
  diffViewHighlight={boolean}
  diffViewMode={DiffModeEnum.Split | DiffModeEnum.Unified}
  diffViewWrap={boolean}
  diffViewAddWidget
  onAddWidgetClick={({ side, lineNumber }) => void}
  renderWidgetLine={({ onClose, side, lineNumber }) => ReactNode}
/>
  1. Use the DiffView component with @git-diff-view/core/@git-diff-view/file
// with @git-diff-view/file
import { DiffFile, generateDiffFile } from "@git-diff-view/file";
const file = generateDiffFile(
  data?.oldFile?.fileName || "",
  data?.oldFile?.content || "",
  data?.newFile?.fileName || "",
  data?.newFile?.content || "",
  data?.oldFile?.fileLang || "",
  data?.newFile?.fileLang || ""
);
file.init();
file.buildSplitDiffLines();
file.buildUnifiedDiffLines();

// with @git-diff-view/core
import { DiffFile } from "@git-diff-view/core";
const file = new DiffFile(
  data?.oldFile?.fileName || "",
  data?.oldFile?.content || "",
  data?.newFile?.fileName || "",
  data?.newFile?.content || "",
  data?.hunks || [],
  data?.oldFile?.fileLang || "",
  data?.newFile?.fileLang || ""
);
file.init();
file.buildSplitDiffLines();
file.buildUnifiedDiffLines();

// use current data to render
<DiffView diffFile={file} {...props} />;
// or use the bundle data to render, eg: postMessage/httpRequest
const bundle = file.getBundle();
const diffFile = DiffFile.createInstance(data || {}, bundle);
<DiffView diffFile={diffFile} {...props} />;

Props

PropsDescription
dataThe diff data need to show, type: { oldFile: {fileName?: string, content?: string}, newFile: {fileName?: string, content?: string}, hunks: string[] }, you can only pass hunks data, and the component will generate the oldFile and newFile data automatically
diffFilethe target data to render
renderWidgetLinereturn a valid react element to show the widget, this element will render when you click the addWidget button in the diff view
renderExtendLinereturn a valid react element to show the extend data
extendDataa list to store the extend data to show in the Diff View, type: {oldFile: {lineNumber: {data: any}}, newFile: {lineNumber: {data: any}}}
diffViewFontSizethe fontSize for the DiffView component, type: number
diffViewHighlightenable syntax highlight, type: boolean
diffViewModethe mode for the DiffView component, type: DiffModeEnum.Split or DiffModeEnum.Unified
diffViewWrapenable code line auto wrap, type: boolean
diffViewAddWidgetenable addWidget button, type: boolean
onAddWidgetClickwhen the addWidget button clicked, type: ({ side: "old" | "new", lineNumber: number }) => void

example repo

react-example

0.0.13

12 days ago

0.0.12

12 days ago

0.0.11

23 days ago

0.0.10

26 days ago

0.0.9

1 month ago

0.0.8

2 months ago

0.0.7

2 months ago

0.0.6

2 months ago

0.0.5

2 months ago

0.0.3

3 months ago

0.0.2

3 months ago

0.0.1

3 months ago

0.0.1-beta.2

3 months ago

0.0.1-beta.1

3 months ago