Skip to content

Commit 95004ae

Browse files
justin808claude
andcommitted
Add defensive optional chaining for helmet properties
Use optional chaining (?.) when accessing helmet properties to prevent "Cannot read property 'toString' of undefined" errors if helmet exists but individual properties (title, link, meta, style) are undefined. Changes applied to all server rendering files: - react_on_rails/spec/dummy/client/app/startup/ReactHelmetApp.server.jsx - react_on_rails/spec/dummy/client/app/startup/ReactHelmetAppBroken.server.jsx - react_on_rails_pro/spec/dummy/client/app/ror-auto-load-components/ReactHelmetApp.server.jsx - react_on_rails_pro/spec/dummy/client/app/loadable/loadable-server.imports-hmr.jsx - react_on_rails_pro/spec/dummy/client/app/loadable/loadable-server.imports-loadable.jsx 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 0483be0 commit 95004ae

File tree

5 files changed

+11
-11
lines changed

5 files changed

+11
-11
lines changed

react_on_rails/spec/dummy/client/app/startup/ReactHelmetApp.server.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default (props, _railsContext) => {
3030

3131
const renderedHtml = {
3232
componentHtml,
33-
title: helmet ? helmet.title.toString() : '',
33+
title: helmet?.title?.toString() || '',
3434
};
3535

3636
// Note that this function returns an Object for server rendering.

react_on_rails/spec/dummy/client/app/startup/ReactHelmetAppBroken.server.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export default (props) => {
2828

2929
const renderedHtml = {
3030
componentHtml,
31-
title: helmet ? helmet.title.toString() : '',
31+
title: helmet?.title?.toString() || '',
3232
};
3333
return { renderedHtml };
3434
};

react_on_rails_pro/spec/dummy/client/app/loadable/loadable-server.imports-hmr.jsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ const hmrApp = (props, railsContext) => {
1919
return {
2020
renderedHtml: {
2121
componentHtml,
22-
link: helmet ? helmet.link.toString() : '',
23-
meta: helmet ? helmet.meta.toString() : '',
24-
style: helmet ? helmet.style.toString() : '',
25-
title: helmet ? helmet.title.toString() : '',
22+
link: helmet?.link?.toString() || '',
23+
meta: helmet?.meta?.toString() || '',
24+
style: helmet?.style?.toString() || '',
25+
title: helmet?.title?.toString() || '',
2626
},
2727
};
2828
};

react_on_rails_pro/spec/dummy/client/app/loadable/loadable-server.imports-loadable.jsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ const loadableApp = (props, railsContext) => {
2929
return {
3030
renderedHtml: {
3131
componentHtml,
32-
link: helmet ? helmet.link.toString() : '',
32+
link: helmet?.link?.toString() || '',
3333
linkTags: extractor.getLinkTags(),
3434
styleTags: extractor.getStyleTags(),
35-
meta: helmet ? helmet.meta.toString() : '',
35+
meta: helmet?.meta?.toString() || '',
3636
scriptTags: extractor.getScriptTags(),
37-
style: helmet ? helmet.style.toString() : '',
38-
title: helmet ? helmet.title.toString() : '',
37+
style: helmet?.style?.toString() || '',
38+
title: helmet?.title?.toString() || '',
3939
},
4040
};
4141
};

react_on_rails_pro/spec/dummy/client/app/ror-auto-load-components/ReactHelmetApp.server.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export default async (props, _railsContext) => {
4040

4141
const promiseObject = {
4242
componentHtml,
43-
title: helmet ? helmet.title.toString() : '',
43+
title: helmet?.title?.toString() || '',
4444
};
4545
return promiseObject;
4646
};

0 commit comments

Comments
 (0)