65 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { determineStyleFromVariant, fetchNotifyConfig, NOTIFY_CONFIG } from "./config.js";
 | 
						|
 | 
						|
const { useQuasar } = Quasar;
 | 
						|
const { onMounted, onUnmounted } = Vue;
 | 
						|
 | 
						|
const fetchNui = async (evName, data) => {
 | 
						|
    const resourceName = window.GetParentResourceName();
 | 
						|
 | 
						|
    const rawResp = await fetch(`https://${resourceName}/${evName}`, {
 | 
						|
        body: JSON.stringify(data),
 | 
						|
        headers: {
 | 
						|
            "Content-Type": "application/json; charset=UTF8",
 | 
						|
        },
 | 
						|
        method: "POST",
 | 
						|
    });
 | 
						|
 | 
						|
    return await rawResp.json();
 | 
						|
};
 | 
						|
 | 
						|
window.fetchNui = fetchNui;
 | 
						|
 | 
						|
const app = Vue.createApp({
 | 
						|
    setup() {
 | 
						|
        const $q = useQuasar();
 | 
						|
 | 
						|
        const showNotif = async ({ data }) => {
 | 
						|
            if (data?.action !== "notify") return;
 | 
						|
 | 
						|
            const { text, length, type, caption, icon: dataIcon } = data;
 | 
						|
            let { classes, icon } = determineStyleFromVariant(type);
 | 
						|
 | 
						|
            if (dataIcon) {
 | 
						|
                icon = dataIcon;
 | 
						|
            }
 | 
						|
 | 
						|
            if (!NOTIFY_CONFIG) {
 | 
						|
                console.error("The notification config did not load properly, trying again for next time");
 | 
						|
                await fetchNotifyConfig();
 | 
						|
                if (NOTIFY_CONFIG) return showNotif({ data });
 | 
						|
            }
 | 
						|
 | 
						|
            $q.notify({
 | 
						|
                message: text,
 | 
						|
                multiLine: text.length > 100,
 | 
						|
                group: NOTIFY_CONFIG.NotificationStyling.group ?? false,
 | 
						|
                progress: NOTIFY_CONFIG.NotificationStyling.progress ?? true,
 | 
						|
                position: NOTIFY_CONFIG.NotificationStyling.position ?? "right",
 | 
						|
                timeout: length,
 | 
						|
                caption,
 | 
						|
                classes,
 | 
						|
                icon,
 | 
						|
            });
 | 
						|
        };
 | 
						|
        onMounted(() => {
 | 
						|
            window.addEventListener("message", showNotif);
 | 
						|
        });
 | 
						|
        onUnmounted(() => {
 | 
						|
            window.removeEventListener("message", showNotif);
 | 
						|
        });
 | 
						|
        return {};
 | 
						|
    },
 | 
						|
});
 | 
						|
 | 
						|
app.use(Quasar, { config: {} });
 | 
						|
app.mount("#q-app");
 |