note.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import {
  2. markdownHeaderBlock, inputSectionBlock, inputBlock, actionsBlock, buttonElement,
  3. } from '@growi/slack/dist/utils/block-kit-builder';
  4. import { SlackCommandHandlerError } from '~/server/models/vo/slack-command-handler-error';
  5. import loggerFactory from '~/utils/logger';
  6. const logger = loggerFactory('growi:service:SlackCommandHandler:note');
  7. module.exports = (crowi) => {
  8. const CreatePageService = require('./create-page-service');
  9. const createPageService = new CreatePageService(crowi);
  10. const BaseSlackCommandHandler = require('./slack-command-handler');
  11. const handler = new BaseSlackCommandHandler();
  12. const conversationsSelectElement = {
  13. action_id: 'conversation',
  14. type: 'conversations_select',
  15. default_to_current_conversation: true,
  16. };
  17. const { User } = crowi.models;
  18. handler.handleCommand = async(growiCommand, client, body, respondUtil) => {
  19. await respondUtil.respond({
  20. text: 'Take a note on GROWI',
  21. blocks: [
  22. markdownHeaderBlock('Take a note on GROWI'),
  23. inputBlock(conversationsSelectElement, 'conversation', 'Channel name to display in the page to be created'),
  24. inputSectionBlock('path', 'Page path', 'path_input', false, '/path'),
  25. inputSectionBlock('contents', 'Contents', 'contents_input', true, 'Input with Markdown...'),
  26. actionsBlock(
  27. buttonElement({ text: 'Cancel', actionId: 'note:cancel' }),
  28. buttonElement({ text: 'Create page', actionId: 'note:createPage', style: 'primary' }),
  29. ),
  30. ],
  31. });
  32. };
  33. handler.cancel = async function(client, interactionPayload, interactionPayloadAccessor, respondUtil) {
  34. await respondUtil.deleteOriginal();
  35. };
  36. handler.handleInteractions = async function(client, interactionPayload, interactionPayloadAccessor, handlerMethodName, respondUtil) {
  37. await this[handlerMethodName](client, interactionPayload, interactionPayloadAccessor, respondUtil);
  38. };
  39. handler.createPage = async function(client, interactionPayload, interactionPayloadAccessor, respondUtil) {
  40. const user = await User.findUserBySlackMemberId(interactionPayload.user.id);
  41. const path = interactionPayloadAccessor.getStateValues()?.path.path_input.value;
  42. const contentsBody = interactionPayloadAccessor.getStateValues()?.contents.contents_input.value;
  43. if (path == null || contentsBody == null) {
  44. throw new SlackCommandHandlerError('All parameters are required.');
  45. }
  46. await createPageService.createPageInGrowi(interactionPayloadAccessor, path, contentsBody, respondUtil, user);
  47. await respondUtil.deleteOriginal();
  48. };
  49. return handler;
  50. };