feat: add strict statuses

This commit is contained in:
Aleix Soler 2025-05-24 14:36:31 +02:00
parent 23118c613c
commit 0bd515ac61
4 changed files with 26 additions and 6 deletions

View file

@ -23,6 +23,7 @@ export const DEFAULT_SETTINGS: NoteStatusSettings = {
useCustomStatusesOnly: false,
useMultipleStatuses: true,
tagPrefix: 'obsidian-note-status',
strictStatuses: false, // Default to show all statuses from frontmatter
excludeUnknownStatus: true, // Default to exclude unknown status files for better performance
};
@ -35,4 +36,4 @@ export const DEFAULT_COLORS: Record<string, string> = {
completed: '#00aaff', // Blue for accent
dropped: '#ff0000', // Red for error
unknown: '#888888' // Gray for muted
};
};

View file

@ -160,6 +160,14 @@ export class NoteStatusSettingsUI {
this.callbacks.onSettingChange('tagPrefix', value.trim());
}
}));
new Setting(containerEl)
.setName('Strict status validation')
.setDesc('Only show statuses that are defined in templates or custom statuses. ⚠️ WARNING: When enabled, any unknown statuses will be automatically removed when modifying file statuses.')
.addToggle(toggle => toggle
.setValue(settings.strictStatuses || false)
.onChange(value => this.callbacks.onSettingChange('strictStatuses', value)));
}
/**

View file

@ -26,6 +26,7 @@ export interface NoteStatusSettings {
useCustomStatusesOnly: boolean; // Whether to use only custom statuses or include templates
useMultipleStatuses: boolean; // Whether to allow multiple statuses per note
tagPrefix: string; // Prefix for the status tag (default: 'status')
strictStatuses: boolean; // Whether to only show known statuses
excludeUnknownStatus: boolean; // Whether to exclude files with unknown status from the status pane
}
@ -39,4 +40,4 @@ export interface FileExplorerView extends View {
titleEl?: HTMLElement;
selfEl?: HTMLElement;
}>;
}
}

View file

@ -83,12 +83,22 @@ export class StatusService {
if (Array.isArray(frontmatterStatus)) {
for (const statusName of frontmatterStatus) {
this.addValidStatus(statusName.toString(), statuses);
if (this.settings.strictStatuses) {
this.addValidStatus(statusName.toString(), statuses);
} else {
const cleanStatus = statusName.toString().trim();
if (cleanStatus) statuses.push(cleanStatus);
}
}
} else {
this.addValidStatus(frontmatterStatus.toString(), statuses);
if (this.settings.strictStatuses) {
this.addValidStatus(frontmatterStatus.toString(), statuses);
} else {
const cleanStatus = frontmatterStatus.toString().trim();
if (cleanStatus) statuses.push(cleanStatus);
}
}
return statuses.length > 0 ? statuses : ['unknown'];
}
@ -361,4 +371,4 @@ export class StatusService {
}
}));
}
}
}