163 lines
5.4 KiB
JavaScript
163 lines
5.4 KiB
JavaScript
import axiosInstance from '@/plugins/axios-plugin';
|
|
import { mountStoreDevtool } from 'simple-zustand-devtools';
|
|
import { toast } from 'sonner';
|
|
import { route } from 'ziggy-js';
|
|
import { create } from 'zustand';
|
|
import { devtools } from 'zustand/middleware';
|
|
|
|
const useUserStore = create(
|
|
devtools((set, get) => ({
|
|
// Pricing Plans
|
|
user: null,
|
|
user_usage: null,
|
|
plan: {
|
|
name: 'Free',
|
|
tier: 'free',
|
|
},
|
|
billing: null,
|
|
credits: null,
|
|
|
|
isLoadingUser: false,
|
|
|
|
isRedirectingToBilling: false,
|
|
|
|
redirectBillingPortal: async () => {
|
|
set({ isRedirectingToBilling: true });
|
|
console.log('redirectBillingPortal');
|
|
try {
|
|
const response = await axiosInstance.post(route('api.user.billing_portal'));
|
|
if (response?.data?.success?.data) {
|
|
window.location.href = response.data.success.data.redirect;
|
|
}
|
|
} catch (error) {
|
|
console.error(route('api.user.billing_portal'));
|
|
console.error('Error fetching:', error);
|
|
} finally {
|
|
set({ isRedirectingToBilling: false });
|
|
}
|
|
},
|
|
|
|
// Fetch backgrounds
|
|
fetchUser: async () => {
|
|
set({ isLoadingUser: true });
|
|
try {
|
|
const response = await axiosInstance.post(route('api.user'));
|
|
set({
|
|
user: response.data.success.data.user,
|
|
user_usage: response.data.success.data.user.user_usage,
|
|
plan: response.data.success.data.user.plan,
|
|
billing: response.data.success.data.billing,
|
|
credits: response.data.success.data.credits,
|
|
});
|
|
//return response.data.success.data;
|
|
} catch (error) {
|
|
console.error(route('api.user'));
|
|
console.error('Error fetching:', error);
|
|
} finally {
|
|
set({ isLoadingUser: false });
|
|
}
|
|
},
|
|
|
|
premiumExportRequest: async () => {
|
|
try {
|
|
const response = await axiosInstance.post(route('api.user.premium_export.request'));
|
|
|
|
if (response?.data?.success?.data?.user_usage) {
|
|
set({
|
|
user_usage: response.data.success.data.user_usage,
|
|
});
|
|
}
|
|
|
|
if (response?.data?.success?.message) {
|
|
toast.success(response.data.success.message);
|
|
}
|
|
|
|
if (response?.data?.error?.message) {
|
|
toast.error(response.data.error.message);
|
|
}
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error(route('api.user.premium_export.request'));
|
|
console.error('Error fetching:', error);
|
|
}
|
|
},
|
|
|
|
premiumExportComplete: async (exportToken) => {
|
|
try {
|
|
const response = await axiosInstance.post(route('api.user.premium_export.complete'), {
|
|
export_token: exportToken,
|
|
});
|
|
|
|
if (response?.data?.success?.data?.user_usage) {
|
|
set({
|
|
user_usage: response.data.success.data.user_usage,
|
|
});
|
|
}
|
|
|
|
if (response?.data?.success?.message) {
|
|
toast.success(response.data.success.message);
|
|
}
|
|
|
|
if (response?.data?.error?.message) {
|
|
toast.error(response.data.error.message);
|
|
}
|
|
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error(route('api.user.premium_export.complete'));
|
|
console.error('Error fetching:', error);
|
|
}
|
|
},
|
|
|
|
basicExportRequest: async () => {
|
|
try {
|
|
const response = await axiosInstance.post(route('api.basic_export.request'));
|
|
|
|
if (response?.data?.success?.message) {
|
|
toast.success(response.data.success.message);
|
|
}
|
|
|
|
if (response?.data?.error?.message) {
|
|
toast.error(response.data.error.message);
|
|
}
|
|
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error(route('api.basic_export.request'));
|
|
console.error('Error fetching:', error);
|
|
}
|
|
},
|
|
|
|
basicExportComplete: async (exportToken) => {
|
|
try {
|
|
const response = await axiosInstance.post(route('api.basic_export.complete'), {
|
|
export_token: exportToken,
|
|
});
|
|
|
|
if (response?.data?.success?.message) {
|
|
toast.success(response.data.success.message);
|
|
}
|
|
|
|
if (response?.data?.error?.message) {
|
|
toast.error(response.data.error.message);
|
|
}
|
|
|
|
return response.data;
|
|
} catch (error) {
|
|
console.error(route('api.basic_export.complete'));
|
|
console.error('Error fetching:', error);
|
|
}
|
|
},
|
|
})),
|
|
{
|
|
name: 'UserStore',
|
|
store: 'UserStore',
|
|
},
|
|
);
|
|
|
|
if (import.meta.env.APP_ENV === 'local') {
|
|
mountStoreDevtool('UserStore', useUserStore);
|
|
}
|
|
|
|
export default useUserStore;
|