Skip to content

Instantly share code, notes, and snippets.

@aweber1
Last active January 20, 2020 19:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aweber1/2512b331c5ddb424090ee0f1d701f779 to your computer and use it in GitHub Desktop.
Save aweber1/2512b331c5ddb424090ee0f1d701f779 to your computer and use it in GitHub Desktop.
Sitecore JSS manifesterator
// would be part of a new `sitecore-jss-manifest` module
export default (routeData, specData) => {
// convert route data and spec data to Sitecore stuff.
// write `sitecore-import.json` to disk
};
// would be part of a new `sitecore-jss-manifest` module
export default () => {
const routeData = getRouteDataFromWhereverItLivesOrHoweverYouWantThx();
return routeData;
});
// would be part of a new `sitecore-jss-manifest` module
export default (specFileNames = []) => {
const specData = specFileNames.map((fileName) => {
const spec = require(fileName).default; // dynamic file load
return spec();
});
return specData;
};
// would be part of a new `sitecore-jss-manifest` module, the 'entry point'
import generateManifest from './generateManifest';
import generateRouteData from './generateRouteData';
import generateSpecData from './generateSpecData';
const routeData = generateRouteData();
// get specFileNames from cli, params, search, whatever...
const specFileNames = '//*[@templatekey = "SPEC"]'; // Sitecore descendants FTW :)
const specData = generateSpecData(specFileNames);
generateManifest(routeData, specData);
// React component
import React from 'react';
import PropTypes from 'prop-types';
import { Placeholder } from '@sitecore/sitecore-jss-react';
const Welcome = (props) =>
(<div>
Welcome to Sitecore!
<Placeholder name="page-header" />
<Placeholder name="page-content" />
</div>);
Welcome.propTypes = {
title: PropTypes.string,
text: PropTypes.string
};
// manifest spec file
import Welcome from './Welcome';
export default (manifestConfig) => {
const propTypes = Welcome.propTypes;
Object.keys(propTypes).forEach(key => {
const propTypeValue = propTypes[key];
// do something fancy here to translate propTypes into field definitions, if you can.
});
// do more fancy stuff here to generate metadata (e.g. static analysis)
return {
componentName: 'Welcome',
fields: [
{ name: 'title', displayName: 'Title', type: 'string', editable: true },
{ name: 'text', displayName: 'Text', type: 'richText', editable: false }
],
placeholders: ['page-header', 'page-content']
};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment