layout-with-a-hat v0.0.4
layout-with-a-hat
A higher order component to add different layouts to your pages and automatically fills meta tags including og / twitter meta tags to every single page with react-helmet.
- The first call you would pass your react-helmet meta tags.
- The second call you would pass your Layout component and its needed props if any.
- The third call you would pass your wrapped component and its needed props if any. the wrapped component is the content of the page excluding the layout.
Install
npm install layout-with-a-hator
yarn add layout-with-a-hatUsage
import React from 'react';
import LayoutWithAHat from 'layout-with-a-hat';
const helmetConfig = {
base: 'http://example.com', // or {"target": "_blank", "href": "http://mysite.com/"}
title: 'page title',
description: 'description text',
favicon: {
ico: '/favicon.ico',
s16: '/favicon-16.png',
...
},
image: '/image.jpg',
link: [
{ rel: 'link rel', href: 'link href' },
...
],
meta: [
{ name: 'meta name', content: 'meta content' },
...
],
og: {
title: 'og title',
image: '/og_image.jpg',
},
twitter: {
title: ' twitter title',
image: '/twitter_image.jpg',
},
url: '/page.url',
htmlAttributes: {
lang: 'en'
},
script: [
{"type": "text/javascript", "src": "http://mysite.com/js/test1.js"},
{"type": "text/javascript", "src": "http://mysite.com/js/test2.js"}
],
style: [
{type: 'text/css', cssText: 'div{ display: block; color: blue;}' }
],
};
const WrappedComponent = ({ name }) => (
<div>
<p>This is the component i want to wrap in Layout.</p>
<p>{name}</p>
</div>
);
const LayoutComponent = ({ className, children }) => (
<div className={className}>
<p>This is the Layout that i want my component to be wrapped in.</p>
<header>
<nav />
...
<h1>This is a header</h1>
...
{children}
<footer>
<p>This is a footer</p>
...
</footer>
</header>
</div>
);
export default LayoutWithAHat(helmetConfig)({
LayoutComponent,
layoutComponentProps: { className: 'sidebar' ...}
})({
WrappedComponent,
wrappedComponentProps: { name: 'Superman' ...}
});Important Notes
everything in
layout-with-a-hatis optional.If you would like to use different layouts for your pages and not use
layout-with-a-hatfor your react-helmet needs, you can do that by not providing anything in the first call. same goes for the other 2 calls, if you would like to use only react-helmet side oflayout-with-a-hat, you can do that by not providing anything in the second and third calls.if you provide
titleprop to the first call, it will be used as default title for the open graph protocol and twitter title meta tags unless you provide them separately (eg:og: {title: 'og specific title'}) .same goes fordescription,imageandurlprops.if
application-namemeta tag is not provided thesitenamewill be used if the latter is provided.if
canonicallink tag is not provided theurlwill be used if the latter is provided.quick reminder for twitter
- Twitter Title Max Length =
70; - Twitter Desc Max Length =
200;
- Twitter Title Max Length =
LICENSE
MIT