2019-12-19 09:51:44 +01:00
import React , { useEffect , useState } from "react" ;
import { storiesOf } from "@storybook/react" ;
import Diff from "./Diff" ;
// @ts-ignore
import parser from "gitdiff-parser" ;
import simpleDiff from "../__resources__/Diff.simple" ;
2020-01-08 09:57:57 +01:00
import hunksDiff from "../__resources__/Diff.hunks" ;
2020-01-09 16:31:28 +01:00
import binaryDiff from "../__resources__/Diff.binary" ;
2020-01-22 12:08:28 +01:00
import { DiffEventContext , File } from "./DiffTypes" ;
2019-12-19 09:51:44 +01:00
import Toast from "../toast/Toast" ;
2020-01-22 12:08:28 +01:00
import { getPath } from "./diffs" ;
2020-02-10 15:33:32 +01:00
import DiffButton from "./DiffButton" ;
2020-02-11 08:35:55 +01:00
import styled from "styled-components" ;
2019-12-19 09:51:44 +01:00
const diffFiles = parser . parse ( simpleDiff ) ;
2020-02-11 08:35:55 +01:00
const Container = styled . div `
padding : 2rem 6 rem ;
` ;
2019-12-19 09:51:44 +01:00
storiesOf ( "Diff" , module )
2020-02-11 08:35:55 +01:00
. addDecorator ( storyFn = > < Container > { storyFn ( ) } < / Container > )
2019-12-19 09:51:44 +01:00
. add ( "Default" , ( ) = > < Diff diff = { diffFiles } / > )
. add ( "Side-By-Side" , ( ) = > < Diff diff = { diffFiles } sideBySide = { true } / > )
. add ( "Collapsed" , ( ) = > < Diff diff = { diffFiles } defaultCollapse = { true } / > )
2020-02-10 15:33:32 +01:00
. add ( "File Controls" , ( ) = > (
< Diff
diff = { diffFiles }
fileControlFactory = { ( ) = > (
2020-02-11 08:35:55 +01:00
< DiffButton
tooltip = "A skull and crossbones or death's head is a symbol consisting of a human skull and two long bones crossed together under or behind the skull. The design originates in the Late Middle Ages as a symbol of death and especially as a memento mori on tombstones."
icon = "skull-crossbones"
onClick = { ( ) = > alert ( "Arrrgggghhhh ..." ) }
/ >
2020-02-10 15:33:32 +01:00
) }
/ >
) )
2019-12-19 09:51:44 +01:00
. add ( "File Annotation" , ( ) = > (
2020-01-06 14:48:32 +01:00
< Diff
diff = { diffFiles }
fileAnnotationFactory = { file = > [ < p key = { file . newPath } > Custom File annotation for { file . newPath } < / p > ] }
/ >
2019-12-19 09:51:44 +01:00
) )
. add ( "Line Annotation" , ( ) = > (
< Diff
diff = { diffFiles }
annotationFactory = { ctx = > {
return {
2020-01-06 14:48:32 +01:00
N2 : < p key = "N2" > Line Annotation < / p >
2019-12-19 09:51:44 +01:00
} ;
} }
/ >
) )
. add ( "OnClick" , ( ) = > {
2020-01-08 14:07:50 +01:00
const OnClickDemo = ( ) = > {
2019-12-19 09:51:44 +01:00
const [ changeId , setChangeId ] = useState ( ) ;
useEffect ( ( ) = > {
const interval = setInterval ( ( ) = > setChangeId ( undefined ) , 2000 ) ;
return ( ) = > clearInterval ( interval ) ;
} ) ;
const onClick = ( context : DiffEventContext ) = > setChangeId ( context . changeId ) ;
return (
< >
{ changeId && < Toast type = "info" title = { "Change " + changeId } / > }
< Diff diff = { diffFiles } onClick = { onClick } / >
< / >
) ;
} ;
return < OnClickDemo / > ;
2020-01-08 09:57:57 +01:00
} )
. add ( "Hunks" , ( ) = > {
const hunkDiffFiles = parser . parse ( hunksDiff ) ;
return < Diff diff = { hunkDiffFiles } / > ;
2020-01-09 16:31:28 +01:00
} )
. add ( "Binaries" , ( ) = > {
const binaryDiffFiles = parser . parse ( binaryDiff ) ;
return < Diff diff = { binaryDiffFiles } / > ;
2020-01-22 12:08:28 +01:00
} )
. add ( "SyntaxHighlighting" , ( ) = > {
const filesWithLanguage = diffFiles . map ( ( file : File ) = > {
const ext = getPath ( file ) . split ( "." ) [ 1 ] ;
if ( ext === "tsx" ) {
file . language = "typescript" ;
} else {
file . language = ext ;
}
return file ;
} ) ;
return < Diff diff = { filesWithLanguage } / > ;
2020-02-07 14:27:21 +01:00
} )
. add ( "CollapsingWithFunction" , ( ) = > (
< Diff diff = { diffFiles } defaultCollapse = { ( oldPath , newPath ) = > oldPath . endsWith ( ".java" ) } / >
) ) ;