diff --git a/.changeset/search-hit-without-description.md b/.changeset/search-hit-without-description.md new file mode 100644 index 000000000..b60b65da5 --- /dev/null +++ b/.changeset/search-hit-without-description.md @@ -0,0 +1,5 @@ +--- +'@doc-kit/generator-react': patch +--- + +Fix the search modal crashing with `Cannot read properties of undefined (reading 'split')` when a hit has no description, such as headings without a leading paragraph in the generated `orama-db.json` index. diff --git a/packages/react/src/html/ui/utils/__tests__/renderLabel.test.mjs b/packages/react/src/html/ui/utils/__tests__/renderLabel.test.mjs index e95b890cc..c77f8fc05 100644 --- a/packages/react/src/html/ui/utils/__tests__/renderLabel.test.mjs +++ b/packages/react/src/html/ui/utils/__tests__/renderLabel.test.mjs @@ -35,6 +35,11 @@ const { renderLabel } = await import(renderLabelModule); process.once('exit', () => rm(output, { recursive: true, force: true })); describe('renderLabel', () => { + it('returns the label unchanged when it is not a string', () => { + assert.equal(renderLabel(undefined), undefined); + assert.equal(renderLabel(''), ''); + }); + it('does not render elements for empty segments', () => { const result = renderLabel('`value`'); diff --git a/packages/react/src/html/ui/utils/renderLabel.jsx b/packages/react/src/html/ui/utils/renderLabel.jsx index 8b89bb924..aff29dfe1 100644 --- a/packages/react/src/html/ui/utils/renderLabel.jsx +++ b/packages/react/src/html/ui/utils/renderLabel.jsx @@ -5,10 +5,15 @@ * a case where'd have extremely complex markdown * within a sidebar like this) * - * @param {string} label - Raw heading text. + * @param {string | undefined} label - Raw heading text. Search hits have no + * label for documents without a leading paragraph. * @returns {import('preact').ComponentChildren} */ export const renderLabel = label => { + if (!label) { + return label; + } + const segments = label.split('`'); if (segments.length === 1) {