fix(adwright): distinguish null vs [] in cycles/audience/connections empty-states
Some checks failed
plugin-tests / test (push) Failing after 6s

Empty-state messages now differentiate "never fetched" (null) from
"fetched but empty" ([]), so the panel reads correctly after a refresh
returns zero rows. Affected renderers: _renderCycles, _renderAudience,
_renderConnections. Targeting unchanged (its gate is "both lists needed",
not single-list empty).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Svrnty 2026-05-24 14:54:44 -04:00
parent ef6a123c06
commit db1d4e0cdb

View File

@ -337,17 +337,20 @@
function _renderCycles() { function _renderCycles() {
const pane = _pane("cycles"); const pane = _pane("cycles");
if (!pane) return; if (!pane) return;
const cycles = NS.state.data.cycles || []; const cycles = NS.state.data.cycles; // null = never fetched, [] = fetched empty
const emptyMsg = cycles === null
? 'No cycles loaded. Click Refresh cycles.'
: '0 cycles in Adwright. Create a cycle via CMO chat to dispatch ads.';
pane.innerHTML = pane.innerHTML =
'<div class="svrnty-aw-tab-header">' + '<div class="svrnty-aw-tab-header">' +
'<div class="svrnty-aw-tab-title">Cycles</div>' + '<div class="svrnty-aw-tab-title">Cycles</div>' +
'<button class="svrnty-aw-btn" data-svrnty-aw-action="refresh-cycles" data-svrnty-aw-needs-cmo>Refresh cycles</button>' + '<button class="svrnty-aw-btn" data-svrnty-aw-action="refresh-cycles" data-svrnty-aw-needs-cmo>Refresh cycles</button>' +
'</div>' + '</div>' +
(cycles.length ((cycles && cycles.length)
? ('<div class="svrnty-aw-list">' + ? ('<div class="svrnty-aw-list">' +
cycles.map((c) => _cycleRow(c)).join("") + cycles.map((c) => _cycleRow(c)).join("") +
'</div>') '</div>')
: '<div class="svrnty-aw-empty">No cycles loaded. Click Refresh cycles.</div>'); : '<div class="svrnty-aw-empty">' + emptyMsg + '</div>');
_rewireActions(pane); _rewireActions(pane);
pane.querySelectorAll("[data-svrnty-aw-cycle]").forEach((row) => { pane.querySelectorAll("[data-svrnty-aw-cycle]").forEach((row) => {
row.addEventListener("click", () => { row.addEventListener("click", () => {
@ -404,15 +407,19 @@
function _renderAudience() { function _renderAudience() {
const pane = _pane("audience"); const pane = _pane("audience");
if (!pane) return; if (!pane) return;
const segs = NS.state.data.segments || []; const segs = NS.state.data.segments; // null = never fetched, [] = fetched empty
const segList = segs || [];
const emptyMsg = segs === null
? 'No segments loaded. Click Refresh.'
: '0 segments in Adwright. Define segments via CMO chat (e.g., "add segment vegan-31-50").';
pane.innerHTML = pane.innerHTML =
'<div class="svrnty-aw-tab-header">' + '<div class="svrnty-aw-tab-header">' +
'<div class="svrnty-aw-tab-title">Audience segments</div>' + '<div class="svrnty-aw-tab-title">Audience segments</div>' +
'<button class="svrnty-aw-btn" data-svrnty-aw-action="list-segments" data-svrnty-aw-needs-cmo>Refresh</button>' + '<button class="svrnty-aw-btn" data-svrnty-aw-action="list-segments" data-svrnty-aw-needs-cmo>Refresh</button>' +
'</div>' + '</div>' +
(segs.length (segList.length
? '<div class="svrnty-aw-list">' + ? '<div class="svrnty-aw-list">' +
segs.map((s) => segList.map((s) =>
'<div class="svrnty-aw-row">' + '<div class="svrnty-aw-row">' +
'<div class="svrnty-aw-row-main">' + '<div class="svrnty-aw-row-main">' +
'<div class="svrnty-aw-row-title">' + _esc(s.name || s.id) + '</div>' + '<div class="svrnty-aw-row-title">' + _esc(s.name || s.id) + '</div>' +
@ -422,7 +429,7 @@
'</div>' '</div>'
).join("") + ).join("") +
'</div>' '</div>'
: '<div class="svrnty-aw-empty">No segments loaded. Click Refresh.</div>'); : '<div class="svrnty-aw-empty">' + emptyMsg + '</div>');
_rewireActions(pane); _rewireActions(pane);
_refreshDisabledState(); _refreshDisabledState();
} }
@ -468,15 +475,19 @@
function _renderConnections() { function _renderConnections() {
const pane = _pane("connections"); const pane = _pane("connections");
if (!pane) return; if (!pane) return;
const conns = NS.state.data.connections || []; const conns = NS.state.data.connections; // null = never fetched, [] = fetched empty
const connList = conns || [];
const emptyConnMsg = conns === null
? 'No status loaded. Click Re-check.'
: '0 connections configured. Provision Meta + Woo credentials below.';
pane.innerHTML = pane.innerHTML =
'<div class="svrnty-aw-tab-header">' + '<div class="svrnty-aw-tab-header">' +
'<div class="svrnty-aw-tab-title">Connections</div>' + '<div class="svrnty-aw-tab-title">Connections</div>' +
'<button class="svrnty-aw-btn" data-svrnty-aw-action="connections-status" data-svrnty-aw-needs-cmo>Re-check</button>' + '<button class="svrnty-aw-btn" data-svrnty-aw-action="connections-status" data-svrnty-aw-needs-cmo>Re-check</button>' +
'</div>' + '</div>' +
'<div class="svrnty-aw-conn-list">' + '<div class="svrnty-aw-conn-list">' +
(conns.length ? conns.map(_connRow).join("") : (connList.length ? connList.map(_connRow).join("") :
'<div class="svrnty-aw-empty">No status loaded. Click Re-check.</div>') + '<div class="svrnty-aw-empty">' + emptyConnMsg + '</div>') +
'</div>' + '</div>' +
'<button class="svrnty-aw-btn svrnty-aw-btn-primary" data-svrnty-aw-action="open-cred-form">Fix credentials</button>' + '<button class="svrnty-aw-btn svrnty-aw-btn-primary" data-svrnty-aw-action="open-cred-form">Fix credentials</button>' +
'<form class="svrnty-aw-form" id="svrntyAwCredForm">' + '<form class="svrnty-aw-form" id="svrntyAwCredForm">' +