From 3441da2695ebf374b23c2e53da1b4fd4760f982a Mon Sep 17 00:00:00 2001 From: Ivan Lednev <41428836+ivan-lednev@users.noreply.github.com> Date: Thu, 26 Feb 2026 17:04:31 +0100 Subject: [PATCH] Make reactor preloaded state optional --- src/main.ts | 27 ++++----------------------- src/redux/listener-middleware.ts | 9 +-------- src/redux/store.ts | 9 +++------ src/settings.ts | 7 ------- src/types.ts | 2 -- tests/integration.test.ts | 3 --- tests/store/ical.test.ts | 1 - 7 files changed, 8 insertions(+), 50 deletions(-) diff --git a/src/main.ts b/src/main.ts index 0d19b9dc8..0a7e8b581 100644 --- a/src/main.ts +++ b/src/main.ts @@ -44,11 +44,7 @@ import { type PathToListProps, } from "./redux/dataview/dataview-slice"; import { editCanceled, visibleDaysUpdated } from "./redux/global-slice"; -import { - icalRefreshRequested, - type IcalState, - initialIcalState, -} from "./redux/ical/ical-slice"; +import { icalRefreshRequested } from "./redux/ical/ical-slice"; import { settingsUpdated } from "./redux/settings-slice"; import { type AppDispatch, createReactor } from "./redux/store"; import { createUseSelector } from "./redux/use-selector"; @@ -59,11 +55,7 @@ import { PeriodicNotes } from "./service/periodic-notes"; import { STaskEditor } from "./service/stask-editor"; import { VaultFacade } from "./service/vault-facade"; import { WorkspaceFacade } from "./service/workspace-facade"; -import { - type DayPlannerSettings, - defaultSettings, - type PluginData, -} from "./settings"; +import { type DayPlannerSettings, defaultSettings } from "./settings"; import type { RemoteTask } from "./task-types"; import { createGetTasksApi } from "./tasks-plugin"; import type { ObsidianContext, OnUpdateFn, PointerDateTime } from "./types"; @@ -96,7 +88,7 @@ export default class DayPlanner extends Plugin { private transactionWriter!: TransactionWriter; async onload() { - const initialPluginData: PluginData = { + const initialSettings: DayPlannerSettings = { ...defaultSettings, ...(await this.loadData()), }; @@ -120,11 +112,6 @@ export default class DayPlanner extends Plugin { this.app.vault, ); - const icalStateWithCachedRawIcals: IcalState = { - ...initialIcalState, - plainTextIcals: initialPluginData.rawIcals || [], - }; - const { getState, dispatch, @@ -137,14 +124,8 @@ export default class DayPlanner extends Plugin { pointerDateTime, dataviewRefreshSignal, } = createReactor({ - preloadedState: { - ical: icalStateWithCachedRawIcals, - }, dataviewFacade: this.dataviewFacade, listPropsParser, - onIcalsFetched: async (rawIcals) => { - await this.saveData({ ...this.settings(), rawIcals }); - }, }); this.sTaskEditor = new STaskEditor( @@ -158,7 +139,7 @@ export default class DayPlanner extends Plugin { listenerMiddleware.clearListeners(); }); - this.initSettingsStore({ initialSettings: initialPluginData, dispatch }); + this.initSettingsStore({ initialSettings, dispatch }); this.registerViews({ dispatch, remoteTasks, diff --git a/src/redux/listener-middleware.ts b/src/redux/listener-middleware.ts index f081d0a5f..5b9d462b7 100644 --- a/src/redux/listener-middleware.ts +++ b/src/redux/listener-middleware.ts @@ -6,7 +6,7 @@ import { createBackgroundBatchScheduler } from "../util/scheduler"; import { dataviewChange } from "./dataview/dataview-slice"; import { createListPropsParseListener } from "./dataview/init-dataview-listeners"; -import { icalRefreshRequested, icalsFetched } from "./ical/ical-slice"; +import { icalRefreshRequested } from "./ical/ical-slice"; import { checkIcalEventsChanged, checkVisibleDaysChanged, @@ -50,13 +50,6 @@ export function initListenerMiddleware(props: { extra: ReduxExtraArgument }) { }), }); - listenerMiddleware.startListening({ - actionCreator: icalsFetched, - effect: async (action, listenerApi) => { - await listenerApi.extra.onIcalsFetched(action.payload); - }, - }); - listenerMiddleware.startListening({ actionCreator: dataviewChange, effect: createListPropsParseListener({ listPropsParser }), diff --git a/src/redux/store.ts b/src/redux/store.ts index 9b84573d5..ebc7d10aa 100644 --- a/src/redux/store.ts +++ b/src/redux/store.ts @@ -22,7 +22,7 @@ import { selectListProps, } from "./dataview/dataview-slice"; import { editCanceled, globalSlice } from "./global-slice"; -import { icalSlice, type RawIcal, selectRemoteTasks } from "./ical/ical-slice"; +import { icalSlice, selectRemoteTasks } from "./ical/ical-slice"; import { initListenerMiddleware } from "./listener-middleware"; import { searchSlice } from "./search-slice"; import { selectDataviewSource, settingsSlice } from "./settings-slice"; @@ -57,19 +57,16 @@ export const makeStore = ( }; export function createReactor(props: { - preloadedState: Partial; + preloadedState?: Partial; dataviewFacade: DataviewFacade; listPropsParser: ListPropsParser; - onIcalsFetched: (rawIcals: RawIcal[]) => Promise; }) { - const { preloadedState, dataviewFacade, listPropsParser, onIcalsFetched } = - props; + const { preloadedState = {}, dataviewFacade, listPropsParser } = props; const listenerMiddleware = initListenerMiddleware({ extra: { dataviewFacade, listPropsParser, - onIcalsFetched, }, }); diff --git a/src/settings.ts b/src/settings.ts index 9235d01e4..3088b81ae 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -1,7 +1,6 @@ import type { HexString } from "obsidian"; import { defaultDayFormat } from "./constants"; -import type { RawIcal } from "./redux/ical/ical-slice"; export interface IcalConfig { name: string; @@ -69,12 +68,6 @@ export interface DayPlannerSettings { timelineColumns: TimelineColumns; } -export interface Cache { - rawIcals: Array; -} - -export type PluginData = DayPlannerSettings & Cache; - export const defaultSettings: DayPlannerSettings = { snapStepMinutes: 10, progressIndicator: "mini-timeline", diff --git a/src/types.ts b/src/types.ts index d5430c30d..f68bc65b9 100644 --- a/src/types.ts +++ b/src/types.ts @@ -2,7 +2,6 @@ import type Fraction from "fraction.js"; import type { Moment } from "moment"; import type { Readable, Writable } from "svelte/store"; -import type { RawIcal } from "./redux/ical/ical-slice"; import { type AppDispatch } from "./redux/store"; import type { UseSelector } from "./redux/use-selector"; import type { DataviewFacade } from "./service/dataview-facade"; @@ -91,5 +90,4 @@ export type DateRange = Writable & { untrack: () => void }; export type ReduxExtraArgument = { dataviewFacade: DataviewFacade; listPropsParser: ListPropsParser; - onIcalsFetched: (rawIcals: RawIcal[]) => Promise; }; diff --git a/tests/integration.test.ts b/tests/integration.test.ts index dfe54b82a..31eec3061 100644 --- a/tests/integration.test.ts +++ b/tests/integration.test.ts @@ -182,8 +182,6 @@ async function setUp(props: { const onEditCanceled = vi.fn(); const onEditConfirmed = vi.fn(); - const onIcalsFetched = vi.fn(); - const defaultPreloadedStateForTests: Partial = { obsidian: { ...initialState, @@ -207,7 +205,6 @@ async function setUp(props: { }, }, dataviewFacade, - onIcalsFetched, listPropsParser, }); diff --git a/tests/store/ical.test.ts b/tests/store/ical.test.ts index 74cc7dd50..2c0ff5f7b 100644 --- a/tests/store/ical.test.ts +++ b/tests/store/ical.test.ts @@ -75,7 +75,6 @@ function makeStoreForTests(props?: { preloadedState?: Partial }) { new InMemoryVault([]) as unknown as Vault, new FakeMetadataCache({}) as unknown as MetadataCache, ), - onIcalsFetched: async () => {}, }, });