custom app rendering

This commit is contained in:
metacryst
2026-03-24 04:16:00 -05:00
parent 881c9408b6
commit c5b71add07
5 changed files with 68 additions and 31 deletions

View File

@@ -1,4 +1,4 @@
import server from "../_/code/bridge/server"; import server from "../_/code/bridge/serverFunctions";
import util from "../util"; import util from "../util";
css(` css(`

View File

@@ -83,7 +83,11 @@ class Announcements extends Shadow {
.display("none") .display("none")
.visibility("hidden") .visibility("hidden")
.onChange((e) => { .onChange((e) => {
this.handleUpload(e.target.files[0]); const file = e.target.files[0]
if (!file) return
this.stagedImage = file
this.stagedImageURL = URL.createObjectURL(file)
this.rerender()
}) })
div("+") div("+")
@@ -138,8 +142,8 @@ class Announcements extends Shadow {
this.style.backgroundColor = "var(--accent)" this.style.backgroundColor = "var(--accent)"
} else { } else {
setTimeout(() => { setTimeout(() => {
$("appmenu-").display("none") $("appmenu-").display("none")
this.focus()
}, 20) }, 20)
console.log($("appmenu-")) console.log($("appmenu-"))
this.style.backgroundColor = "var(--searchbackground)" this.style.backgroundColor = "var(--searchbackground)"
@@ -169,6 +173,31 @@ class Announcements extends Shadow {
}) })
} }
async handleUpload(file) {
try {
const body = new FormData();
body.append('image', file);
const res = await util.authFetch(`${util.HOST}/profile/upload-image`, {
method: "POST",
credentials: "include",
headers: {
"Accept": "application/json"
},
body: body
});
if(res.status === 401) {
return res.status
}
if (!res.ok) return res.status;
const data = await res.json()
global.profile = data.member
console.log(global.profile)
} catch (err) { // Network error / Error reaching server
console.error(err);
}
}
addPhoto() { addPhoto() {
console.log("hey") console.log("hey")
} }

View File

@@ -10,7 +10,6 @@ class PeopleCard extends Shadow {
render() { render() {
HStack(() => { HStack(() => {
HStack(() => { HStack(() => {
console.log(this.imgSrc)
if (this.imgSrc && !this.imgSrc.includes("null")) { if (this.imgSrc && !this.imgSrc.includes("null")) {
img(this.imgSrc, "3em", "3em") img(this.imgSrc, "3em", "3em")
.borderRadius(100, pct) .borderRadius(100, pct)

View File

@@ -3,35 +3,33 @@ import util from "../util.js"
class AppMenu extends Shadow { class AppMenu extends Shadow {
selected = "" selected = ""
apps = global.currentNetwork.apps
darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
images = { getImageURL(appName) {
"Dashboard": {src: ["home-src", "home-selected-src"]}, let imgUrl = `${util.HOST}/db/apps/${appName}/icons/${appName}`
"People": {src: ["people-src", "people-selected-src"]}, if(this.darkMode) {
"Settings": {src: ["settings-src", "settings-selected-src"]}, imgUrl += "light"
"Events": {src: ["events-src", "events-selected-src"]}, }
"Jobs": {src: ["jobs-src", "jobs-selected-src"]} imgUrl += ".svg"
imgUrl = imgUrl.toLowerCase()
return imgUrl
} }
onNewSelection() { onNewSelection() {
this.$$("img").forEach((image) => { this.$$("img").forEach((image) => {
image.style.borderBottom = "1px solid transparent" image.style.borderBottom = "1px solid transparent"
const app = image.attributes.app.value const appName = image.attributes.app.value
if (app === global.currentApp()) { if (appName === global.currentApp()) {
image.style.borderBottom = "1px solid var(--text)" image.style.borderBottom = "1px solid var(--text)"
image.src = util.cssVariable(this.images[app].src[1])
} else {
image.src = util.cssVariable(this.images[app].src[0])
} }
image.src = this.getImageURL(appName)
}) })
} }
render() { render() {
// let apps = global.currentNetwork.apps let apps = this.apps
let apps = [ let appCount = apps.filter(app => app !== "Settings").length
"Dashboard", "Jobs", "Events", "People"
]
let appCount = apps.filter(a => a !== "Settings").length
let horizontalMargin = { let horizontalMargin = {
1: 50, 1: 50,
2: 10, 2: 10,
@@ -45,7 +43,8 @@ class AppMenu extends Shadow {
for(let i = 0; i < apps.length; i++) { for(let i = 0; i < apps.length; i++) {
let app = apps[i] let app = apps[i]
if (app === "Settings") continue; if (app === "Settings") continue;
img(util.cssVariable(global.currentApp() === app ? this.images[app].src[1] : this.images[app].src[0]), "1.3em")
img(this.getImageURL(app), "1.3em")
.attr({app: app}) .attr({app: app})
.padding(0.5, em) .padding(0.5, em)
.borderBottom(global.currentApp() === app ? "1px solid var(--text)" : "1px solid transparent") .borderBottom(global.currentApp() === app ? "1px solid var(--text)" : "1px solid transparent")
@@ -59,7 +58,7 @@ class AppMenu extends Shadow {
} }
}) })
.display("grid") .display("grid")
.gridTemplateColumns(`repeat(${apps.filter(a => a !== "Settings").length}, 1fr)`) .gridTemplateColumns(`repeat(${apps.filter(app => app !== "Settings").length}, 1fr)`)
.placeItems("center") .placeItems("center")
.borderTop("0.5px solid var(--divider)") .borderTop("0.5px solid var(--divider)")
.height("auto") .height("auto")

View File

@@ -4,6 +4,7 @@ import "../apps/Jobs/Jobs.js"
import "../apps/People/People.js" import "../apps/People/People.js"
import "../apps/Events/Events.js" import "../apps/Events/Events.js"
import "../apps/Announcements/Announcements.js" import "../apps/Announcements/Announcements.js"
import util from "../util.js"
class AppWindow extends Shadow { class AppWindow extends Shadow {
render() { render() {
@@ -14,14 +15,6 @@ class AppWindow extends Shadow {
Announcements() Announcements()
break; break;
case "Messages":
Messages()
break;
case "People":
People()
break;
case "Jobs": case "Jobs":
Jobs() Jobs()
break; break;
@@ -29,6 +22,18 @@ class AppWindow extends Shadow {
case "Events": case "Events":
Events() Events()
break; break;
case "People":
People()
break;
default:
if(window[app]) {
window[app]()
} else {
this.getCustomApp(app)
}
break;
} }
}) })
.height(100, pct) .height(100, pct)
@@ -37,6 +42,11 @@ class AppWindow extends Shadow {
this.rerender() this.rerender()
}) })
} }
async getCustomApp(app) {
await import(`${util.HOST}/apps/${app.toLowerCase()}/${app.toLowerCase()}.js`);
this.rerender()
}
} }
register(AppWindow) register(AppWindow)