commit 10/10/2025
Broadcast Zones and Sound Channels
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user