120 lines
3.4 KiB
JavaScript
120 lines
3.4 KiB
JavaScript
import Socket from "/_/code/ws/Socket.js"
|
|
import "./Home.js"
|
|
|
|
import util from "./util.js"
|
|
window.util = util
|
|
|
|
global.Socket = new Socket()
|
|
|
|
global.currentNetwork = ""
|
|
global.currentApp = ""
|
|
|
|
async function openNetworkAndApp() {
|
|
// console.log("currentApp: ", currentApp, "currentnet: ", currentNetwork, "nfrompath: ", networkFromPath(), "afrompath", appFromPath())
|
|
|
|
if(global.currentNetwork !== networkFromPath()) {
|
|
global.currentNetwork = networkFromPath()
|
|
const event = new CustomEvent('networkchange', {
|
|
detail: { name: currentNetwork }
|
|
});
|
|
window.dispatchEvent(event)
|
|
}
|
|
|
|
if(!global.currentNetwork.data) {
|
|
let appData = await fetch("/api/orgdata/" + global.profile.networks[0].id, {method: "GET"})
|
|
let json = await appData.json()
|
|
global.currentNetwork.data = json
|
|
}
|
|
|
|
console.log("current: ", global.currentApp, "afrompath: ", appFromPath())
|
|
if(global.currentApp !== appFromPath()) {
|
|
global.currentApp = appFromPath()
|
|
const event = new CustomEvent('appchange', {
|
|
detail: { name: global.currentApp }
|
|
});
|
|
window.dispatchEvent(event)
|
|
}
|
|
|
|
if(global.currentNetwork) { // 2 navigates fire on load: 1 initial, and one after the org redirect
|
|
document.title = `${global.currentNetwork.abbreviation} | Parchment`
|
|
}
|
|
}
|
|
|
|
window.addEventListener("navigate", openNetworkAndApp)
|
|
|
|
global.currentApp = function(appName) {
|
|
const appUrl = appName.charAt(0).toLowerCase() + appName.slice(1);
|
|
let parts = window.location.pathname.split('/').filter(Boolean);
|
|
let newPath = "/" + parts[0] + "/" + appUrl
|
|
window.navigateTo(newPath)
|
|
const event = new CustomEvent('appchange', {
|
|
detail: { name: appName }
|
|
});
|
|
window.dispatchEvent(event)
|
|
}
|
|
|
|
window.networkFromPath = function () {
|
|
const pathname = window.location.pathname;
|
|
const firstSegment = pathname.split('/').filter(Boolean)[0] || '';
|
|
let networks = global.profile?.networks
|
|
for(let i = 0; i < networks.length; i++) {
|
|
let network = networks[i]
|
|
if(network.abbreviation === firstSegment) {
|
|
return network
|
|
}
|
|
}
|
|
}
|
|
|
|
window.appFromPath = function() {
|
|
const pathname = window.location.pathname;
|
|
const segments = pathname.split('/').filter(Boolean);
|
|
const secondSegment = segments[1] || "";
|
|
const capitalized = secondSegment.charAt(0).toUpperCase() + secondSegment.slice(1);
|
|
return capitalized
|
|
}
|
|
|
|
async function getProfile() {
|
|
try {
|
|
const res = await fetch("/profile", {
|
|
method: "GET",
|
|
credentials: "include",
|
|
headers: {
|
|
"Content-Type": "application/json"
|
|
}
|
|
});
|
|
|
|
if (!res.ok) throw new Error("Failed to fetch profile");
|
|
|
|
const profile = await res.json();
|
|
console.log("getProfile: ", profile);
|
|
global.profile = profile
|
|
} catch (err) {
|
|
console.error(err);
|
|
}
|
|
}
|
|
|
|
function getInitialNetworkPath() {
|
|
let path = ""
|
|
let defaultNetwork = global.profile.networks[0]
|
|
|
|
if(!networkFromPath()) {
|
|
path += (defaultNetwork.abbreviation + "/")
|
|
}
|
|
|
|
if(!appFromPath()) {
|
|
let defaultApp = defaultNetwork.apps[0]
|
|
path += defaultApp.toLowerCase()
|
|
}
|
|
|
|
return path
|
|
}
|
|
|
|
getProfile().then(async () => {
|
|
|
|
if(global.profile.networks.length > 0) {
|
|
let path = getInitialNetworkPath()
|
|
window.navigateTo(path)
|
|
}
|
|
|
|
Home()
|
|
}) |