Main/resources/[jobs]/[police]/xRadar/html/app/index.js
2025-06-07 08:51:21 +02:00

195 lines
6.5 KiB
JavaScript

const { createApp } = Vue;
import radar from "./pages/radar/index.js";
import tablet from "./pages/tablet/index.js";
const store = Vuex.createStore({
state: {
isRadarActive: false,
isTabletActive: false,
radarData: false,
selectedLanguage: "",
Locales: {},
radarPosition: {},
radarFastActionsPosition: {},
radarScale : 1.0,
},
mutations: {
setIsRadarActive(state, payload) {
state.isRadarActive = payload;
},
setElementPosition(state, payload) {
state[payload.type] = payload.value
localStorage.setItem(payload.type, JSON.stringify(payload.value));
},
setElementPositionFirstMount(state, payload) {
state[payload.type] = payload.value
},
setSelectedLanguage(state, payload) {
state.selectedLanguage = payload
localStorage.setItem("selectedLanguage", JSON.stringify(payload));
},
setSelectedLanguageFirstMount(state, payload) {
state.selectedLanguage = payload
},
setLocales(state, payload) {
state.Locales = payload
},
setIsTabletActive(state, payload) {
state.isTabletActive = payload;
},
getRadarData(state, payload) {
state.radarData = payload;
},
getProfile(state, payload) {
state.profile = payload;
}
},
actions: {}
});
const app = createApp({
data() {
return {};
},
methods: {
...Vuex.mapMutations({
setIsRadarActive: "setIsRadarActive",
setIsTabletActive: "setIsTabletActive",
getRadarData: "getRadarData",
getProfile: "getProfile",
setLocales: "setLocales",
setSelectedLanguageFirstMount: 'setSelectedLanguageFirstMount',
setSelectedLanguage: 'setSelectedLanguage',
setElementPositionFirstMount: 'setElementPositionFirstMount',
}),
messageHandler(event) {
switch (event.data.action) {
case "TOGGLE_RADAR":
this.setIsRadarActive(event.data.payload);
break;
case "TOGGLE_TABLET":
this.setIsTabletActive(event.data.payload);
break;
case "GET_RADAR_DATA":
this.getRadarData(event.data.payload);
break;
case "GET_PROFILE":
this.getProfile(event.data.payload);
break;
case "PLAY_SOUND":
let audio = new Audio(`./assets/${event.data.payload}.ogg`);
audio.play();
audio.volume = 0.2;
break
case "GET_LANGUAGE_VALUE":
const eventPayload = JSON.parse(event.data.payload)
if (this.selectedLanguage === "default") {
this.setLocales(eventPayload.DefaultLocales)
} else if (this.selectedLanguage === "en") {
this.setLocales(eventPayload.EnglishLocales)
} else if (this.selectedLanguage === "tr") {
this.setLocales(eventPayload.TurkishLocales)
} else if (this.selectedLanguage === "de") {
this.setLocales(eventPayload.DeutschLocales)
} else if (this.selectedLanguage === "es") {
this.setLocales(eventPayload.EspanolLocales)
} else if (this.selectedLanguage === "pr") {
this.setLocales(eventPayload.PortugalLocales)
} else if (this.selectedLanguage === "in") {
this.setLocales(eventPayload.HindiLocales)
}
break
default:
break;
}
}
},
components: { radar, tablet },
computed: {
...Vuex.mapState({
isRadarActive: state => state.isRadarActive,
isTabletActive: state => state.isTabletActive,
radarData: state => state.radarData,
profile: state => state.profile,
selectedLanguage: state => state.selectedLanguage,
})
},
mounted() {
window.addEventListener("message", this.messageHandler);
let stored = JSON.parse(localStorage.getItem("selectedLanguage"));
if (stored != null || stored != undefined) {
this.setSelectedLanguageFirstMount(stored)
} else {
this.setSelectedLanguage("default")
}
let radarPosition = JSON.parse(localStorage.getItem("radarPosition"));
if (radarPosition != null || radarPosition != undefined) {
this.setElementPositionFirstMount({
type:'radarPosition',
value: radarPosition
})
}
let radarFastActionsPosition = JSON.parse(localStorage.getItem("radarFastActionsPosition"));
if (radarFastActionsPosition != null || radarFastActionsPosition != undefined) {
this.setElementPositionFirstMount({
type:'radarFastActionsPosition',
value: radarFastActionsPosition
})
}
let radarScale = JSON.parse(localStorage.getItem("radarScale"));
if (radarScale != null || radarScale != undefined) {
this.setElementPositionFirstMount({
type:'radarScale',
value: radarScale
})
}
},
beforeDestroy() {
window.removeEventListener("message", this.messageHandler);
},
watch: {
selectedLanguage(val) {
postNUI("selectLanguage", {
language: val
})
}
},
});
app.use(store);
app.mount("#app");
var resourceName = "xRadar";
if (window.GetParentResourceName) {
resourceName = window.GetParentResourceName();
}
window.postNUI = async (name, data) => {
try {
const response = await fetch(`https://${resourceName}/${name}`, {
method: "POST",
mode: "cors",
cache: "no-cache",
credentials: "same-origin",
headers: {
"Content-Type": "application/json"
},
redirect: "follow",
referrerPolicy: "no-referrer",
body: JSON.stringify(data)
});
return !response.ok ? null : response.json();
} catch (error) {
// console.log(error)
}
};