@draftbit/core 43.2.5-06a8ac.3 → 43.2.5-0c3aa5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/Stepper.js +29 -27
- package/lib/commonjs/components/Stepper.js.map +1 -1
- package/lib/commonjs/mappings/Stepper.js +9 -0
- package/lib/commonjs/mappings/Stepper.js.map +1 -1
- package/lib/module/components/Stepper.js +28 -27
- package/lib/module/components/Stepper.js.map +1 -1
- package/lib/module/components/Swiper/Swiper.js.map +1 -1
- package/lib/module/mappings/Stepper.js +10 -1
- package/lib/module/mappings/Stepper.js.map +1 -1
- package/lib/typescript/src/components/Stepper.d.ts +2 -3
- package/lib/typescript/src/mappings/Stepper.d.ts +22 -0
- package/package.json +2 -2
- package/src/components/Stepper.js +23 -27
- package/src/components/Stepper.tsx +27 -35
- package/src/mappings/Stepper.js +10 -1
- package/src/mappings/Stepper.ts +10 -0
|
@@ -13,6 +13,8 @@ var _theming = require("../theming");
|
|
|
13
13
|
|
|
14
14
|
var _IconButton = _interopRequireDefault(require("./IconButton"));
|
|
15
15
|
|
|
16
|
+
var _lodash = _interopRequireDefault(require("lodash.isnumber"));
|
|
17
|
+
|
|
16
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
19
|
|
|
18
20
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -23,11 +25,11 @@ const Stepper = _ref => {
|
|
|
23
25
|
let {
|
|
24
26
|
Icon,
|
|
25
27
|
value,
|
|
28
|
+
min,
|
|
29
|
+
max,
|
|
26
30
|
style,
|
|
27
31
|
onChange,
|
|
28
32
|
defaultValue,
|
|
29
|
-
minValue,
|
|
30
|
-
maxValue,
|
|
31
33
|
theme: {
|
|
32
34
|
colors,
|
|
33
35
|
typography,
|
|
@@ -36,41 +38,41 @@ const Stepper = _ref => {
|
|
|
36
38
|
iconSize = 24,
|
|
37
39
|
iconColor = colors.strong,
|
|
38
40
|
borderRadius = roundness,
|
|
39
|
-
typeStyle
|
|
40
|
-
step = 1
|
|
41
|
+
typeStyle
|
|
41
42
|
} = _ref;
|
|
42
43
|
const [stateValue, setStateValue] = React.useState(value || defaultValue || 0);
|
|
43
44
|
React.useEffect(() => {
|
|
44
|
-
if (value
|
|
45
|
-
|
|
45
|
+
if (value || value === 0) {
|
|
46
|
+
onChange && onChange(stateValue);
|
|
46
47
|
}
|
|
47
|
-
}, [value]);
|
|
48
|
+
}, [onChange, stateValue, value]);
|
|
48
49
|
React.useEffect(() => {
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
let newValue = value || defaultValue || 0;
|
|
51
|
+
|
|
52
|
+
if ((0, _lodash.default)(max) && newValue > max) {
|
|
53
|
+
newValue = max;
|
|
51
54
|
}
|
|
52
|
-
}, [defaultValue]);
|
|
53
55
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if (minValue !== undefined && value - step >= minValue || minValue === undefined) {
|
|
57
|
-
onChange && onChange(value - step);
|
|
58
|
-
}
|
|
59
|
-
} else {
|
|
60
|
-
setStateValue(stateValue - step);
|
|
56
|
+
if ((0, _lodash.default)(min) && newValue < min) {
|
|
57
|
+
newValue = min;
|
|
61
58
|
}
|
|
62
|
-
};
|
|
63
59
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
60
|
+
setStateValue(newValue);
|
|
61
|
+
}, [defaultValue, value, min, max]);
|
|
62
|
+
const handleMinus = React.useCallback(() => {
|
|
63
|
+
if ((0, _lodash.default)(min) && value === min) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
setStateValue(stateValue - 1);
|
|
68
|
+
}, [min, stateValue, value]);
|
|
69
|
+
const handlePlus = React.useCallback(() => {
|
|
70
|
+
if ((0, _lodash.default)(max) && value === max) {
|
|
71
|
+
return;
|
|
71
72
|
}
|
|
72
|
-
};
|
|
73
73
|
|
|
74
|
+
setStateValue(stateValue + 1);
|
|
75
|
+
}, [max, stateValue, value]);
|
|
74
76
|
return /*#__PURE__*/React.createElement(_reactNative.View, {
|
|
75
77
|
style: [{
|
|
76
78
|
flexDirection: "row"
|
|
@@ -83,7 +85,7 @@ const Stepper = _ref => {
|
|
|
83
85
|
onPress: handleMinus,
|
|
84
86
|
size: iconSize,
|
|
85
87
|
color: iconColor,
|
|
86
|
-
disabled:
|
|
88
|
+
disabled: stateValue === 0
|
|
87
89
|
}), /*#__PURE__*/React.createElement(_reactNative.Text, {
|
|
88
90
|
style: [typography.body1, {
|
|
89
91
|
textAlign: "center",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Stepper.tsx"],"names":["Stepper","Icon","value","
|
|
1
|
+
{"version":3,"sources":["Stepper.tsx"],"names":["Stepper","Icon","value","min","max","style","onChange","defaultValue","theme","colors","typography","roundness","iconSize","iconColor","strong","borderRadius","typeStyle","stateValue","setStateValue","React","useState","useEffect","newValue","handleMinus","useCallback","handlePlus","flexDirection","body1","textAlign","alignSelf","color","medium","marginHorizontal"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { View, Text, StyleProp, ViewStyle, TextStyle } from \"react-native\";\nimport { withTheme } from \"../theming\";\nimport type { Theme } from \"../styles/DefaultTheme\";\nimport type { IconSlot } from \"../interfaces/Icon\";\n\nimport IconButton from \"./IconButton\";\nimport isNumber from \"lodash.isnumber\";\n\ntype Props = {\n value?: number;\n min?: number;\n max?: number;\n theme: Theme;\n style?: StyleProp<ViewStyle>;\n onChange?: (value: number) => void;\n defaultValue?: number;\n iconSize?: number;\n iconColor?: string;\n borderRadius?: number;\n typeStyle?: StyleProp<TextStyle>;\n} & IconSlot;\n\nconst Stepper: React.FC<Props> = ({\n Icon,\n value,\n min,\n max,\n style,\n onChange,\n defaultValue,\n theme: { colors, typography, roundness },\n iconSize = 24,\n iconColor = colors.strong,\n borderRadius = roundness,\n typeStyle,\n}) => {\n const [stateValue, setStateValue] = React.useState(\n value || defaultValue || 0\n );\n\n React.useEffect(() => {\n if (value || value === 0) {\n onChange && onChange(stateValue);\n }\n }, [onChange, stateValue, value]);\n\n React.useEffect(() => {\n let newValue = value || defaultValue || 0;\n if (isNumber(max) && newValue > max) {\n newValue = max;\n }\n if (isNumber(min) && newValue < min) {\n newValue = min;\n }\n setStateValue(newValue);\n }, [defaultValue, value, min, max]);\n\n const handleMinus = React.useCallback(() => {\n if (isNumber(min) && value === min) {\n return;\n }\n setStateValue(stateValue - 1);\n }, [min, stateValue, value]);\n\n const handlePlus = React.useCallback(() => {\n if (isNumber(max) && value === max) {\n return;\n }\n setStateValue(stateValue + 1);\n }, [max, stateValue, value]);\n\n return (\n <View\n style={[\n { flexDirection: \"row\" },\n style,\n borderRadius ? { borderRadius } : {},\n ]}\n >\n <IconButton\n Icon={Icon}\n icon=\"MaterialIcons/remove\"\n onPress={handleMinus}\n size={iconSize}\n color={iconColor}\n disabled={stateValue === 0}\n />\n <Text\n style={[\n typography.body1,\n {\n textAlign: \"center\",\n alignSelf: \"center\",\n color: colors.medium,\n marginHorizontal: 8,\n },\n typeStyle,\n ]}\n >\n {value || stateValue}\n </Text>\n <IconButton\n Icon={Icon}\n icon=\"MaterialIcons/add\"\n onPress={handlePlus}\n size={iconSize}\n color={iconColor}\n />\n </View>\n );\n};\n\nexport default withTheme(Stepper);\n"]}
|
|
@@ -25,6 +25,15 @@ const SEED_DATA = [{
|
|
|
25
25
|
}),
|
|
26
26
|
iconColor: (0, _types.createColorProp)({
|
|
27
27
|
defaultValue: "strong"
|
|
28
|
+
}),
|
|
29
|
+
min: (0, _types.createStaticNumberProp)({
|
|
30
|
+
label: "Minimum",
|
|
31
|
+
description: "Minimum Number",
|
|
32
|
+
defaultValue: 0
|
|
33
|
+
}),
|
|
34
|
+
max: (0, _types.createStaticNumberProp)({
|
|
35
|
+
label: "Maximum",
|
|
36
|
+
description: "Maximum Number"
|
|
28
37
|
})
|
|
29
38
|
}
|
|
30
39
|
}];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Stepper.ts"],"names":["SEED_DATA","name","tag","description","category","COMPONENT_TYPES","input","layout","triggers","Triggers","OnChange","props","fieldName","defaultValue","handlerPropName","valuePropName","iconSize","iconColor"],"mappings":";;;;;;;AAAA;;
|
|
1
|
+
{"version":3,"sources":["Stepper.ts"],"names":["SEED_DATA","name","tag","description","category","COMPONENT_TYPES","input","layout","triggers","Triggers","OnChange","props","fieldName","defaultValue","handlerPropName","valuePropName","iconSize","iconColor","min","label","max"],"mappings":";;;;;;;AAAA;;AASO,MAAMA,SAAS,GAAG,CACvB;AACEC,EAAAA,IAAI,EAAE,SADR;AAEEC,EAAAA,GAAG,EAAE,SAFP;AAGEC,EAAAA,WAAW,EAAE,uDAHf;AAIEC,EAAAA,QAAQ,EAAEC,uBAAgBC,KAJ5B;AAKEC,EAAAA,MAAM,EAAE,EALV;AAMEC,EAAAA,QAAQ,EAAE,CAACC,gBAASC,QAAV,CANZ;AAOEC,EAAAA,KAAK,EAAE;AACLC,IAAAA,SAAS,EAAE,gCAAoB;AAC7BC,MAAAA,YAAY,EAAE,cADe;AAE7BC,MAAAA,eAAe,EAAE,UAFY;AAG7BC,MAAAA,aAAa,EAAE;AAHc,KAApB,CADN;AAMLC,IAAAA,QAAQ,EAAE,+BAAmB;AAAEH,MAAAA,YAAY,EAAE;AAAhB,KAAnB,CANL;AAOLI,IAAAA,SAAS,EAAE,4BAAgB;AAAEJ,MAAAA,YAAY,EAAE;AAAhB,KAAhB,CAPN;AAQLK,IAAAA,GAAG,EAAE,mCAAuB;AAC1BC,MAAAA,KAAK,EAAE,SADmB;AAE1BhB,MAAAA,WAAW,EAAE,gBAFa;AAG1BU,MAAAA,YAAY,EAAE;AAHY,KAAvB,CARA;AAaLO,IAAAA,GAAG,EAAE,mCAAuB;AAC1BD,MAAAA,KAAK,EAAE,SADmB;AAE1BhB,MAAAA,WAAW,EAAE;AAFa,KAAvB;AAbA;AAPT,CADuB,CAAlB","sourcesContent":["import {\n COMPONENT_TYPES,\n createIconSizeProp,\n createColorProp,\n createFieldNameProp,\n createStaticNumberProp,\n Triggers,\n} from \"@draftbit/types\";\n\nexport const SEED_DATA = [\n {\n name: \"Stepper\",\n tag: \"Stepper\",\n description: \"A component used to control the quantity of something\",\n category: COMPONENT_TYPES.input,\n layout: {},\n triggers: [Triggers.OnChange],\n props: {\n fieldName: createFieldNameProp({\n defaultValue: \"stepperValue\",\n handlerPropName: \"onChange\",\n valuePropName: \"value\",\n }),\n iconSize: createIconSizeProp({ defaultValue: 24 }),\n iconColor: createColorProp({ defaultValue: \"strong\" }),\n min: createStaticNumberProp({\n label: \"Minimum\",\n description: \"Minimum Number\",\n defaultValue: 0,\n }),\n max: createStaticNumberProp({\n label: \"Maximum\",\n description: \"Maximum Number\",\n }),\n },\n },\n];\n"]}
|
|
@@ -2,16 +2,17 @@ import * as React from "react";
|
|
|
2
2
|
import { View, Text } from "react-native";
|
|
3
3
|
import { withTheme } from "../theming";
|
|
4
4
|
import IconButton from "./IconButton";
|
|
5
|
+
import isNumber from "lodash.isnumber";
|
|
5
6
|
|
|
6
7
|
const Stepper = _ref => {
|
|
7
8
|
let {
|
|
8
9
|
Icon,
|
|
9
10
|
value,
|
|
11
|
+
min,
|
|
12
|
+
max,
|
|
10
13
|
style,
|
|
11
14
|
onChange,
|
|
12
15
|
defaultValue,
|
|
13
|
-
minValue,
|
|
14
|
-
maxValue,
|
|
15
16
|
theme: {
|
|
16
17
|
colors,
|
|
17
18
|
typography,
|
|
@@ -20,41 +21,41 @@ const Stepper = _ref => {
|
|
|
20
21
|
iconSize = 24,
|
|
21
22
|
iconColor = colors.strong,
|
|
22
23
|
borderRadius = roundness,
|
|
23
|
-
typeStyle
|
|
24
|
-
step = 1
|
|
24
|
+
typeStyle
|
|
25
25
|
} = _ref;
|
|
26
26
|
const [stateValue, setStateValue] = React.useState(value || defaultValue || 0);
|
|
27
27
|
React.useEffect(() => {
|
|
28
|
-
if (value
|
|
29
|
-
|
|
28
|
+
if (value || value === 0) {
|
|
29
|
+
onChange && onChange(stateValue);
|
|
30
30
|
}
|
|
31
|
-
}, [value]);
|
|
31
|
+
}, [onChange, stateValue, value]);
|
|
32
32
|
React.useEffect(() => {
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
let newValue = value || defaultValue || 0;
|
|
34
|
+
|
|
35
|
+
if (isNumber(max) && newValue > max) {
|
|
36
|
+
newValue = max;
|
|
35
37
|
}
|
|
36
|
-
}, [defaultValue]);
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (minValue !== undefined && value - step >= minValue || minValue === undefined) {
|
|
41
|
-
onChange && onChange(value - step);
|
|
42
|
-
}
|
|
43
|
-
} else {
|
|
44
|
-
setStateValue(stateValue - step);
|
|
39
|
+
if (isNumber(min) && newValue < min) {
|
|
40
|
+
newValue = min;
|
|
45
41
|
}
|
|
46
|
-
};
|
|
47
42
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
43
|
+
setStateValue(newValue);
|
|
44
|
+
}, [defaultValue, value, min, max]);
|
|
45
|
+
const handleMinus = React.useCallback(() => {
|
|
46
|
+
if (isNumber(min) && value === min) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
setStateValue(stateValue - 1);
|
|
51
|
+
}, [min, stateValue, value]);
|
|
52
|
+
const handlePlus = React.useCallback(() => {
|
|
53
|
+
if (isNumber(max) && value === max) {
|
|
54
|
+
return;
|
|
55
55
|
}
|
|
56
|
-
};
|
|
57
56
|
|
|
57
|
+
setStateValue(stateValue + 1);
|
|
58
|
+
}, [max, stateValue, value]);
|
|
58
59
|
return /*#__PURE__*/React.createElement(View, {
|
|
59
60
|
style: [{
|
|
60
61
|
flexDirection: "row"
|
|
@@ -67,7 +68,7 @@ const Stepper = _ref => {
|
|
|
67
68
|
onPress: handleMinus,
|
|
68
69
|
size: iconSize,
|
|
69
70
|
color: iconColor,
|
|
70
|
-
disabled:
|
|
71
|
+
disabled: stateValue === 0
|
|
71
72
|
}), /*#__PURE__*/React.createElement(Text, {
|
|
72
73
|
style: [typography.body1, {
|
|
73
74
|
textAlign: "center",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Stepper.tsx"],"names":["React","View","Text","withTheme","IconButton","Stepper","Icon","value","
|
|
1
|
+
{"version":3,"sources":["Stepper.tsx"],"names":["React","View","Text","withTheme","IconButton","isNumber","Stepper","Icon","value","min","max","style","onChange","defaultValue","theme","colors","typography","roundness","iconSize","iconColor","strong","borderRadius","typeStyle","stateValue","setStateValue","useState","useEffect","newValue","handleMinus","useCallback","handlePlus","flexDirection","body1","textAlign","alignSelf","color","medium","marginHorizontal"],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { View, Text, StyleProp, ViewStyle, TextStyle } from \"react-native\";\nimport { withTheme } from \"../theming\";\nimport type { Theme } from \"../styles/DefaultTheme\";\nimport type { IconSlot } from \"../interfaces/Icon\";\n\nimport IconButton from \"./IconButton\";\nimport isNumber from \"lodash.isnumber\";\n\ntype Props = {\n value?: number;\n min?: number;\n max?: number;\n theme: Theme;\n style?: StyleProp<ViewStyle>;\n onChange?: (value: number) => void;\n defaultValue?: number;\n iconSize?: number;\n iconColor?: string;\n borderRadius?: number;\n typeStyle?: StyleProp<TextStyle>;\n} & IconSlot;\n\nconst Stepper: React.FC<Props> = ({\n Icon,\n value,\n min,\n max,\n style,\n onChange,\n defaultValue,\n theme: { colors, typography, roundness },\n iconSize = 24,\n iconColor = colors.strong,\n borderRadius = roundness,\n typeStyle,\n}) => {\n const [stateValue, setStateValue] = React.useState(\n value || defaultValue || 0\n );\n\n React.useEffect(() => {\n if (value || value === 0) {\n onChange && onChange(stateValue);\n }\n }, [onChange, stateValue, value]);\n\n React.useEffect(() => {\n let newValue = value || defaultValue || 0;\n if (isNumber(max) && newValue > max) {\n newValue = max;\n }\n if (isNumber(min) && newValue < min) {\n newValue = min;\n }\n setStateValue(newValue);\n }, [defaultValue, value, min, max]);\n\n const handleMinus = React.useCallback(() => {\n if (isNumber(min) && value === min) {\n return;\n }\n setStateValue(stateValue - 1);\n }, [min, stateValue, value]);\n\n const handlePlus = React.useCallback(() => {\n if (isNumber(max) && value === max) {\n return;\n }\n setStateValue(stateValue + 1);\n }, [max, stateValue, value]);\n\n return (\n <View\n style={[\n { flexDirection: \"row\" },\n style,\n borderRadius ? { borderRadius } : {},\n ]}\n >\n <IconButton\n Icon={Icon}\n icon=\"MaterialIcons/remove\"\n onPress={handleMinus}\n size={iconSize}\n color={iconColor}\n disabled={stateValue === 0}\n />\n <Text\n style={[\n typography.body1,\n {\n textAlign: \"center\",\n alignSelf: \"center\",\n color: colors.medium,\n marginHorizontal: 8,\n },\n typeStyle,\n ]}\n >\n {value || stateValue}\n </Text>\n <IconButton\n Icon={Icon}\n icon=\"MaterialIcons/add\"\n onPress={handlePlus}\n size={iconSize}\n color={iconColor}\n />\n </View>\n );\n};\n\nexport default withTheme(Stepper);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Swiper.
|
|
1
|
+
{"version":3,"sources":["Swiper.tsx"],"names":["React","View","SwiperComponent","Swiper","vertical","loop","timeout","from","prevTitle","nextTitle","dotsTouchable","children","style"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,IAAT,QAA2C,cAA3C;AACA,OAAOC,eAAP,MAA4B,yBAA5B;;AAcA,MAAMC,MAAM,GAAG;AAAA,MAAC;AACdC,IAAAA,QAAQ,GAAG,KADG;AAEdC,IAAAA,IAAI,GAAG,KAFO;AAGdC,IAAAA,OAAO,GAAG,CAHI;AAIdC,IAAAA,IAAI,GAAG,CAJO;AAKdC,IAAAA,SAAS,GAAG,EALE;AAMdC,IAAAA,SAAS,GAAG,EANE;AAOdC,IAAAA,aAAa,GAAG,IAPF;AAQdC,IAAAA,QARc;AASdC,IAAAA;AATc,GAAD;AAAA,sBAWb,oBAAC,IAAD;AAAM,IAAA,KAAK,EAAEA;AAAb,kBACE,oBAAC,eAAD;AACE,IAAA,IAAI,EAAEL,IADR;AAEE,IAAA,IAAI,EAAEF,IAFR;AAGE,IAAA,OAAO,EAAEC,OAHX;AAIE,IAAA,QAAQ,EAAEF,QAJZ;AAKE,IAAA,aAAa,EAAE;AACbI,MAAAA,SADa;AAEbC,MAAAA,SAFa;AAGbC,MAAAA;AAHa;AALjB,KAWGC,QAXH,CADF,CAXa;AAAA,CAAf;;AA4BA,eAAeR,MAAf","sourcesContent":["import React from \"react\";\nimport { View, StyleProp, ViewStyle } from \"react-native\";\nimport SwiperComponent from \"react-native-web-swiper\";\n\nexport interface SwiperProps {\n vertical?: boolean;\n loop?: boolean;\n from?: number;\n timeout?: number;\n prevTitle?: string;\n nextTitle?: string;\n dotsTouchable?: boolean;\n children: React.ReactNode;\n style?: StyleProp<ViewStyle>;\n}\n\nconst Swiper = ({\n vertical = false,\n loop = false,\n timeout = 0,\n from = 0,\n prevTitle = \"\",\n nextTitle = \"\",\n dotsTouchable = true,\n children,\n style,\n}: SwiperProps) => (\n <View style={style}>\n <SwiperComponent\n from={from}\n loop={loop}\n timeout={timeout}\n vertical={vertical}\n controlsProps={{\n prevTitle,\n nextTitle,\n dotsTouchable,\n }}\n >\n {children}\n </SwiperComponent>\n </View>\n);\n\nexport default Swiper;\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { COMPONENT_TYPES, createIconSizeProp, createColorProp, createFieldNameProp, Triggers } from "@draftbit/types";
|
|
1
|
+
import { COMPONENT_TYPES, createIconSizeProp, createColorProp, createFieldNameProp, createStaticNumberProp, Triggers } from "@draftbit/types";
|
|
2
2
|
export const SEED_DATA = [{
|
|
3
3
|
name: "Stepper",
|
|
4
4
|
tag: "Stepper",
|
|
@@ -17,6 +17,15 @@ export const SEED_DATA = [{
|
|
|
17
17
|
}),
|
|
18
18
|
iconColor: createColorProp({
|
|
19
19
|
defaultValue: "strong"
|
|
20
|
+
}),
|
|
21
|
+
min: createStaticNumberProp({
|
|
22
|
+
label: "Minimum",
|
|
23
|
+
description: "Minimum Number",
|
|
24
|
+
defaultValue: 0
|
|
25
|
+
}),
|
|
26
|
+
max: createStaticNumberProp({
|
|
27
|
+
label: "Maximum",
|
|
28
|
+
description: "Maximum Number"
|
|
20
29
|
})
|
|
21
30
|
}
|
|
22
31
|
}];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Stepper.ts"],"names":["COMPONENT_TYPES","createIconSizeProp","createColorProp","createFieldNameProp","Triggers","SEED_DATA","name","tag","description","category","input","layout","triggers","OnChange","props","fieldName","defaultValue","handlerPropName","valuePropName","iconSize","iconColor"],"mappings":"AAAA,SACEA,eADF,EAEEC,kBAFF,EAGEC,eAHF,EAIEC,mBAJF,EAKEC,
|
|
1
|
+
{"version":3,"sources":["Stepper.ts"],"names":["COMPONENT_TYPES","createIconSizeProp","createColorProp","createFieldNameProp","createStaticNumberProp","Triggers","SEED_DATA","name","tag","description","category","input","layout","triggers","OnChange","props","fieldName","defaultValue","handlerPropName","valuePropName","iconSize","iconColor","min","label","max"],"mappings":"AAAA,SACEA,eADF,EAEEC,kBAFF,EAGEC,eAHF,EAIEC,mBAJF,EAKEC,sBALF,EAMEC,QANF,QAOO,iBAPP;AASA,OAAO,MAAMC,SAAS,GAAG,CACvB;AACEC,EAAAA,IAAI,EAAE,SADR;AAEEC,EAAAA,GAAG,EAAE,SAFP;AAGEC,EAAAA,WAAW,EAAE,uDAHf;AAIEC,EAAAA,QAAQ,EAAEV,eAAe,CAACW,KAJ5B;AAKEC,EAAAA,MAAM,EAAE,EALV;AAMEC,EAAAA,QAAQ,EAAE,CAACR,QAAQ,CAACS,QAAV,CANZ;AAOEC,EAAAA,KAAK,EAAE;AACLC,IAAAA,SAAS,EAAEb,mBAAmB,CAAC;AAC7Bc,MAAAA,YAAY,EAAE,cADe;AAE7BC,MAAAA,eAAe,EAAE,UAFY;AAG7BC,MAAAA,aAAa,EAAE;AAHc,KAAD,CADzB;AAMLC,IAAAA,QAAQ,EAAEnB,kBAAkB,CAAC;AAAEgB,MAAAA,YAAY,EAAE;AAAhB,KAAD,CANvB;AAOLI,IAAAA,SAAS,EAAEnB,eAAe,CAAC;AAAEe,MAAAA,YAAY,EAAE;AAAhB,KAAD,CAPrB;AAQLK,IAAAA,GAAG,EAAElB,sBAAsB,CAAC;AAC1BmB,MAAAA,KAAK,EAAE,SADmB;AAE1Bd,MAAAA,WAAW,EAAE,gBAFa;AAG1BQ,MAAAA,YAAY,EAAE;AAHY,KAAD,CARtB;AAaLO,IAAAA,GAAG,EAAEpB,sBAAsB,CAAC;AAC1BmB,MAAAA,KAAK,EAAE,SADmB;AAE1Bd,MAAAA,WAAW,EAAE;AAFa,KAAD;AAbtB;AAPT,CADuB,CAAlB","sourcesContent":["import {\n COMPONENT_TYPES,\n createIconSizeProp,\n createColorProp,\n createFieldNameProp,\n createStaticNumberProp,\n Triggers,\n} from \"@draftbit/types\";\n\nexport const SEED_DATA = [\n {\n name: \"Stepper\",\n tag: \"Stepper\",\n description: \"A component used to control the quantity of something\",\n category: COMPONENT_TYPES.input,\n layout: {},\n triggers: [Triggers.OnChange],\n props: {\n fieldName: createFieldNameProp({\n defaultValue: \"stepperValue\",\n handlerPropName: \"onChange\",\n valuePropName: \"value\",\n }),\n iconSize: createIconSizeProp({ defaultValue: 24 }),\n iconColor: createColorProp({ defaultValue: \"strong\" }),\n min: createStaticNumberProp({\n label: \"Minimum\",\n description: \"Minimum Number\",\n defaultValue: 0,\n }),\n max: createStaticNumberProp({\n label: \"Maximum\",\n description: \"Maximum Number\",\n }),\n },\n },\n];\n"]}
|
|
@@ -4,17 +4,16 @@ import type { Theme } from "../styles/DefaultTheme";
|
|
|
4
4
|
import type { IconSlot } from "../interfaces/Icon";
|
|
5
5
|
declare type Props = {
|
|
6
6
|
value?: number;
|
|
7
|
+
min?: number;
|
|
8
|
+
max?: number;
|
|
7
9
|
theme: Theme;
|
|
8
10
|
style?: StyleProp<ViewStyle>;
|
|
9
11
|
onChange?: (value: number) => void;
|
|
10
12
|
defaultValue?: number;
|
|
11
|
-
minValue?: number;
|
|
12
|
-
maxValue?: number;
|
|
13
13
|
iconSize?: number;
|
|
14
14
|
iconColor?: string;
|
|
15
15
|
borderRadius?: number;
|
|
16
16
|
typeStyle?: StyleProp<TextStyle>;
|
|
17
|
-
step?: number;
|
|
18
17
|
} & IconSlot;
|
|
19
18
|
declare const _default: React.ComponentType<import("@draftbit/react-theme-provider").$Without<Props, "theme"> & {
|
|
20
19
|
theme?: import("@draftbit/react-theme-provider").$DeepPartial<any> | undefined;
|
|
@@ -39,5 +39,27 @@ export declare const SEED_DATA: {
|
|
|
39
39
|
formType: string;
|
|
40
40
|
propType: string;
|
|
41
41
|
};
|
|
42
|
+
min: {
|
|
43
|
+
label: string;
|
|
44
|
+
description: string;
|
|
45
|
+
formType: string;
|
|
46
|
+
propType: string;
|
|
47
|
+
group: string;
|
|
48
|
+
defaultValue: null;
|
|
49
|
+
editable: boolean;
|
|
50
|
+
required: boolean;
|
|
51
|
+
step: number;
|
|
52
|
+
};
|
|
53
|
+
max: {
|
|
54
|
+
label: string;
|
|
55
|
+
description: string;
|
|
56
|
+
formType: string;
|
|
57
|
+
propType: string;
|
|
58
|
+
group: string;
|
|
59
|
+
defaultValue: null;
|
|
60
|
+
editable: boolean;
|
|
61
|
+
required: boolean;
|
|
62
|
+
step: number;
|
|
63
|
+
};
|
|
42
64
|
};
|
|
43
65
|
}[];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@draftbit/core",
|
|
3
|
-
"version": "43.2.5-
|
|
3
|
+
"version": "43.2.5-0c3aa5.3+0c3aa508",
|
|
4
4
|
"description": "Core (non-native) Components",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -79,5 +79,5 @@
|
|
|
79
79
|
]
|
|
80
80
|
]
|
|
81
81
|
},
|
|
82
|
-
"gitHead": "
|
|
82
|
+
"gitHead": "0c3aa50807c45f385d40d0367a7b44ec4e6cd1ba"
|
|
83
83
|
}
|
|
@@ -2,46 +2,42 @@ import * as React from "react";
|
|
|
2
2
|
import { View, Text } from "react-native";
|
|
3
3
|
import { withTheme } from "../theming";
|
|
4
4
|
import IconButton from "./IconButton";
|
|
5
|
-
|
|
5
|
+
import isNumber from "lodash.isnumber";
|
|
6
|
+
const Stepper = ({ Icon, value, min, max, style, onChange, defaultValue, theme: { colors, typography, roundness }, iconSize = 24, iconColor = colors.strong, borderRadius = roundness, typeStyle, }) => {
|
|
6
7
|
const [stateValue, setStateValue] = React.useState(value || defaultValue || 0);
|
|
7
8
|
React.useEffect(() => {
|
|
8
|
-
if (value
|
|
9
|
-
|
|
9
|
+
if (value || value === 0) {
|
|
10
|
+
onChange && onChange(stateValue);
|
|
10
11
|
}
|
|
11
|
-
}, [value]);
|
|
12
|
+
}, [onChange, stateValue, value]);
|
|
12
13
|
React.useEffect(() => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}, [defaultValue]);
|
|
17
|
-
const handleMinus = () => {
|
|
18
|
-
if (value || value === 0) {
|
|
19
|
-
if ((minValue !== undefined && value - step >= minValue) ||
|
|
20
|
-
minValue === undefined) {
|
|
21
|
-
onChange && onChange(value - step);
|
|
22
|
-
}
|
|
14
|
+
let newValue = value || defaultValue || 0;
|
|
15
|
+
if (isNumber(max) && newValue > max) {
|
|
16
|
+
newValue = max;
|
|
23
17
|
}
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
if (isNumber(min) && newValue < min) {
|
|
19
|
+
newValue = min;
|
|
26
20
|
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
onChange && onChange(value + step);
|
|
33
|
-
}
|
|
21
|
+
setStateValue(newValue);
|
|
22
|
+
}, [defaultValue, value, min, max]);
|
|
23
|
+
const handleMinus = React.useCallback(() => {
|
|
24
|
+
if (isNumber(min) && value === min) {
|
|
25
|
+
return;
|
|
34
26
|
}
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
setStateValue(stateValue - 1);
|
|
28
|
+
}, [min, stateValue, value]);
|
|
29
|
+
const handlePlus = React.useCallback(() => {
|
|
30
|
+
if (isNumber(max) && value === max) {
|
|
31
|
+
return;
|
|
37
32
|
}
|
|
38
|
-
|
|
33
|
+
setStateValue(stateValue + 1);
|
|
34
|
+
}, [max, stateValue, value]);
|
|
39
35
|
return (React.createElement(View, { style: [
|
|
40
36
|
{ flexDirection: "row" },
|
|
41
37
|
style,
|
|
42
38
|
borderRadius ? { borderRadius } : {},
|
|
43
39
|
] },
|
|
44
|
-
React.createElement(IconButton, { Icon: Icon, icon: "MaterialIcons/remove", onPress: handleMinus, size: iconSize, color: iconColor, disabled:
|
|
40
|
+
React.createElement(IconButton, { Icon: Icon, icon: "MaterialIcons/remove", onPress: handleMinus, size: iconSize, color: iconColor, disabled: stateValue === 0 }),
|
|
45
41
|
React.createElement(Text, { style: [
|
|
46
42
|
typography.body1,
|
|
47
43
|
{
|
|
@@ -5,78 +5,70 @@ import type { Theme } from "../styles/DefaultTheme";
|
|
|
5
5
|
import type { IconSlot } from "../interfaces/Icon";
|
|
6
6
|
|
|
7
7
|
import IconButton from "./IconButton";
|
|
8
|
+
import isNumber from "lodash.isnumber";
|
|
8
9
|
|
|
9
10
|
type Props = {
|
|
10
11
|
value?: number;
|
|
12
|
+
min?: number;
|
|
13
|
+
max?: number;
|
|
11
14
|
theme: Theme;
|
|
12
15
|
style?: StyleProp<ViewStyle>;
|
|
13
16
|
onChange?: (value: number) => void;
|
|
14
17
|
defaultValue?: number;
|
|
15
|
-
minValue?: number;
|
|
16
|
-
maxValue?: number;
|
|
17
18
|
iconSize?: number;
|
|
18
19
|
iconColor?: string;
|
|
19
20
|
borderRadius?: number;
|
|
20
21
|
typeStyle?: StyleProp<TextStyle>;
|
|
21
|
-
step?: number;
|
|
22
22
|
} & IconSlot;
|
|
23
23
|
|
|
24
24
|
const Stepper: React.FC<Props> = ({
|
|
25
25
|
Icon,
|
|
26
26
|
value,
|
|
27
|
+
min,
|
|
28
|
+
max,
|
|
27
29
|
style,
|
|
28
30
|
onChange,
|
|
29
31
|
defaultValue,
|
|
30
|
-
minValue,
|
|
31
|
-
maxValue,
|
|
32
32
|
theme: { colors, typography, roundness },
|
|
33
33
|
iconSize = 24,
|
|
34
34
|
iconColor = colors.strong,
|
|
35
35
|
borderRadius = roundness,
|
|
36
36
|
typeStyle,
|
|
37
|
-
step = 1,
|
|
38
37
|
}) => {
|
|
39
38
|
const [stateValue, setStateValue] = React.useState(
|
|
40
39
|
value || defaultValue || 0
|
|
41
40
|
);
|
|
42
41
|
|
|
43
42
|
React.useEffect(() => {
|
|
44
|
-
if (value
|
|
45
|
-
|
|
43
|
+
if (value || value === 0) {
|
|
44
|
+
onChange && onChange(stateValue);
|
|
46
45
|
}
|
|
47
|
-
}, [value]);
|
|
46
|
+
}, [onChange, stateValue, value]);
|
|
48
47
|
|
|
49
48
|
React.useEffect(() => {
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
let newValue = value || defaultValue || 0;
|
|
50
|
+
if (isNumber(max) && newValue > max) {
|
|
51
|
+
newValue = max;
|
|
52
|
+
}
|
|
53
|
+
if (isNumber(min) && newValue < min) {
|
|
54
|
+
newValue = min;
|
|
52
55
|
}
|
|
53
|
-
|
|
56
|
+
setStateValue(newValue);
|
|
57
|
+
}, [defaultValue, value, min, max]);
|
|
54
58
|
|
|
55
|
-
const handleMinus = () => {
|
|
56
|
-
if (
|
|
57
|
-
|
|
58
|
-
(minValue !== undefined && value - step >= minValue) ||
|
|
59
|
-
minValue === undefined
|
|
60
|
-
) {
|
|
61
|
-
onChange && onChange(value - step);
|
|
62
|
-
}
|
|
63
|
-
} else {
|
|
64
|
-
setStateValue(stateValue - step);
|
|
59
|
+
const handleMinus = React.useCallback(() => {
|
|
60
|
+
if (isNumber(min) && value === min) {
|
|
61
|
+
return;
|
|
65
62
|
}
|
|
66
|
-
|
|
63
|
+
setStateValue(stateValue - 1);
|
|
64
|
+
}, [min, stateValue, value]);
|
|
67
65
|
|
|
68
|
-
const handlePlus = () => {
|
|
69
|
-
if (
|
|
70
|
-
|
|
71
|
-
(maxValue !== undefined && value <= maxValue - step) ||
|
|
72
|
-
maxValue === undefined
|
|
73
|
-
) {
|
|
74
|
-
onChange && onChange(value + step);
|
|
75
|
-
}
|
|
76
|
-
} else {
|
|
77
|
-
setStateValue(stateValue + step);
|
|
66
|
+
const handlePlus = React.useCallback(() => {
|
|
67
|
+
if (isNumber(max) && value === max) {
|
|
68
|
+
return;
|
|
78
69
|
}
|
|
79
|
-
|
|
70
|
+
setStateValue(stateValue + 1);
|
|
71
|
+
}, [max, stateValue, value]);
|
|
80
72
|
|
|
81
73
|
return (
|
|
82
74
|
<View
|
|
@@ -92,7 +84,7 @@ const Stepper: React.FC<Props> = ({
|
|
|
92
84
|
onPress={handleMinus}
|
|
93
85
|
size={iconSize}
|
|
94
86
|
color={iconColor}
|
|
95
|
-
disabled={
|
|
87
|
+
disabled={stateValue === 0}
|
|
96
88
|
/>
|
|
97
89
|
<Text
|
|
98
90
|
style={[
|
package/src/mappings/Stepper.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { COMPONENT_TYPES, createIconSizeProp, createColorProp, createFieldNameProp, Triggers, } from "@draftbit/types";
|
|
1
|
+
import { COMPONENT_TYPES, createIconSizeProp, createColorProp, createFieldNameProp, createStaticNumberProp, Triggers, } from "@draftbit/types";
|
|
2
2
|
export const SEED_DATA = [
|
|
3
3
|
{
|
|
4
4
|
name: "Stepper",
|
|
@@ -15,6 +15,15 @@ export const SEED_DATA = [
|
|
|
15
15
|
}),
|
|
16
16
|
iconSize: createIconSizeProp({ defaultValue: 24 }),
|
|
17
17
|
iconColor: createColorProp({ defaultValue: "strong" }),
|
|
18
|
+
min: createStaticNumberProp({
|
|
19
|
+
label: "Minimum",
|
|
20
|
+
description: "Minimum Number",
|
|
21
|
+
defaultValue: 0,
|
|
22
|
+
}),
|
|
23
|
+
max: createStaticNumberProp({
|
|
24
|
+
label: "Maximum",
|
|
25
|
+
description: "Maximum Number",
|
|
26
|
+
}),
|
|
18
27
|
},
|
|
19
28
|
},
|
|
20
29
|
];
|
package/src/mappings/Stepper.ts
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
createIconSizeProp,
|
|
4
4
|
createColorProp,
|
|
5
5
|
createFieldNameProp,
|
|
6
|
+
createStaticNumberProp,
|
|
6
7
|
Triggers,
|
|
7
8
|
} from "@draftbit/types";
|
|
8
9
|
|
|
@@ -22,6 +23,15 @@ export const SEED_DATA = [
|
|
|
22
23
|
}),
|
|
23
24
|
iconSize: createIconSizeProp({ defaultValue: 24 }),
|
|
24
25
|
iconColor: createColorProp({ defaultValue: "strong" }),
|
|
26
|
+
min: createStaticNumberProp({
|
|
27
|
+
label: "Minimum",
|
|
28
|
+
description: "Minimum Number",
|
|
29
|
+
defaultValue: 0,
|
|
30
|
+
}),
|
|
31
|
+
max: createStaticNumberProp({
|
|
32
|
+
label: "Maximum",
|
|
33
|
+
description: "Maximum Number",
|
|
34
|
+
}),
|
|
25
35
|
},
|
|
26
36
|
},
|
|
27
37
|
];
|