class="pp-friend-request-btn pp-friend-request-btn--accept" data-action="accept">Accepter' + '' + '' + ''; } function setCount(n) { COUNT.textContent = String(n); if (n <= 0) { ROOT.setAttribute('hidden', 'hidden'); } else { ROOT.removeAttribute('hidden'); } } function load() { fetch(API + '/requests', { credentials: 'same-origin' }) .then(function (r) { return r.ok ? r.json() : Promise.reject(r); }) .then(function (json) { var items = (json && json.data) || []; LIST.innerHTML = items.map(renderItem).join(''); setCount(items.length); }) .catch(function () { /* silent — laisse le SSR initial */ }); } LIST.addEventListener('click', function (e) { var btn = e.target.closest('[data-action]'); if (!btn) return; var item = btn.closest('[data-member-id]'); if (!item) return; var memberId = parseInt(item.getAttribute('data-member-id'), 10); var action = btn.getAttribute('data-action'); if (memberId <= 0 || (action !== 'accept' && action !== 'decline')) return; Array.prototype.forEach.call(item.querySelectorAll('button'), function (b) { b.disabled = true; }); fetch(API + '/' + memberId + '/' + action, { method: 'POST', credentials: 'same-origin' }) .then(function (r) { return r.ok ? r.json() : Promise.reject(r); }) .then(function () { item.remove(); var n = LIST.children.length; setCount(n); }) .catch(function () { Array.prototype.forEach.call(item.querySelectorAll('button'), function (b) { b.disabled = false; }); }); }); // Charge la liste si l'init SSR a vu au moins une demande, // sinon le widget est masqué (hidden) et on n'embête pas l'API. var initial = parseInt(ROOT.getAttribute('data-initial-count') || '0', 10); if (initial > 0) { load(); } })();