xref: /MusicFree/src/components/base/checkbox.tsx (revision e650bfb34226e2a09d15cbf7832c4805a87cd60e)
1*e650bfb3S猫头猫import React from 'react';
2*e650bfb3S猫头猫import {StyleProp, StyleSheet, View, ViewProps} from 'react-native';
3*e650bfb3S猫头猫import rpx from '@/utils/rpx';
4*e650bfb3S猫头猫import useColors from '@/hooks/useColors';
5*e650bfb3S猫头猫import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
6*e650bfb3S猫头猫import {TouchableOpacity} from 'react-native-gesture-handler';
7*e650bfb3S猫头猫
8*e650bfb3S猫头猫interface ICheckboxProps {
9*e650bfb3S猫头猫    checked?: boolean;
10*e650bfb3S猫头猫    onPress?: () => void;
11*e650bfb3S猫头猫    style?: StyleProp<ViewProps>;
12*e650bfb3S猫头猫}
13*e650bfb3S猫头猫
14*e650bfb3S猫头猫const slop = rpx(24);
15*e650bfb3S猫头猫
16*e650bfb3S猫头猫export default function Checkbox(props: ICheckboxProps) {
17*e650bfb3S猫头猫    const {checked, onPress, style} = props;
18*e650bfb3S猫头猫    const colors = useColors();
19*e650bfb3S猫头猫
20*e650bfb3S猫头猫    const innerNode = (
21*e650bfb3S猫头猫        <View
22*e650bfb3S猫头猫            style={[
23*e650bfb3S猫头猫                styles.container,
24*e650bfb3S猫头猫                checked
25*e650bfb3S猫头猫                    ? {
26*e650bfb3S猫头猫                          backgroundColor: colors.primary,
27*e650bfb3S猫头猫                          borderColor: colors.primary,
28*e650bfb3S猫头猫                      }
29*e650bfb3S猫头猫                    : {
30*e650bfb3S猫头猫                          borderColor: colors.text,
31*e650bfb3S猫头猫                      },
32*e650bfb3S猫头猫                style,
33*e650bfb3S猫头猫            ]}>
34*e650bfb3S猫头猫            {checked ? (
35*e650bfb3S猫头猫                <Icon name="check" color={colors.headerText} size={rpx(34)} />
36*e650bfb3S猫头猫            ) : null}
37*e650bfb3S猫头猫        </View>
38*e650bfb3S猫头猫    );
39*e650bfb3S猫头猫
40*e650bfb3S猫头猫    return onPress ? (
41*e650bfb3S猫头猫        <TouchableOpacity
42*e650bfb3S猫头猫            hitSlop={{
43*e650bfb3S猫头猫                left: slop,
44*e650bfb3S猫头猫                right: slop,
45*e650bfb3S猫头猫                top: slop,
46*e650bfb3S猫头猫                bottom: slop,
47*e650bfb3S猫头猫            }}
48*e650bfb3S猫头猫            onPress={onPress}>
49*e650bfb3S猫头猫            {innerNode}
50*e650bfb3S猫头猫        </TouchableOpacity>
51*e650bfb3S猫头猫    ) : (
52*e650bfb3S猫头猫        innerNode
53*e650bfb3S猫头猫    );
54*e650bfb3S猫头猫}
55*e650bfb3S猫头猫
56*e650bfb3S猫头猫const styles = StyleSheet.create({
57*e650bfb3S猫头猫    container: {
58*e650bfb3S猫头猫        width: rpx(36),
59*e650bfb3S猫头猫        height: rpx(36),
60*e650bfb3S猫头猫        borderRadius: rpx(2),
61*e650bfb3S猫头猫        borderWidth: rpx(1),
62*e650bfb3S猫头猫        alignItems: 'center',
63*e650bfb3S猫头猫        justifyContent: 'center',
64*e650bfb3S猫头猫    },
65*e650bfb3S猫头猫});
66