This commit upgrades TypeScript to the latest version 5.3 and introduces `verbatimModuleSyntax` in line with the official Vue guide recommendatinos (vuejs/docs#2592). By enforcing `import type` for type-only imports, this commit improves code clarity and supports tooling optimization, ensuring imports are only bundled when necessary for runtime. Changes: - Bump TypeScript to 5.3.3 across the project. - Adjust import statements to utilize `import type` where applicable, promoting cleaner and more efficient code.
71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
TypeScript
import { shallowRef, shallowReadonly } from 'vue';
|
|
import type { IApplicationContext, IReadOnlyApplicationContext } from '@/application/Context/IApplicationContext';
|
|
import type { ICategoryCollectionState, IReadOnlyCategoryCollectionState } from '@/application/Context/State/ICategoryCollectionState';
|
|
import type { IEventSubscriptionCollection } from '@/infrastructure/Events/IEventSubscriptionCollection';
|
|
|
|
export function useCollectionState(
|
|
context: IApplicationContext,
|
|
events: IEventSubscriptionCollection,
|
|
) {
|
|
const currentState = shallowRef<IReadOnlyCategoryCollectionState>(context.state);
|
|
events.register([
|
|
context.contextChanged.on((event) => {
|
|
currentState.value = event.newState;
|
|
}),
|
|
]);
|
|
|
|
const defaultSettings: IStateCallbackSettings = {
|
|
immediate: false,
|
|
};
|
|
function onStateChange(
|
|
handler: NewStateEventHandler,
|
|
settings: Partial<IStateCallbackSettings> = defaultSettings,
|
|
) {
|
|
events.register([
|
|
context.contextChanged.on((event) => {
|
|
handler(event.newState, event.oldState);
|
|
}),
|
|
]);
|
|
const defaultedSettings: IStateCallbackSettings = {
|
|
...defaultSettings,
|
|
...settings,
|
|
};
|
|
if (defaultedSettings.immediate) {
|
|
handler(context.state, undefined);
|
|
}
|
|
}
|
|
|
|
function modifyCurrentState(mutator: StateModifier) {
|
|
mutator(context.state);
|
|
}
|
|
|
|
function modifyCurrentContext(mutator: ContextModifier) {
|
|
mutator(context);
|
|
}
|
|
|
|
return {
|
|
modifyCurrentState,
|
|
modifyCurrentContext,
|
|
onStateChange,
|
|
currentContext: context as IReadOnlyApplicationContext,
|
|
currentState: shallowReadonly(currentState),
|
|
};
|
|
}
|
|
|
|
export type NewStateEventHandler = (
|
|
newState: IReadOnlyCategoryCollectionState,
|
|
oldState: IReadOnlyCategoryCollectionState | undefined,
|
|
) => void;
|
|
|
|
export interface IStateCallbackSettings {
|
|
readonly immediate: boolean;
|
|
}
|
|
|
|
export type StateModifier = (
|
|
state: ICategoryCollectionState,
|
|
) => void;
|
|
|
|
export type ContextModifier = (
|
|
state: IApplicationContext,
|
|
) => void;
|