Files
pocketbase/ui/src/main.js
2026-04-18 16:50:39 +03:00

149 lines
4.5 KiB
JavaScript

import "./css/_main.css";
import "./utils";
import "./mimeTypes";
import "./store";
import "./pb";
import "./base/appHeader";
import "./base/autoAccordionOpenOnError";
import "./base/dropdownKeyboardNav";
import "./base/tooltip";
import "./base/confirm";
import "./base/dragline";
import "./base/slide";
import "./base/modal";
import "./base/toast";
import "./base/sortable";
import "./base/copyButton";
import "./base/codeBlock";
import "./base/codeEditor";
import "./base/codeBlockTabs";
import "./base/select";
import "./base/formattedDate";
import "./base/refreshButton";
import "./base/searchHistoryButton";
import "./base/s3Test";
import "./base/s3ConfigFields";
import "./base/leaflet";
import "./base/tinymce";
import "./base/colorPicker";
import "./base/ruleField";
import "./base/credits";
import "./base/searchbar";
import "./base/uploadedFileThumb";
import "./base/filePreviewModal";
import "./base/erd";
import "./base/pageSidebar";
import "./apiPreview/apiPreviewModal";
import "./settings/mail/mailTestModal";
import "./settings/sync/importCollectionsReviewModal";
import "./records/recordSummary";
import "./records/recordsSearchbar";
import "./records/recordFileThumb";
import "./records/recordFilePickerModal";
import "./records/recordsPickerModal";
import "./records/recordPreviewModal";
import "./records/recordImpersonateModal";
import "./records/recordUpsertModal";
import "./records/recordsList";
import "./base/fieldSettings";
import "./fields/text/init";
import "./fields/editor/init";
import "./fields/number/init";
import "./fields/bool/init";
import "./fields/email/init";
import "./fields/url/init";
import "./fields/date/init";
import "./fields/autodate/init";
import "./fields/file/init";
import "./fields/relation/init";
import "./fields/select/init";
import "./fields/json/init";
import "./fields/geoPoint/init";
import "./fields/password/init";
import "./collections/indexUpsertModal";
import "./collections/collectionUpsertModal";
import "./collections/addCollectionFieldButton";
import "./collections/autocomplete.utils";
import "./collections/providerPickerModal";
import "./collections/providerSettingsModal";
import "./collections/collectionChangesConfirmationModal";
import "./collections/collectionsOverviewModal";
import "./collections/oauth2/microsoftOptions";
import "./collections/oauth2/larkOptions";
import "./collections/oauth2/selfhostOptions";
import "./collections/oauth2/oidcOptions";
import "./collections/oauth2/appleOptions";
import "./logs/logsSettingsModal";
import "./logs/logPreviewModal";
import { appHeader } from "./base/appHeader";
import { initRouter } from "./router";
// tag proxy wrapper to register the global pbEvent mount:/unmount: events
// (events are intentionally not propagated to minimize performance issues)
const originalT = t;
t = new Proxy(
{},
{
get(_, prop) {
return function() {
const config = arguments?.[0];
if (config && config.pbEvent) {
const originalOnmount = config.onmount;
config.onmount = (el) => {
originalOnmount?.(el);
el.dataset.pb = config.pbEvent;
document.dispatchEvent(new CustomEvent("mount:" + config.pbEvent, { detail: el }));
};
const originalOnunmount = config.onunmount;
config.onunmount = (el) => {
document.dispatchEvent(new CustomEvent("unmount:" + config.pbEvent, { detail: el }));
originalOnunmount?.(el);
};
}
return originalT[prop](...arguments);
};
},
},
);
document.body.prepend(t.main(
{
// @todo temp workaround to minimize onmount MutationObserver render flickering
"html-class": "app",
className: () => `app ${app.store.settings?.meta?.hideControls ? "hide-controls" : ""}`,
},
appHeader(),
(el) => {
if (typeof app.store.page == "function") {
app.store.page(el);
}
return app.store.page;
},
));
watch(
() => app.store._ready,
(isReady) => {
if (isReady) {
initRouter();
}
},
);
// load extensions
let extensionsScript = t.script({
type: "module",
src: app.pb.buildURL("/_/extensions.js"),
onload: () => {
app.store._ready = true;
},
onerror: (err) => {
console.warn("Failed to load extensions:", err);
app.store._ready = true;
},
});
document.body.appendChild(extensionsScript);