149 lines
4.5 KiB
JavaScript
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);
|