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