1
0
Fork 0
forked from Simnation/Main
Main/resources/[creator]/dealerships_creator/utils/dialogs/dialogs.js
2025-06-07 08:51:21 +02:00

260 lines
No EOL
6.8 KiB
JavaScript

async function itemsDialog() {
return new Promise((resolve, reject) => {
let inputItemsModal = $("#input-items-dialog-modal")
inputItemsModal.modal("show");
$("#input-item-search").val("");
$.post(`https://${resName}/getAllItems`, JSON.stringify({}), function (items) {
let itemListDiv = $("#items-list");
itemListDiv.empty();
for(const[itemName, itemData] of Object.entries(items)) {
let itemDiv = $(`
<li class="list-group-item list-group-item-action" value=${itemName}>${itemData.label}</li>
`);
itemDiv.click(function() {
inputItemsModal.modal("hide");
resolve(itemName);
});
itemListDiv.append(itemDiv);
}
});
})
}
$("#input-item-search").on("keyup", function() {
let text = $(this).val().toLowerCase();
$("#items-list li").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(text) > -1)
});
})
async function weaponsDialog() {
return new Promise((resolve, reject) => {
let inputWeaponsModal = $("#input-weapons-dialog-modal")
inputWeaponsModal.modal("show");
$("#input-weapon-search").val();
$.post(`https://${resName}/getAllWeapons`, JSON.stringify({}), function (weapons) {
let weaponListDiv = $("#weapons-list");
weaponListDiv.empty();
weapons.forEach(weaponData => {
let weaponDiv = $(`
<li class="list-group-item list-group-item-action" value=${weaponData.name}>${weaponData.label}</li>
`);
weaponDiv.click(function() {
inputWeaponsModal.modal("hide");
resolve(weaponData.name);
});
weaponListDiv.append(weaponDiv);
})
});
})
}
$("#input-weapon-search").on("keyup", function() {
let text = $(this).val().toLowerCase();
$("#weapons-list li").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(text) > -1)
});
})
async function objectDialog(type) {
return new Promise(async function(resolve, reject) {
switch(type) {
case "item": {
resolve( await itemsDialog() );
break;
}
case "account": {
resolve( await accountsDialog() );
break;
}
case "weapon": {
resolve( await weaponsDialog() );
break;
}
}
});
}
/* Limited objects dialog */
async function limitedObjectsDialog(oldLimitedObjects) {
return new Promise((resolve, reject) => {
let limitedObjectsModal = $("#limited-objects-dialog-modal")
limitedObjectsModal.modal("show");
$("#limited-objects-list").empty();
if(oldLimitedObjects) {
if(oldLimitedObjects.item) {
for(const objectName of Object.keys(oldLimitedObjects.item)) {
let objectData = {
name: objectName,
type: "item",
}
addLimitedObjectToList(objectData);
}
}
if(oldLimitedObjects.weapon) {
for(const objectName of Object.keys(oldLimitedObjects.weapon)) {
let objectData = {
name: objectName,
type: "weapon",
}
addLimitedObjectToList(objectData);
}
}
}
$("#limited-objects-form").unbind().submit(function(event) {
if (!this.checkValidity()) {
event.preventDefault();
event.stopPropagation();
return;
} else {
$(this).removeClass("was-validated");
}
let limitedObjects = {
"item": {},
"weapon": {},
};
$("#limited-objects-list .limited-object").each(function() {
let type = $(this).find(".item-type").val();
let name = $(this).find(".item-name").val();
limitedObjects[type][name] = true;
})
limitedObjectsModal.modal("hide");
resolve(limitedObjects);
})
})
}
async function addLimitedObjectToList(objectData) {
let objectDiv = $(`
<div class="row g-2 row-cols-auto align-items-center text-body my-2 limited-object justify-content-center">
<button type="button" class="btn btn-danger delete-limited-object-btn me-3" ><i class="bi bi-trash-fill"></i></button>
<select class="form-select item-type" style="width: auto;">
<option selected value="item">${getLocalizedText("menu:item")}</option>
${await getFramework() == "ESX" ? `<option value="weapon">${getLocalizedText("menu:weapon")}</option>` : ""}
</select>
<div class="form-floating col-6">
<input type="text" class="form-control item-name" placeholder="Name" required>
<label>${ getLocalizedText("menu:object_name") }</label>
</div>
<button type="button" class="btn btn-secondary col-auto choose-item-btn" data-bs-toggle="tooltip" data-bs-placement="top" title="${ getLocalizedText("menu:choose") }"><i class="bi bi-list-ul"></i></button>
</div>
`);
objectDiv.find(".delete-limited-object-btn").click(function() {
objectDiv.remove();
});
objectDiv.find(".choose-item-btn").click(async function() {
let objectType = objectDiv.find(".item-type").val();
let objectName = await objectDialog(objectType);
objectDiv.find(".item-name").val(objectName);
}).tooltip();
if(objectData) {
objectDiv.find(".item-type").val(objectData.type);
objectDiv.find(".item-name").val(objectData.name);
}
$("#limited-objects-list").append(objectDiv);
}
$("#limited-objects-list-add-object-btn").click(function() {
addLimitedObjectToList();
})
async function inputDialog(title, label) {
return new Promise((resolve, reject) => {
let inputDialogModal = $("#input-dialog-modal");
$("#input-dialog-modal-value").val("");
$("#input-dialog-modal-title").text(title);
$("#input-dialog-modal-label").text(label);
inputDialogModal.modal("show");
$("#input-dialog-modal-form").unbind().submit(function(event) {
if (!this.checkValidity()) {
event.preventDefault();
event.stopPropagation();
return;
} else {
$(this).removeClass("was-validated");
}
inputDialogModal.modal("hide");
resolve( $("#input-dialog-modal-value").val() );
});
})
}
function toggleCursor(enabled) {
if (enabled) {
$.post(`https://${resName}/enableCursor`, JSON.stringify({}));
} else {
$.post(`https://${resName}/disableCursor`, JSON.stringify({}));
}
}
function loadDialog(dialogName) {
var script = document.createElement('script');
console.log(`../utils/dialogs/${dialogName}/${dialogName}.js`)
script.setAttribute('src',`../utils/dialogs/${dialogName}/${dialogName}.js`);
document.head.appendChild(script);
}
// Messages received by client
window.addEventListener('message', (event) => {
let data = event.data;
let action = data.action;
switch(action) {
case "loadDialog": {
var script = document.createElement('script');
script.setAttribute('src',`../utils/dialogs/${data.dialogName}/${data.dialogName}.js`);
document.head.appendChild(script);
break;
}
}
})
$.post(`https://${resName}/nuiReady`, JSON.stringify({}));