mirror of
https://github.com/alamion/obsidian-jira-sync.git
synced 2026-07-22 12:20:29 +00:00
- multiple fixes and code refactors for last feats to work correctly - added Jira api_version variable to field mapping context
79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
import JiraPlugin from '../main';
|
|
import { TFile } from 'obsidian';
|
|
import { createJiraIssue, fetchIssue, updateJiraIssue, updateJiraStatus } from '../api';
|
|
import { prepareJiraFieldsFromFile } from './commonPrepareData';
|
|
import { localToJiraFields, updateJiraToLocal } from '../tools/mapObsidianJiraFields';
|
|
import { JiraIssue, JiraTransitionType } from '../interfaces';
|
|
import { obsidianJiraFieldMappings } from '../default/obsidianJiraFieldsMapping';
|
|
|
|
export async function updateIssueFromFile(plugin: JiraPlugin, file: TFile): Promise<string> {
|
|
let fields = await prepareJiraFieldsFromFile(plugin, file);
|
|
const issueKey = fields.key;
|
|
const apiVersion = plugin.getCurrentConnection()?.apiVersion;
|
|
|
|
if (!issueKey) {
|
|
throw new Error('No issue key found in frontmatter');
|
|
}
|
|
|
|
fields = localToJiraFields(
|
|
fields,
|
|
{
|
|
...obsidianJiraFieldMappings,
|
|
...plugin.settings.fieldMapping.fieldMappings,
|
|
},
|
|
apiVersion,
|
|
);
|
|
await updateJiraIssue(plugin, issueKey, fields);
|
|
return issueKey;
|
|
}
|
|
|
|
export async function createIssueFromFile(
|
|
plugin: JiraPlugin,
|
|
file: TFile,
|
|
fields?: Record<string, any>,
|
|
): Promise<string> {
|
|
const apiVersion = plugin.getCurrentConnection()?.apiVersion;
|
|
if (!fields) {
|
|
fields = await prepareJiraFieldsFromFile(plugin, file);
|
|
}
|
|
fields = localToJiraFields(
|
|
fields,
|
|
{
|
|
...obsidianJiraFieldMappings,
|
|
...plugin.settings.fieldMapping.fieldMappings,
|
|
},
|
|
apiVersion,
|
|
);
|
|
// Create the issue
|
|
const issueData = await createJiraIssue(plugin, fields);
|
|
const issueKey = issueData.key;
|
|
|
|
// Update frontmatter with the new issue key
|
|
await plugin.app.fileManager.processFrontMatter(file, (frontmatter) => {
|
|
frontmatter['key'] = issueKey;
|
|
});
|
|
|
|
// Pull the created issue back from Jira to populate all remaining synced fields
|
|
const createdIssue = await fetchIssue(plugin, issueKey);
|
|
await updateJiraToLocal(plugin, file, createdIssue);
|
|
|
|
return issueKey;
|
|
}
|
|
|
|
export async function updateStatusFromFile(
|
|
plugin: JiraPlugin,
|
|
file: TFile,
|
|
transition: JiraTransitionType,
|
|
): Promise<string> {
|
|
const fields = await prepareJiraFieldsFromFile(plugin, file);
|
|
|
|
if (!fields.key) {
|
|
throw new Error('No issue key found in frontmatter');
|
|
}
|
|
|
|
await updateJiraStatus(plugin, fields.key, transition.id);
|
|
await updateJiraToLocal(plugin, file, {
|
|
fields: { status: { name: transition.status } },
|
|
} as JiraIssue);
|
|
return fields.key;
|
|
}
|