feat: new channel
This commit is contained in:
@@ -36,6 +36,89 @@ layui.config({
|
||||
}).extend({
|
||||
index: 'lib/index'
|
||||
}).use(['index'], function(){});
|
||||
|
||||
window.CorunaFilterOptions = (function () {
|
||||
var portal = @json($portal ?? 'admin');
|
||||
var channelsUrl = @json(route(($portal ?? 'admin').'.filterOptions.channels'));
|
||||
var agentsUrl = portal === 'admin' ? @json(route('admin.filterOptions.agents')) : null;
|
||||
var mem = { channels: null, agents: null, inflight: null };
|
||||
var STORAGE_PREFIX = 'coruna_filter_opts_' + portal + '_';
|
||||
var TTL_MS = 60 * 1000;
|
||||
|
||||
function readStore(key) {
|
||||
try {
|
||||
var raw = sessionStorage.getItem(STORAGE_PREFIX + key);
|
||||
if (!raw) return null;
|
||||
var parsed = JSON.parse(raw);
|
||||
if (!parsed || !parsed.at || (Date.now() - parsed.at) > TTL_MS) return null;
|
||||
return parsed.data;
|
||||
} catch (e) { return null; }
|
||||
}
|
||||
|
||||
function writeStore(key, data) {
|
||||
try {
|
||||
sessionStorage.setItem(STORAGE_PREFIX + key, JSON.stringify({ at: Date.now(), data: data }));
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function fillSelect(sel, rows, keepFirst) {
|
||||
var $sel = window.layui && layui.$ ? layui.$(sel) : null;
|
||||
if (!$sel || !$sel.length) return;
|
||||
var keep = keepFirst || 1;
|
||||
$sel.find('option').slice(keep).remove();
|
||||
(rows || []).forEach(function (row) {
|
||||
$sel.append(new Option(row.label, row.value));
|
||||
});
|
||||
}
|
||||
|
||||
function loadAll() {
|
||||
if (mem.inflight) return mem.inflight;
|
||||
var chCached = mem.channels || readStore('channels');
|
||||
var agCached = agentsUrl ? (mem.agents || readStore('agents')) : [];
|
||||
if (chCached && (!agentsUrl || agCached)) {
|
||||
mem.channels = chCached;
|
||||
mem.agents = agCached || [];
|
||||
return layui.$.Deferred().resolve(mem).promise();
|
||||
}
|
||||
var $ = layui.$;
|
||||
var reqs = [$.getJSON(channelsUrl)];
|
||||
if (agentsUrl) reqs.push($.getJSON(agentsUrl));
|
||||
mem.inflight = $.when.apply($, reqs).then(function () {
|
||||
var args = arguments;
|
||||
var chRes = reqs.length === 1 ? args[0] : args[0][0];
|
||||
var agRes = reqs.length === 1 ? null : args[1][0];
|
||||
mem.channels = (chRes && chRes.data) || [];
|
||||
mem.agents = (agRes && agRes.data) || [];
|
||||
writeStore('channels', mem.channels);
|
||||
if (agentsUrl) writeStore('agents', mem.agents);
|
||||
mem.inflight = null;
|
||||
return mem;
|
||||
}, function () {
|
||||
mem.inflight = null;
|
||||
return { channels: [], agents: [] };
|
||||
});
|
||||
return mem.inflight;
|
||||
}
|
||||
|
||||
function apply(form) {
|
||||
return loadAll().then(function (data) {
|
||||
fillSelect('select[data-coruna-channels]', data.channels, 1);
|
||||
fillSelect('select[data-coruna-agents]', data.agents, 2);
|
||||
if (form && form.render) form.render('select');
|
||||
});
|
||||
}
|
||||
|
||||
function bust() {
|
||||
mem.channels = null;
|
||||
mem.agents = null;
|
||||
try {
|
||||
sessionStorage.removeItem(STORAGE_PREFIX + 'channels');
|
||||
sessionStorage.removeItem(STORAGE_PREFIX + 'agents');
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
return { apply: apply, bust: bust, loadAll: loadAll };
|
||||
})();
|
||||
</script>
|
||||
@stack('scripts')
|
||||
</body>
|
||||
|
||||
Reference in New Issue
Block a user