Skip to content

Commit 06f5719

Browse files
Template categories and descriptions
1 parent bcef447 commit 06f5719

File tree

6 files changed

+56
-12
lines changed

6 files changed

+56
-12
lines changed

src/templateConfigs/index.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
1+
import { TemplateConfig } from "#src/types";
2+
13
import reactPapiTailwind from "./react-papi-tailwind";
24
import reactSolidityHardhat from "./react-solidity-hardhat";
35
import reactSolidityRemix from "./react-solidity-remix";
46

5-
export type TemplateConfig = {
6-
instructions: string;
7-
npmRoots: string[];
8-
postinstallScript?: string;
9-
};
10-
117
export const configs: Record<string, TemplateConfig> = {
128
"react-papi-tailwind": reactPapiTailwind,
139
"react-solidity-hardhat": reactSolidityHardhat,

src/templateConfigs/react-papi-tailwind.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import { TemplateConfig } from "#src/templateConfigs/index";
1+
import { TemplateConfig, TemplateType } from "#src/types";
22
import { colors as c } from "#src/util/log";
33

44
const config: TemplateConfig = {
5+
templateType: TemplateType.Recommended,
6+
description: "Frontend dApp template using React, PAPI, ReactiveDOT and dot-connect",
57
npmRoots: ["/"],
68
instructions: `
79
${c.secondary("Start app:")}

src/templateConfigs/react-solidity-hardhat.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import { TemplateConfig } from "#src/templateConfigs/index";
1+
import { TemplateConfig, TemplateType } from "#src/types";
22
import { colors as c } from "#src/util/log";
33

44
const config: TemplateConfig = {
5+
templateType: TemplateType.Recommended,
6+
description: "Solidity template with hardhat environment + wagmi-based frontend",
57
npmRoots: ["contracts", "frontend"],
68
instructions: `
79
${c.primary("Develop smart contracts:")}

src/templateConfigs/react-solidity-remix.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import { TemplateConfig } from "#src/templateConfigs/index";
1+
import { TemplateConfig, TemplateType } from "#src/types";
22
import { colors as c } from "#src/util/log";
33

44
const config: TemplateConfig = {
5+
templateType: TemplateType.Deprecated,
6+
description: "Solidity template with remix/ethers environment + ethers-based frontend",
57
npmRoots: ["contracts", "frontend"],
68
instructions: `
79
${c.primary("For Remix environment:")}

src/types.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export enum TemplateType {
2+
Recommended,
3+
Deprecated,
4+
// TODO: External
5+
}
6+
7+
export type TemplateConfig = {
8+
instructions: string;
9+
npmRoots: string[];
10+
postinstallScript?: string;
11+
templateType: TemplateType;
12+
description: string;
13+
};

src/util/dappData.ts

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,46 @@
1-
import { input, select } from "@inquirer/prompts";
2-
import { configs, TemplateConfig, TemplateNames } from "#src/templateConfigs/index";
1+
import { input, select, Separator } from "@inquirer/prompts";
2+
import { configs, TemplateNames } from "#src/templateConfigs/index";
3+
import { TemplateConfig, TemplateType } from "#src/types";
4+
import { colors as c } from "#src/util/log";
35

46
export type DappData = {
57
name: string;
68
template: TemplateNames;
79
config: TemplateConfig;
810
};
911

12+
type Choice = {
13+
value: TemplateNames;
14+
description: string;
15+
};
16+
17+
function formatChoices(): (Choice | Separator)[] {
18+
const res: (Choice | Separator)[] = [];
19+
20+
const mapTemplate = ([name, template]: [TemplateNames, TemplateConfig]) => {
21+
return { value: name as TemplateNames, description: template.description };
22+
};
23+
24+
res.push(new Separator(c.primary("Recommended templates:")));
25+
const recommendedTemplates = Object.entries(configs).filter(
26+
([_, template]) => template.templateType === TemplateType.Recommended,
27+
);
28+
res.push(...recommendedTemplates.map(mapTemplate), new Separator());
29+
30+
res.push(new Separator(c.primary("Deprecated templates:")));
31+
const deprecatedTemplates = Object.entries(configs).filter(
32+
([_, template]) => template.templateType === TemplateType.Deprecated,
33+
);
34+
res.push(...deprecatedTemplates.map(mapTemplate));
35+
36+
return res;
37+
}
38+
1039
export async function inquireDappData(): Promise<DappData> {
1140
const name = await input({ message: "Project name", required: true, default: "my-polkadot-dapp" });
1241
const template: TemplateNames = await select<TemplateNames>({
1342
message: "Select template",
14-
choices: Object.keys(configs),
43+
choices: formatChoices(),
1544
});
1645

1746
return { name, config: configs[template], template };

0 commit comments

Comments
 (0)