@axelor/aos-mobile-ui 6.5.0 → 6.5.2
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/components/atoms/HtmlInput/HtmlInput.d.ts +3 -1
- package/lib/components/atoms/HtmlInput/HtmlInput.js +8 -4
- package/lib/components/atoms/HtmlInput/HtmlInput.js.map +1 -1
- package/lib/components/molecules/DropdownMenu/DropdownMenu.js +7 -5
- package/lib/components/molecules/DropdownMenu/DropdownMenu.js.map +1 -1
- package/lib/components/molecules/FormHtmlInput/FormHtmlInput.js +14 -3
- package/lib/components/molecules/FormHtmlInput/FormHtmlInput.js.map +1 -1
- package/lib/components/molecules/FormIncrementInput/FormIncrementInput.js +9 -1
- package/lib/components/molecules/FormIncrementInput/FormIncrementInput.js.map +1 -1
- package/lib/components/molecules/FormInput/FormInput.js +17 -4
- package/lib/components/molecules/FormInput/FormInput.js.map +1 -1
- package/lib/components/molecules/IconInput/IconInput.d.ts +2 -1
- package/lib/components/molecules/IconInput/IconInput.js +18 -5
- package/lib/components/molecules/IconInput/IconInput.js.map +1 -1
- package/lib/components/molecules/Increment/Increment.d.ts +3 -1
- package/lib/components/molecules/Increment/Increment.js +10 -6
- package/lib/components/molecules/Increment/Increment.js.map +1 -1
- package/lib/components/molecules/WarningCard/WarningCard.d.ts +6 -0
- package/lib/components/molecules/WarningCard/WarningCard.js +55 -0
- package/lib/components/molecules/WarningCard/WarningCard.js.map +1 -0
- package/lib/components/molecules/index.d.ts +1 -1
- package/lib/components/molecules/index.js +1 -1
- package/lib/components/molecules/index.js.map +1 -1
- package/lib/components/organisms/AutoCompleteSearch/AutoCompleteSearch.js +52 -51
- package/lib/components/organisms/AutoCompleteSearch/AutoCompleteSearch.js.map +1 -1
- package/lib/components/organisms/DropdownMenuItem/DropdownMenuItem.d.ts +11 -0
- package/lib/components/organisms/DropdownMenuItem/DropdownMenuItem.js +68 -0
- package/lib/components/organisms/DropdownMenuItem/DropdownMenuItem.js.map +1 -0
- package/lib/components/organisms/MultiValuePicker/MultiValuePicker.d.ts +2 -3
- package/lib/components/organisms/MultiValuePicker/MultiValuePicker.js +10 -8
- package/lib/components/organisms/MultiValuePicker/MultiValuePicker.js.map +1 -1
- package/lib/components/organisms/Picker/Picker.js +8 -2
- package/lib/components/organisms/Picker/Picker.js.map +1 -1
- package/lib/components/organisms/ProgressBar/ProgressBar.d.ts +18 -0
- package/lib/components/organisms/ProgressBar/ProgressBar.js +164 -0
- package/lib/components/organisms/ProgressBar/ProgressBar.js.map +1 -0
- package/lib/components/organisms/ScrollList/ScrollList.js +18 -8
- package/lib/components/organisms/ScrollList/ScrollList.js.map +1 -1
- package/lib/components/organisms/SearchBar/SearchBar.d.ts +2 -1
- package/lib/components/organisms/SearchBar/SearchBar.js +2 -2
- package/lib/components/organisms/SearchBar/SearchBar.js.map +1 -1
- package/lib/components/organisms/index.d.ts +2 -0
- package/lib/components/organisms/index.js +2 -0
- package/lib/components/organisms/index.js.map +1 -1
- package/lib/utils/commons-styles.d.ts +13 -1
- package/lib/utils/commons-styles.js +13 -1
- package/lib/utils/commons-styles.js.map +1 -1
- package/lib/utils/commons-utlis.d.ts +1 -0
- package/lib/utils/commons-utlis.js +24 -0
- package/lib/utils/commons-utlis.js.map +1 -0
- package/lib/utils/strings.js +1 -1
- package/lib/utils/strings.js.map +1 -1
- package/package.json +1 -1
- package/lib/components/molecules/DropdownMenuItem/DropdownMenuItem.d.ts +0 -7
- package/lib/components/molecules/DropdownMenuItem/DropdownMenuItem.js +0 -42
- package/lib/components/molecules/DropdownMenuItem/DropdownMenuItem.js.map +0 -1
|
@@ -20,21 +20,28 @@ import { View } from 'react-native';
|
|
|
20
20
|
import { useClickOutside, OUTSIDE_INDICATOR, } from '../../../hooks/use-click-outside';
|
|
21
21
|
import { SelectionContainer } from '../../molecules';
|
|
22
22
|
import { SearchBar } from '../../organisms';
|
|
23
|
-
const
|
|
23
|
+
const isValidString = (string) => {
|
|
24
|
+
return typeof string === 'string' && string !== '';
|
|
25
|
+
};
|
|
26
|
+
const TIME_WITHOUT_INPUT = 2000;
|
|
24
27
|
const TIME_BETWEEN_CALL = 1000;
|
|
25
|
-
const AutoCompleteSearch = ({ objectList, value = null, onChangeValue, fetchData = () => { }, displayValue, placeholder, isFocus = false, changeScreenAfter = false, navigate = false, oneFilter = false, onSelection, onScanPress, scanIconColor = null, selectLastItem = true, style, }) => {
|
|
28
|
+
const AutoCompleteSearch = ({ objectList, value = null, onChangeValue, fetchData = () => { }, displayValue, placeholder, isFocus = false, changeScreenAfter = false, navigate = false, oneFilter = false, onSelection = () => { }, onScanPress, scanIconColor = null, selectLastItem = true, style, }) => {
|
|
26
29
|
const [displayList, setDisplayList] = useState(false);
|
|
30
|
+
const [previousState, setPreviousState] = useState(null);
|
|
31
|
+
const [selected, setSelected] = useState(value ? true : false);
|
|
32
|
+
const [searchText, setSearchText] = useState(value ? displayValue(value) : null);
|
|
33
|
+
let timeOutRequestCall = useRef();
|
|
34
|
+
let intervalRequestCall = useRef();
|
|
27
35
|
const wrapperRef = useRef(null);
|
|
28
36
|
const clickOutside = useClickOutside({
|
|
29
37
|
wrapperRef,
|
|
30
38
|
visible: displayList,
|
|
31
39
|
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
let intervalRequestCall = useRef();
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (clickOutside === OUTSIDE_INDICATOR && displayList) {
|
|
42
|
+
setDisplayList(false);
|
|
43
|
+
}
|
|
44
|
+
}, [clickOutside, displayList]);
|
|
38
45
|
const handleAPICall = useCallback(() => {
|
|
39
46
|
if (!selected) {
|
|
40
47
|
if (searchText == null && searchText === '') {
|
|
@@ -46,15 +53,8 @@ const AutoCompleteSearch = ({ objectList, value = null, onChangeValue, fetchData
|
|
|
46
53
|
}
|
|
47
54
|
}, [fetchData, searchText, selected]);
|
|
48
55
|
useEffect(() => {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
}, [selected, handleAPICall]);
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
if (clickOutside === OUTSIDE_INDICATOR && displayList) {
|
|
55
|
-
setDisplayList(false);
|
|
56
|
-
}
|
|
57
|
-
}, [clickOutside, displayList]);
|
|
56
|
+
handleAPICall();
|
|
57
|
+
}, [handleAPICall]);
|
|
58
58
|
const handleSelect = useCallback(item => {
|
|
59
59
|
setDisplayList(false);
|
|
60
60
|
setSelected(true);
|
|
@@ -62,7 +62,7 @@ const AutoCompleteSearch = ({ objectList, value = null, onChangeValue, fetchData
|
|
|
62
62
|
onChangeValue(item);
|
|
63
63
|
}, [changeScreenAfter, displayValue, onChangeValue]);
|
|
64
64
|
useEffect(() => {
|
|
65
|
-
if (
|
|
65
|
+
if (oneFilter && navigate != null) {
|
|
66
66
|
setSearchText('');
|
|
67
67
|
}
|
|
68
68
|
}, [navigate, oneFilter]);
|
|
@@ -73,36 +73,27 @@ const AutoCompleteSearch = ({ objectList, value = null, onChangeValue, fetchData
|
|
|
73
73
|
setSearchText('');
|
|
74
74
|
onChangeValue(null);
|
|
75
75
|
};
|
|
76
|
-
useEffect(() => {
|
|
77
|
-
if ((previousState === '' || previousState == null) &&
|
|
78
|
-
searchText != null &&
|
|
79
|
-
searchText !== '') {
|
|
80
|
-
const id = setInterval(() => setNewInterval(state => state + 1), TIME_BETWEEN_CALL);
|
|
81
|
-
intervalRequestCall.current = id;
|
|
82
|
-
}
|
|
83
|
-
}, [previousState, searchText]);
|
|
84
76
|
const stopInterval = useCallback(() => {
|
|
85
77
|
clearInterval(intervalRequestCall.current);
|
|
86
|
-
setNewInterval(0);
|
|
87
78
|
}, []);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
}, [handleAPICall, newInterval]);
|
|
79
|
+
const handleInterval = useCallback(() => {
|
|
80
|
+
handleAPICall();
|
|
81
|
+
}, [handleAPICall]);
|
|
93
82
|
const handleTimeOut = useCallback(() => {
|
|
94
83
|
stopInterval();
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
84
|
+
handleAPICall();
|
|
85
|
+
}, [handleAPICall, stopInterval]);
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
if (!isValidString(previousState) && isValidString(searchText)) {
|
|
88
|
+
const id = setInterval(handleInterval, TIME_BETWEEN_CALL);
|
|
89
|
+
intervalRequestCall.current = id;
|
|
90
|
+
return () => {
|
|
91
|
+
stopInterval();
|
|
92
|
+
};
|
|
102
93
|
}
|
|
103
|
-
}, [
|
|
94
|
+
}, [handleInterval, previousState, searchText, stopInterval]);
|
|
104
95
|
useEffect(() => {
|
|
105
|
-
if (searchText
|
|
96
|
+
if (isValidString(searchText)) {
|
|
106
97
|
const id = setTimeout(handleTimeOut, TIME_WITHOUT_INPUT);
|
|
107
98
|
timeOutRequestCall.current = id;
|
|
108
99
|
return () => {
|
|
@@ -111,15 +102,10 @@ const AutoCompleteSearch = ({ objectList, value = null, onChangeValue, fetchData
|
|
|
111
102
|
}
|
|
112
103
|
}, [handleTimeOut, searchText]);
|
|
113
104
|
const handleSearchValueChange = useCallback(input => {
|
|
114
|
-
if (objectList
|
|
115
|
-
if (objectList.length === 1 && selectLastItem
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
setSearchText(displayValue(objectList[0]));
|
|
121
|
-
setDisplayList(false);
|
|
122
|
-
}
|
|
105
|
+
if (Array.isArray(objectList) && isValidString(input) && !selected) {
|
|
106
|
+
if (objectList.length === 1 && selectLastItem) {
|
|
107
|
+
setSearchText(changeScreenAfter || oneFilter ? '' : displayValue(objectList[0]));
|
|
108
|
+
setDisplayList(false);
|
|
123
109
|
stopInterval();
|
|
124
110
|
onChangeValue(objectList[0]);
|
|
125
111
|
}
|
|
@@ -140,8 +126,23 @@ const AutoCompleteSearch = ({ objectList, value = null, onChangeValue, fetchData
|
|
|
140
126
|
selected,
|
|
141
127
|
stopInterval,
|
|
142
128
|
]);
|
|
129
|
+
const handleFocus = useCallback(() => {
|
|
130
|
+
setDisplayList(true);
|
|
131
|
+
onSelection();
|
|
132
|
+
}, [onSelection]);
|
|
133
|
+
const handleSearchPress = useCallback(() => {
|
|
134
|
+
setDisplayList(true);
|
|
135
|
+
}, []);
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
if (isValidString(value)) {
|
|
138
|
+
handleSearchValueChange(value);
|
|
139
|
+
}
|
|
140
|
+
if (value != null && isValidString(displayValue(value))) {
|
|
141
|
+
handleSearchValueChange(displayValue(value));
|
|
142
|
+
}
|
|
143
|
+
}, [displayValue, handleSearchValueChange, value]);
|
|
143
144
|
return (<View ref={wrapperRef}>
|
|
144
|
-
<SearchBar style={style} valueTxt={searchText} placeholder={placeholder} onClearPress={handleClear} onChangeTxt={handleSearchValueChange} onSelection={
|
|
145
|
+
<SearchBar style={style} valueTxt={searchText} placeholder={placeholder} onClearPress={handleClear} onChangeTxt={handleSearchValueChange} onSelection={handleFocus} onSearchPress={handleSearchPress} onEndFocus={() => selected && setDisplayList(false)} isFocus={isFocus} onScanPress={onScanPress} scanIconColor={scanIconColor}/>
|
|
145
146
|
{displayList && !oneFilter && (<SelectionContainer objectList={objectList} displayValue={displayValue} handleSelect={handleSelect}/>)}
|
|
146
147
|
</View>);
|
|
147
148
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AutoCompleteSearch.js","sourceRoot":"","sources":["../../../../src/components/organisms/AutoCompleteSearch/AutoCompleteSearch.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AACtE,OAAO,EAAC,IAAI,EAAC,MAAM,cAAc,CAAC;AAClC,OAAO,EACL,eAAe,EACf,iBAAiB,GAClB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE1C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAoB/B,MAAM,kBAAkB,GAAG,CAAC,EAC1B,UAAU,EACV,KAAK,GAAG,IAAI,EACZ,aAAa,EACb,SAAS,GAAG,GAAG,EAAE,GAAE,CAAC,EACpB,YAAY,EACZ,WAAW,EACX,OAAO,GAAG,KAAK,EACf,iBAAiB,GAAG,KAAK,EACzB,QAAQ,GAAG,KAAK,EAChB,SAAS,GAAG,KAAK,EACjB,WAAW,
|
|
1
|
+
{"version":3,"file":"AutoCompleteSearch.js","sourceRoot":"","sources":["../../../../src/components/organisms/AutoCompleteSearch/AutoCompleteSearch.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface DropdownMenuItemProps {
|
|
2
|
+
icon?: string;
|
|
3
|
+
color?: string;
|
|
4
|
+
placeholder: string;
|
|
5
|
+
FontAwesome5?: boolean;
|
|
6
|
+
indicator?: number;
|
|
7
|
+
hideIf?: boolean;
|
|
8
|
+
onPress: (any: any) => void;
|
|
9
|
+
}
|
|
10
|
+
declare const DropdownMenuItem: ({ icon, color, placeholder, indicator, FontAwesome5, hideIf, onPress, }: DropdownMenuItemProps) => JSX.Element;
|
|
11
|
+
export default DropdownMenuItem;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Axelor Business Solutions
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2023 Axelor (<http://axelor.com>).
|
|
5
|
+
*
|
|
6
|
+
* This program is free software: you can redistribute it and/or modify
|
|
7
|
+
* it under the terms of the GNU Affero General Public License, version 3,
|
|
8
|
+
* as published by the Free Software Foundation.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import React from 'react';
|
|
19
|
+
import { StyleSheet, TouchableOpacity, View } from 'react-native';
|
|
20
|
+
import { useThemeColor } from '../../../theme';
|
|
21
|
+
import { Icon, Text } from '../../atoms';
|
|
22
|
+
import { Badge } from '../../molecules';
|
|
23
|
+
const BADGE_SIZE = 12;
|
|
24
|
+
const DropdownMenuItem = ({ icon = 'paperclip', color, placeholder, indicator = 0, FontAwesome5 = true, hideIf = false, onPress, }) => {
|
|
25
|
+
const Colors = useThemeColor();
|
|
26
|
+
if (hideIf) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return (<TouchableOpacity onPress={onPress} style={styles.menuItem}>
|
|
30
|
+
<View style={styles.iconContainer}>
|
|
31
|
+
<Icon name={icon} color={color || Colors.secondaryColor_dark.background} FontAwesome5={FontAwesome5} size={15}/>
|
|
32
|
+
{indicator > 0 && (<Badge style={styles.badge} txtStyle={styles.badgeText} color={{
|
|
33
|
+
background_light: Colors.backgroundColor,
|
|
34
|
+
foreground: Colors.text,
|
|
35
|
+
background: Colors.primaryColor.background,
|
|
36
|
+
}} title={indicator}/>)}
|
|
37
|
+
</View>
|
|
38
|
+
<Text style={styles.text}>{placeholder}</Text>
|
|
39
|
+
</TouchableOpacity>);
|
|
40
|
+
};
|
|
41
|
+
const styles = StyleSheet.create({
|
|
42
|
+
badge: {
|
|
43
|
+
width: BADGE_SIZE,
|
|
44
|
+
height: BADGE_SIZE,
|
|
45
|
+
borderRadius: Math.ceil(BADGE_SIZE / 2),
|
|
46
|
+
position: 'absolute',
|
|
47
|
+
top: -4,
|
|
48
|
+
right: -8,
|
|
49
|
+
zIndex: 10,
|
|
50
|
+
},
|
|
51
|
+
badgeText: {
|
|
52
|
+
fontSize: Math.ceil(BADGE_SIZE / 2),
|
|
53
|
+
},
|
|
54
|
+
menuItem: {
|
|
55
|
+
flexDirection: 'row',
|
|
56
|
+
alignItems: 'center',
|
|
57
|
+
marginVertical: 5,
|
|
58
|
+
padding: 5,
|
|
59
|
+
},
|
|
60
|
+
text: {
|
|
61
|
+
fontSize: 18,
|
|
62
|
+
},
|
|
63
|
+
iconContainer: {
|
|
64
|
+
marginRight: 10,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
export default DropdownMenuItem;
|
|
68
|
+
//# sourceMappingURL=DropdownMenuItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownMenuItem.js","sourceRoot":"","sources":["../../../../src/components/organisms/DropdownMenuItem/DropdownMenuItem.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAChE,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAYtC,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,MAAM,gBAAgB,GAAG,CAAC,EACxB,IAAI,GAAG,WAAW,EAClB,KAAK,EACL,WAAW,EACX,SAAS,GAAG,CAAC,EACb,YAAY,GAAG,IAAI,EACnB,MAAM,GAAG,KAAK,EACd,OAAO,GACe,EAAE,EAAE;IAC1B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,IAAI,MAAM,EAAE;QACV,OAAO,IAAI,CAAC;KACb;IAED,OAAO,CACL,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CACzD;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAChC;QAAA,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,IAAI,CAAC,CACX,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CACtD,YAAY,CAAC,CAAC,YAAY,CAAC,CAC3B,IAAI,CAAC,CAAC,EAAE,CAAC,EAEX;QAAA,CAAC,SAAS,GAAG,CAAC,IAAI,CAChB,CAAC,KAAK,CACJ,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACpB,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC3B,KAAK,CAAC,CAAC;gBACL,gBAAgB,EAAE,MAAM,CAAC,eAAe;gBACxC,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,UAAU;aAC3C,CAAC,CACF,KAAK,CAAC,CAAC,SAAS,CAAC,EACjB,CACH,CACH;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,CAC/C;IAAA,EAAE,gBAAgB,CAAC,CACpB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,KAAK,EAAE;QACL,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,UAAU;QAClB,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACvC,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,CAAC,CAAC;QACP,KAAK,EAAE,CAAC,CAAC;QACT,MAAM,EAAE,EAAE;KACX;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;KACpC;IACD,QAAQ,EAAE;QACR,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,CAAC;KACX;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,EAAE;KACb;IACD,aAAa,EAAE;QACb,WAAW,EAAE,EAAE;KAChB;CACF,CAAC,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
|
|
@@ -9,9 +9,8 @@ interface MultiValuePickerProps {
|
|
|
9
9
|
labelField: string;
|
|
10
10
|
valueField: string;
|
|
11
11
|
disabled?: boolean;
|
|
12
|
-
disabledValue?: string;
|
|
13
|
-
iconName?: string;
|
|
12
|
+
disabledValue?: string[];
|
|
14
13
|
required?: boolean;
|
|
15
14
|
}
|
|
16
|
-
declare const MultiValuePicker: ({ style, pickerStyle, styleTxt, title, onValueChange, defaultValue, listItems, labelField, valueField, disabled, disabledValue,
|
|
15
|
+
declare const MultiValuePicker: ({ style, pickerStyle, styleTxt, title, onValueChange, defaultValue, listItems, labelField, valueField, disabled, disabledValue, required, }: MultiValuePickerProps) => JSX.Element;
|
|
17
16
|
export default MultiValuePicker;
|
|
@@ -20,17 +20,19 @@ import { Dimensions, StyleSheet, View } from 'react-native';
|
|
|
20
20
|
import { useThemeColor } from '../../../theme/ThemeContext';
|
|
21
21
|
import { getCommonStyles } from '../../../utils/commons-styles';
|
|
22
22
|
import { Text } from '../../atoms';
|
|
23
|
-
import {
|
|
23
|
+
import { SelectionContainer, MultiValuePickerButton } from '../../molecules';
|
|
24
24
|
import { getItemsFromList } from '../../../utils/list';
|
|
25
25
|
import { OUTSIDE_INDICATOR, useClickOutside, } from '../../../hooks/use-click-outside';
|
|
26
|
-
|
|
26
|
+
import MultiSelectValue from '../MultiSelectValue/MultiSelectValue';
|
|
27
|
+
const MultiValuePicker = ({ style, pickerStyle, styleTxt, title, onValueChange, defaultValue = [], listItems = [], labelField, valueField, disabled = false, disabledValue = [], required = false, }) => {
|
|
28
|
+
const Colors = useThemeColor();
|
|
27
29
|
const [pickerIsOpen, setPickerIsOpen] = useState(false);
|
|
30
|
+
const [isFocused, setIsFocused] = useState(false);
|
|
28
31
|
const wrapperRef = useRef(null);
|
|
29
32
|
const clickOutside = useClickOutside({
|
|
30
33
|
wrapperRef,
|
|
31
34
|
visible: pickerIsOpen,
|
|
32
35
|
});
|
|
33
|
-
const Colors = useThemeColor();
|
|
34
36
|
const [selectedItem, setSelectedItem] = useState(getItemsFromList(listItems, valueField, defaultValue));
|
|
35
37
|
useEffect(() => {
|
|
36
38
|
setSelectedItem(getItemsFromList(listItems, valueField, defaultValue));
|
|
@@ -38,10 +40,12 @@ const MultiValuePicker = ({ style, pickerStyle, styleTxt, title, onValueChange,
|
|
|
38
40
|
useEffect(() => {
|
|
39
41
|
if (clickOutside === OUTSIDE_INDICATOR && pickerIsOpen) {
|
|
40
42
|
setPickerIsOpen(false);
|
|
43
|
+
setIsFocused(false);
|
|
41
44
|
}
|
|
42
45
|
}, [clickOutside, pickerIsOpen]);
|
|
43
46
|
const togglePicker = () => {
|
|
44
47
|
setPickerIsOpen(current => !current);
|
|
48
|
+
setIsFocused(current => !current);
|
|
45
49
|
};
|
|
46
50
|
const handleValueChange = useCallback(itemValue => {
|
|
47
51
|
if (itemValue != null) {
|
|
@@ -57,7 +61,7 @@ const MultiValuePicker = ({ style, pickerStyle, styleTxt, title, onValueChange,
|
|
|
57
61
|
}
|
|
58
62
|
}, [onValueChange, selectedItem, valueField]);
|
|
59
63
|
const _required = useMemo(() => required && (selectedItem == null || selectedItem?.length === 0), [required, selectedItem]);
|
|
60
|
-
const commonStyles = useMemo(() => getCommonStyles(Colors), [Colors]);
|
|
64
|
+
const commonStyles = useMemo(() => getCommonStyles(Colors, _required), [Colors, _required]);
|
|
61
65
|
const styles = useMemo(() => getStyles(Colors, _required), [Colors, _required]);
|
|
62
66
|
return (<View ref={wrapperRef} style={style}>
|
|
63
67
|
{!disabled && (<View style={styles.titleContainer}>
|
|
@@ -70,16 +74,14 @@ const MultiValuePicker = ({ style, pickerStyle, styleTxt, title, onValueChange,
|
|
|
70
74
|
styles.infosCard,
|
|
71
75
|
pickerStyle,
|
|
72
76
|
]}>
|
|
73
|
-
{
|
|
74
|
-
<LabelText value={disabledValue == null || disabledValue === ''
|
|
75
|
-
? '-'
|
|
76
|
-
: disabledValue} title={`${title} :`} iconName={iconName}/>
|
|
77
|
+
<MultiSelectValue itemList={disabledValue} title={`${title} :`}/>
|
|
77
78
|
</View>) : (<View>
|
|
78
79
|
<MultiValuePickerButton onPress={togglePicker} listItem={selectedItem} labelField={labelField} style={[
|
|
79
80
|
commonStyles.filter,
|
|
80
81
|
commonStyles.filterSize,
|
|
81
82
|
commonStyles.filterAlign,
|
|
82
83
|
styles.rightIconButton,
|
|
84
|
+
isFocused && commonStyles.inputFocused,
|
|
83
85
|
pickerStyle,
|
|
84
86
|
]} onPressItem={handleValueChange}/>
|
|
85
87
|
{pickerIsOpen ? (<SelectionContainer objectList={listItems} keyField={valueField} displayValue={item => item[labelField]} handleSelect={handleValueChange} isPicker={true} selectedItem={selectedItem}/>) : null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiValuePicker.js","sourceRoot":"","sources":["../../../../src/components/organisms/MultiValuePicker/MultiValuePicker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"MultiValuePicker.js","sourceRoot":"","sources":["../../../../src/components/organisms/MultiValuePicker/MultiValuePicker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,7 @@ import { OUTSIDE_INDICATOR, useClickOutside, } from '../../../hooks/use-click-ou
|
|
|
26
26
|
const ITEM_HEIGHT = 40;
|
|
27
27
|
const Picker = ({ style, pickerStyle, styleTxt, title, onValueChange, defaultValue = '', listItems, labelField, valueField, emptyValue = true, isValueItem = false, disabled = false, disabledValue = null, iconName = null, required = false, isScrollViewContainer = false, }) => {
|
|
28
28
|
const [pickerIsOpen, setPickerIsOpen] = useState(false);
|
|
29
|
+
const [isFocused, setIsFocused] = useState(false);
|
|
29
30
|
const wrapperRef = useRef(null);
|
|
30
31
|
const clickOutside = useClickOutside({
|
|
31
32
|
wrapperRef,
|
|
@@ -39,13 +40,17 @@ const Picker = ({ style, pickerStyle, styleTxt, title, onValueChange, defaultVal
|
|
|
39
40
|
useEffect(() => {
|
|
40
41
|
if (clickOutside === OUTSIDE_INDICATOR && pickerIsOpen) {
|
|
41
42
|
setPickerIsOpen(false);
|
|
43
|
+
setIsFocused(false);
|
|
42
44
|
}
|
|
43
45
|
}, [clickOutside, pickerIsOpen]);
|
|
46
|
+
const toggleValue = current => !current;
|
|
44
47
|
const togglePicker = () => {
|
|
45
|
-
setPickerIsOpen(
|
|
48
|
+
setPickerIsOpen(toggleValue);
|
|
49
|
+
setIsFocused(toggleValue);
|
|
46
50
|
};
|
|
47
51
|
const handleValueChange = itemValue => {
|
|
48
52
|
setPickerIsOpen(false);
|
|
53
|
+
setIsFocused(false);
|
|
49
54
|
setSelectedItem(itemValue);
|
|
50
55
|
itemValue
|
|
51
56
|
? onValueChange(isValueItem
|
|
@@ -63,7 +68,7 @@ const Picker = ({ style, pickerStyle, styleTxt, title, onValueChange, defaultVal
|
|
|
63
68
|
}
|
|
64
69
|
return null;
|
|
65
70
|
}, [emptyValue, isScrollViewContainer, listItems.length, pickerIsOpen]);
|
|
66
|
-
const commonStyles = useMemo(() => getCommonStyles(Colors), [Colors]);
|
|
71
|
+
const commonStyles = useMemo(() => getCommonStyles(Colors, _required), [Colors, _required]);
|
|
67
72
|
const styles = useMemo(() => getStyles(Colors, _required, marginBottom), [Colors, _required, marginBottom]);
|
|
68
73
|
return (<View ref={wrapperRef} style={style}>
|
|
69
74
|
{!disabled && (<View style={styles.titleContainer}>
|
|
@@ -85,6 +90,7 @@ const Picker = ({ style, pickerStyle, styleTxt, title, onValueChange, defaultVal
|
|
|
85
90
|
commonStyles.filterSize,
|
|
86
91
|
commonStyles.filterAlign,
|
|
87
92
|
styles.rightIconButton,
|
|
93
|
+
isFocused && commonStyles.inputFocused,
|
|
88
94
|
pickerStyle,
|
|
89
95
|
]}/>
|
|
90
96
|
{pickerIsOpen ? (<SelectionContainer emptyValue={emptyValue} objectList={listItems} keyField={valueField} displayValue={item => item[labelField]} handleSelect={handleValueChange} isPicker={true}/>) : null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Picker.js","sourceRoot":"","sources":["../../../../src/components/organisms/Picker/Picker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,EAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAClE,OAAO,EAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,eAAe,EAAC,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAC,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAG1C,MAAM,WAAW,GAAG,EAAE,CAAC;AAqBvB,MAAM,MAAM,GAAG,CAAC,EACd,KAAK,EACL,WAAW,EACX,QAAQ,EACR,KAAK,EACL,aAAa,EACb,YAAY,GAAG,EAAE,EACjB,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,GAAG,IAAI,EACjB,WAAW,GAAG,KAAK,EACnB,QAAQ,GAAG,KAAK,EAChB,aAAa,GAAG,IAAI,EACpB,QAAQ,GAAG,IAAI,EACf,QAAQ,GAAG,KAAK,EAChB,qBAAqB,GAAG,KAAK,GACjB,EAAE,EAAE;IAChB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,eAAe,CAAC;QACnC,UAAU;QACV,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAC9C,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CACjD,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,eAAe,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAE1C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,KAAK,iBAAiB,IAAI,YAAY,EAAE;YACtD,eAAe,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Picker.js","sourceRoot":"","sources":["../../../../src/components/organisms/Picker/Picker.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Color } from '../../../theme';
|
|
2
|
+
type ProgressBarProps = {
|
|
3
|
+
style?: object;
|
|
4
|
+
styleTxt?: object;
|
|
5
|
+
value?: number;
|
|
6
|
+
total?: number;
|
|
7
|
+
showPercent?: boolean;
|
|
8
|
+
centeredPercent?: boolean;
|
|
9
|
+
colorRepartition?: {
|
|
10
|
+
[key: number]: Color;
|
|
11
|
+
};
|
|
12
|
+
height?: number;
|
|
13
|
+
stripe?: boolean;
|
|
14
|
+
stripeDuration?: number;
|
|
15
|
+
stripeWidth?: number;
|
|
16
|
+
};
|
|
17
|
+
declare const ProgressBar: ({ style, styleTxt, value, total, showPercent, centeredPercent, colorRepartition, height, stripe, stripeDuration, stripeWidth, }: ProgressBarProps) => JSX.Element;
|
|
18
|
+
export default ProgressBar;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Axelor Business Solutions
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2023 Axelor (<http://axelor.com>).
|
|
5
|
+
*
|
|
6
|
+
* This program is free software: you can redistribute it and/or modify
|
|
7
|
+
* it under the terms of the GNU Affero General Public License, version 3,
|
|
8
|
+
* as published by the Free Software Foundation.
|
|
9
|
+
*
|
|
10
|
+
* This program is distributed in the hope that it will be useful,
|
|
11
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
* GNU Affero General Public License for more details.
|
|
14
|
+
*
|
|
15
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
16
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
*/
|
|
18
|
+
import React, { useMemo, useEffect, useRef, useCallback, useState } from 'react';
|
|
19
|
+
import { StyleSheet, View, Animated } from 'react-native';
|
|
20
|
+
import { useThemeColor } from '../../../theme';
|
|
21
|
+
import { Text } from '../../atoms';
|
|
22
|
+
const ProgressBar = ({ style, styleTxt, value = 0, total = 100, showPercent = true, centeredPercent = false, colorRepartition = {}, height = 30, stripe = true, stripeDuration = 1000, stripeWidth = 40, }) => {
|
|
23
|
+
const Colors = useThemeColor();
|
|
24
|
+
const animatedStripe = useRef(new Animated.Value(0)).current;
|
|
25
|
+
const animatedWidth = useRef(new Animated.Value(0)).current;
|
|
26
|
+
const [progressBarWidth, setProgressBarWidth] = useState(0);
|
|
27
|
+
const [textWidth, setTextWidth] = useState(0);
|
|
28
|
+
const percent = useMemo(() => (total !== 0 ? (value / total) * 100 : 0), [total, value]);
|
|
29
|
+
const progressColors = useMemo(() => {
|
|
30
|
+
if (Object.keys(colorRepartition).length === 0) {
|
|
31
|
+
return {
|
|
32
|
+
0: Colors.errorColor,
|
|
33
|
+
25: Colors.cautionColor,
|
|
34
|
+
50: Colors.progressColor,
|
|
35
|
+
75: Colors.priorityColor,
|
|
36
|
+
100: Colors.successColor,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return colorRepartition;
|
|
40
|
+
}, [Colors, colorRepartition]);
|
|
41
|
+
let color = Colors.cautionColor;
|
|
42
|
+
Object.keys(progressColors).forEach(key => {
|
|
43
|
+
const threshold = parseInt(key, 10);
|
|
44
|
+
if (percent >= threshold && progressColors[threshold]) {
|
|
45
|
+
color = progressColors[threshold];
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const displayText = useMemo(() => {
|
|
49
|
+
if (showPercent) {
|
|
50
|
+
return `${percent.toFixed(2)}%`;
|
|
51
|
+
}
|
|
52
|
+
return `${value}/${total}`;
|
|
53
|
+
}, [percent, showPercent, total, value]);
|
|
54
|
+
const displayTextOutside = useMemo(() => {
|
|
55
|
+
if (centeredPercent) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
return progressBarWidth - textWidth * 1.3 < 0;
|
|
59
|
+
}, [centeredPercent, progressBarWidth, textWidth]);
|
|
60
|
+
const styles = useMemo(() => getStyles(Colors, height, color, percent, stripeWidth, progressBarWidth), [Colors, height, color, percent, stripeWidth, progressBarWidth]);
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
Animated.timing(animatedWidth, {
|
|
63
|
+
toValue: percent,
|
|
64
|
+
duration: 500,
|
|
65
|
+
useNativeDriver: false,
|
|
66
|
+
}).start();
|
|
67
|
+
}, [percent, animatedWidth]);
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
const stripeAnimation = Animated.loop(Animated.timing(animatedStripe, {
|
|
70
|
+
toValue: 1,
|
|
71
|
+
duration: stripeDuration,
|
|
72
|
+
useNativeDriver: true,
|
|
73
|
+
}));
|
|
74
|
+
stripeAnimation.start();
|
|
75
|
+
}, [animatedStripe, stripeDuration]);
|
|
76
|
+
const translateX = animatedStripe.interpolate({
|
|
77
|
+
inputRange: [0, 1],
|
|
78
|
+
outputRange: [-stripeWidth, progressBarWidth],
|
|
79
|
+
});
|
|
80
|
+
const renderPercent = useCallback(() => {
|
|
81
|
+
return (<Text style={[styles.text, styleTxt]} onTextLayout={event => {
|
|
82
|
+
setTextWidth(event.nativeEvent.lines?.[0]?.width);
|
|
83
|
+
}}>
|
|
84
|
+
{displayText}
|
|
85
|
+
</Text>);
|
|
86
|
+
}, [displayText, styles, styleTxt]);
|
|
87
|
+
return (<View style={[styles.container, style]}>
|
|
88
|
+
{displayTextOutside ? (<View style={centeredPercent ? styles.centeredPercent : styles.percent}>
|
|
89
|
+
{renderPercent()}
|
|
90
|
+
</View>) : null}
|
|
91
|
+
<Animated.View onLayout={event => {
|
|
92
|
+
const { width } = event.nativeEvent.layout;
|
|
93
|
+
setProgressBarWidth(width);
|
|
94
|
+
}} style={[
|
|
95
|
+
styles.progressBar,
|
|
96
|
+
{
|
|
97
|
+
width: animatedWidth.interpolate({
|
|
98
|
+
inputRange: [0, 100],
|
|
99
|
+
outputRange: ['0%', '100%'],
|
|
100
|
+
}),
|
|
101
|
+
},
|
|
102
|
+
]}>
|
|
103
|
+
<Animated.View style={[
|
|
104
|
+
stripe && percent < 100 ? styles.stripe : styles.none,
|
|
105
|
+
{
|
|
106
|
+
transform: [{ translateX }],
|
|
107
|
+
},
|
|
108
|
+
]}/>
|
|
109
|
+
{!displayTextOutside ? renderPercent() : null}
|
|
110
|
+
</Animated.View>
|
|
111
|
+
</View>);
|
|
112
|
+
};
|
|
113
|
+
const getStyles = (Colors, height, color, percent, stripeWidth, progressBarWidth) => StyleSheet.create({
|
|
114
|
+
container: {
|
|
115
|
+
width: '100%',
|
|
116
|
+
height: height + 2,
|
|
117
|
+
borderRadius: 8,
|
|
118
|
+
elevation: 3,
|
|
119
|
+
shadowOpacity: 0.5,
|
|
120
|
+
shadowColor: Colors.secondaryColor.background,
|
|
121
|
+
shadowOffset: { width: 0, height: 0 },
|
|
122
|
+
backgroundColor: Colors.backgroundColor,
|
|
123
|
+
borderWidth: 1,
|
|
124
|
+
borderColor: Colors.secondaryColor.background,
|
|
125
|
+
zIndex: 1,
|
|
126
|
+
},
|
|
127
|
+
progressBar: {
|
|
128
|
+
borderRadius: 7,
|
|
129
|
+
justifyContent: 'center',
|
|
130
|
+
alignItems: 'center',
|
|
131
|
+
backgroundColor: color.background,
|
|
132
|
+
width: `${percent}%`,
|
|
133
|
+
maxWidth: '100%',
|
|
134
|
+
height: height,
|
|
135
|
+
overflow: 'hidden',
|
|
136
|
+
},
|
|
137
|
+
stripe: {
|
|
138
|
+
position: 'absolute',
|
|
139
|
+
top: 0,
|
|
140
|
+
bottom: 0,
|
|
141
|
+
left: 0,
|
|
142
|
+
width: stripeWidth,
|
|
143
|
+
backgroundColor: 'rgba(255, 255, 255, 0.5)',
|
|
144
|
+
},
|
|
145
|
+
text: {
|
|
146
|
+
textAlign: 'center',
|
|
147
|
+
},
|
|
148
|
+
percent: {
|
|
149
|
+
position: 'absolute',
|
|
150
|
+
left: progressBarWidth + 5,
|
|
151
|
+
top: height / 2 - 10,
|
|
152
|
+
},
|
|
153
|
+
centeredPercent: {
|
|
154
|
+
position: 'absolute',
|
|
155
|
+
left: '45%',
|
|
156
|
+
top: height / 2 - 10,
|
|
157
|
+
zIndex: 2,
|
|
158
|
+
},
|
|
159
|
+
none: {
|
|
160
|
+
display: 'none',
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
export default ProgressBar;
|
|
164
|
+
//# sourceMappingURL=ProgressBar.js.map
|