import { useMyFetch } from "#imports"; import type { componentsListType, GenericResponse, PlanPrediction, } from "~/types"; import type { FrontPageSection } from "~/types/frontSection"; export const useStore = defineStore("store", () => { const currentPageID = ref(""); const { $toast } = useNuxtApp(); // calculator const monthlySavings = ref(137); const storagePeriod = ref(10); const totalInvestment: Ref = ref(0); const minValue = ref(); const components = ref({} as FrontPageSection[]); const getSections = async (id: string) => { const { data } = await useMyFetch>( `/api/public/front/sections/${id}` ); components.value = data; }; async function getComponents(): Promise { try { const children = components.value; if (!children || !Array.isArray(children)) { console.warn("No components available in store."); return []; } const componentsList = [] as componentsListType[]; for (const child of children) { const componentName = child.front_section.component_name; if (!componentName) continue; try { const componentInstance = ( await import(`@/components/section/${componentName}.vue`) ).default; const nonReactiveComponent = markRaw(componentInstance); componentsList.push({ name: componentName, component: child.front_section, componentInstance: nonReactiveComponent, }); } catch (error) { console.error(`Failed to load component ${componentName}`, error); } } return componentsList; } catch (error) { console.error("Failed to process components list", error); } return []; } async function getCalculator() { try { const { data } = await useMyFetch>( `/api/public/plan-prediction/easy/calculate?monthly_deposit=${monthlySavings.value}&years=${storagePeriod.value}`, { headers: { "Content-Type": "application/json", }, onErrorOccured: (_, status) => { throw new Error(`HTTP error: ${status}`); }, } ); totalInvestment.value = data.total_investement_value; } catch (error) { console.error("getList error:", error); } } async function getMinValue() { try { const { data } = await useMyFetch>( "/api/public/plan-prediction/free/minimum", { headers: { "Content-Type": "application/json", }, onErrorOccured: (_, status) => { throw new Error(`HTTP error: ${status}`); }, } ); minValue.value = data; } catch (error) { console.error("getList error:", error); } } return { currentPageID, components, totalInvestment, monthlySavings, storagePeriod, minValue, getCalculator, getComponents, getSections, getMinValue, }; });