From 5229b2d1a5f02ad5604c2ce4ecde924219f940c8 Mon Sep 17 00:00:00 2001 From: slips Date: Wed, 22 Apr 2026 13:43:27 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20update=20status=20only=20=E2=80=94=20don?= =?UTF-8?q?'t=20call=20updateJiraToLocal=20with=20partial=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Passing {fields: {status: {name: ...}}} to updateJiraToLocal caused all fromJira mappings to run with undefined inputs, producing empty strings that overwrote description and comments. Now updates only the status field in frontmatter and sync content markers directly. --- src/file_operations/createUpdateIssue.ts | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/file_operations/createUpdateIssue.ts b/src/file_operations/createUpdateIssue.ts index db23846..cc804ac 100644 --- a/src/file_operations/createUpdateIssue.ts +++ b/src/file_operations/createUpdateIssue.ts @@ -5,6 +5,7 @@ import { prepareJiraFieldsFromFile } from './commonPrepareData'; import { localToJiraFields, updateJiraToLocal } from '../tools/mapObsidianJiraFields'; import { JiraIssue, JiraTransitionType } from '../interfaces'; import { obsidianJiraFieldMappings } from '../default/obsidianJiraFieldsMapping'; +import { updateJiraSyncContent } from '../tools/sectionTools'; export async function updateIssueFromFile(plugin: JiraPlugin, file: TFile): Promise { let fields = await prepareJiraFieldsFromFile(plugin, file); @@ -72,8 +73,24 @@ export async function updateStatusFromFile( } await updateJiraStatus(plugin, fields.key, transition.id); - await updateJiraToLocal(plugin, file, { - fields: { status: { name: transition.status } }, - } as JiraIssue); + + // Only update the status field. Calling updateJiraToLocal with a partial issue + // causes all fromJira mappings to run with undefined inputs, producing empty strings + // that overwrite description and comments. + const allMappings = {...obsidianJiraFieldMappings, ...plugin.settings.fieldMapping.fieldMappings}; + const statusMapping = allMappings['status']; + const minimalIssue = {fields: {status: {name: transition.status}}} as JiraIssue; + const localStatusValue = statusMapping + ? statusMapping.fromJira(minimalIssue, {}) + : transition.status; + + if (localStatusValue !== null && localStatusValue !== undefined) { + await plugin.app.fileManager.processFrontmatter(file, (frontmatter) => { + frontmatter['status'] = localStatusValue; + }); + await plugin.app.vault.process(file, (fileContent) => { + return updateJiraSyncContent(fileContent, {status: String(localStatusValue)}); + }); + } return fields.key; }