11import React , { useEffect , useState } from "react" ;
2- import { ChangedFile , CommitNode , Diff } from "../../types" ;
2+ import { ChangedItem , Commit , Diff } from "../../types" ;
33import css from "./index.module.css" ;
44import ChangedFileDetails from "./ChangedFileDetails" ;
55import { pluralize } from "@dolthub/web-utils" ;
6+ import { SmallLoader } from "@dolthub/react-components" ;
67
78type Props = {
8- commit : CommitNode ;
9- getDiff : ( base : string , head : string ) => Promise < Diff | undefined > ;
9+ commit : Commit ;
10+ diff ?: Diff ;
1011 forDolt ?: boolean ;
12+ loading ?: boolean ;
1113} ;
1214
13- const diffCache : { [ key : string ] : Diff | undefined } = { } ;
14-
15- export default function DiffSection ( { commit, getDiff, forDolt } : Props ) {
16- const [ diff , setDiff ] = useState < Diff | undefined > ( undefined ) ;
17-
18- useEffect ( ( ) => {
19- const fetchDiff = async ( ) => {
20- const cacheKey = `${ commit . parents [ 0 ] } -${ commit . hash } ` ;
21- if ( diffCache [ cacheKey ] ) {
22- setDiff ( diffCache [ cacheKey ] ) ;
23- } else {
24- const result = await getDiff ( commit . parents [ 0 ] , commit . hash ) ;
25- diffCache [ cacheKey ] = result ;
26- setDiff ( result ) ;
27- }
28- } ;
29-
30- fetchDiff ( ) ;
31- } , [ commit , getDiff ] ) ;
32-
15+ export default function DiffSection ( { commit, diff, forDolt, loading } : Props ) {
3316 const { added, modified, deleted } = getChanged ( diff ?. files || [ ] ) ;
3417 const file = forDolt ? "table" : "file" ;
18+ const files = diff ?. files || diff ?. tables ;
3519
3620 return (
37- < div >
21+ < div className = { css . diffSection } >
3822 < div className = { css . top } >
3923 < div className = { css . commitAndParents } >
4024 < div className = { css . hashes } >
4125 < div className = { css . bold } > commit:</ div >
42- < div > { commit . hash } </ div >
26+ < div > { commit . sha } </ div >
4327 </ div >
4428 < div className = { css . hashes } >
4529 < div className = { css . bold } >
4630 { pluralize ( commit . parents . length , "parent" ) } :
4731 </ div >
4832 < div >
4933 { commit . parents . map ( ( p , i ) => (
50- < div >
51- { p }
34+ < div key = { p . sha } >
35+ { p . sha }
5236 { i === commit . parents . length - 1 ? "" : "," }
5337 </ div >
5438 ) ) }
5539 </ div >
5640 </ div >
5741 </ div >
58- < div className = { css . message } > { commit . message } </ div >
42+ < div className = { css . message } > { commit . commit . message } </ div >
43+ { loading && < SmallLoader loaded = { ! loading } className = { css . loading } /> }
44+ { /* {err && <div className={css.error}>{err}</div> } */ }
5945 </ div >
60- { ! ! diff ?. files . length && (
46+ { ! ! files ? .length && (
6147 < >
6248 < div className = { css . summary } >
6349 { ! ! modified && (
@@ -80,7 +66,7 @@ export default function DiffSection({ commit, getDiff, forDolt }: Props) {
8066 ) }
8167 </ div >
8268 < ul className = { css . list } >
83- { diff ?. files . map ( file => (
69+ { files . map ( file => (
8470 < ChangedFileDetails key = { file . filename } file = { file } />
8571 ) ) }
8672 </ ul >
@@ -96,7 +82,7 @@ type GetChangedReturnType = {
9682 deleted : number ;
9783} ;
9884
99- function getChanged ( files : ChangedFile [ ] ) : GetChangedReturnType {
85+ function getChanged ( files : ChangedItem [ ] ) : GetChangedReturnType {
10086 let added = 0 ;
10187 let modified = 0 ;
10288 let deleted = 0 ;
0 commit comments