Jacob Schmidt e15d4b3066 Introduce shared web UI runtime and migrate org/store bridges
- add common ForgeWebUI runtime, site loader, and SQF WebUI bridge base declarations
- migrate org and store web UIs to src-driven bundles and new bridge/bootstrap flow
- update addon configs/prep hooks and document the shared CT_WEBBROWSER framework
2026-03-14 00:40:34 -05:00

82 lines
2.3 KiB
JavaScript

(function () {
const StorefrontApp = (window.StorefrontApp = window.StorefrontApp || {});
const store = StorefrontApp.store;
const bridge = window.ForgeWebUI.createBridge({
closeEvent: "store::close",
globalName: "StoreUIBridge",
readyEvent: "store::ready",
});
function requestClose() {
return bridge.close({});
}
function requestCheckout(payload) {
return bridge.send("store::checkout::request", payload);
}
function requestCategory(payload) {
return bridge.send("store::category::request", payload);
}
function notifyReady() {
return bridge.ready({ loaded: true });
}
bridge.on("store::hydrate", (payloadData) => {
StorefrontApp.data.applyHydratePayload(payloadData);
store.hydrateFromPayload(payloadData);
});
bridge.on("store::config::hydrate", (payloadData) => {
StorefrontApp.data.applyHydratePayload(payloadData);
store.hydrateStoreConfig(payloadData);
});
bridge.on("store::checkout::success", (payloadData) => {
store.setIsCheckingOut(false);
store.setCartItems([]);
store.setCartOpen(false);
if (StorefrontApp.actions) {
StorefrontApp.actions.showNotice(
"success",
payloadData.message || "Checkout completed.",
);
}
});
bridge.on("store::category::hydrate", (payloadData) => {
store.hydrateCategoryItems(payloadData);
});
bridge.on("store::category::failure", (payloadData) => {
store.finishCategoryRequest(payloadData.category || "");
if (StorefrontApp.actions) {
StorefrontApp.actions.showNotice(
"error",
payloadData.message || "Category request failed.",
);
}
});
bridge.on("store::checkout::failure", (payloadData) => {
store.setIsCheckingOut(false);
if (StorefrontApp.actions) {
StorefrontApp.actions.showNotice(
"error",
payloadData.message || "Checkout failed.",
);
}
});
StorefrontApp.bridge = {
close: bridge.close,
requestClose,
requestCheckout,
requestCategory,
notifyReady,
receive: bridge.receive,
sendEvent: bridge.send,
};
})();