Skip to content

Commit 70cf930

Browse files
committed
Add TS option to generate templates
1 parent b90d156 commit 70cf930

23 files changed

+353
-17
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ jspm_packages/
4343
# TypeScript v1 declaration files
4444
typings/
4545

46+
!templates/typings/
47+
4648
# Optional npm cache directory
4749
.npm
4850

scripts/generate-mapper.js

Lines changed: 49 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,29 @@ const QUESTIONS = [
1616
return 'Project name may only include letters or numbers.';
1717
}
1818
}
19+
},
20+
{
21+
name: 'typescript',
22+
type: 'confirm',
23+
message: 'Do you want to attach TypeScript types?'
1924
}
2025
];
2126

22-
inquirer.prompt(QUESTIONS).then(async ({ componentmapper }) => {
23-
console.log('Creating ', componentmapper, '-component-mapper');
27+
inquirer.prompt(QUESTIONS).then(async ({ componentmapper, typescript }) => {
28+
const successmessage = `Next steps:
29+
30+
1. Update styles in "packages/${componentmapper}-component-mapper/demo/index.html"
31+
2. Add dependencies in "packages/${componentmapper}-component-mapper/package.json",
32+
3. Mark the dependencies as globals/external in "packages/${componentmapper}-component-mapper/rollup.config.js"
33+
4. (optional) Transform import to allow threeshake (bundle size optimization) in "packages/common/babel.config.js"
34+
5. Have a fun and make some magic! :-)
35+
36+
Please visit https://data-driven-forms.org for more information.
37+
38+
(After your mapper is done, consider adding it to the documentation page.)
39+
`;
40+
41+
console.log('Creating ', componentmapper, '-component-mapper', typescript ? ' with TypeScript' : '');
2442

2543
console.log('Copying template');
2644
await ncp('./templates/component-mapper', `./packages/${componentmapper}-component-mapper`, {}, async () => {
@@ -43,18 +61,36 @@ inquirer.prompt(QUESTIONS).then(async ({ componentmapper }) => {
4361
console.error('Error occurred:', e);
4462
}
4563

46-
console.log(`
47-
Next steps:
48-
49-
1. Update styles in "packages/${componentmapper}-component-mapper/demo/index.html"
50-
2. Add dependencies in "packages/${componentmapper}-component-mapper/package.json",
51-
3. Mark the dependencies as globals/external in "packages/${componentmapper}-component-mapper/rollup.config.js"
52-
4. (optional) Transform import to allow threeshake (bundle size optimization) in "packages/common/babel.config.js"
53-
5. Have a fun and make some magic! :-)
64+
const optionTypeScriptPath = {
65+
files: [path.resolve(__dirname, `../packages/${componentmapper}-component-mapper/package.json`)],
66+
from: /\{\{typingspath\}\}/g,
67+
to: typescript ? '\n "typings": "dist/cjs/index.d.ts",' : ''
68+
};
69+
const optionTypeScriptCommand = {
70+
files: [path.resolve(__dirname, `../packages/${componentmapper}-component-mapper/package.json`)],
71+
from: /\{\{buildtypingscmd\}\}/g,
72+
to: typescript ? ' && yarn build:typings' : ''
73+
};
74+
const optionTypeScriptScript = {
75+
files: [path.resolve(__dirname, `../packages/${componentmapper}-component-mapper/package.json`)],
76+
from: /\{\{buildtypingsscript\}\}/g,
77+
to: typescript ? '\n "build:typings": "node ../../scripts/copy-files.js",' : ''
78+
};
5479

55-
Please visit https://data-driven-forms.org for more information.
80+
try {
81+
await replace(optionTypeScriptPath);
82+
await replace(optionTypeScriptCommand);
83+
await replace(optionTypeScriptScript);
84+
} catch (e) {
85+
console.error('Error occurred when replacing typescript variables:', e);
86+
}
5687

57-
(After your mapper is done, consider adding it to the documentation page.)
58-
`);
88+
if (typescript) {
89+
await ncp('./templates/typings', `./packages/${componentmapper}-component-mapper`, {}, () => {
90+
console.log(successmessage);
91+
});
92+
} else {
93+
console.log(successmessage);
94+
}
5995
});
6096
});

templates/component-mapper/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
"version": "0.0.0",
44
"description": "{{componentmapper}}-component-mapper for data-driven-forms.",
55
"main": "dist/cjs/index.js",
6-
"module": "dist/esm/index.js",
6+
"module": "dist/esm/index.js",{{typingspath}}
77
"files": [
88
"dist/"
99
],
1010
"license": "Apache-2.0",
1111
"scripts": {
1212
"start": "webpack-dev-server --env dev --config ./config/webpack.config.js --open --hot",
13-
"build": "yarn build:cjs && yarn build:esm && yarn build:umd",
13+
"build": "yarn build:cjs && yarn build:esm && yarn build:umd{{buildtypingscmd}}",
1414
"build:cjs": "BABEL_ENV=cjs rollup -c ./rollup.config.js --format=cjs --environment FORMAT:cjs",
1515
"build:esm": "BABEL_ENV=esm rollup -c ./rollup.config.js --format=esm --environment FORMAT:esm",
16-
"build:umd": "rollup -c ./rollup.config.js --format=umd --environment FORMAT:umd",
16+
"build:umd": "rollup -c ./rollup.config.js --format=umd --environment FORMAT:umd",{{buildtypingsscript}}
1717
"release": "semantic-release"
1818
},
1919
"repository": "[email protected]:data-driven-forms/react-forms.git",

templates/component-mapper/src/files/component-mapper.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,9 @@ export const components = {
4646
Switch,
4747
PlainText,
4848
DualListSelect,
49-
Slider
49+
Slider,
50+
FieldArray,
51+
SubForm,
52+
Wizard,
53+
Tabs
5054
};
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { UseFieldApiComponentConfig, AnyObject } from "@data-driven-forms/react-form-renderer";
2+
import { ReactNode } from "react";
3+
import { FormGroupProps } from "./form-group";
4+
5+
export interface CheckboxOption extends AnyObject {
6+
value?: any;
7+
label: ReactNode;
8+
}
9+
10+
interface InternalCheckboxProps extends React.HTMLProps<HTMLInputElement> {
11+
options?: CheckboxOption[];
12+
}
13+
14+
export type CheckboxProps = InternalCheckboxProps & FormGroupProps & UseFieldApiComponentConfig;
15+
16+
declare const Checkbox: React.ComponentType<CheckboxProps>;
17+
18+
export default Checkbox;
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { ComponentTypes, ComponentMapper } from '@data-driven-forms/react-form-renderer';
2+
3+
interface Components {
4+
TextField: React.ComponentType;
5+
Textarea: React.ComponentType;
6+
Select: React.ComponentType;
7+
Checkbox: React.ComponentType;
8+
Radio: React.ComponentType;
9+
Switch: React.ComponentType;
10+
DatePicker: React.ComponentType;
11+
TimePicker: React.ComponentType;
12+
PlainText: React.ComponentType;
13+
SubForm: React.ComponentType;
14+
Wizard: React.ComponentType;
15+
DualListSelect: React.ComponentType;
16+
Slider: React.ComponentType;
17+
FueldArray: React.ComponentType;
18+
Tabs: React.ComponentType;
19+
}
20+
21+
interface componentMapper extends ComponentMapper {
22+
[ComponentTypes.TEXT_FIELD]: React.ComponentType;
23+
[ComponentTypes.TEXTAREA]: React.ComponentType;
24+
[ComponentTypes.SELECT]: React.ComponentType;
25+
[ComponentTypes.CHECKBOX]: React.ComponentType;
26+
[ComponentTypes.SUB_FORM]: React.ComponentType;
27+
[ComponentTypes.RADIO]: React.ComponentType;
28+
[ComponentTypes.TABS]: React.ComponentType;
29+
[ComponentTypes.DATE_PICKER]: React.ComponentType;
30+
[ComponentTypes.TIME_PICKER]: React.ComponentType;
31+
[ComponentTypes.SWITCH]: React.ComponentType;
32+
[ComponentTypes.PLAIN_TEXT]: React.ComponentType;
33+
[ComponentTypes.WIZARD]: React.ComponentType;
34+
[ComponentTypes.FIELD_ARRAY]: React.ComponentType;
35+
[ComponentTypes.DUAL_LIST_SELECT]: React.ComponentType;
36+
[ComponentTypes.SLIDER]: React.ComponentType;
37+
}
38+
39+
declare const componentMapper: componentMapper;
40+
41+
export const components: Components;
42+
43+
export default componentMapper;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { FormGroupProps } from "./form-group";
2+
import { UseFieldApiComponentConfig } from "@data-driven-forms/react-form-renderer";
3+
4+
interface InternalDatePickerProps extends React.HTMLProps<HTMLInputElement> {
5+
isDisabled?: boolean;
6+
isReadOnly?: boolean;
7+
}
8+
9+
export type DatePickerProps = InternalDatePickerProps & FormGroupProps & UseFieldApiComponentConfig;
10+
11+
declare const DatePicker: React.ComponentType<DatePickerProps>;
12+
13+
export default DatePicker;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { FormGroupProps } from "./form-group";
2+
import { UseFieldApiComponentConfig, AnyObject } from "@data-driven-forms/react-form-renderer";
3+
import { ReactNode } from "react";
4+
5+
export interface DualListSelectValue extends AnyObject {
6+
value: any;
7+
label: ReactNode;
8+
}
9+
10+
interface InternalDualListSelectProps {
11+
options: DualListSelectValue[];
12+
}
13+
14+
export type DualListSelectProps = InternalDualListSelectProps & FormGroupProps & UseFieldApiComponentConfig;
15+
16+
declare const DualListSelect: React.ComponentType<DualListSelectProps>;
17+
18+
export default DualListSelect;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { FieldArrayField } from "@data-driven-forms/react-form-renderer";
2+
3+
export interface FieldArrayProps {
4+
fields: FieldArrayField[];
5+
itemDefault?: any;
6+
}
7+
8+
declare const FieldArray: React.ComponentType<FieldArrayProps>;
9+
10+
export default FieldArray;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { UseFieldApiComponentConfig } from "@data-driven-forms/react-form-renderer";
2+
3+
export interface FormGroupInternalProps { }
4+
5+
export type FormGroupProps = FormGroupInternalProps & UseFieldApiComponentConfig;
6+
7+
declare const FormGroup: React.ComponentType<FormGroupProps>;
8+
9+
export default FormGroup;

0 commit comments

Comments
 (0)