commit 10/10/2025

Broadcast Zones and Sound Channels
This commit is contained in:
2025-10-10 15:01:09 +07:00
parent fdc7556dd7
commit 41d6dd7f47
6 changed files with 96 additions and 79 deletions

View File

@@ -19,6 +19,12 @@ window.BroadcastZoneList ??= [];
*/
window.selectedBroadcastZoneRow = null;
/**
* List of sound channels available
* @type {String[]}
*/
window.SoundChannelList = []
/**
* Fill broadcast zone table body with values
* @param {BroadcastZone[]} vv values to fill
@@ -36,7 +42,7 @@ function fill_broadcastzonetablebody(vv) {
</tr>`;
$('#broadcastzonetablebody').append(row);
let $addedrow = $('#broadcastzonetablebody tr:last');
$addedrow.click(function () {
$addedrow.off('click').on('click', function () {
if (window.selectedBroadcastZoneRow) {
window.selectedBroadcastZoneRow.find('td').css('background-color', '');
if (window.selectedBroadcastZoneRow.is($(this))) {
@@ -72,6 +78,18 @@ function reloadBroadcastZones(APIURL = "BroadcastZones/") {
});
}
function fetchSoundChannels(APIURL = "SoundChannel/") {
window.SoundChannelList = [];
fetchAPI(APIURL + "SoundChannelDescriptions", "GET", {}, null, (okdata) => {
if (Array.isArray(okdata)) {
//console.log("fetchSoundChannels : ", okdata)
window.SoundChannelList.push(...okdata);
} else console.log("fetchSoundChannels: okdata is not array");
}, (errdata) => {
alert("Error loading sound channels : " + errdata.message);
});
}
$(document).ready(function () {
console.log("broadcastzones.js loaded successfully");
window.selectedBroadcastZoneRow = null;
@@ -95,7 +113,7 @@ $(document).ready(function () {
let $findzone = $('#findzone');
$findzone.on('input', function () {
$findzone.off('input').on('input', function () {
let searchTerm = $findzone.val().trim().toLowerCase();
if (searchTerm.length > 0) {
window.selectedBroadcastZoneRow = null;
@@ -125,24 +143,26 @@ $(document).ready(function () {
$broadcastzonedescription.val('');
// fill broadcastzonesoundchannel from SoundChannelList
$broadcastzonesoundchannel.empty();
if (Array.isArray(SoundChannelList) && SoundChannelList.length > 0) {
console.log("SoundChannelList:", window.SoundChannelList);
if (Array.isArray(window.SoundChannelList) && window.SoundChannelList.length > 0) {
// SoundChannelList ada isinya
SoundChannelList.forEach(ch => {
if (ch.channel && ch.channel.length > 0){
// hanya yang punya channel saja
$broadcastzonesoundchannel.append($('<option>').val(ch.channel).text(ch.channel));
window.SoundChannelList.forEach(ch => {
if (ch && ch.length>0){
$broadcastzonesoundchannel.append($('<option>').val(ch).text(ch));
}
});
}
$broadcastzonebox.val('');
$broadcastzonebox.val('1').prop('disabled', true);
for (let i = 1; i <= 32; i++) {
cbRelay(i).prop('checked', false);
}
}
fetchSoundChannels();
reloadBroadcastZones(APIURL_BroadcastZone);
$btnClear.click(() => {
$btnClear.off('click').on('click', () => {
DoClear(APIURL_BroadcastZone, "BroadcastZones", (okdata) => {
reloadBroadcastZones(APIURL_BroadcastZone);
alert("Success clear broadcast zones: " + okdata.message);
@@ -151,7 +171,7 @@ $(document).ready(function () {
});
});
$btnAdd.click(() => {
$btnAdd.off('click').on('click', () => {
$broadcastzonemodal.modal('show');
clearBroadcastZoneModal();
@@ -203,7 +223,7 @@ $(document).ready(function () {
});
});
$btnRemove.click(() => {
$btnRemove.off('click').on('click', () => {
if (window.selectedBroadcastZoneRow) {
let cells = window.selectedBroadcastZoneRow.find('td');
/** @type {BroadcastZone} */
@@ -225,7 +245,7 @@ $(document).ready(function () {
}
});
$btnEdit.click(() => {
$btnEdit.off('click').on('click', () => {
if (window.selectedBroadcastZoneRow) {
let cells = window.selectedBroadcastZoneRow.find('td');
/** @type {BroadcastZone} */
@@ -242,12 +262,12 @@ $(document).ready(function () {
$broadcastzoneindex.val(bz.index);
$broadcastzonedescription.val(bz.description);
$broadcastzonesoundchannel.val(bz.SoundChannel);
$broadcastzonebox.val(bz.id);
if (bz.bp) {
bz.bp.split(';').forEach(relayId => {
let id = parseInt(relayId, 10);
cbRelay(id).prop('checked', true);
$broadcastzonebox.val(bz.Box);
if (bz.Relay && bz.Relay.length > 0) {
bz.Relay.split(';').map(Number).filter(n => !isNaN(n) && n>=1 && n<=8).forEach(relayId => {
cbRelay(relayId).prop('checked', true);
});
}
$broadcastzonemodal.off('click.broadcastzonesave').on('click.broadcastzonesave', '#broadcastzonesave', function () {
let description = $broadcastzonedescription.val().trim();
@@ -297,11 +317,11 @@ $(document).ready(function () {
}
});
$btnExport.click(() => {
$btnExport.off('click').on('click', () => {
DoExport(APIURL_BroadcastZone, "broadcastzones.xlsx", {});
});
$btnImport.click(() => {
$btnImport.off('click').on('click', () => {
DoImport(APIURL_BroadcastZone, (okdata) => {
reloadBroadcastZones(APIURL_BroadcastZone);
alert("Success import broadcast zones: " + okdata.message);