UNPKG

@scayle/storefront-nuxt

Version:

Nuxt integration for the SCAYLE Commerce Engine and Storefront API

63 lines (62 loc) 1.86 kB
import { useNuxtApp } from "nuxt/app"; import { useCoreLog } from "../useCoreLog.js"; import { extendPromise } from "../../utils/promise.js"; import { useRpc } from "./useRpc.js"; import { toValue, computed } from "vue"; import { useRpcCall } from "./useRpcCall.js"; export function useUser(options = {}) { const nuxtApp = useNuxtApp(); const log = useCoreLog("useUser"); const updateUserRpc = useRpcCall("updateShopUser"); const updatePasswordRpc = useRpcCall("updatePassword"); const refreshUserRpc = useRpcCall("refreshUser"); const { immediate = true, lazy = false, key = "useUser" } = options; const asyncDataPromise = useRpc("getUser", key, void 0, { immediate, lazy, server: false, dedupe: "defer", getCachedData: (cacheKey) => { return toValue(nuxtApp._asyncData[cacheKey]?.data) ?? void 0; } }); const { data, refresh, error, status } = asyncDataPromise; const updateUser = async (payload) => { log.debug("Update user"); data.value = await updateUserRpc(payload); }; const updatePassword = async (payload) => { log.debug("Update password"); const response = await updatePasswordRpc(payload); if (response) { data.value = response; } }; const user = computed(() => data.value?.user); const isLoggedIn = computed(() => !!user.value); const customerType = computed(() => { if (!isLoggedIn.value) { return "guest"; } return user.value?.groups?.includes("new") ? "new" : "existing"; }); const forceRefresh = async () => { log.debug("Refresh user"); data.value = await refreshUserRpc(); }; return extendPromise( asyncDataPromise.then(() => ({})), { user, isLoggedIn, customerType, refresh, fetch, forceRefresh, updateUser, updatePassword, error, status } ); }