@codeleap/mobile 4.3.9 → 5.0.0
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/dist/components/Autocomplete/index.js.map +1 -1
- package/dist/components/Autocomplete/types.d.ts +9 -10
- package/dist/components/Backdrop/index.js.map +1 -1
- package/dist/components/Checkbox/index.js +13 -9
- package/dist/components/Checkbox/index.js.map +1 -1
- package/dist/components/Checkbox/types.d.ts +5 -2
- package/dist/components/DatePickerModal/index.js +18 -11
- package/dist/components/DatePickerModal/index.js.map +1 -1
- package/dist/components/DatePickerModal/types.d.ts +12 -9
- package/dist/components/FileInput/types.d.ts +3 -4
- package/dist/components/Grid/index.js.map +1 -1
- package/dist/components/Image/types.d.ts +2 -5
- package/dist/components/InputBase/index.d.ts +2 -6
- package/dist/components/InputBase/index.js +9 -5
- package/dist/components/InputBase/index.js.map +1 -1
- package/dist/components/InputBase/types.d.ts +2 -0
- package/dist/components/InputBase/useInputBase.d.ts +24 -0
- package/dist/components/InputBase/useInputBase.js +46 -0
- package/dist/components/InputBase/useInputBase.js.map +1 -0
- package/dist/components/InputBase/useInputBasePartialStyles.d.ts +2 -0
- package/dist/components/InputBase/useInputBasePartialStyles.js +30 -0
- package/dist/components/InputBase/useInputBasePartialStyles.js.map +1 -0
- package/dist/components/InputBase/utils.js +16 -16
- package/dist/components/InputBase/utils.js.map +1 -1
- package/dist/components/List/index.js +1 -1
- package/dist/components/List/index.js.map +1 -1
- package/dist/components/Modal/index.js +4 -14
- package/dist/components/Modal/index.js.map +1 -1
- package/dist/components/NumberIncrement/index.js +21 -132
- package/dist/components/NumberIncrement/index.js.map +1 -1
- package/dist/components/NumberIncrement/types.d.ts +7 -5
- package/dist/components/NumberIncrement/useNumberIncrement.d.ts +55 -0
- package/dist/components/NumberIncrement/useNumberIncrement.js +107 -0
- package/dist/components/NumberIncrement/useNumberIncrement.js.map +1 -0
- package/dist/components/RadioInput/index.d.ts +1 -1
- package/dist/components/RadioInput/index.js +20 -41
- package/dist/components/RadioInput/index.js.map +1 -1
- package/dist/components/RadioInput/types.d.ts +11 -9
- package/dist/components/Scroll/index.js +25 -28
- package/dist/components/Scroll/index.js.map +1 -1
- package/dist/components/Scroll/types.d.ts +4 -4
- package/dist/components/Sections/index.js +1 -1
- package/dist/components/Sections/index.js.map +1 -1
- package/dist/components/SegmentedControl/index.js +6 -4
- package/dist/components/SegmentedControl/index.js.map +1 -1
- package/dist/components/SegmentedControl/types.d.ts +4 -3
- package/dist/components/Select/index.js +10 -6
- package/dist/components/Select/index.js.map +1 -1
- package/dist/components/Select/types.d.ts +19 -18
- package/dist/components/Slider/index.js +18 -57
- package/dist/components/Slider/index.js.map +1 -1
- package/dist/components/Slider/types.d.ts +7 -5
- package/dist/components/SortablePhotos/index.js +17 -18
- package/dist/components/SortablePhotos/index.js.map +1 -1
- package/dist/components/SortablePhotos/types.d.ts +5 -15
- package/dist/components/SortablePhotos/useSortablePhotos.d.ts +11 -8
- package/dist/components/SortablePhotos/useSortablePhotos.js +18 -11
- package/dist/components/SortablePhotos/useSortablePhotos.js.map +1 -1
- package/dist/components/Switch/index.js +13 -9
- package/dist/components/Switch/index.js.map +1 -1
- package/dist/components/Switch/types.d.ts +5 -2
- package/dist/components/TextInput/index.js +26 -70
- package/dist/components/TextInput/index.js.map +1 -1
- package/dist/components/TextInput/types.d.ts +8 -6
- package/dist/components/TextInput/useTextInput.d.ts +54 -0
- package/dist/components/TextInput/useTextInput.js +59 -0
- package/dist/components/TextInput/useTextInput.js.map +1 -0
- package/dist/components/Touchable/index.js +4 -3
- package/dist/components/Touchable/index.js.map +1 -1
- package/dist/components/View/index.d.ts +7 -12
- package/dist/components/View/index.js +9 -7
- package/dist/components/View/index.js.map +1 -1
- package/dist/components/View/types.d.ts +6 -6
- package/dist/components/components.d.ts +0 -2
- package/dist/components/components.js +0 -2
- package/dist/components/components.js.map +1 -1
- package/dist/hooks/index.d.ts +3 -2
- package/dist/hooks/index.js +3 -10
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useKeyboardController.d.ts +6 -0
- package/dist/hooks/useKeyboardController.js +19 -0
- package/dist/hooks/useKeyboardController.js.map +1 -0
- package/dist/hooks/useStatusBar.d.ts +6 -0
- package/dist/hooks/useStatusBar.js +15 -0
- package/dist/hooks/useStatusBar.js.map +1 -0
- package/dist/hooks/useStylesFor.d.ts +2 -0
- package/dist/hooks/useStylesFor.js +11 -0
- package/dist/hooks/useStylesFor.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/modules/backgroundTimer.d.ts +3 -0
- package/dist/modules/backgroundTimer.js +31 -0
- package/dist/modules/backgroundTimer.js.map +1 -0
- package/dist/modules/index.d.ts +3 -0
- package/dist/modules/index.js +3 -0
- package/dist/modules/index.js.map +1 -0
- package/dist/modules/reactNavigation.d.ts +8 -21
- package/dist/modules/reactNavigation.js +38 -12
- package/dist/modules/reactNavigation.js.map +1 -1
- package/dist/modules/scroll.d.ts +18 -0
- package/dist/modules/scroll.js +57 -0
- package/dist/modules/scroll.js.map +1 -0
- package/dist/modules/types/textInputMask.d.ts +6 -2
- package/dist/utils/KeyboardAware/context.js +2 -6
- package/dist/utils/KeyboardAware/context.js.map +1 -1
- package/dist/utils/KeyboardAware/index.d.ts +0 -1
- package/dist/utils/KeyboardAware/index.js +0 -1
- package/dist/utils/KeyboardAware/index.js.map +1 -1
- package/dist/utils/ModalManager/context.js +2 -2
- package/dist/utils/ModalManager/context.js.map +1 -1
- package/dist/utils/hooks.js +4 -4
- package/dist/utils/hooks.js.map +1 -1
- package/dist/utils/locale.d.ts +1 -1
- package/dist/utils/locale.js +10 -5
- package/dist/utils/locale.js.map +1 -1
- package/dist/utils/theme.d.ts +1 -0
- package/dist/utils/theme.js +4 -2
- package/dist/utils/theme.js.map +1 -1
- package/package.json +31 -35
- package/package.json.bak +17 -20
- package/src/components/Autocomplete/index.tsx +2 -3
- package/src/components/Autocomplete/types.ts +9 -10
- package/src/components/Backdrop/index.tsx +0 -1
- package/src/components/Checkbox/index.tsx +23 -9
- package/src/components/Checkbox/types.ts +5 -2
- package/src/components/DatePickerModal/index.tsx +27 -18
- package/src/components/DatePickerModal/types.ts +12 -9
- package/src/components/FileInput/types.ts +3 -4
- package/src/components/Grid/index.tsx +3 -3
- package/src/components/Image/types.ts +3 -6
- package/src/components/InputBase/index.tsx +13 -7
- package/src/components/InputBase/types.ts +2 -0
- package/src/components/InputBase/useInputBase.ts +60 -0
- package/src/components/InputBase/useInputBasePartialStyles.ts +38 -0
- package/src/components/InputBase/utils.ts +17 -17
- package/src/components/List/index.tsx +0 -1
- package/src/components/Modal/index.tsx +4 -15
- package/src/components/NumberIncrement/index.tsx +52 -160
- package/src/components/NumberIncrement/types.ts +7 -5
- package/src/components/NumberIncrement/useNumberIncrement.ts +152 -0
- package/src/components/RadioInput/index.tsx +37 -53
- package/src/components/RadioInput/types.ts +11 -9
- package/src/components/Scroll/index.tsx +44 -45
- package/src/components/Scroll/types.ts +4 -4
- package/src/components/Sections/index.tsx +0 -1
- package/src/components/SegmentedControl/index.tsx +8 -6
- package/src/components/SegmentedControl/types.ts +4 -3
- package/src/components/Select/index.tsx +32 -24
- package/src/components/Select/types.ts +19 -18
- package/src/components/Slider/index.tsx +34 -66
- package/src/components/Slider/types.ts +7 -5
- package/src/components/SortablePhotos/index.tsx +31 -47
- package/src/components/SortablePhotos/types.ts +6 -15
- package/src/components/SortablePhotos/useSortablePhotos.ts +28 -22
- package/src/components/Switch/index.tsx +23 -9
- package/src/components/Switch/types.ts +5 -2
- package/src/components/TextInput/index.tsx +55 -89
- package/src/components/TextInput/types.ts +9 -7
- package/src/components/TextInput/useTextInput.ts +88 -0
- package/src/components/Touchable/index.tsx +5 -1
- package/src/components/View/index.tsx +19 -12
- package/src/components/View/types.ts +7 -6
- package/src/components/components.ts +0 -2
- package/src/hooks/index.ts +3 -13
- package/src/hooks/useKeyboardController.ts +28 -0
- package/src/hooks/useStatusBar.ts +21 -0
- package/src/hooks/useStylesFor.ts +13 -0
- package/src/index.ts +3 -1
- package/src/modules/backgroundTimer.ts +39 -0
- package/src/modules/index.ts +3 -0
- package/src/modules/reactNavigation.ts +64 -14
- package/src/modules/scroll.tsx +89 -0
- package/src/modules/types/textInputMask.ts +8 -4
- package/src/types/index.ts +1 -0
- package/src/utils/KeyboardAware/context.tsx +2 -6
- package/src/utils/KeyboardAware/index.ts +1 -1
- package/src/utils/ModalManager/context.tsx +2 -2
- package/src/utils/hooks.ts +4 -4
- package/src/utils/locale.ts +13 -5
- package/src/utils/theme.ts +6 -2
- package/dist/components/Navigation/Navigation.d.ts +0 -55
- package/dist/components/Navigation/Navigation.js +0 -41
- package/dist/components/Navigation/Navigation.js.map +0 -1
- package/dist/components/Navigation/constants.d.ts +0 -9
- package/dist/components/Navigation/constants.js +0 -9
- package/dist/components/Navigation/constants.js.map +0 -1
- package/dist/components/Navigation/index.d.ts +0 -3
- package/dist/components/Navigation/index.js +0 -4
- package/dist/components/Navigation/index.js.map +0 -1
- package/dist/components/Navigation/types.d.ts +0 -26
- package/dist/components/Navigation/types.js +0 -2
- package/dist/components/Navigation/types.js.map +0 -1
- package/dist/components/Navigation/utils.d.ts +0 -3
- package/dist/components/Navigation/utils.js +0 -34
- package/dist/components/Navigation/utils.js.map +0 -1
- package/dist/components/NumberIncrement/utils.d.ts +0 -5
- package/dist/components/NumberIncrement/utils.js +0 -23
- package/dist/components/NumberIncrement/utils.js.map +0 -1
- package/dist/utils/KeyboardAware/types.d.ts +0 -1
- package/dist/utils/KeyboardAware/types.js +0 -6
- package/dist/utils/KeyboardAware/types.js.map +0 -1
- package/src/components/Navigation/Navigation.tsx +0 -55
- package/src/components/Navigation/constants.ts +0 -24
- package/src/components/Navigation/index.tsx +0 -3
- package/src/components/Navigation/types.ts +0 -28
- package/src/components/Navigation/utils.tsx +0 -57
- package/src/components/NumberIncrement/utils.ts +0 -27
- package/src/utils/KeyboardAware/types.ts +0 -159
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Slider as RNSlider } from '@miblanchard/react-native-slider';
|
|
3
|
-
import { StyleSheet } from 'react-native';
|
|
4
3
|
import { TypeGuards } from '@codeleap/types';
|
|
5
4
|
import { onUpdate } from '@codeleap/hooks';
|
|
6
5
|
import { InputBase, selectInputBaseProps } from '../InputBase';
|
|
@@ -9,6 +8,9 @@ import { View } from '../View';
|
|
|
9
8
|
import { Touchable } from '../Touchable';
|
|
10
9
|
import { MobileStyleRegistry } from '../../Registry';
|
|
11
10
|
import { useStylesFor } from '../../hooks';
|
|
11
|
+
import { useInputBase } from '../InputBase/useInputBase';
|
|
12
|
+
import { fields } from '@codeleap/form';
|
|
13
|
+
import { useInputBasePartialStyles } from '../InputBase/useInputBasePartialStyles';
|
|
12
14
|
export * from './styles';
|
|
13
15
|
export * from './types';
|
|
14
16
|
const DefaultSliderTrackMark = (props) => {
|
|
@@ -27,46 +29,18 @@ export const Slider = (props) => {
|
|
|
27
29
|
...Slider.defaultProps,
|
|
28
30
|
...props,
|
|
29
31
|
});
|
|
30
|
-
const { debounce = null,
|
|
31
|
-
const
|
|
32
|
+
const { debounce = null, field, label, description, debugName, style, disabled, trackMarks, trackMarksClickable, labelClickable, updateImmediately = false, trackMarkComponent: SliderTrackMark, value, onValueChange, ...sliderProps } = others;
|
|
33
|
+
const { fieldHandle, wrapperRef, } = useInputBase(field, fields.number, [value, onValueChange]);
|
|
34
|
+
const [_value, _setValue] = updateImmediately ? [fieldHandle?.value, fieldHandle.setValue] : React.useState(0);
|
|
32
35
|
onUpdate(() => {
|
|
33
36
|
if (updateImmediately)
|
|
34
37
|
return;
|
|
35
|
-
if (value !== _value) {
|
|
36
|
-
_setValue(value);
|
|
38
|
+
if (fieldHandle?.value !== _value) {
|
|
39
|
+
_setValue(fieldHandle?.value);
|
|
37
40
|
}
|
|
38
|
-
}, [value]);
|
|
41
|
+
}, [fieldHandle?.value]);
|
|
39
42
|
const styles = useStylesFor(Slider.styleRegistryName, style);
|
|
40
|
-
const
|
|
41
|
-
return StyleSheet.flatten([
|
|
42
|
-
styles?.thumb,
|
|
43
|
-
disabled && styles['thumb:disabled'],
|
|
44
|
-
]);
|
|
45
|
-
}, []);
|
|
46
|
-
const trackStyle = React.useMemo(() => {
|
|
47
|
-
return StyleSheet.flatten([
|
|
48
|
-
styles?.track,
|
|
49
|
-
disabled && styles['track:disabled'],
|
|
50
|
-
]);
|
|
51
|
-
}, [disabled]);
|
|
52
|
-
const selectedTrackStyle = React.useMemo(() => {
|
|
53
|
-
return StyleSheet.flatten([
|
|
54
|
-
styles?.selectedTrack,
|
|
55
|
-
disabled && styles['selectedTrack:disabled'],
|
|
56
|
-
]);
|
|
57
|
-
}, [disabled]);
|
|
58
|
-
const unselectedTrackStyle = React.useMemo(() => {
|
|
59
|
-
return StyleSheet.flatten([
|
|
60
|
-
styles?.unselectedTrack,
|
|
61
|
-
disabled && styles['unselectedTrack:disabled'],
|
|
62
|
-
]);
|
|
63
|
-
}, [disabled]);
|
|
64
|
-
const containerStyle = React.useMemo(() => {
|
|
65
|
-
return StyleSheet.flatten([
|
|
66
|
-
styles?.sliderContainer,
|
|
67
|
-
disabled && styles['sliderContainer:disabled'],
|
|
68
|
-
]);
|
|
69
|
-
}, [disabled]);
|
|
43
|
+
const partialStyles = useInputBasePartialStyles(styles, ['thumb', 'track', 'selectedTrack', 'unselectedTrack', 'sliderContainer', 'trackMark'], { disabled });
|
|
70
44
|
const trackMarksHaveContent = !(TypeGuards.isArray(trackMarks) || TypeGuards.isNil(trackMarks));
|
|
71
45
|
const trackMarksProp = React.useMemo(() => {
|
|
72
46
|
if (!trackMarksHaveContent) {
|
|
@@ -74,30 +48,20 @@ export const Slider = (props) => {
|
|
|
74
48
|
}
|
|
75
49
|
return Object.keys(trackMarks).map((key) => Number(key));
|
|
76
50
|
}, [trackMarksHaveContent]);
|
|
77
|
-
|
|
78
|
-
return StyleSheet.flatten([
|
|
79
|
-
styles?.trackMark,
|
|
80
|
-
disabled && styles['trackMark:disabled'],
|
|
81
|
-
]);
|
|
82
|
-
}, [disabled]);
|
|
83
|
-
return (<InputBase {..._inputBaseProps} disabled={disabled} style={styles} labelAsRow>
|
|
51
|
+
return (<InputBase {..._inputBaseProps} ref={wrapperRef} disabled={disabled} style={styles} labelAsRow>
|
|
84
52
|
{label || description ? (<View style={styles.labelRow}>
|
|
85
|
-
{label ? (<Touchable onPress={() => labelClickable ?
|
|
53
|
+
{label ? (<Touchable onPress={() => labelClickable ? fieldHandle.setValue(sliderProps?.minimumValue || minimumValue) : null} style={styles.labelBtn} debugName='slider title'>
|
|
86
54
|
<Text style={styles?.label} text={label}/>
|
|
87
55
|
</Touchable>) : null}
|
|
88
|
-
{description ? (<Touchable onPress={() => labelClickable ?
|
|
56
|
+
{description ? (<Touchable onPress={() => labelClickable ? fieldHandle.setValue(sliderProps?.maximumValue || maximumValue) : null} style={styles?.descriptionBtn} debugName='slider description'>
|
|
89
57
|
<Text style={styles?.description} text={description}/>
|
|
90
58
|
</Touchable>) : null}
|
|
91
59
|
</View>) : null}
|
|
92
60
|
|
|
93
|
-
<RNSlider value={_value} onValueChange={_setValue}
|
|
94
|
-
// @ts-ignore
|
|
95
|
-
thumbStyle={thumbStyle}
|
|
96
|
-
// @ts-ignore
|
|
97
|
-
trackStyle={trackStyle} minimumTrackStyle={selectedTrackStyle} maximumTrackStyle={unselectedTrackStyle} containerStyle={containerStyle} minimumValue={minimumValue} maximumValue={maximumValue} onSlidingComplete={() => {
|
|
61
|
+
<RNSlider value={_value} onValueChange={_setValue} thumbStyle={partialStyles?.thumb} trackStyle={partialStyles?.track} minimumTrackStyle={partialStyles?.selectedTrack} maximumTrackStyle={partialStyles?.unselectedTrack} containerStyle={partialStyles?.sliderContainer} minimumValue={minimumValue} maximumValue={maximumValue} onSlidingComplete={() => {
|
|
98
62
|
if (updateImmediately)
|
|
99
63
|
return;
|
|
100
|
-
|
|
64
|
+
fieldHandle.setValue(_value);
|
|
101
65
|
}} disabled={disabled} {...sliderProps} trackMarks={trackMarksProp}/>
|
|
102
66
|
{trackMarksProp ? (<View style={styles?.trackMarkWrapper}>
|
|
103
67
|
{trackMarksProp.map((_, idx) => {
|
|
@@ -108,16 +72,13 @@ export const Slider = (props) => {
|
|
|
108
72
|
else if (idx === trackMarksProp.length - 1) {
|
|
109
73
|
idxStyle = styles?.lastTrackMark;
|
|
110
74
|
}
|
|
111
|
-
const style = [
|
|
112
|
-
trackMarkStyle,
|
|
113
|
-
idxStyle,
|
|
114
|
-
];
|
|
75
|
+
const style = [partialStyles?.trackMark, idxStyle];
|
|
115
76
|
if (!trackMarksHaveContent) {
|
|
116
|
-
return <SliderTrackMark index={idx} style={style} key={idx} onPress={() => trackMarksClickable ?
|
|
77
|
+
return <SliderTrackMark index={idx} style={style} key={idx} onPress={() => trackMarksClickable ? fieldHandle.setValue(trackMarksProp[idx]) : null}/>;
|
|
117
78
|
}
|
|
118
79
|
const relativeValue = trackMarksProp[idx];
|
|
119
80
|
const content = trackMarks[relativeValue];
|
|
120
|
-
return <SliderTrackMark index={idx} content={content} style={style} key={idx} onPress={() => trackMarksClickable ?
|
|
81
|
+
return <SliderTrackMark index={idx} content={content} style={style} key={idx} onPress={() => trackMarksClickable ? fieldHandle.setValue(trackMarksProp[idx]) : null}/>;
|
|
121
82
|
})}
|
|
122
83
|
</View>) : null}
|
|
123
84
|
</InputBase>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Slider/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Slider/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,22 +2,24 @@
|
|
|
2
2
|
import { SliderComposition } from './styles';
|
|
3
3
|
import { SliderProps as RNSliderProps } from '@miblanchard/react-native-slider/lib/types';
|
|
4
4
|
import { InputBaseProps } from '../InputBase';
|
|
5
|
-
import { StyledProp } from '@codeleap/styles';
|
|
5
|
+
import { ICSS, StyledProp } from '@codeleap/styles';
|
|
6
|
+
import { NumberField } from '@codeleap/form';
|
|
6
7
|
export type SliderProps = Partial<Omit<RNSliderProps, 'value' | 'onValueChange' | 'style'>> & Pick<InputBaseProps, 'disabled' | 'debugName' | 'description' | 'label'> & {
|
|
7
8
|
debounce?: number | null;
|
|
8
|
-
trackMarklabels
|
|
9
|
-
value: number | number[];
|
|
10
|
-
onValueChange: (val: number | number[]) => void;
|
|
9
|
+
trackMarklabels?: string[];
|
|
11
10
|
trackMarks?: RNSliderProps['trackMarks'] | Record<number, string>;
|
|
12
11
|
trackMarksClickable?: boolean;
|
|
13
12
|
labelClickable?: boolean;
|
|
14
13
|
trackMarkComponent?: React.ComponentType<TrackMarkProps>;
|
|
15
14
|
style?: StyledProp<SliderComposition>;
|
|
16
15
|
updateImmediately?: boolean;
|
|
16
|
+
field?: NumberField<any>;
|
|
17
|
+
value?: number | number[];
|
|
18
|
+
onValueChange?: (value: number | number[]) => void;
|
|
17
19
|
};
|
|
18
20
|
export type TrackMarkProps = {
|
|
19
21
|
index: number;
|
|
20
22
|
content?: string | React.ReactNode;
|
|
21
|
-
style?:
|
|
23
|
+
style?: ICSS | ICSS[];
|
|
22
24
|
onPress?: () => void;
|
|
23
25
|
};
|
|
@@ -2,17 +2,19 @@ import { useNestedStylesByKey } from '@codeleap/styles';
|
|
|
2
2
|
import { FileInput } from '../FileInput';
|
|
3
3
|
import { Icon } from '../Icon';
|
|
4
4
|
import { Image } from '../Image';
|
|
5
|
-
import {
|
|
6
|
-
import { DragSortableView } from 'react-native-drag-sort';
|
|
5
|
+
import { View } from 'react-native';
|
|
7
6
|
import { useSortablePhotos } from './useSortablePhotos';
|
|
8
7
|
import { useStylesFor } from '../../hooks';
|
|
9
8
|
import { MobileStyleRegistry } from '../../Registry';
|
|
10
9
|
import { ActivityIndicator } from '../ActivityIndicator';
|
|
10
|
+
import Sortable from 'react-native-sortables';
|
|
11
|
+
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
|
12
|
+
import { useCallback } from 'react';
|
|
11
13
|
export * from './styles';
|
|
12
14
|
export * from './types';
|
|
13
15
|
const DefaultItem = (props) => {
|
|
14
|
-
const { photo,
|
|
15
|
-
return (<View style={
|
|
16
|
+
const { photo, styles, emptyIcon } = props;
|
|
17
|
+
return (<View style={styles.photoWrapper}>
|
|
16
18
|
{!!photo?.filename
|
|
17
19
|
? <Image resizeMode='cover' source={{ uri: photo?.file }} style={styles.photoImage}/>
|
|
18
20
|
: <Icon name={emptyIcon} style={styles.photoEmptyIcon}/>}
|
|
@@ -27,38 +29,36 @@ const defaultGetFilename = (file) => {
|
|
|
27
29
|
}
|
|
28
30
|
return new Date().toISOString();
|
|
29
31
|
};
|
|
30
|
-
const screenWidth = Dimensions.get('screen').width;
|
|
31
32
|
export const SortablePhotos = (props) => {
|
|
32
33
|
const allProps = {
|
|
33
34
|
...SortablePhotos.defaultProps,
|
|
34
35
|
...props,
|
|
35
36
|
};
|
|
36
|
-
const { numColumns, renderPhoto: RenderItem, gap, multiple, pickerConfig, emptyIcon,
|
|
37
|
+
const { numColumns, renderPhoto: RenderItem, gap, multiple, pickerConfig, emptyIcon, style, loading, ...rest } = allProps;
|
|
37
38
|
const styles = useStylesFor(SortablePhotos.styleRegistryName, style);
|
|
38
39
|
const loaderStyles = useNestedStylesByKey('loader', styles);
|
|
39
|
-
const { input, handlePressPhoto, numberPhotosMissing,
|
|
40
|
-
const defaultParentWidth = screenWidth - (gap * 2);
|
|
41
|
-
const defaultItemWidth = (defaultParentWidth / numColumns) - gap;
|
|
42
|
-
const itemWidth = _itemWidth ?? defaultItemWidth;
|
|
43
|
-
const itemHeight = _itemHeight ?? itemWidth;
|
|
44
|
-
const parentWidth = _parentWidth ?? defaultParentWidth;
|
|
45
|
-
const childrenMargin = gap / 2;
|
|
40
|
+
const { input, handlePressPhoto, numberPhotosMissing, enabledDragDrop, onChangePhotosOrder, data, } = useSortablePhotos(allProps);
|
|
46
41
|
const fileInputPickerOptions = {
|
|
47
42
|
...SortablePhotos.defaultProps.pickerConfig,
|
|
48
43
|
...pickerConfig,
|
|
49
44
|
multiple,
|
|
50
45
|
maxFiles: numberPhotosMissing,
|
|
51
46
|
};
|
|
47
|
+
const renderItem = useCallback(({ item, index }) => (<Sortable.Pressable onPress={() => handlePressPhoto(item, index)}>
|
|
48
|
+
<RenderItem photo={item} order={index} styles={styles} emptyIcon={emptyIcon}/>
|
|
49
|
+
</Sortable.Pressable>), [handlePressPhoto]);
|
|
52
50
|
if (loading) {
|
|
53
51
|
return (<View style={[styles.wrapper, styles['wrapper:loading']]}>
|
|
54
52
|
<ActivityIndicator style={loaderStyles}/>
|
|
55
53
|
</View>);
|
|
56
54
|
}
|
|
57
|
-
return
|
|
55
|
+
return <GestureHandlerRootView>
|
|
56
|
+
<View style={styles.wrapper}>
|
|
58
57
|
<FileInput mode='hidden' ref={input.ref} pickerOptions={fileInputPickerOptions}/>
|
|
59
58
|
|
|
60
|
-
<
|
|
61
|
-
</View>
|
|
59
|
+
<Sortable.Grid columns={numColumns} columnGap={gap} rowGap={gap} sortEnabled={enabledDragDrop} showDropIndicator {...rest} data={data} renderItem={renderItem} onDragEnd={({ data }) => onChangePhotosOrder(data)}/>
|
|
60
|
+
</View>
|
|
61
|
+
</GestureHandlerRootView>;
|
|
62
62
|
};
|
|
63
63
|
SortablePhotos.styleRegistryName = 'SortablePhotos';
|
|
64
64
|
SortablePhotos.elements = ['wrapper', 'photo', 'loader'];
|
|
@@ -71,8 +71,7 @@ SortablePhotos.defaultProps = {
|
|
|
71
71
|
numColumns: 3,
|
|
72
72
|
renderPhoto: DefaultItem,
|
|
73
73
|
multiple: true,
|
|
74
|
-
|
|
75
|
-
gap: 16,
|
|
74
|
+
gap: 8,
|
|
76
75
|
emptyIcon: 'plus',
|
|
77
76
|
modalTitle: 'Photos',
|
|
78
77
|
modalBody: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/SortablePhotos/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyC,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/SortablePhotos/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyC,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,EAAa,IAAI,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,QAAyC,MAAM,wBAAwB,CAAA;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAEnC,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AAEvB,MAAM,WAAW,GAAG,CAA0B,KAA2B,EAAE,EAAE;IAC3E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAE1C,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAC/B;MAAA,CACE,CAAC,CAAC,KAAK,EAAE,QAAQ;YACf,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAG;YACtF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,EAAG,CAE/D;IAAA,EAAE,IAAI,CAAC,CACR,CAAA;AACH,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,EAAE;IAC1C,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IAEtB,MAAM,qBAAqB,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;IAEtD,IAAI,qBAAqB,EAAE;QACzB,OAAO,qBAAqB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KAChE;IAED,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;AACjC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAA0B,KAA6B,EAAE,EAAE;IACvF,MAAM,QAAQ,GAAG;QACf,GAAG,cAAc,CAAC,YAAY;QAC9B,GAAG,KAAK;KACT,CAAA;IAED,MAAM,EACJ,UAAU,EACV,WAAW,EAAE,UAAU,EACvB,GAAG,EACH,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,KAAK,EACL,OAAO,EACP,GAAG,IAAI,EACR,GAAG,QAAQ,CAAA;IAEZ,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAA;IAEpE,MAAM,YAAY,GAAG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAE3D,MAAM,EACJ,KAAK,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,IAAI,GACL,GAAG,iBAAiB,CAAI,QAAQ,CAAC,CAAA;IAElC,MAAM,sBAAsB,GAAG;QAC7B,GAAG,cAAc,CAAC,YAAY,CAAC,YAAY;QAC3C,GAAG,YAAY;QACf,QAAQ;QACR,QAAQ,EAAE,mBAAmB;KAC9B,CAAA;IAED,MAAM,UAAU,GAAsC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CACrF,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAC/D;MAAA,CAAC,UAAU,CACT,KAAK,CAAC,CAAC,IAAI,CAAC,CACZ,KAAK,CAAC,CAAC,KAAK,CAAC,CACb,MAAM,CAAC,CAAC,MAAM,CAAC,CACf,SAAS,CAAC,CAAC,SAAS,CAAC,EAEzB;IAAA,EAAE,QAAQ,CAAC,SAAS,CAAC,CACtB,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAEtB,IAAI,OAAO,EAAE;QACX,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CACvD;QAAA,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,EACzC;MAAA,EAAE,IAAI,CAAC,CACR,CAAA;KACF;IAED,OAAO,CAAC,sBAAsB,CAC5B;IAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAC1B;MAAA,CAAC,SAAS,CACR,IAAI,CAAC,QAAQ,CACb,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CACf,aAAa,CAAC,CAAC,sBAAsB,CAAC,EAGxC;;MAAA,CAAC,QAAQ,CAAC,IAAI,CACZ,OAAO,CAAC,CAAC,UAAU,CAAC,CACpB,SAAS,CAAC,CAAC,GAAG,CAAC,CACf,MAAM,CAAC,CAAC,GAAG,CAAC,CACZ,WAAW,CAAC,CAAC,eAAe,CAAC,CAC7B,iBAAiB,CACjB,IAAI,IAAI,CAAC,CACT,IAAI,CAAC,CAAC,IAAI,CAAC,CACX,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAA8B,CAAC,CAAC,EAEjF;IAAA,EAAE,IAAI,CACR;EAAA,EAAE,sBAAsB,CAAC,CAAA;AAC3B,CAAC,CAAA;AAED,cAAc,CAAC,iBAAiB,GAAG,gBAAgB,CAAA;AACnD,cAAc,CAAC,QAAQ,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;AACxD,cAAc,CAAC,WAAW,GAAG,SAAS,CAAA;AAEtC,cAAc,CAAC,gBAAgB,GAAG,CAAsB,MAAS,EAAE,EAAE;IACnE,OAAO,cAAuH,CAAA;AAChI,CAAC,CAAA;AAED,cAAc,CAAC,YAAY,GAAG;IAC5B,SAAS,EAAE,CAAC;IACZ,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,WAAW;IACxB,QAAQ,EAAE,IAAI;IACd,GAAG,EAAE,CAAC;IACN,SAAS,EAAE,MAAM;IACjB,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,IAAI;IACf,gBAAgB,EAAE,qBAAqB;IACvC,eAAe,EAAE,cAAc;IAC/B,eAAe,EAAE,cAAc;IAC/B,WAAW,EAAE,kBAAkB;IAC/B,YAAY,EAAE;QACZ,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;QACnB,sBAAsB,EAAE,IAAI;QAC5B,qBAAqB,EAAE,IAAI;QAC3B,oBAAoB,EAAE,GAAG;KAC1B;CACmC,CAAA;AAEtC,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAA"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { AppIcon, ICSS, StyledProp } from '@codeleap/styles';
|
|
2
2
|
import { ReactElement } from 'react';
|
|
3
3
|
import { SortablePhotosComposition } from './styles';
|
|
4
|
+
import { type SortableGridProps } from 'react-native-sortables';
|
|
4
5
|
export type SortablePhoto = {
|
|
5
6
|
filename: string | null;
|
|
6
7
|
file: string | null;
|
|
7
8
|
};
|
|
9
|
+
export type WithId<T extends SortablePhoto> = T & {
|
|
10
|
+
key: string;
|
|
11
|
+
};
|
|
8
12
|
export type SortableItemProps<T extends SortablePhoto> = {
|
|
9
13
|
photo: T;
|
|
10
14
|
order: number;
|
|
11
|
-
height: number;
|
|
12
|
-
width: number;
|
|
13
15
|
styles: Record<SortablePhotosComposition, ICSS>;
|
|
14
16
|
emptyIcon: AppIcon;
|
|
15
17
|
};
|
|
@@ -20,29 +22,17 @@ export type SortablePhotosPickerConfig = {
|
|
|
20
22
|
compressImageQuality?: number;
|
|
21
23
|
showCropFrame?: boolean;
|
|
22
24
|
};
|
|
23
|
-
export type SortablePhotosProps<T extends SortablePhoto> = {
|
|
25
|
+
export type SortablePhotosProps<T extends SortablePhoto> = Omit<SortableGridProps<T>, 'data' | 'columns'> & {
|
|
24
26
|
numColumns?: number;
|
|
25
27
|
numPhotos?: number;
|
|
26
28
|
renderPhoto?: (props: SortableItemProps<T>) => ReactElement;
|
|
27
29
|
photos: T[];
|
|
28
30
|
onChangePhotos: (newPhotos: T[]) => void;
|
|
29
31
|
gap?: number;
|
|
30
|
-
itemHeight?: number;
|
|
31
|
-
itemWidth?: number;
|
|
32
|
-
width?: number;
|
|
33
32
|
onPressPhoto?: (data: T[], photo: T, order: number) => void;
|
|
34
|
-
onDragStart?: (fromIndex: number) => void;
|
|
35
|
-
onDragEnd?: (fromIndex: number, toIndex: number) => void;
|
|
36
|
-
keyExtractor?: (photo: T, order: number) => any;
|
|
37
|
-
delayLongPress?: number;
|
|
38
33
|
pickerConfig?: SortablePhotosPickerConfig;
|
|
39
34
|
multiple?: boolean;
|
|
40
|
-
maxScale?: number;
|
|
41
|
-
minOpacity?: number;
|
|
42
|
-
scaleDuration?: number;
|
|
43
|
-
slideDuration?: number;
|
|
44
35
|
emptyIcon?: AppIcon;
|
|
45
|
-
disableDragDropEmptyItems?: boolean;
|
|
46
36
|
style?: StyledProp<SortablePhotosComposition>;
|
|
47
37
|
modalTitle?: string;
|
|
48
38
|
modalBody?: string;
|
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
/// <reference types="react-native-image-crop-picker" />
|
|
3
3
|
import { FileInputImageSource } from '../FileInput';
|
|
4
|
-
import { SortablePhoto, SortablePhotosProps } from './types';
|
|
4
|
+
import { SortablePhoto, SortablePhotosProps, WithId } from './types';
|
|
5
5
|
export declare const useSortablePhotos: <T extends SortablePhoto>(props: SortablePhotosProps<T>) => {
|
|
6
6
|
input: {
|
|
7
|
-
openFilePicker: (imageSource?: FileInputImageSource, options?: Partial<import("react-native-image-crop-picker").Options>) => Promise<import("
|
|
7
|
+
openFilePicker: (imageSource?: FileInputImageSource, options?: Partial<import("react-native-image-crop-picker").Options>) => Promise<import("../FileInput").FileResult[]>;
|
|
8
8
|
ref: import("react").MutableRefObject<import("../FileInput").FileInputRef>;
|
|
9
9
|
};
|
|
10
|
-
handlePressPhoto: (
|
|
10
|
+
handlePressPhoto: (photo: T, order: number) => void;
|
|
11
11
|
handleDeletePhoto: (photo: T, order: number) => void;
|
|
12
12
|
handleOpenPicker: (pickerType: FileInputImageSource, photo: T, order: number) => Promise<any>;
|
|
13
|
-
sortPhotos: (_unorderedPhotos: T[]) => {
|
|
14
|
-
sortedPhotos: T
|
|
15
|
-
|
|
13
|
+
sortPhotos: (_unorderedPhotos: WithId<T>[]) => {
|
|
14
|
+
sortedPhotos: (T & {
|
|
15
|
+
key: string;
|
|
16
|
+
})[];
|
|
17
|
+
newPhotos: any[];
|
|
16
18
|
};
|
|
17
19
|
numberPhotosMissing: number;
|
|
18
|
-
onChangePhotosOrder: (newData: T[]) => void;
|
|
20
|
+
onChangePhotosOrder: (newData: WithId<T>[]) => void;
|
|
19
21
|
emptyIndexes: any[];
|
|
20
|
-
data: T[];
|
|
22
|
+
data: WithId<T>[];
|
|
23
|
+
enabledDragDrop: boolean;
|
|
21
24
|
};
|
|
@@ -16,12 +16,12 @@ export const useSortablePhotos = (props) => {
|
|
|
16
16
|
const currentLength = currentPhotos?.length ?? 0;
|
|
17
17
|
const length = Math.abs(numPhotos - currentLength);
|
|
18
18
|
const fillPhotos = Array(length).fill({ filename: null, file: null });
|
|
19
|
-
const newPhotos = currentPhotos.concat(fillPhotos);
|
|
19
|
+
const newPhotos = currentPhotos.concat(fillPhotos).map((photo, idx) => ({ ...photo, key: idx + '-photo' }));
|
|
20
20
|
setData(newPhotos);
|
|
21
|
-
onChangePhotos(currentPhotos);
|
|
21
|
+
onChangePhotos(assignOrder(currentPhotos));
|
|
22
22
|
}
|
|
23
23
|
}, [loading]);
|
|
24
|
-
const { emptyIndexes, numberPhotosMissing } = useMemo(() => {
|
|
24
|
+
const { emptyIndexes, numberPhotosMissing, enabledDragDrop } = useMemo(() => {
|
|
25
25
|
const copyPhotos = [...data];
|
|
26
26
|
const emptyIndexes = copyPhotos.reduce((indexes, photo, index) => {
|
|
27
27
|
if (!photo?.filename) {
|
|
@@ -30,21 +30,26 @@ export const useSortablePhotos = (props) => {
|
|
|
30
30
|
return indexes;
|
|
31
31
|
}, []);
|
|
32
32
|
const numberPhotosMissing = emptyIndexes?.length;
|
|
33
|
+
const enabledDragDrop = numberPhotosMissing < numPhotos - 1;
|
|
33
34
|
return {
|
|
34
35
|
emptyIndexes,
|
|
35
36
|
numberPhotosMissing,
|
|
37
|
+
enabledDragDrop,
|
|
36
38
|
};
|
|
37
39
|
}, [JSON.stringify(data)]);
|
|
40
|
+
const assignOrder = (photos) => {
|
|
41
|
+
return photos.map((photo, idx) => ({ ...photo, order: idx }));
|
|
42
|
+
};
|
|
38
43
|
const sortPhotos = (_unorderedPhotos) => {
|
|
39
44
|
const unorderedPhotos = [..._unorderedPhotos];
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
const newPhotos = unorderedPhotos.filter(photo => !!photo?.filename);
|
|
46
|
+
const sortedPhotos = unorderedPhotos.map((photo, index) => ({
|
|
47
|
+
...(newPhotos[index] ?? { file: null, filename: null }),
|
|
48
|
+
key: photo?.key
|
|
49
|
+
}));
|
|
45
50
|
return {
|
|
46
51
|
sortedPhotos,
|
|
47
|
-
newPhotos,
|
|
52
|
+
newPhotos: assignOrder(newPhotos),
|
|
48
53
|
};
|
|
49
54
|
};
|
|
50
55
|
const handleOpenPicker = async (pickerType, photo, order) => {
|
|
@@ -96,7 +101,7 @@ export const useSortablePhotos = (props) => {
|
|
|
96
101
|
};
|
|
97
102
|
onChange(newPhotos);
|
|
98
103
|
};
|
|
99
|
-
const handlePressPhoto = (
|
|
104
|
+
const handlePressPhoto = (photo, order) => {
|
|
100
105
|
SortableAlert.custom({
|
|
101
106
|
title: modalTitle,
|
|
102
107
|
body: modalBody,
|
|
@@ -106,9 +111,10 @@ export const useSortablePhotos = (props) => {
|
|
|
106
111
|
!!photo?.filename && { text: modalDeleteText, onPress: () => handleDeletePhoto(photo, order) },
|
|
107
112
|
],
|
|
108
113
|
// @ts-expect-error
|
|
114
|
+
closable: true,
|
|
109
115
|
isRow: false,
|
|
110
116
|
});
|
|
111
|
-
onPressPhoto?.(
|
|
117
|
+
onPressPhoto?.(data, photo, order);
|
|
112
118
|
};
|
|
113
119
|
const onChangePhotosOrder = (newData) => {
|
|
114
120
|
onChange(newData);
|
|
@@ -123,6 +129,7 @@ export const useSortablePhotos = (props) => {
|
|
|
123
129
|
onChangePhotosOrder,
|
|
124
130
|
emptyIndexes,
|
|
125
131
|
data,
|
|
132
|
+
enabledDragDrop,
|
|
126
133
|
};
|
|
127
134
|
};
|
|
128
135
|
//# sourceMappingURL=useSortablePhotos.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSortablePhotos.js","sourceRoot":"","sources":["../../../src/components/SortablePhotos/useSortablePhotos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC9D,OAAO,EAAwB,YAAY,EAAE,MAAM,cAAc,CAAA;AAGjE,MAAM,aAAa,GAAG,aAAa,EAAE,CAAA;AAErC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAA0B,KAA6B,EAAE,EAAE;IAC1F,MAAM,EACJ,cAAc,EACd,YAAY,EACZ,SAAS,EACT,UAAU,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,EAAE,aAAa,EACtB,GAAG,KAAK,CAAA;IAET,MAAM,KAAK,GAAG,YAAY,EAAE,CAAA;IAE5B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"useSortablePhotos.js","sourceRoot":"","sources":["../../../src/components/SortablePhotos/useSortablePhotos.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ import { useAnimatedVariantStyles } from '../..';
|
|
|
5
5
|
import { Touchable } from '../Touchable';
|
|
6
6
|
import { MobileStyleRegistry } from '../../Registry';
|
|
7
7
|
import { useStylesFor } from '../../hooks';
|
|
8
|
+
import { useInputBase } from '../InputBase/useInputBase';
|
|
9
|
+
import { fields } from '@codeleap/form';
|
|
8
10
|
export * from './styles';
|
|
9
11
|
export * from './types';
|
|
10
12
|
const reversedOrder = [...InputBaseDefaultOrder].reverse();
|
|
@@ -13,8 +15,9 @@ export const Switch = (props) => {
|
|
|
13
15
|
...Switch.defaultProps,
|
|
14
16
|
...props,
|
|
15
17
|
});
|
|
16
|
-
const { style,
|
|
18
|
+
const { style, disabled, debugName, switchOnLeft, field, forceError, value, onValueChange, } = others;
|
|
17
19
|
const styles = useStylesFor(Switch.styleRegistryName, style);
|
|
20
|
+
const { fieldHandle, validation, wrapperRef, } = useInputBase(field, fields.boolean, [value, onValueChange]);
|
|
18
21
|
const trackAnimation = useAnimatedVariantStyles({
|
|
19
22
|
variantStyles: styles,
|
|
20
23
|
animatedProperties: ['track:off', 'track:disabled', 'track:on', 'track:disabled-on', 'track:disabled-off'],
|
|
@@ -23,15 +26,15 @@ export const Switch = (props) => {
|
|
|
23
26
|
'worklet';
|
|
24
27
|
let disabledStyle = {};
|
|
25
28
|
if (disabled) {
|
|
26
|
-
disabledStyle = value ? styles['track:disabled-on'] : styles['track:disabled-off'];
|
|
29
|
+
disabledStyle = fieldHandle?.value ? styles['track:disabled-on'] : styles['track:disabled-off'];
|
|
27
30
|
}
|
|
28
|
-
const style = value ? styles['track:on'] : styles['track:off'];
|
|
31
|
+
const style = fieldHandle?.value ? styles['track:on'] : styles['track:off'];
|
|
29
32
|
return {
|
|
30
33
|
...style,
|
|
31
34
|
...disabledStyle,
|
|
32
35
|
};
|
|
33
36
|
},
|
|
34
|
-
dependencies: [value, disabled],
|
|
37
|
+
dependencies: [fieldHandle?.value, disabled],
|
|
35
38
|
});
|
|
36
39
|
const thumbAnimation = useAnimatedVariantStyles({
|
|
37
40
|
variantStyles: styles,
|
|
@@ -41,21 +44,22 @@ export const Switch = (props) => {
|
|
|
41
44
|
'worklet';
|
|
42
45
|
let disabledStyle = {};
|
|
43
46
|
if (disabled) {
|
|
44
|
-
disabledStyle = value ? styles['thumb:disabled-on'] : styles['thumb:disabled-off'];
|
|
47
|
+
disabledStyle = fieldHandle?.value ? styles['thumb:disabled-on'] : styles['thumb:disabled-off'];
|
|
45
48
|
}
|
|
46
|
-
const style = value ? styles['thumb:on'] : styles['thumb:off'];
|
|
49
|
+
const style = fieldHandle?.value ? styles['thumb:on'] : styles['thumb:off'];
|
|
47
50
|
return {
|
|
48
51
|
...style,
|
|
49
52
|
...disabledStyle,
|
|
50
53
|
};
|
|
51
54
|
},
|
|
52
|
-
dependencies: [value, disabled],
|
|
55
|
+
dependencies: [fieldHandle?.value, disabled],
|
|
53
56
|
});
|
|
54
57
|
// @ts-expect-error
|
|
55
58
|
const _switchOnLeft = switchOnLeft ?? styles?.__props?.switchOnLeft;
|
|
56
|
-
|
|
59
|
+
const hasError = validation.showError || forceError;
|
|
60
|
+
return <InputBase {...inputBaseProps} ref={wrapperRef} debugName={debugName} wrapper={Touchable} error={hasError ? validation.message || forceError : null} style={styles} wrapperProps={{
|
|
57
61
|
onPress: () => {
|
|
58
|
-
|
|
62
|
+
fieldHandle.setValue(!fieldHandle?.value);
|
|
59
63
|
},
|
|
60
64
|
disabled,
|
|
61
65
|
rippleDisabled: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Switch/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAGxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Switch/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { StyledProp } from '@codeleap/styles';
|
|
2
2
|
import { InputBaseProps } from '../InputBase';
|
|
3
3
|
import { SwitchComposition } from './styles';
|
|
4
|
+
import { BooleanField } from '@codeleap/form';
|
|
4
5
|
export type SwitchProps = Omit<InputBaseProps, 'style'> & {
|
|
5
|
-
|
|
6
|
-
onValueChange: (value: boolean) => void;
|
|
6
|
+
field?: BooleanField<any>;
|
|
7
7
|
style?: StyledProp<SwitchComposition>;
|
|
8
8
|
switchOnLeft?: boolean;
|
|
9
|
+
forceError?: boolean;
|
|
10
|
+
value?: boolean;
|
|
11
|
+
onValueChange?: (value: boolean) => void;
|
|
9
12
|
};
|