DatasyncView.tsx 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import React from 'react';
  2. import { Dialog, ReactWidget } from '@jupyterlab/apputils';
  3. import { Widget } from '@lumino/widgets';
  4. import { Signal } from '@lumino/signaling';
  5. import DatasyncForm, { ISyncData } from './DatasyncForm';
  6. interface IProps {}
  7. const DatasyncView: React.FunctionComponent<IProps> = props => {
  8. return (
  9. <div style={{ flexGrow: 1, display: 'flex', flexDirection: 'column' }}>
  10. <div
  11. style={{ display: 'flex', justifyContent: 'flex-end', padding: '10px' }}
  12. >
  13. <button
  14. className="jldbq-btn-add"
  15. onClick={async () => {
  16. const body = new DatasyncFormDialogBody();
  17. const dialog = new Dialog({
  18. title: '添加同步任务',
  19. body,
  20. renderer: new DatasyncFormDialogRenderer()
  21. });
  22. body.confirm.connect((_sender, data) => {
  23. console.log(data);
  24. dialog.reject();
  25. });
  26. body.cancel.connect(() => {
  27. dialog.reject();
  28. });
  29. await dialog.launch();
  30. }}
  31. >
  32. <svg
  33. xmlns="http://www.w3.org/2000/svg"
  34. width="20"
  35. height="20"
  36. fill="currentColor"
  37. viewBox="0 0 16 16"
  38. >
  39. <path d="M8 4a.5.5 0 0 1 .5.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3A.5.5 0 0 1 8 4z" />
  40. </svg>
  41. 添加同步任务
  42. </button>
  43. </div>
  44. </div>
  45. );
  46. };
  47. export default DatasyncView;
  48. class DatasyncFormDialogBody extends ReactWidget {
  49. constructor(options?: Widget.IOptions) {
  50. super(options);
  51. }
  52. render(): JSX.Element {
  53. Signal;
  54. return (
  55. <DatasyncForm
  56. datasourceList={[
  57. {
  58. host: '1.1.1.1',
  59. user: 'user',
  60. port: 3306,
  61. password: '',
  62. charset: 'utf8',
  63. manager: 'manager',
  64. source: 'mysql',
  65. databasename: 'default',
  66. datasourcename: 'default',
  67. sourcename: 'default'
  68. }
  69. ]}
  70. tableListFetcher={async () => {
  71. return ['1', '2', '3'];
  72. }}
  73. onConfirm={v => this._confirm.emit(v)}
  74. onCancel={() => this._cancel.emit()}
  75. />
  76. );
  77. }
  78. get confirm() {
  79. return this._confirm;
  80. }
  81. get cancel() {
  82. return this._cancel;
  83. }
  84. private _confirm = new Signal<DatasyncFormDialogBody, ISyncData[]>(this);
  85. private _cancel = new Signal<DatasyncFormDialogBody, void>(this);
  86. }
  87. class DatasyncFormDialogRenderer extends Dialog.Renderer {
  88. createFooter(_buttons: ReadonlyArray<HTMLElement>): Widget {
  89. return new Widget();
  90. }
  91. }