vitess.io/vitess@v0.16.2/web/vtadmin/src/components/ValidationResults.tsx (about) 1 import React from 'react'; 2 import { vtctldata } from '../proto/vtadmin'; 3 4 interface Props { 5 resultsByKeyspace?: { 6 [k: string]: vtctldata.IValidateKeyspaceResponse; 7 }; 8 resultsByShard?: vtctldata.ValidateShardResponse | vtctldata.ValidateVersionShardResponse; 9 shard?: string; 10 } 11 12 const ValidationResults: React.FC<Props> = ({ resultsByKeyspace, resultsByShard, shard }) => { 13 const hasShardResults = resultsByShard && resultsByShard.results.length > 0; 14 return ( 15 <div className="text-left w-full"> 16 <table className="border-none bg-gray-100 "> 17 <thead> 18 <tr className="bg-gray-100"> 19 {resultsByKeyspace && <th className="text-base text-black bg-gray-100">Keyspace</th>} 20 {resultsByKeyspace && <th className="text-base text-black bg-gray-100">Shard</th>} 21 <th className="text-base text-black bg-gray-100">Result</th> 22 </tr> 23 </thead> 24 <tbody> 25 {resultsByKeyspace && 26 Object.entries(resultsByKeyspace).map(([keyspace, results]) => { 27 return ( 28 results.results_by_shard && 29 Object.entries(results.results_by_shard).map(([shard, results]) => ( 30 <tr className="p-1" key={`${keyspace}_${shard}_result`}> 31 <td className="py-2">{keyspace}</td> 32 <td className="py-2">{shard}</td> 33 <td className="py-2">{results.results}</td> 34 </tr> 35 )) 36 ); 37 })} 38 {hasShardResults && ( 39 <> 40 {resultsByShard.results.map((r, i) => ( 41 <tr className="p-1" key={`${i}_result`}> 42 <td className="py-2">{r}</td> 43 </tr> 44 ))} 45 </> 46 )} 47 {!hasShardResults && ( 48 <> 49 <tr className="p-1"> 50 <td className="py-10 italic text-center">No results</td> 51 </tr> 52 </> 53 )} 54 </tbody> 55 </table> 56 </div> 57 ); 58 }; 59 60 export default ValidationResults;