| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import loggerFactory from '~/utils/logger';
- const {
- markdownSectionBlock, inputSectionBlock, inputBlock,
- } = require('@growi/slack');
- const logger = loggerFactory('growi:service:SlackCommandHandler:note');
- 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',
- response_url_enabled: true,
- default_to_current_conversation: true,
- };
- handler.handleCommand = async(growiCommand, client, body, respondUtil) => {
- await client.views.open({
- trigger_id: body.trigger_id,
- view: {
- type: 'modal',
- callback_id: 'note:createPage',
- title: {
- type: 'plain_text',
- text: 'Take a note',
- },
- submit: {
- type: 'plain_text',
- text: 'Submit',
- },
- close: {
- type: 'plain_text',
- text: 'Cancel',
- },
- blocks: [
- markdownSectionBlock('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...'),
- ],
- private_metadata: JSON.stringify({ channelId: body.channel_id, channelName: body.channel_name }),
- },
- });
- };
- handler.handleInteractions = async function(client, interactionPayload, interactionPayloadAccessor, handlerMethodName, respondUtil) {
- await this[handlerMethodName](client, interactionPayload, interactionPayloadAccessor, respondUtil);
- };
- handler.createPage = async function(client, interactionPayload, interactionPayloadAccessor, respondUtil) {
- const path = interactionPayloadAccessor.getStateValues()?.path.path_input.value;
- const privateMetadata = interactionPayloadAccessor.getViewPrivateMetaData();
- if (privateMetadata == null) {
- await respondUtil.respond({
- text: 'Error occurred',
- blocks: [
- markdownSectionBlock('Failed to create a page.'),
- ],
- });
- return;
- }
- const contentsBody = interactionPayloadAccessor.getStateValues()?.contents.contents_input.value;
- await createPageService.createPageInGrowi(interactionPayloadAccessor, path, contentsBody, respondUtil);
- };
- return handler;
- };
|