import type { ProjectPluginConfig, PluginConfigScanResultItem } from '@/types' const triggerApiMap = { 'ones:task:add': ['/api/project/team/{placeholder}/tasks/add3'], 'ones:task:fields:update': ['/api/project/team/{placeholder}/tasks/update3'], 'ones:task:field:status:update': [ '/api/project/team/{placeholder}/task/{placeholder}/new_transit', '/api/project/team/{placeholder}/task/{placeholder}/commit_publish_version', ], 'ones:task:action:stdToStdIssueType': ['/api/project/team/{placeholder}/tasks/update_issuetype'], 'ones:task:action:stdToSubIssueType': ['/api/project/team/{placeholder}/tasks/update_issuetype'], 'ones:task:action:subToSubIssueType': ['/api/project/team/{placeholder}/tasks/update_issuetype'], 'ones:task:action:subToStdIssueType': ['/api/project/team/{placeholder}/tasks/update_issuetype'], 'ones:taskList:action:modifyIssueType': [ '/api/project/team/{placeholder}/tasks/update_issuetype', ], 'ones:taskList:action:stdToSubIssueType': [ '/api/project/team/{placeholder}/tasks/update_issuetype', ], 'ones:taskList:action:subToStdIssueType': [ '/api/project/team/{placeholder}/tasks/update_issuetype', ], 'ones:taskList:batchAdd': ['/api/project/team/{placeholder}/tasks/batch_add'], 'ones:manhour:estimated:update': [ '/api/project/team/{placeholder}/task/{placeholder}/assess_manhour/update', ], 'ones:project:add': ['/api/project/team/{placeholder}/projects/add'], 'ones:project:copy': ['/api/project/team/{placeholder}/projects/copy2'], 'ones:project:update': ['/api/project/team/{placeholder}/item/{placeholder}/update'], 'ones:space:add': ['/api/project/team/{placeholder}/spaces/add'], 'ones:space:copy': ['/api/project/team/{placeholder}/space/{placeholder}/copy_pages'], 'ones:space:update': ['/api/project/team/{placeholder}/space/{placeholder}/update'], 'ones:space:delete': ['/api/project/team/{placeholder}/space/{placeholder}/delete'], 'ones:manhour:remaining:update': [ '/api/project/team/{placeholder}/task/{placeholder}/remaining_hour/update', ], 'ones:manhour:add': ['/api/project/team/{placeholder}/items/graphql'], 'ones:manhour:update': ['/api/project/team/{placeholder}/items/graphql'], 'ones:manhour:delete': ['/api/project/team/{placeholder}/items/graphql'], 'ones:activity:add': ['/api/project/team/{placeholder}/items/graphql'], 'ones:activity:update': ['/api/project/team/{placeholder}/items/graphql'], 'ones:activity:delete': ['/api/project/team/{placeholder}/items/graphql'], 'ones:activityRelease:add': ['/api/project/team/{placeholder}/items/graphql'], 'ones:activityRelease:update': ['/api/project/team/{placeholder}/items/graphql'], 'ones:activityRelationLink:add': ['/api/project/team/{placeholder}/items/graphql'], 'ones:activityRelationLink:delete': ['/api/project/team/{placeholder}/items/graphql'], 'ones:deliverable:add': ['/api/project/team/{placeholder}/items/graphql'], 'ones:deliverable:update': ['/api/project/team/{placeholder}/items/graphql'], 'ones:deliverable:delete': ['/api/project/team/{placeholder}/items/graphql'], } const allTriggerApiMap: Record = Object.entries(triggerApiMap).reduce( (acc, [trigger, apis]) => ({ ...acc, [`action:pre:${trigger}`]: apis, [`action:post:${trigger}`]: apis, }), {}, ) export const scanPluginConfig = async (currentPluginConfig: ProjectPluginConfig) => { const triggerModules = currentPluginConfig?.modules?.filter((module) => module.moduleType === 'ones:global:trigger') || [] const result: PluginConfigScanResultItem[] = [] triggerModules.forEach((module) => { const { actions = [] } = module const actionsSet = new Set(actions) actionsSet.forEach((action) => { const correspondingApis = allTriggerApiMap[action] if (correspondingApis) { result.push({ value: `[trigger] ${action}`, correspondingApis, matched: [], }) } }) }) const apis = currentPluginConfig?.apis || [] apis.forEach((api) => { result.push({ value: `[${api.type}] ${api.url}`, correspondingApis: [api.url], matched: [], }) }) return result }