handler-interaction-block.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import { objectHasKey } from '@/utils/helper';
  2. import { getBlockConnection } from '../helper';
  3. async function interactionHandler(block, { refData }) {
  4. const nextBlockId = getBlockConnection(block);
  5. const messagePayload = {
  6. ...block,
  7. refData,
  8. frameSelector: this.frameSelector,
  9. };
  10. try {
  11. const data = await this._sendMessageToTab(messagePayload, {
  12. frameId: this.frameId || 0,
  13. });
  14. if (block.name === 'link')
  15. await new Promise((resolve) => setTimeout(resolve, 5000));
  16. if (objectHasKey(block.data, 'dataColumn')) {
  17. if (!block.data.saveData)
  18. return {
  19. data,
  20. nextBlockId,
  21. };
  22. const currentColumnType =
  23. this.columns[block.data.dataColumn]?.type || 'any';
  24. if (Array.isArray(data) && currentColumnType !== 'array') {
  25. data.forEach((item) => {
  26. this.addData(block.data.dataColumn, item);
  27. if (objectHasKey(block.data, 'extraRowDataColumn')) {
  28. if (block.data.addExtraRow)
  29. this.addData(
  30. block.data.extraRowDataColumn,
  31. block.data.extraRowValue
  32. );
  33. }
  34. });
  35. } else {
  36. this.addData(block.data.dataColumn, data);
  37. if (objectHasKey(block.data, 'extraRowDataColumn')) {
  38. if (block.data.addExtraRow)
  39. this.addData(
  40. block.data.extraRowDataColumn,
  41. block.data.extraRowValue
  42. );
  43. }
  44. }
  45. } else if (block.name === 'javascript-code') {
  46. const arrData = Array.isArray(data) ? data : [data];
  47. this.addData(arrData);
  48. }
  49. return {
  50. data,
  51. nextBlockId,
  52. };
  53. } catch (error) {
  54. error.nextBlockId = nextBlockId;
  55. error.data = {
  56. name: block.name,
  57. selector: block.data.selector,
  58. };
  59. throw error;
  60. }
  61. }
  62. export default interactionHandler;