IKHSAN
EN Read in EnglishID

opendesk

Publik
Branch
main
Commit terakhir
08d9f3328 Oktober 2026

main.js

Buka raw
import { createApp, h } from "vue";
import {
  Badge,
  Button,
  Dialog,
  ErrorMessage,
  FormControl,
  frappeRequest,
  FrappeUI,
  setConfig,
  TextInput,
  toast,
  Tooltip,
} from "frappe-ui";
import { createPinia } from "pinia";
import App from "./App.vue";
import { spritePlugin } from "frappe-ui/experimental";
import { createDialog } from "./components/dialogs";
import "./index.css";
import { router } from "./router";
import { telemetryPlugin } from "@framework/ui";
import { translationPlugin } from "./translation";
import CircleAlert from "~icons/lucide/circle-alert";
import { initSocket } from "./socket";

const globalComponents = {
  Badge,
  Button,
  Dialog,
  ErrorMessage,
  FormControl,
  Tooltip,
  TextInput,
};

// Attached to the fetcher, not set as the global `serverMessagesHandler`: the
// global one also governs `call()`, which beta.63 started routing a response's
// `_server_messages` through. Resources keep toasting, `call()` stays silent.
setConfig("resourceFetcher", (options) =>
  frappeRequest({ ...options, onServerMessages: showServerMessages })
);

function showServerMessages(msgs) {
  msgs.forEach((msg) => {
    msg = JSON.parse(msg);
    // `alert` is frappe's own flag for throwaway desk chatter ("Document
    // renamed from X to Y"), which our own toasts already cover. No opendesk
    // msgprint sets it.
    if (!msg || msg.alert) return;
    if (msg.message == "Feedback email has been sent to the customer.") {
      toast.success(msg.message);
      return;
    }
    toast(msg.message, {
      icon: () => h(CircleAlert, { class: "text-ink-blue-5" }),
    });
  });
}
setConfig("fallbackErrorHandler", (error) => {
  const msg = error.exc_type
    ? (error.messages || error.message || []).join(", ")
    : error.message;
  toast.error(msg);
});

const pinia = createPinia();
const app = createApp(App);

app.use(FrappeUI);
app.use(spritePlugin);
app.use(pinia);
app.use(router);
app.use(translationPlugin);
app.use(telemetryPlugin, { app_name: "opendesk" });

for (const c in globalComponents) {
  app.component(c, globalComponents[c]);
}

app.config.globalProperties.$dialog = createDialog;

let socket;
if (import.meta.env.DEV) {
  frappeRequest({
    url: "/api/method/opendesk.www.opendesk.index.get_context_for_dev",
  }).then((values) => {
    for (let key in values) {
      window[key] = values[key];
    }
    if (window.dir) document.documentElement.dir = window.dir;
    if (window.lang) document.documentElement.lang = window.lang;
    socket = initSocket();
    app.config.globalProperties.$socket = socket;
    app.mount("#app");
  });
} else {
  socket = initSocket();
  app.config.globalProperties.$socket = socket;
  app.mount("#app");
}
byte
2.716
baris
101
Jenis
js
Commit terakhir
28 Oktober 2026