import { onMounted, ref, type Ref } from "vue"; import type { ILoaderCommon, LoaderLoadType } from "./LoaderCommon"; export interface ISimplePageContentLoader extends ILoaderCommon

{ content: Ref; } export function useSimplePageContentLoader( loader: (params?: P) => Promise, options?: { immediate?: boolean; } ) : ISimplePageContentLoader { const content = ref(null) as Ref; const loadStatus = ref('loading'); const loadError = ref(''); let lastParams: P | undefined; async function loadData(params?: P) { if (params) lastParams = params; loadStatus.value = 'loading'; try { const res = (await loader(params ?? lastParams)) as T; content.value = res; loadStatus.value = 'finished'; loadError.value = ''; } catch(e) { loadError.value = '' + e; loadStatus.value = 'error'; } } onMounted(() => { if (options?.immediate) loadData(); }); return { content, loadStatus, loadError, loadData, } }