1- import React , { memo , useEffect , useState , useMemo , Fragment } from 'react' ;
1+ import React , { memo , useEffect , useState , useMemo , Fragment , useCallback } from 'react' ;
22import classnames from 'classnames' ;
33import Tabs , { IOption } from '@/components/Tabs' ;
44import Iconfont from '@/components/Iconfont' ;
@@ -16,7 +16,7 @@ interface IProps {
1616 manageResultDataList ?: IManageResultData [ ] ;
1717 resultConfig : IResultConfig [ ] ;
1818 onExecute : ( sql : string , config : IResultConfig , index : number ) => void ;
19- onExport : ( originalSql : string , exportType : ExportTypeEnum , exportSize : ExportSizeEnum ) => Promise < void > ;
19+ onExport : ( sql : string , originalSql : string , exportType : ExportTypeEnum , exportSize : ExportSizeEnum ) => Promise < void > ;
2020 onTabEdit : ( type : 'add' | 'remove' , value ?: number | string ) => void ;
2121 onSearchTotal : ( index : number ) => Promise < number > ;
2222 isLoading ?: boolean ;
@@ -45,7 +45,7 @@ const handleTabs = (result: IManageResultData[]) => {
4545} ;
4646
4747export default memo < IProps > ( function SearchResult ( props ) {
48- const { className, manageResultDataList = [ ] , isLoading, onExecute, onSearchTotal } = props ;
48+ const { className, manageResultDataList = [ ] , isLoading, onExecute, onExport } = props ;
4949 const [ currentTab , setCurrentTab ] = useState < string | number | undefined > ( ) ;
5050 const [ resultDataList , setResultDataList ] = useState < IManageResultData [ ] > ( [ ] ) ;
5151 const [ resultConfig , setResultConfig ] = useState < IResultConfig [ ] > ( [ ] ) ;
@@ -64,7 +64,7 @@ export default memo<IProps>(function SearchResult(props) {
6464 setCurrentTab ( manageResultDataList [ 0 ] . uuid ) ;
6565 }
6666
67- setResultDataList ( manageResultDataList ) ;
67+ setResultDataList ( [ ... manageResultDataList ] ) ;
6868 setTabs ( handleTabs ( manageResultDataList ) ) ;
6969 } , [ manageResultDataList ] ) ;
7070
@@ -85,48 +85,50 @@ export default memo<IProps>(function SearchResult(props) {
8585 ) ;
8686 } ;
8787
88- const renderTable = useMemo ( ( ) => {
88+ const renderTable = ( ) => {
8989 if ( ! tabs || ! tabs . length ) {
9090 return renderEmpty ( ) ;
9191 }
9292 if ( ! resultDataList || ! resultDataList . length ) {
9393 return renderEmpty ( ) ;
9494 }
95- return ( resultDataList || [ ] ) . map ( ( item , index : number ) => {
96- if ( item . success ) {
97- return (
98- < Fragment key = { item . uuid ! } >
99- < TableBox
100- className = { classnames ( { [ styles . cursorTableBox ] : item . uuid === currentTab } ) }
101- data = { item }
102- config = { resultConfig ?. [ index ] }
103- onConfigChange = { function ( config : IResultConfig ) {
104- onExecute && onExecute ( item . originalSql , config , index ) ;
105- } }
106- onSearchTotal = { async ( ) => {
107- if ( props . onSearchTotal ) {
108- return await props . onSearchTotal ( index ) ;
109- }
110- } }
111- onExport = { ( exportType : ExportTypeEnum , exportSize : ExportSizeEnum ) => {
112- props . onExport && props . onExport ( item . originalSql , exportType , exportSize ) ;
113- } }
114- />
115- </ Fragment >
116- ) ;
117- } else {
118- return (
119- < Fragment key = { item . uuid } >
120- < StateIndicator
121- className = { classnames ( styles . stateIndicator , { [ styles . cursorStateIndicator ] : item . uuid === currentTab } ) }
122- state = "error"
123- text = { item . message }
124- />
125- </ Fragment >
126- ) ;
127- }
128- } ) ;
129- } , [ currentTab , resultDataList , resultConfig ] ) ;
95+
96+ return renderTableContent ;
97+ } ;
98+
99+ const renderTableContent = ( resultDataList || [ ] ) . map ( ( item , index : number ) => {
100+ console . log ( item . sql , item . originalSql ) ;
101+ if ( item . success ) {
102+ return (
103+ < TableBox
104+ key = { item . uuid ! }
105+ className = { classnames ( { [ styles . cursorTableBox ] : item . uuid === currentTab } ) }
106+ data = { item }
107+ config = { resultConfig ?. [ index ] }
108+ onConfigChange = { ( config : IResultConfig ) => {
109+ onExecute && onExecute ( item . originalSql , config , index ) ;
110+ } }
111+ onSearchTotal = { async ( ) => {
112+ if ( props . onSearchTotal ) {
113+ return await props . onSearchTotal ( index ) ;
114+ }
115+ } }
116+ onExport = { ( sql : string , originalSql : string , exportType : ExportTypeEnum , exportSize : ExportSizeEnum ) => {
117+ onExport && onExport ( sql , originalSql , exportType , exportSize ) ;
118+ } }
119+ />
120+ ) ;
121+ } else {
122+ return (
123+ < StateIndicator
124+ key = { item . uuid }
125+ className = { classnames ( styles . stateIndicator , { [ styles . cursorStateIndicator ] : item . uuid === currentTab } ) }
126+ state = "error"
127+ text = { item . message }
128+ />
129+ ) ;
130+ }
131+ } ) ;
130132
131133 return (
132134 < div className = { classnames ( className , styles . box ) } >
@@ -144,7 +146,7 @@ export default memo<IProps>(function SearchResult(props) {
144146 </ div >
145147 ) : null }
146148 < Spin spinning = { isLoading } wrapperClassName = { styles . resultContentWrapper } >
147- { renderTable }
149+ { renderTable ( ) }
148150 </ Spin >
149151 </ div >
150152 ) ;
0 commit comments