diff options
Diffstat (limited to 'front/odiparpack/internals/generators/component')
6 files changed, 204 insertions, 0 deletions
| diff --git a/front/odiparpack/internals/generators/component/class.js.hbs b/front/odiparpack/internals/generators/component/class.js.hbs new file mode 100644 index 0000000..310239a --- /dev/null +++ b/front/odiparpack/internals/generators/component/class.js.hbs @@ -0,0 +1,31 @@ +/** + * + * {{ properCase name }} + * + */ + +import React from 'react'; +// import PropTypes from 'prop-types'; +// import styled from 'styled-components'; + +{{#if wantMessages}} +import { FormattedMessage } from 'react-intl'; +import messages from './messages'; +{{/if}} + +/* eslint-disable react/prefer-stateless-function */ +class {{ properCase name }} extends {{{ type }}} { +  render() { +    return ( +      <div> +      {{#if wantMessages}} +        <FormattedMessage {...messages.header} /> +      {{/if}} +      </div> +    ); +  } +} + +{{ properCase name }}.propTypes = {}; + +export default {{ properCase name }}; diff --git a/front/odiparpack/internals/generators/component/index.js b/front/odiparpack/internals/generators/component/index.js new file mode 100644 index 0000000..4ac51d9 --- /dev/null +++ b/front/odiparpack/internals/generators/component/index.js @@ -0,0 +1,109 @@ +/** + * Component Generator + */ + +/* eslint strict: ["off"] */ + +'use strict'; + +const componentExists = require('../utils/componentExists'); + +module.exports = { +  description: 'Add an unconnected component', +  prompts: [ +    { +      type: 'list', +      name: 'type', +      message: 'Select the type of component', +      default: 'Stateless Function', +      choices: () => [ +        'Stateless Function', +        'React.PureComponent', +        'React.Component', +      ], +    }, +    { +      type: 'input', +      name: 'name', +      message: 'What should it be called?', +      default: 'Button', +      validate: value => { +        if (/.+/.test(value)) { +          return componentExists(value) +            ? 'A component or container with this name already exists' +            : true; +        } + +        return 'The name is required'; +      }, +    }, +    { +      type: 'confirm', +      name: 'wantMessages', +      default: true, +      message: 'Do you want i18n messages (i.e. will this component use text)?', +    }, +    { +      type: 'confirm', +      name: 'wantLoadable', +      default: false, +      message: 'Do you want to load the component asynchronously?', +    }, +  ], +  actions: data => { +    // Generate index.js and index.test.js +    let componentTemplate; + +    switch (data.type) { +      case 'Stateless Function': { +        componentTemplate = './component/stateless.js.hbs'; +        break; +      } +      default: { +        componentTemplate = './component/class.js.hbs'; +      } +    } + +    const actions = [ +      { +        type: 'add', +        path: '../../app/components/{{properCase name}}/index.js', +        templateFile: componentTemplate, +        abortOnFail: true, +      }, +      { +        type: 'add', +        path: '../../app/components/{{properCase name}}/tests/index.test.js', +        templateFile: './component/test.js.hbs', +        abortOnFail: true, +      }, +    ]; + +    // If they want a i18n messages file +    if (data.wantMessages) { +      actions.push({ +        type: 'add', +        path: '../../app/components/{{properCase name}}/messages.js', +        templateFile: './component/messages.js.hbs', +        abortOnFail: true, +      }); +    } + +    // If want Loadable.js to load the component asynchronously +    if (data.wantLoadable) { +      actions.push({ +        type: 'add', +        path: '../../app/components/{{properCase name}}/Loadable.js', +        templateFile: './component/loadable.js.hbs', +        abortOnFail: true, +      }); +    } + +    actions.push({ +      type: 'prettify', +      path: '/components/', +    }); + +    return actions; +  }, +}; diff --git a/front/odiparpack/internals/generators/component/loadable.js.hbs b/front/odiparpack/internals/generators/component/loadable.js.hbs new file mode 100644 index 0000000..889bbf6 --- /dev/null +++ b/front/odiparpack/internals/generators/component/loadable.js.hbs @@ -0,0 +1,12 @@ +/** + * + * Asynchronously loads the component for {{ properCase name }} + * + */ + +import Loadable from 'react-loadable'; + +export default Loadable({ +  loader: () => import('./index'), +  loading: () => null, +}); diff --git a/front/odiparpack/internals/generators/component/messages.js.hbs b/front/odiparpack/internals/generators/component/messages.js.hbs new file mode 100644 index 0000000..f73ee90 --- /dev/null +++ b/front/odiparpack/internals/generators/component/messages.js.hbs @@ -0,0 +1,14 @@ +/* + * {{ properCase name }} Messages + * + * This contains all the text for the {{ properCase name }} component. + */ + +import { defineMessages } from 'react-intl'; + +export default defineMessages({ +  header: { +    id: 'app.components.{{ properCase name }}.header', +    defaultMessage: 'This is the {{ properCase name}} component !', +  }, +}); diff --git a/front/odiparpack/internals/generators/component/stateless.js.hbs b/front/odiparpack/internals/generators/component/stateless.js.hbs new file mode 100644 index 0000000..04ba918 --- /dev/null +++ b/front/odiparpack/internals/generators/component/stateless.js.hbs @@ -0,0 +1,28 @@ +/** + * + * {{ properCase name }} + * + */ + +import React from 'react'; +// import PropTypes from 'prop-types'; +// import styled from 'styled-components'; + +{{#if wantMessages}} +import { FormattedMessage } from 'react-intl'; +import messages from './messages'; +{{/if}} + +function {{ properCase name }}() { +  return ( +    <div> +    {{#if wantMessages}} +      <FormattedMessage {...messages.header} /> +    {{/if}} +    </div> +  ); +} + +{{ properCase name }}.propTypes = {}; + +export default {{ properCase name }}; diff --git a/front/odiparpack/internals/generators/component/test.js.hbs b/front/odiparpack/internals/generators/component/test.js.hbs new file mode 100644 index 0000000..42c0e37 --- /dev/null +++ b/front/odiparpack/internals/generators/component/test.js.hbs @@ -0,0 +1,10 @@ +// import React from 'react'; +// import { shallow } from 'enzyme'; + +// import {{ properCase name }} from '../index'; + +describe('<{{ properCase name }} />', () => { +  it('Expect to have unit tests specified', () => { +    expect(true).toEqual(false); +  }); +}); | 
