Skip to content

Commit acedb4b

Browse files
committed
client(admin): centralize primary-slug selection in pickPrimarySlug helper
Five call sites picked the link's representative slug, in three different shapes: `find(s => s.is_primary) || slugs[0]`, a manual loop with a separate `!slug && slugs.length > 0` fallback, and an `if (slugs && slugs.length > 0)` wrapper. Collapse all three into one helper so the next slug-semantics drift has a single place to fix.
1 parent f40d9b3 commit acedb4b

1 file changed

Lines changed: 18 additions & 17 deletions

File tree

src/client.ts

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@ function t(key, params) {
3939
return val;
4040
}
4141
42+
// The slug to display or copy when "the link" needs one representative chip:
43+
// the link's primary, with slugs[0] as a defensive fallback for malformed data.
44+
function pickPrimarySlug(link) {
45+
if (!link.slugs || link.slugs.length === 0) return null;
46+
for (var i = 0; i < link.slugs.length; i++) {
47+
if (link.slugs[i].is_primary) return link.slugs[i];
48+
}
49+
return link.slugs[0];
50+
}
51+
4252
// ---- Toast ----
4353
function toast(msg, type) {
4454
var el = document.getElementById('toast');
@@ -150,7 +160,7 @@ function quickShorten() {
150160
window.location.href = '/_/admin/links/' + link.id;
151161
}
152162
} else {
153-
var primary = link.slugs.find(function(s) { return s.is_primary; }) || link.slugs[0];
163+
var primary = pickPrimarySlug(link);
154164
if (primary) copyUrl(primary.slug);
155165
toast(t('client.linkCreatedCopied'));
156166
window.location.href = '/_/admin/links/' + link.id;
@@ -247,7 +257,7 @@ function createDuplicate(url) {
247257
api('/links', { method: 'POST', body: JSON.stringify({ url: url, allow_duplicate: true }) }).then(function(res) {
248258
if (res.ok) {
249259
return res.json().then(function(link) {
250-
var primary = link.slugs.find(function(s) { return s.is_primary; }) || link.slugs[0];
260+
var primary = pickPrimarySlug(link);
251261
if (primary) copyUrl(primary.slug);
252262
toast(t('client.linkCreatedCopied'));
253263
window.location.href = '/_/admin/links/' + link.id;
@@ -1125,11 +1135,8 @@ function pollDashboard() {
11251135
if (recentNoData) recentNoData.remove();
11261136
for (var ri = 0; ri < d.recent_links.length; ri++) {
11271137
var link = d.recent_links[ri];
1128-
var slug = '';
1129-
for (var si = 0; si < link.slugs.length; si++) {
1130-
if (link.slugs[si].is_primary) { slug = link.slugs[si].slug; break; }
1131-
}
1132-
if (!slug && link.slugs.length > 0) slug = link.slugs[0].slug;
1138+
var primarySlug = pickPrimarySlug(link);
1139+
var slug = primarySlug ? primarySlug.slug : '';
11331140
var a = document.createElement('a');
11341141
a.href = '/_/admin/links/' + link.id;
11351142
a.style.cssText = 'display:flex;align-items:center;gap:0.75rem;padding:0.5rem 0;cursor:pointer;overflow:hidden;min-width:0;text-decoration:none;color:inherit';
@@ -1161,11 +1168,8 @@ function pollDashboard() {
11611168
if (tlNoData) tlNoData.remove();
11621169
for (var ti = 0; ti < d.top_links.length; ti++) {
11631170
var tLink = d.top_links[ti];
1164-
var tSlug = '';
1165-
for (var si = 0; si < tLink.slugs.length; si++) {
1166-
if (tLink.slugs[si].is_primary) { tSlug = tLink.slugs[si].slug; break; }
1167-
}
1168-
if (!tSlug && tLink.slugs.length > 0) tSlug = tLink.slugs[0].slug;
1171+
var tPrimary = pickPrimarySlug(tLink);
1172+
var tSlug = tPrimary ? tPrimary.slug : '';
11691173
var tPct = Math.round((tLink.total_clicks / tlMax) * 100);
11701174
var a = document.createElement('a');
11711175
a.href = '/_/admin/links/' + tLink.id;
@@ -1503,11 +1507,8 @@ function showAddLinkToBundlePicker(bundleId, excludeIds) {
15031507
html += '<div class="muted-hint">' + esc(t('bundles.allLinksAdded')) + '</div>';
15041508
} else {
15051509
available.forEach(function(link) {
1506-
var slug = '';
1507-
if (link.slugs && link.slugs.length > 0) {
1508-
var primary = link.slugs.find(function(s) { return s.is_primary; }) || link.slugs[0];
1509-
slug = primary.slug;
1510-
}
1510+
var primary = pickPrimarySlug(link);
1511+
var slug = primary ? primary.slug : '';
15111512
var label = link.label || link.url;
15121513
html += '<div class="add-to-bundle-row" data-search="' + esc((link.label || '') + ' ' + link.url + ' ' + slug).toLowerCase() + '" onclick="doAddLinkToBundle(' + bundleId + ',' + link.id + ')">';
15131514
html += '<span class="slug-chip">' + esc(slug) + '</span>';

0 commit comments

Comments
 (0)