diff --git a/src/_/code/bridge/bridge.js b/src/_/code/bridge/bridge.js index be3ae76..8af6082 100644 --- a/src/_/code/bridge/bridge.js +++ b/src/_/code/bridge/bridge.js @@ -1,4 +1,4 @@ -const IS_NODE = +export const IS_NODE = typeof process !== "undefined" && process.versions?.node != null @@ -9,9 +9,7 @@ async function bridgeSend(name, args) { args: args }) - const json = await res.json() - if (!res.ok) throw new Error(json.error) - return json.result + return res } /** @@ -24,8 +22,6 @@ export function createBridge(funcs) { get(target, prop) { const orig = target[prop] - if (typeof orig !== "function") return orig - return function (...args) { if (IS_NODE) { return orig(...args) diff --git a/src/_/code/bridge/handlers.js b/src/_/code/bridge/handlers.js new file mode 100644 index 0000000..0f0eee9 --- /dev/null +++ b/src/_/code/bridge/handlers.js @@ -0,0 +1,47 @@ +const handlers = { + async getStripeProfile(networkId) { + return global.payments.getProfile(networkId) + }, + + async addEvent(newEvent, networkId, creatorId) { + return await global.db.events.add(newEvent, networkId, creatorId) + }, + + async editEvent(id, updatedEvent, networkId, userId) { + return await global.db.events.add(id, updatedEvent, networkId, userId); + }, + + async deleteEvent(id, networkId, userId) { + return await global.db.events.add(id, networkId, userId); + }, + + async getEvent(id) { + return global.db.events.getById(id) + }, + + async getEvents(networkId) { + return global.db.events.getByNetwork(networkId) + }, + + async addJob(newJob, networkId, creatorId) { + return await global.db.jobs.add(newJob, networkId, creatorId); + }, + + async editJob(id, updatedJob, networkId, userId) { + return await global.db.jobs.add(id, updatedJob, networkId, userId); + }, + + async deleteJob(id, networkId, userId) { + return await global.db.jobs.add(id, networkId, userId); + }, + + async getJob(id) { + return await global.db.jobs.getById(id) + }, + + async getJobs(networkId) { + return global.db.jobs.getByNetwork(networkId) + }, +} + +export default handlers \ No newline at end of file diff --git a/src/_/code/bridge/serverFunctions.js b/src/_/code/bridge/serverFunctions.js index 52682f1..b86c19e 100644 --- a/src/_/code/bridge/serverFunctions.js +++ b/src/_/code/bridge/serverFunctions.js @@ -1,11 +1,10 @@ -import fs from "fs" -import { createBridge } from "./bridge.js" +import { createBridge, IS_NODE } from "./bridge.js" -const handlers = { - getProfile(one, two) { - fs.writeFileSync("output.txt", `${one} ${two}`) - return "written to disk" - }, +let handlers = {} + +if (IS_NODE) { + const mod = await import("./handlers.js") + handlers = mod.default } -export const { getProfile } = createBridge(handlers) +export default createBridge(handlers) \ No newline at end of file diff --git a/src/apps/Events/EventCard.js b/src/apps/Events/EventCard.js index f94fc85..beddd00 100644 --- a/src/apps/Events/EventCard.js +++ b/src/apps/Events/EventCard.js @@ -23,7 +23,7 @@ class EventCard extends Shadow { HStack(() => { img(util.cssVariable("time-src"), "1.2em") - p(this.convertDate(this.event.time)) + p(this.convertDate(this.event.time_start)) }) .gap(0.4, em) .verticalAlign("center") diff --git a/src/apps/Events/Events.js b/src/apps/Events/Events.js index 6fc61f4..9abdd36 100644 --- a/src/apps/Events/Events.js +++ b/src/apps/Events/Events.js @@ -1,5 +1,6 @@ import "../../components/LoadingCircle.js" import "./EventCard.js" +import server from "../../_/code/bridge/serverFunctions.js" import "../../components/SearchBar.js" css(` @@ -23,10 +24,15 @@ css(` class Events extends Shadow { events = [ { + id: 1, + network_id: 2, + creator_id: 1, title: "Austin Chapter Lead", description: "This is the descriptio lets try a longer one agaiin just to see what it would look like? mayeb even longer bc that was pretty short now that i see it. maybe 2 sentences if possible or more.", location: "1234 location", - time: "2026-01-13 13:41:41.0722" + time_start: "2026-01-13 13:41:41.0722", + created: "2026-01-13 12:00:00.0000", + updated_at: "2026-01-13 13:41:41.0722" } ] @@ -49,7 +55,7 @@ class Events extends Shadow { SearchBar() - if (this.events == "") { + if (this.events == "" || this.events == []) { LoadingCircle() } else if (this.events.length > 0) { for (let i = 0; i < this.events.length; i++) { @@ -71,6 +77,37 @@ class Events extends Shadow { .width(100, pct) } + async getEvents(networkId) { + const fetchedEvents = await server.getEvents(networkId) + if (this.checkForUpdates(this.events, fetchedEvents)) { + this.events = fetchedEvents + this.rerender() + } + } + + connectedCallback() { + this.getEvents(global.currentNetwork.id) + } + + checkForUpdates(currentEvents, fetchedEvents) { + if (currentEvents.length !== fetchedEvents.length) return true; + + const currentMap = new Map(currentEvents.map(event => [event.id, event])); + + for (const fetchedEvent of fetchedEvents) { + const currentEvent = currentMap.get(fetchedEvent.id); + + // new event added + if (!currentEvent) return true; + + // existing event changed + if (currentEvent.updated_at !== fetchedEvent.updated_at) { + return true; + } + } + return false; + } + convertDate(rawDate) { const parsed = new Date(rawDate); diff --git a/src/apps/Jobs/Jobs.js b/src/apps/Jobs/Jobs.js index c185bfa..3c03a46 100644 --- a/src/apps/Jobs/Jobs.js +++ b/src/apps/Jobs/Jobs.js @@ -3,6 +3,7 @@ import "./JobsGrid.js" import "./JobCard.js" import "./JobForm.js" import "../../components/SearchBar.js" +import server from "../../_/code/bridge/serverFunctions.js" css(` jobs- { @@ -25,11 +26,16 @@ css(` class Jobs extends Shadow { jobs = [ { + id: 1, + network_id: 2, + creator_id: 1, title: "Austin Chapter Lead", description: "This is the description", - salary: "1% of Local Revenue", + salary: 50000.00, company: "Hyperia", - location: "1234 location" + location: "1234 location", + created: "2026-03-12 13:41:41.0722", + updated_at: "2026-03-12 13:41:41.0722" } ] @@ -49,7 +55,7 @@ class Jobs extends Shadow { SearchBar() - if (this.jobs == "") { + if (this.jobs == "" || this.jobs == []) { LoadingCircle() } else if (this.jobs.length > 0) { for (let i = 0; i < this.jobs.length; i++) { @@ -70,6 +76,37 @@ class Jobs extends Shadow { .height(100, pct) .width(100, pct) } + + async getJobs(networkId) { + const fetchedJobs = await server.getJobs(networkId) + if (this.checkForUpdates(this.jobs, fetchedJobs)) { + this.jobs = fetchedJobs + this.rerender() + } + } + + connectedCallback() { + this.getJobs(global.currentNetwork.id) + } + + checkForUpdates(currentJobs, fetchedJobs) { + if (currentJobs.length !== fetchedJobs.length) return true; + + const currentMap = new Map(currentJobs.map(job => [job.id, job])); + + for (const fetchedJob of fetchedJobs) { + const currentJob = currentMap.get(fetchedJob.id); + + // new job added + if (!currentJob) return true; + + // existing job changed + if (currentJob.updated_at !== fetchedJob.updated_at) { + return true; + } + } + return false; + } } register(Jobs) \ No newline at end of file