devonthesofa_obsidian-note-.../utils/statusUtils.ts
2025-07-20 09:39:50 +02:00

74 lines
1.6 KiB
TypeScript

import { NoteStatus } from "@/types/noteStatus";
import { TFile } from "obsidian";
/**
* Checks if a status is selected in the current statuses array
*/
export const isStatusSelected = (
status: NoteStatus,
currentStatuses: NoteStatus[],
): boolean => {
return currentStatuses.some(
(s) => s.name === status.name && s.templateId === status.templateId,
);
};
/**
* Generates a tooltip string for a status
*/
export const getStatusTooltip = (status: NoteStatus): string => {
return status.description
? `${status.name} - ${status.description}`
: status.name;
};
/**
* Converts a TFile to a FileItem for UI display
*/
export interface FileItem {
id: string;
name: string;
path: string;
}
export const convertTFileToFileItem = (file: TFile): FileItem => ({
id: file.path,
name: file.basename,
path: file.path,
});
/**
* Gets the display name for a status, optionally including description
*/
export const getStatusDisplayName = (
status: NoteStatus,
includeDescription = false,
): string => {
if (!includeDescription || !status.description) {
return status.name;
}
return `${status.name} - ${status.description}`;
};
/**
* Compares two statuses for equality by name and templateId
*/
export const isStatusEqual = (
status1: NoteStatus,
status2: NoteStatus,
): boolean => {
return (
status1.name === status2.name &&
status1.templateId === status2.templateId
);
};
/**
* Finds a status by name in an array
*/
export const findStatusByName = (
statuses: NoteStatus[],
name: string,
): NoteStatus | undefined => {
return statuses.find((status) => status.name === name);
};