create.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import loggerFactory from '~/utils/logger';
  2. const { markdownSectionBlock, inputSectionBlock } = require('@growi/slack');
  3. const logger = loggerFactory('growi:service:SlackCommandHandler:create');
  4. module.exports = (crowi) => {
  5. const CreatePageService = require('./create-page-service');
  6. const createPageService = new CreatePageService(crowi);
  7. const BaseSlackCommandHandler = require('./slack-command-handler');
  8. const handler = new BaseSlackCommandHandler();
  9. handler.handleCommand = async(client, body) => {
  10. await client.views.open({
  11. trigger_id: body.trigger_id,
  12. view: {
  13. type: 'modal',
  14. callback_id: 'create:createPage',
  15. title: {
  16. type: 'plain_text',
  17. text: 'Create Page',
  18. },
  19. submit: {
  20. type: 'plain_text',
  21. text: 'Submit',
  22. },
  23. close: {
  24. type: 'plain_text',
  25. text: 'Cancel',
  26. },
  27. blocks: [
  28. markdownSectionBlock('Create new page.'),
  29. inputSectionBlock('path', 'Path', 'path_input', false, '/path'),
  30. inputSectionBlock('contents', 'Contents', 'contents_input', true, 'Input with Markdown...'),
  31. ],
  32. private_metadata: JSON.stringify({ channelId: body.channel_id, channelName: body.channel_name }),
  33. },
  34. });
  35. };
  36. handler.handleBlockActions = async function(client, payload, handlerMethodName) {
  37. await this[handlerMethodName](client, payload);
  38. };
  39. handler.createPage = async function(client, payload) {
  40. const path = payload.view.state.values.path.path_input.value;
  41. const channelId = JSON.parse(payload.view.private_metadata).channelId;
  42. const contentsBody = payload.view.state.values.contents.contents_input.value;
  43. await createPageService.createPageInGrowi(client, payload, path, channelId, contentsBody);
  44. };
  45. return handler;
  46. };