()
| 166 | } |
| 167 | |
| 168 | private buildMenu(): void { |
| 169 | const { task, plugin } = this.options; |
| 170 | const hasPromotedOccurrenceControls = this.addPromotedOccurrenceControls(task, plugin); |
| 171 | |
| 172 | // Status submenu |
| 173 | this.menu.addItem((item) => { |
| 174 | item.setTitle(this.t("contextMenus.task.status")); |
| 175 | item.setIcon("circle"); |
| 176 | |
| 177 | const submenu = getSubmenu(item); |
| 178 | this.addStatusOptions(submenu, task, plugin); |
| 179 | }); |
| 180 | |
| 181 | this.menu.addSeparator(); |
| 182 | |
| 183 | // Priority submenu |
| 184 | this.menu.addItem((item) => { |
| 185 | item.setTitle(this.t("contextMenus.task.priority")); |
| 186 | item.setIcon("star"); |
| 187 | |
| 188 | const submenu = getSubmenu(item); |
| 189 | this.addPriorityOptions(submenu, task, plugin); |
| 190 | }); |
| 191 | |
| 192 | // Tags submenu |
| 193 | this.menu.addItem((item) => { |
| 194 | item.setTitle(this.t("contextMenus.task.tags")); |
| 195 | item.setIcon("tags"); |
| 196 | |
| 197 | const submenu = getSubmenu(item); |
| 198 | this.addTagOptions(submenu, task, plugin); |
| 199 | }); |
| 200 | |
| 201 | this.menu.addSeparator(); |
| 202 | |
| 203 | // Due Date submenu |
| 204 | this.menu.addItem((item) => { |
| 205 | item.setTitle(this.t("contextMenus.task.dueDate")); |
| 206 | item.setIcon("calendar"); |
| 207 | |
| 208 | const submenu = getSubmenu(item); |
| 209 | this.addDateOptions( |
| 210 | submenu, |
| 211 | task.due, |
| 212 | async (value: string | null) => { |
| 213 | try { |
| 214 | await plugin.updateTaskProperty(task, "due", value || undefined); |
| 215 | this.options.onUpdate?.(); |
| 216 | } catch (error) { |
| 217 | const errorMessage = error instanceof Error ? error.message : String(error); |
| 218 | tasknotesLogger.error("Error updating task due date:", { |
| 219 | category: "validation", |
| 220 | operation: "updating-task-due-date", |
| 221 | details: { taskPath: task.path }, |
| 222 | error: errorMessage, |
| 223 | }); |
| 224 | new Notice( |
| 225 | this.t("contextMenus.task.notices.updateDueDateFailure", { |
no test coverage detected