Skip to content

Template Example

Lanten edited this page Dec 29, 2019 · 4 revisions
const files = {
  'Javascript Log': (name, query) => {
    return `console.log('${name}: ${JSON.stringify(query)}')`
  },

  'React Class Component': name => {
    const nameH = toCamel(name)
    return [
      `import React from 'react'`,
      ``,
      `import './${name}.less'`,
      ``,
      `export default class ${nameH} extends React.Component {`,
      `  render() {`,
      `    return (`,
      `      <div className="${name}">`,
      `        <p>component ${name} is ok</p>`,
      `      </div>`,
      `    )`,
      `  }`,
      `} // class ${nameH} end`,
      ``,
    ]
  },

  Index: name => {
    const nameH = toCamel(name)
    return [`import ${nameH} from './${name}'`, `export default ${nameH}`, ``]
  },
}

const folders = {
  'React Component': name => {
    console.log(name)
    return {
      'index.ts': files.Index(name),
      [`${name}.tsx`]: files['React Class Component'](name),
      [`${name}.less`]: [`.${name} {`, `}`],
    }
  },
}

/**
 * Hyphen to Camel
 * @param {String} str
 * @param {Boolean} c Initial capital
 */
function toCamel(str, c = true) {
  let strH = str.replace(/([^\-])(?:\-+([^\-]))/g, (_, $1, $2) => $1 + $2.toUpperCase())
  if (c) strH = strH.slice(0, 1).toUpperCase() + strH.slice(1)
  return strH
}

module.exports = { files, folders }

Clone this wiki locally