mirror of
https://github.com/devonthesofa/obsidian-note-status.git
synced 2026-07-22 05:45:04 +00:00
chore: multiple fixes
This commit is contained in:
parent
454ef48a1e
commit
fd1e4e6176
6 changed files with 71 additions and 7 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue