chore: multiple fixes

This commit is contained in:
Aleix Soler 2025-07-19 17:17:08 +02:00
parent 454ef48a1e
commit fd1e4e6176
6 changed files with 71 additions and 7 deletions

View file

@ -9,11 +9,13 @@ export type DashboardAction =
| "copy-status"
| "paste-status"
| "search-by-status"
| "search-by-specific-status"
| "toggle-multiple-mode"
| "set-quick-status";
interface QuickActionsPanelProps {
hasCurrentFile: boolean;
hasCurrentNoteStatuses: boolean;
useMultipleStatuses: boolean;
quickStatusCommands: string[];
onAction: (action: DashboardAction, value?: string) => void;
@ -21,6 +23,7 @@ interface QuickActionsPanelProps {
export const QuickActionsPanel = ({
hasCurrentFile,
hasCurrentNoteStatuses,
useMultipleStatuses,
quickStatusCommands,
onAction,
@ -140,7 +143,7 @@ export const QuickActionsPanel = ({
<button
className="quick-action-btn"
onClick={() => onAction("search-by-status")}
disabled={!hasCurrentFile}
disabled={!hasCurrentFile || !hasCurrentNoteStatuses}
title="Search for notes with same status"
>
Search by Status

View file

@ -40,6 +40,13 @@ export const StatusDashboard = ({
);
}
// Check if current note has any statuses
const hasCurrentNoteStatuses =
currentNote.file &&
Object.values(currentNote.statuses).some(
(statuses) => statuses.length > 0,
);
return (
<div className="status-dashboard">
<div className="status-dashboard-header">
@ -59,9 +66,13 @@ export const StatusDashboard = ({
<StatusDistributionChart
vaultStats={vaultStats}
availableStatuses={availableStatuses}
onStatusClick={(statusName) =>
onAction("search-by-specific-status", statusName)
}
/>
<QuickActionsPanel
hasCurrentFile={!!currentNote.file}
hasCurrentNoteStatuses={!!hasCurrentNoteStatuses}
useMultipleStatuses={settings.useMultipleStatuses}
quickStatusCommands={settings.quickStatusCommands}
onAction={onAction}

View file

@ -6,11 +6,13 @@ import { NoteStatus } from "@/types/noteStatus";
interface StatusDistributionChartProps {
vaultStats: VaultStats;
availableStatuses: NoteStatus[];
onStatusClick?: (statusName: string) => void;
}
export const StatusDistributionChart = ({
vaultStats,
availableStatuses,
onStatusClick,
}: StatusDistributionChartProps) => {
const statusChart = useMemo(() => {
const total = Object.values(vaultStats.statusDistribution).reduce(
@ -45,7 +47,16 @@ export const StatusDistributionChart = ({
{statusChart.map(({ name, count, percentage }) => {
const status = statusMap.get(name);
return (
<div key={name} className="status-chart-item">
<div
key={name}
className={`status-chart-item ${onStatusClick ? "status-chart-item--clickable" : ""}`}
onClick={() => onStatusClick?.(name)}
title={
onStatusClick
? `Click to search for notes with status: ${name}`
: undefined
}
>
<div className="status-chart-info">
{status && (
<StatusDisplay

View file

@ -47,7 +47,6 @@ export class FileExplorerIntegration implements IElementProcessor {
"plugin-settings-changed",
({ key }) => {
if (key === "fileExplorerIconPosition") {
console.log("renreder");
this.destroy();
this.integrate().catch((r) => console.error(r));
}

View file

@ -216,6 +216,11 @@ export class StatusDashboardView extends ItemView {
}
}
break;
case "search-by-specific-status":
if (value) {
this.searchBySpecificStatus(value);
}
break;
}
};
@ -233,11 +238,34 @@ export class StatusDashboardView extends ItemView {
!frontmatter || !frontmatter[settingsService.settings.tagPrefix]
);
});
new Notice(`Found ${filesWithoutStatus.length} notes without status`);
console.log(
"Notes without status:",
filesWithoutStatus.map((f) => f.path),
if (filesWithoutStatus.length === 0) {
new Notice("All notes have status assigned!");
return;
}
new Notice(
`Found ${filesWithoutStatus.length} notes without status. Opening search...`,
);
// Create a search query to find files without the status tag
const tagPrefix = settingsService.settings.tagPrefix;
const query = `-[${tagPrefix}:]`;
// @ts-ignore
this.app.internalPlugins.plugins[
"global-search"
].instance.openGlobalSearch(query);
}
private searchBySpecificStatus(statusName: string) {
const tagPrefix = settingsService.settings.tagPrefix;
const query = `[${tagPrefix}:"${statusName}"]`;
// @ts-ignore
this.app.internalPlugins.plugins[
"global-search"
].instance.openGlobalSearch(query);
}
private renderDashboard() {

View file

@ -195,6 +195,18 @@
gap: var(--size-2-1);
}
.status-chart-item--clickable {
cursor: pointer;
transition: all var(--anim-duration-fast) ease;
padding: var(--size-2-2);
border-radius: var(--radius-s);
}
.status-chart-item--clickable:hover {
background: var(--background-modifier-hover);
transform: translateY(-1px);
}
.status-chart-info {
display: flex;
align-items: center;