Răsfoiți Sursa

WIP: refactor data type

Yuki Takei 4 ani în urmă
părinte
comite
65eef0fc7a

+ 4 - 5
packages/slackbot-proxy/src/controllers/growi-to-slack.ts

@@ -180,17 +180,16 @@ export class GrowiToSlackCtrl {
 
   injectGrowiUri(req: GrowiReq, growiUri: string):WebAPICallOptions {
 
-    const parsedView = JSON.parse(req.body.view) as ViewElement;
-    const parsedBlocks = JSON.parse(req.body.blocks) as BlockElement[];
-
     // delegate to ViewInteractionPayloadDelegator
-    if (this.viewInteractionPayloadDelegator.shouldHandleToInject(parsedView)) {
+    if (this.viewInteractionPayloadDelegator.shouldHandleToInject(req)) {
+      const parsedView = JSON.parse(req.body.view) as ViewElement;
       this.viewInteractionPayloadDelegator.inject(parsedView, growiUri);
       req.body.view = JSON.stringify(parsedView);
     }
 
     // delegate to ActionsBlockPayloadDelegator
-    if (this.actionsBlockPayloadDelegator.shouldHandleToInject(parsedBlocks)) {
+    if (this.actionsBlockPayloadDelegator.shouldHandleToInject(req)) {
+      const parsedBlocks = JSON.parse(req.body.blocks) as BlockElement[];
       this.actionsBlockPayloadDelegator.inject(parsedBlocks, growiUri);
       req.body.blocks = JSON.stringify(parsedBlocks);
     }

+ 3 - 3
packages/slackbot-proxy/src/interfaces/growi-uri-injector.ts

@@ -41,11 +41,11 @@ export const isGrowiUriWithOriginalData = (data: any): data is GrowiUriWithOrigi
 
 export interface GrowiUriInjector<IDATA extends ViewElement|BlockElement[], EDATA extends (ViewInteractionPayload|BlockActionsPayload)> {
 
-  shouldHandleToInject(data: IDATA): boolean;
-  inject(data: IDATA, growiUri:string): void;
+  shouldHandleToInject(data: unknown): boolean;
+  inject(data: unknown, growiUri:string): void;
 
   shouldHandleToExtract(data: EDATA): boolean;
-  extract(data: EDATA): GrowiUriWithOriginalData;
+  extract(data: unknown): GrowiUriWithOriginalData;
 
 }
 

+ 8 - 16
packages/slackbot-proxy/src/services/growi-uri-injector/ActionsBlockPayloadDelegator.ts

@@ -1,4 +1,5 @@
 import { Inject, OnInit, Service } from '@tsed/di';
+import { GrowiReq } from '~/interfaces/growi-to-slack/growi-req';
 import {
   BlockActionsPayload, BlockElement, GrowiUriInjector, GrowiUriWithOriginalData,
 } from '~/interfaces/growi-uri-injector';
@@ -17,19 +18,8 @@ export class ActionsBlockPayloadDelegator implements GrowiUriInjector<BlockEleme
     this.childDelegators.push(this.buttonActionPayloadDelegator);
   }
 
-  shouldHandleToInject(data: BlockElement[]): boolean {
-    const actionsBlocks = data.filter(blockElement => blockElement.type === 'actions');
-    if (actionsBlocks.length === 0) {
-      return false;
-    }
-
-    // collect elements
-    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
-    const elements = actionsBlocks.flatMap(actionBlock => actionBlock.elements!);
-
-    return this.childDelegators
-      .map(delegator => delegator.shouldHandleToInject(elements))
-      .includes(true);
+  shouldHandleToInject(req: GrowiReq): boolean {
+    return req.body.blocks != null;
   }
 
   inject(data: BlockElement[], growiUri: string): void {
@@ -52,17 +42,19 @@ export class ActionsBlockPayloadDelegator implements GrowiUriInjector<BlockEleme
       return false;
     }
 
+    const action = data.actions[0];
     return this.childDelegators
-      .map(delegator => delegator.shouldHandleToExtract(data.actions))
+      .map(delegator => delegator.shouldHandleToExtract(action))
       .includes(true);
   }
 
   extract(data: BlockActionsPayload & {actions: any}): GrowiUriWithOriginalData {
     let growiUriWithOriginalData: GrowiUriWithOriginalData;
 
+    const action = data.actions[0];
     for (const delegator of this.childDelegators) {
-      if (delegator.shouldHandleToExtract(data.actions)) {
-        growiUriWithOriginalData = delegator.extract(data.actions);
+      if (delegator.shouldHandleToExtract(action)) {
+        growiUriWithOriginalData = delegator.extract(action);
         break;
       }
     }

+ 3 - 2
packages/slackbot-proxy/src/services/growi-uri-injector/ViewInteractionPayloadDelegator.ts

@@ -1,4 +1,5 @@
 import { Service } from '@tsed/di';
+import { GrowiReq } from '~/interfaces/growi-to-slack/growi-req';
 import {
   GrowiUriInjector, GrowiUriWithOriginalData, isGrowiUriWithOriginalData, ViewElement, ViewInteractionPayload,
 } from '~/interfaces/growi-uri-injector';
@@ -6,8 +7,8 @@ import {
 @Service()
 export class ViewInteractionPayloadDelegator implements GrowiUriInjector<ViewElement, ViewInteractionPayload> {
 
-  shouldHandleToInject(data: ViewElement): boolean {
-    return data != null;
+  shouldHandleToInject(req: GrowiReq): boolean {
+    return req.body.view != null;
   }
 
   inject(data: ViewElement, growiUri :string): void {