client.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import {
  2. Command,
  3. SwapData,
  4. } from 'ot-core';
  5. import {
  6. RemoveRow,
  7. InsertRow,
  8. DemoClient,
  9. } from './internal';
  10. const webClient = new DemoClient('127.0.0.1:3000');
  11. const sheetId = 'sheet1';
  12. const table = document.getElementById('table');
  13. const insert = document.getElementById('insert');
  14. const redo = document.getElementById('redo');
  15. const undo = document.getElementById('undo');
  16. function updateTable(data: Array<Array<string>>) {
  17. table.innerHTML = '';
  18. data.forEach((row) => {
  19. const tr = document.createElement('tr');
  20. row.forEach((content) => {
  21. const td = document.createElement('td');
  22. td.innerText = `${content}`;
  23. tr.append(td);
  24. });
  25. table.append(tr);
  26. });
  27. }
  28. webClient.getObserver().addOnConnectedListener({
  29. onConnected() {
  30. updateTable(webClient.getSource());
  31. },
  32. });
  33. webClient.getObserver().addOnAckListener({
  34. onAck() {
  35. updateTable(webClient.getSource());
  36. },
  37. });
  38. webClient.getObserver().addOnCommandListener({
  39. onCommand() {
  40. updateTable(webClient.getSource());
  41. },
  42. });
  43. insert.addEventListener('click', () => {
  44. const undoManager = webClient.getUndoManager();
  45. const location = <HTMLInputElement>document.getElementById('location');
  46. const number = <HTMLInputElement>document.getElementById('number');
  47. const content = <HTMLInputElement>document.getElementById('content');
  48. const swapBufferData = new SwapData({
  49. describe: "SwapData",
  50. data: new Array<Array<string>>(parseInt(number.value, 10)).fill([content.value, content.value, content.value, content.value, content.value]),
  51. });
  52. const redoCommand = new Command(sheetId, [
  53. new InsertRow({
  54. describe: "InsertRow",
  55. index: parseInt(location.value, 10),
  56. count: parseInt(number.value, 10),
  57. buffer: swapBufferData,
  58. }),
  59. ]);
  60. const undoCommand = new Command(sheetId, [
  61. new RemoveRow({
  62. describe: "RemoveRow",
  63. index: parseInt(location.value, 10),
  64. count: parseInt(number.value, 10),
  65. }),
  66. ]);
  67. undoManager.performCommand(redoCommand, undoCommand);
  68. });
  69. redo.addEventListener('click', () => {
  70. const undoManager = webClient.getUndoManager();
  71. undoManager.performRedo();
  72. });
  73. undo.addEventListener('click', () => {
  74. const undoManager = webClient.getUndoManager();
  75. undoManager.performUndo();
  76. });