itizawa 4 лет назад
Родитель
Сommit
7a60f9bc0e

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

@@ -19,6 +19,7 @@ import { OrderRepository } from '~/repositories/order';
 import { InstallerService } from '~/services/InstallerService';
 import loggerFactory from '~/utils/logger';
 import { DelegatorType, factory as GrowiUriInjectorFactory } from '~/services/growi-uri-injector';
+import { growiUriInjectionModalDelegator } from '~/services/growi-uri-injector/GrowiUriInjectionModalDelegator';
 
 
 const logger = loggerFactory('slackbot-proxy:controllers:growi-to-slack');
@@ -166,10 +167,20 @@ export class GrowiToSlackCtrl {
 
   injectGrowiUri(req:GrowiReq, growiUri:string):WebAPICallOptions {
 
-    Object.values(DelegatorType).forEach((type) => {
-      const growiUriInjector = GrowiUriInjectorFactory.getDelegator(type);
-      growiUriInjector.inject(req.body, growiUri);
-    });
+    if (req.body.view != null) {
+      growiUriInjectionModalDelegator.inject(req.body, growiUri);
+    }
+
+    if (req.body.blocks != null) {
+      const parsedBlocks = JSON.parse(req.body.blocks as string);
+
+      Object.values(DelegatorType).forEach((type) => {
+        const growiUriInjector = GrowiUriInjectorFactory.getDelegator(type);
+        growiUriInjector.inject(parsedBlocks, growiUri);
+      });
+
+      req.body.blocks = JSON.stringify(parsedBlocks);
+    }
 
     const opt = req.body;
     opt.headers = req.headers;

+ 4 - 3
packages/slackbot-proxy/src/middlewares/slack-to-growi/extract-growi-uri-from-req.ts

@@ -21,13 +21,14 @@ export class ExtractGrowiUriFromReq implements IMiddleware {
       // break when uri is found
       for (const type of Object.values(DelegatorType)) {
         const growiUriInjector = GrowiUriInjectorFactory.getDelegator(type);
-        const parsedValues = growiUriInjector.extract(payload);
+        const parsedValues = growiUriInjector.extract(payload.actions[0]);
+        console.log(25, payload.actions[0], parsedValues);
+
         if (parsedValues.growiUri != null) {
           req.growiUri = parsedValues.growiUri;
+          payload.actions[0].value = JSON.stringify(parsedValues.originalData);
           break;
         }
-        console.log(22, parsedValues);
-
       }
     }
 

+ 14 - 19
packages/slackbot-proxy/src/services/growi-uri-injector/GrowiUriInjectionButtonDelegator.ts

@@ -3,35 +3,30 @@ import { GrowiUriInjector } from './GrowiUriInjector';
 
 export class GrowiUriInjectionButtonDelegator implements GrowiUriInjector {
 
-
-  inject(body: any, growiUri:string): void {
-    if (body.blocks == null) {
-      return;
-    }
-    const parsedBlocks = JSON.parse(body.blocks as string);
+  inject(parsedBlocks: any, growiUri:string): void {
     parsedBlocks.forEach((parsedBlock) => {
       if (parsedBlock.type !== 'actions') {
         return;
       }
       parsedBlock.elements.forEach((element) => {
-        const parsedValue = JSON.parse(element.value as string);
-        parsedValue.growiUri = growiUri;
-        element.value = JSON.stringify(parsedValue);
+        // TODO shoud handle method
+        if (element.type === 'button') {
+          const parsedValue = JSON.parse(element.value as string);
+          const originalData = JSON.stringify(parsedValue);
+          element.value = JSON.stringify({ growiUri, originalData });
+        }
       });
     });
-
-    body.blocks = JSON.stringify(parsedBlocks);
   }
 
-  extract(body: any): string|void {
-    const payload = JSON.parse(body.payload);
-
-    if (payload?.actions[0]?.value == null) {
-      return;
+  extract(action: any): {growiUri?:string, originalData:any} {
+    const parsedValues = JSON.parse(action.value);
+    if (parsedValues.originalData != null) {
+      parsedValues.originalData = JSON.parse(parsedValues.originalData);
     }
-
-    const parsedValues = JSON.parse(payload.actions[0]?.value);
-    return parsedValues.growiUri;
+    return parsedValues;
   }
 
 }
+
+export const growiUriInjectionButtonDelegator = new GrowiUriInjectionButtonDelegator();