From 5a89162e46be37ce3ce303ac335f240c318fc15d Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Wed, 20 Jun 2018 15:00:52 +0300 Subject: [PATCH] Add plop template for API models --- plop-templates/model.ts | 17 +++++++++++++++++ plopfile.ts | 27 ++++++++++++++++++++++----- src/components/App/App.tsx | 2 +- src/components/Post/Post.tsx | 2 +- src/models/post.ts | 2 +- 5 files changed, 42 insertions(+), 8 deletions(-) create mode 100644 plop-templates/model.ts diff --git a/plop-templates/model.ts b/plop-templates/model.ts new file mode 100644 index 0000000..62d6caa --- /dev/null +++ b/plop-templates/model.ts @@ -0,0 +1,17 @@ +import axios from "axios"; + +const url = `${process.env.API_URL}/{{ camelCase name }}s`; + +export interface {{ properCase name }} { + id: number; +} + +export async function get{{ properCase name }}s(): Promise<{{ properCase name }}[]> { + try { + const resp = await axios.get(url); + return resp.data; + } catch (err) { + console.error(err); + throw err; + } +} diff --git a/plopfile.ts b/plopfile.ts index 6291b3c..c77941d 100644 --- a/plopfile.ts +++ b/plopfile.ts @@ -1,5 +1,4 @@ module.exports = function(plop) { - // create your generators here plop.setGenerator("New component", { description: "Create a new TSX + SCSS component for React.", prompts: [ @@ -20,7 +19,7 @@ module.exports = function(plop) { message: "MobX store name:", when: answers => answers.observer }, - ], // array of inquirer prompts + ], actions: [ { type: "add", @@ -40,7 +39,7 @@ module.exports = function(plop) { templateFile: "plop-templates/index.ts", abortOnFail: true } - ] // array of actions + ] }); plop.setGenerator("New MobX state store", { description: "Create a new store for MobX.", @@ -50,7 +49,7 @@ module.exports = function(plop) { name: "name", message: "Store name:" } - ], // array of inquirer prompts + ], actions: [ { type: "add", @@ -58,6 +57,24 @@ module.exports = function(plop) { templateFile: "plop-templates/store.ts", abortOnFail: true } - ] // array of actions + ] + }); + plop.setGenerator("New API model", { + description: "Create a new API model for backend communication.", + prompts: [ + { + type: "input", + name: "name", + message: "Model name:" + } + ], + actions: [ + { + type: "add", + path: "src/models/{{ properCase name }}.ts", + templateFile: "plop-templates/model.ts", + abortOnFail: true + } + ] }); }; diff --git a/src/components/App/App.tsx b/src/components/App/App.tsx index 4cd508a..1d217de 100644 --- a/src/components/App/App.tsx +++ b/src/components/App/App.tsx @@ -3,7 +3,7 @@ import { observer } from "mobx-react"; import "./App.scss"; import appStore from "../../stores/AppStore"; import Button from "../Button"; -import { getPosts, Post as PostInterface } from "../../models/post"; +import { getPosts, Post as PostInterface } from "../../models/Post"; import Post from "../Post"; export interface AppProps { diff --git a/src/components/Post/Post.tsx b/src/components/Post/Post.tsx index 98b9d0d..0b16063 100644 --- a/src/components/Post/Post.tsx +++ b/src/components/Post/Post.tsx @@ -1,6 +1,6 @@ import * as React from "react"; import "./Post.scss"; -import { Post as PostInterface } from "../../models/posts"; +import { Post as PostInterface } from "../../models/Post"; export interface PostProps { post: PostInterface; diff --git a/src/models/post.ts b/src/models/post.ts index c093dca..c88c17e 100644 --- a/src/models/post.ts +++ b/src/models/post.ts @@ -16,4 +16,4 @@ export async function getPosts(): Promise { console.error(err); throw err; } -} \ No newline at end of file +}