mirror of
https://github.com/devonthesofa/obsidian-note-status.git
synced 2026-07-22 05:45:04 +00:00
refactor(events): propagate clicked activeStatus payload from UI components to modal integrations
This commit is contained in:
parent
1bf7f3d8fb
commit
c1b1b76a90
5 changed files with 21 additions and 4 deletions
|
|
@ -13,6 +13,7 @@ export interface Props {
|
|||
templates: StatusTemplate[];
|
||||
iconFrameMode?: "always" | "never";
|
||||
iconColorMode?: "status" | "theme";
|
||||
activeStatus?: NoteStatus;
|
||||
onRemoveStatus: (
|
||||
frontmatterTagName: string,
|
||||
status: NoteStatus,
|
||||
|
|
@ -30,6 +31,7 @@ export const ChangeStatusModal: React.FC<Props> = ({
|
|||
templates,
|
||||
iconFrameMode = "never",
|
||||
iconColorMode = "status",
|
||||
activeStatus,
|
||||
onRemoveStatus,
|
||||
onSelectStatus,
|
||||
}) => {
|
||||
|
|
@ -63,6 +65,7 @@ export const ChangeStatusModal: React.FC<Props> = ({
|
|||
templates={templates}
|
||||
iconFrameMode={iconFrameMode}
|
||||
iconColorMode={iconColorMode}
|
||||
activeStatus={activeStatus}
|
||||
onSelectedState={handleSelectedState}
|
||||
/>
|
||||
))}
|
||||
|
|
|
|||
|
|
@ -12,11 +12,13 @@ import {
|
|||
} from "@/core/noteStatusService";
|
||||
import eventBus from "@/core/eventBus";
|
||||
import settingsService from "@/core/settingsService";
|
||||
import { NoteStatus } from "@/types/noteStatus";
|
||||
|
||||
export class StatusModalIntegration extends Modal {
|
||||
private root: Root | null = null;
|
||||
private static instance: StatusModalIntegration | null = null;
|
||||
private selectorService: SelectorService;
|
||||
private activeStatus?: NoteStatus;
|
||||
|
||||
constructor(app: App) {
|
||||
super(app);
|
||||
|
|
@ -25,6 +27,7 @@ export class StatusModalIntegration extends Modal {
|
|||
static open(
|
||||
app: App,
|
||||
noteStatusService: NoteStatusService | MultipleNoteStatusService,
|
||||
activeStatus?: NoteStatus,
|
||||
) {
|
||||
if (StatusModalIntegration.instance) {
|
||||
throw new Error("Status Modal is already open");
|
||||
|
|
@ -45,6 +48,7 @@ export class StatusModalIntegration extends Modal {
|
|||
"statusModalIntegrationSubscription1",
|
||||
);
|
||||
|
||||
StatusModalIntegration.instance.activeStatus = activeStatus;
|
||||
StatusModalIntegration.instance.open();
|
||||
}
|
||||
|
||||
|
|
@ -125,6 +129,7 @@ export class StatusModalIntegration extends Modal {
|
|||
settingsService.settings.fileExplorerIconColorMode ||
|
||||
"status"
|
||||
}
|
||||
activeStatus={this.activeStatus}
|
||||
onRemoveStatus={this.onRemoveStatus}
|
||||
onSelectStatus={this.onSelectStatus}
|
||||
/>,
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import { Plugin } from "obsidian";
|
|||
import settingsService from "@/core/settingsService";
|
||||
import { StatusBar } from "@/components/StatusBar/StatusBar";
|
||||
import { NoteStatusService } from "@/core/noteStatusService";
|
||||
import { NoteStatus } from "@/types/noteStatus";
|
||||
|
||||
export class StatusBarIntegration {
|
||||
private static instance: StatusBarIntegration | null = null;
|
||||
|
|
@ -101,7 +102,7 @@ export class StatusBarIntegration {
|
|||
this.render();
|
||||
}
|
||||
|
||||
private openStatusModal() {
|
||||
private openStatusModal(activeStatus?: NoteStatus) {
|
||||
if (!this.noteStatusService) {
|
||||
throw new Error(
|
||||
"open status modal failed bcse there is no noteStatusService available",
|
||||
|
|
@ -109,6 +110,7 @@ export class StatusBarIntegration {
|
|||
}
|
||||
eventBus.publish("triggered-open-modal", {
|
||||
statusService: this.noteStatusService,
|
||||
activeStatus,
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -164,7 +166,7 @@ export class StatusBarIntegration {
|
|||
badgeContentMode={
|
||||
settingsService.settings.statusBarBadgeContentMode
|
||||
}
|
||||
onStatusClick={() => this.openStatusModal()}
|
||||
onStatusClick={(status) => this.openStatusModal(status)}
|
||||
noStatusConfig={this.getNoStatusConfig()}
|
||||
/>,
|
||||
);
|
||||
|
|
|
|||
8
main.tsx
8
main.tsx
|
|
@ -220,8 +220,12 @@ export default class NoteStatusPlugin extends Plugin {
|
|||
// Register listeners
|
||||
eventBus.subscribe(
|
||||
"triggered-open-modal",
|
||||
({ statusService }) => {
|
||||
StatusModalIntegration.open(this.app, statusService);
|
||||
({ statusService, activeStatus }) => {
|
||||
StatusModalIntegration.open(
|
||||
this.app,
|
||||
statusService,
|
||||
activeStatus,
|
||||
);
|
||||
},
|
||||
"main-triggered-open-modal-subscriptor",
|
||||
);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import {
|
|||
} from "@/core/noteStatusService";
|
||||
import { PluginSettings } from "@/types/pluginSettings";
|
||||
import { TFile, WorkspaceLeaf } from "obsidian";
|
||||
import { NoteStatus } from "@/types/noteStatus";
|
||||
|
||||
export type EventBusEvents = {
|
||||
"active-file-change": ({ leaf }: { leaf: WorkspaceLeaf | null }) => void;
|
||||
|
|
@ -19,8 +20,10 @@ export type EventBusEvents = {
|
|||
"status-changed": ({ file }: { file: TFile }) => void;
|
||||
"triggered-open-modal": ({
|
||||
statusService,
|
||||
activeStatus,
|
||||
}: {
|
||||
statusService: NoteStatusService | MultipleNoteStatusService;
|
||||
activeStatus?: NoteStatus;
|
||||
}) => void;
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue