| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- import {
- actionsBlock,
- buttonElement,
- inputBlock,
- inputSectionBlock,
- markdownHeaderBlock,
- } from '@growi/slack/dist/utils/block-kit-builder';
- import { SlackCommandHandlerError } from '~/server/models/vo/slack-command-handler-error';
- import loggerFactory from '~/utils/logger';
- const logger = loggerFactory('growi:service:SlackCommandHandler:note');
- /** @param {import('~/server/crowi').default} crowi Crowi instance */
- module.exports = (crowi) => {
- const CreatePageService = require('./create-page-service');
- const createPageService = new CreatePageService(crowi);
- const BaseSlackCommandHandler = require('./slack-command-handler');
- const handler = new BaseSlackCommandHandler();
- const conversationsSelectElement = {
- action_id: 'conversation',
- type: 'conversations_select',
- default_to_current_conversation: true,
- };
- const { User } = crowi.models;
- handler.handleCommand = async (growiCommand, client, body, respondUtil) => {
- await respondUtil.respond({
- text: 'Take a note on GROWI',
- blocks: [
- markdownHeaderBlock('Take a note on GROWI'),
- inputBlock(
- conversationsSelectElement,
- 'conversation',
- 'Channel name to display in the page to be created',
- ),
- inputSectionBlock('path', 'Page path', 'path_input', false, '/path'),
- inputSectionBlock(
- 'contents',
- 'Contents',
- 'contents_input',
- true,
- 'Input with Markdown...',
- ),
- actionsBlock(
- buttonElement({ text: 'Cancel', actionId: 'note:cancel' }),
- buttonElement({
- text: 'Create page',
- actionId: 'note:createPage',
- style: 'primary',
- }),
- ),
- ],
- });
- };
- handler.cancel = async (
- client,
- interactionPayload,
- interactionPayloadAccessor,
- respondUtil,
- ) => {
- await respondUtil.deleteOriginal();
- };
- handler.handleInteractions = async function (
- client,
- interactionPayload,
- interactionPayloadAccessor,
- handlerMethodName,
- respondUtil,
- ) {
- await this[handlerMethodName](
- client,
- interactionPayload,
- interactionPayloadAccessor,
- respondUtil,
- );
- };
- handler.createPage = async (
- client,
- interactionPayload,
- interactionPayloadAccessor,
- respondUtil,
- ) => {
- const user = await User.findUserBySlackMemberId(interactionPayload.user.id);
- const path =
- interactionPayloadAccessor.getStateValues()?.path.path_input.value;
- const contentsBody =
- interactionPayloadAccessor.getStateValues()?.contents.contents_input
- .value;
- if (path == null || contentsBody == null) {
- throw new SlackCommandHandlerError('All parameters are required.');
- }
- await createPageService.createPageInGrowi(
- interactionPayloadAccessor,
- path,
- contentsBody,
- respondUtil,
- user,
- );
- await respondUtil.deleteOriginal();
- };
- return handler;
- };
|