drawer.tsx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import React from 'react';
  2. import SyntaxHighlighter from 'react-syntax-highlighter';
  3. import { solarizedDark } from 'react-syntax-highlighter/dist/esm/styles/hljs';
  4. import { useTableSchema } from './service';
  5. export const TableShemaDrawer: React.FunctionComponent<{
  6. dataSource: string;
  7. tableName: string;
  8. show: boolean;
  9. onClose: () => void;
  10. }> = ({ dataSource, tableName, show, onClose }) => {
  11. const { data } = useTableSchema(dataSource, tableName);
  12. return (
  13. <div className={'drawer-container ' + (show ? '' : 'drawer-hidden')}>
  14. <div className="drawer-titlebar">
  15. <div className="drawer-title">表结构预览</div>
  16. <button
  17. type="button"
  18. tabIndex={-1}
  19. className="drawer-close-btn"
  20. onClick={onClose}
  21. />
  22. </div>
  23. <div className="drawer-table-header">
  24. <span className="drawer-table-cell" style={{ width: '20%' }}>
  25. 序号
  26. </span>
  27. <span className="drawer-table-cell" style={{ width: '35%' }}>
  28. 字段
  29. </span>
  30. <span className="drawer-table-cell" style={{ width: '35%' }}>
  31. 类型
  32. </span>
  33. <span className="drawer-table-cell" style={{ width: '10%' }}>
  34. 长度
  35. </span>
  36. </div>
  37. <div className="drawer-table-body">
  38. {data &&
  39. data.map((row, idx) => (
  40. <div key={idx} className="drawer-table-row">
  41. <span className="drawer-table-cell" style={{ width: '20%' }}>
  42. {idx + 1}
  43. </span>
  44. <span className="drawer-table-cell" style={{ width: '35%' }}>
  45. {row.field}
  46. </span>
  47. <span className="drawer-table-cell" style={{ width: '35%' }}>
  48. {row.type}
  49. </span>
  50. <span className="drawer-table-cell" style={{ width: '10%' }}>
  51. {row.length}
  52. </span>
  53. </div>
  54. ))}
  55. </div>
  56. </div>
  57. );
  58. };
  59. export const JsonSchemaDrawer: React.FunctionComponent<{
  60. jsonSchema: any;
  61. show: boolean;
  62. onClose: () => void;
  63. }> = ({ jsonSchema, show, onClose }) => {
  64. return (
  65. <div
  66. className={
  67. 'drawer-container drawer-dark ' + (show ? '' : 'drawer-hidden')
  68. }
  69. >
  70. <div className="drawer-titlebar">
  71. <div className="drawer-title" />
  72. <button
  73. type="button"
  74. tabIndex={-1}
  75. className="drawer-close-btn"
  76. onClick={onClose}
  77. />
  78. </div>
  79. <SyntaxHighlighter showLineNumbers language="json" style={solarizedDark}>
  80. {JSON.stringify(jsonSchema, null, 2)}
  81. </SyntaxHighlighter>
  82. </div>
  83. );
  84. };