From dce27734f0605700343aa3dd40449cf1c7c4f320 Mon Sep 17 00:00:00 2001 From: Hsieh Chin Fan Date: Wed, 2 Oct 2024 08:31:39 +0800 Subject: feat: well print Error object in modal --- src/MenuItem.mjs | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) (limited to 'src/MenuItem.mjs') diff --git a/src/MenuItem.mjs b/src/MenuItem.mjs index cb64f85..026e5bf 100644 --- a/src/MenuItem.mjs +++ b/src/MenuItem.mjs @@ -201,28 +201,43 @@ export const renderResults = ({ modal, modalContent }, map) => }, }); -function printObject(obj, parentElement, name) { +function printObject(obj, parentElement, name = null) { + // Create
and inside const detailsEle = document.createElement('details'); - const details = name ?? Object.values(obj)[0]; - detailsEle.innerHTML = `${details}${details}`; parentElement.appendChild(detailsEle); detailsEle.onclick = () => { + // Don't add items if it has contents if (detailsEle.querySelector(':scope > :not(summary)')) return; - Object.entries(obj).forEach(([key, value]) => { - if (typeof value === 'object') { - printObject(value, detailsEle, key); - } else { - const valueString = - typeof value === 'function' - ? `
${value}
` - : value ?? typeof value; + if (obj instanceof Error) { + // Handle Error objects specially + const errorProps = ['name', 'message', 'stack', ...Object.keys(obj)]; + errorProps.forEach(key => { + const value = obj[key]; + const valueString = key === 'stack' ? `
${value}
` : value; const propertyElement = document.createElement('p'); propertyElement.innerHTML = `${key}: ${valueString}`; detailsEle.appendChild(propertyElement); - } - }); + }); + } else { + // Handle regular objects + Object.entries(obj).forEach(([key, value]) => { + if (typeof value === 'object' && value !== null) { + printObject(value, detailsEle, key); + } else { + const valueString = + typeof value === 'function' + ? `
${value}
` + : value ?? typeof value; + const propertyElement = document.createElement('p'); + propertyElement.innerHTML = `${key}: ${valueString}`; + detailsEle.appendChild(propertyElement); + } + }); + } }; } -- cgit v1.2.3-70-g09d2