50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
import axios from 'axios';
|
|
import { getCurrentInstance } from 'vue'
|
|
|
|
const navigate = async ({ page }) => {
|
|
try {
|
|
// Show loading spinner if you want
|
|
loading.value = true;
|
|
|
|
// Request page data from server
|
|
const response = await axios.get(`/${page}`);
|
|
const data = response.data;
|
|
|
|
// Expected server response:
|
|
// { component: 'Home', props: {...} }
|
|
currentPage.value = data.component;
|
|
currentProps.value = data.props || {};
|
|
} catch (error) {
|
|
console.error('Navigation error', error);
|
|
currentPage.value = 'NotFound';
|
|
currentProps.value = {};
|
|
} finally {
|
|
loading.value = false;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Reloads the current SPA page
|
|
* without changing history.
|
|
*
|
|
* Vue replacement for legacy ReloadPage()
|
|
*/
|
|
export function reloadPage() {
|
|
const instance = getCurrentInstance()
|
|
|
|
const navigate =
|
|
instance?.proxy?.$navigate ||
|
|
window.$navigate
|
|
|
|
if (!navigate) {
|
|
console.warn('No SPA navigator available')
|
|
return
|
|
}
|
|
|
|
navigate({
|
|
page: instance.proxy.currentPage,
|
|
props: instance.proxy.currentProps,
|
|
nohistory: true,
|
|
redundantpage: true
|
|
})
|
|
} |