Skip to content

Commit 0d2d968

Browse files
author
Administrator
committed
welp, some extensions
1 parent 58db48f commit 0d2d968

File tree

6 files changed

+69
-12
lines changed

6 files changed

+69
-12
lines changed

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@code4bones/react-cascade-forms",
3-
"version": "1.0",
3+
"version": "1.1",
44
"main": "build/index.js",
55
"module": "build/index.esm.js",
66
"files": [
@@ -43,6 +43,7 @@
4343
"devDependencies": {
4444
"@babel/core": "^7.15.0",
4545
"@blueprintjs/core": "^4.13.0",
46+
"@blueprintjs/select": "^4.8.12",
4647
"@rollup/plugin-commonjs": "^17.1.0",
4748
"@rollup/plugin-image": "^3.0.1",
4849
"@rollup/plugin-node-resolve": "^11.2.1",

src/CascadeForms/CascadeForms.stories.tsx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Generated with util/create-component.js
22
import "@blueprintjs/icons/lib/css/blueprint-icons.css";
33
import "@blueprintjs/core/lib/css/blueprint.css";
4+
import "@blueprintjs/select/lib/css/blueprint-select.css";
45
import "./story.css";
56

67
import React,{ createRef } from "react";
@@ -24,17 +25,30 @@ const CustomCtrl = (props:ControlRenderProps) => {
2425
);
2526
};
2627

28+
const PayloadTest = (props:ControlRenderProps) => {
29+
const { item,formState, onChange } = props;
30+
const { payload } = item;
31+
return (
32+
<select value={formState[item.id]?.value || 1} onChange={(ev) => onChange(item.id,ev.target.value)}>
33+
{payload.map(({ value,label })=>{
34+
return <option key={label} value={value}>{label}</option>;
35+
})}
36+
</select>
37+
);
38+
};
39+
2740
const onRender = (formState:FormState,item:FormItem,onChange:OnChangeFn) => {
28-
console.log("onRender",formState);
2941
switch ( item.type ) {
3042
case "input":
3143
return <InputGroup intent={formState[item.id]?.state ? "danger" : "primary"} value={formState[item.id]?.value || ""} placeholder={item.title} onChange={(ev) => onChange(item.id,ev.target.value)} />;
3244
case "checkbox":
33-
return <Checkbox value={formState[item.id]?.value || false} label={item.title} onChange={(ev) => onChange(item.id,ev.target.checked)} />;
45+
return <Checkbox value={formState[item.id]?.value} label={item.title} onChange={(ev) => onChange(item.id,ev.target.checked)} />;
3446
case "radio":
35-
return <Switch checked={formState[item.id]?.value || false} label={item.title} onChange={(ev) => onChange(item.id,ev.target.checked)} />;
47+
return <Switch checked={formState[item.id]?.value} label={item.title} onChange={(ev) => onChange(item.id,ev.target.checked)} />;
3648
case "custom":
3749
return <CustomCtrl formState={formState} item={item} onChange={onChange} />;
50+
case "select":
51+
return <PayloadTest formState={formState} item={item} onChange={onChange} />;
3852
default:
3953
return <div className="default">{item.title}</div>;
4054
}

src/CascadeForms/CascadeForms.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React,{ useEffect,useImperativeHandle,useState } from "react";
22
import Validator,{ ValidationError } from "fastest-validator";
3-
import { FormActions,FormItem,FormState,EntryProps, RenderProps,CascadeFormProps } from "./CascadeForms.types";
3+
import { FormActions,FormItem,FormState,ControlItemProps, RenderProps,CascadeFormProps } from "./CascadeForms.types";
44

55
export * from "./CascadeForms.types";
66

@@ -14,7 +14,7 @@ const isVisible = (item:FormItem,formState:FormState) => {
1414
};
1515

1616

17-
const Entry : React.FC<EntryProps> = ({ item,formState,onUpdate,onRender }) => {
17+
const ControlItem : React.FC<ControlItemProps> = ({ item,formState,onUpdate,onRender }) => {
1818
const [state,setState] = useState(formState);
1919

2020
const onChange = (id:string,value:string) => {
@@ -54,7 +54,7 @@ const Render = ({ parent, items,formState,onUpdate,onRender } : RenderProps) =>
5454
{items.filter(entry => isVisible(entry,formState)).map((entry:FormItem,idx:number) => {
5555
return (
5656
<div className={entry.className} key={`render_${idx}_${entry.id}`}>
57-
<Entry key={`entry_${idx}_${entry.id}`} onRender={onRender} item={entry} formState={formState} onUpdate={onUpdate} />
57+
<ControlItem key={`entry_${idx}_${entry.id}`} onRender={onRender} item={entry} formState={formState} onUpdate={onUpdate} />
5858
{entry.items?.length && <Render parent={entry} formState={formState} items={entry.items} onRender={onRender} onUpdate={onUpdate} />}
5959
</div>
6060
);

src/CascadeForms/CascadeForms.types.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export type ControlRenderProps = {
3838
}
3939

4040

41-
export type EntryProps = {
41+
export type ControlItemProps = {
4242
item:FormItem;
4343
formState:FormState;
4444
onRender:FormControlRenderFn;
@@ -47,12 +47,12 @@ export type EntryProps = {
4747

4848
export type CascadeFormProps = {
4949
form:FormItems;
50-
} & Omit<EntryProps,"item">
50+
} & Omit<ControlItemProps,"item">
5151

5252
export type RenderProps = {
5353
items:FormItems;
5454
parent?:FormItem;
55-
} & Omit<EntryProps,"item">
55+
} & Omit<ControlItemProps,"item">
5656

5757
export type FormActions = {
5858
getState:() => FormState;

src/CascadeForms/form1.json

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,34 @@
3131
"type":"input",
3232
"validator":{ "type":"string","min":2,"max":5 }
3333
},
34+
{
35+
"id":"select",
36+
"title":"Payload test",
37+
"type":"select",
38+
"payload":[
39+
{"value":1,"label":"The One"},
40+
{"value":2,"label":"Two.."},
41+
{"value":3,"label":"Ten !"}
42+
]
43+
},
44+
{
45+
"id":"select1",
46+
"className":"select-1",
47+
"title":"Selected one",
48+
"visible":{ "state":"select","expect":"1" }
49+
},
50+
{
51+
"id":"select2",
52+
"className":"select-2",
53+
"title":"Selected Two",
54+
"visible":{ "state":"select","expect":"2" }
55+
},
56+
{
57+
"id":"select3",
58+
"className":"select-3",
59+
"title":"Selected TEN !",
60+
"visible":{ "state":"select","expect":"3" }
61+
},
3462
{
3563
"title":"More details",
3664
"type":"checkbox",
@@ -41,7 +69,6 @@
4169
"type":"input",
4270
"id":"first_name",
4371
"visible":{ "state":"details","expect":false },
44-
4572
"items":[
4673
{
4774
"title":"More opts...",

src/CascadeForms/story.css

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,19 @@ body {
1919

2020
.customCtrl {
2121
color: black;
22-
}
22+
}
23+
24+
.select-1 {
25+
font-size: 24px;
26+
}
27+
28+
.select-2 {
29+
font-size: 14px;
30+
background-color: green;
31+
}
32+
33+
34+
.select-3 {
35+
font-size: 16px;
36+
background-color: yellow;
37+
}

0 commit comments

Comments
 (0)