1.0.2 • Published 12 months ago

multiple-item-selection-rn v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
12 months ago

multiple-item-selection-rn

Multiple Item Selection RN es un componente creado para React Native destinado a la selección de múltiples elementos. El componente ofrece muchas funciones, como clasificación de elementos, agrupación de categorías, vibración y personalización del componentes de selección o checkboxes.

Instalación

ShellCommand
shnpm i -S multiple-item-selection-rn
Ejemplo de implementación :fa-heart:

Usando MultipleItemSelection.

import { MultipleItemSelection } from 'multiple-item-selection-rn'
...

const [modalState, setModalState] = useState(true)
const [selectedOption, setSelectedOptions] = useState([])

const [optionsList, setOptionsList] = useState([
    {
        index: 0,
        disabled: false,
        category: "Vegetales",
        label: "Ensalada César con brócoli.",
        value: "valor 1",
        precio: '$ 1.80',
        labelRight: 'Label 2'
    },
])

<MultipleSelectionComponent
    optionsList={optionsList}

    modalState={modalState}
    setModalState={setModalState}

    selectedOption={selectedOption}
    setSelectedOptions={setSelectedOptions}
/>
...

npm.io


npm.io

Props

PropiedadValor
setNewThemeFunction
ThemeString
modalStateBoolean
setModalStateFunction
optionsListArray Object
selectedOptionArray Object
setSelectedOptionsFunction
ComponentCustomHeaderComponent
ComponentCustomFooterComponent
ComponentCustomItemComponent
ComponentCustomCheckComponent
ComponentTitleCategoryComponent
MainListHeaderComponent
animationTypeString
typeCheckString
TrackColorObject
allowOutsideClickBoolean
modalTransparentBoolean
selectionLimitNumber
activateVibrationNumber
hideListHeaderBoolean
groupByCategoryBoolean
orderByString
showButtonScrollBoolean

Definición de props

PropiedadDefinición
ThemeEstablece el tema registrado. Tiene el valor por defecto 'light'.
setNewThemeAcepta una función de flecha que devuelve un objeto con el valor del nuevo tema.
modalStateDevuelve un valor boolean que se usa para obtener y controlar la visibilidad del componente Modal.
setModalStateAcepta un valor boolean para controlar el nuevo estado del componente Modal.
optionsListAcepta un Array de Objects que se usa para la lista de opciones.
selectedOptionDevuelve un array de objects seleccionados de la lista de opciones.
setSelectedOptionsUsado para establecer un array de objects según el criterio requerido.
ComponentCustomHeaderEstablece un componente para el header del contenedor. Acepta como props: modalState, setModalDisplay, ThemeBgColor, ThemeTextColor
ComponentCustomFooterEstablece un componente para el footer del contenedor de la lista. Acepta como props: modalState, setModalDisplay, ThemeBgColor, ThemeTextColor
ComponentCustomItemEstablece un component que envuelve tanto el label izquiero como el label derecho. Acepta como props: valueSwitch, setSwitch, item
ComponentCustomCheckEstablece un nuevo componente que reemplazara el check por defecto que es el componente Switch. Existen además del componente Switch, dos componentes opcionales llamados CheckRadius y CheckSquare. El ComponentCustomCheck acepta como props valueSwitch, setSwitch, ThemeBgColor, ThemeTextColor.
ComponentTitleCategoryEstablece un nuevo componente que muestra un nombre o título para cuando la lista esté agrupada. Acepta como props: title
MainListHeaderEstablece un nuevo componente equivalente a ListHeaderComponent de FlatList
animationTypeEstablece el tipo de animación para el modal. Valores : slide, fade. Tiene como valor por defecto slide
typeCheckEstablece el tipo del check. Acepta los siguientes valores : Switch, CheckRadius, CheckSquare, Custom. La primera letra debe ser en mayuscula. Tiene como valor por defecto Switch
TrackColorAcepta un objeto para el componente Switch : {false: color, true: color}. Tiene como valor por defecto { false: '#fff', true: '#fff' }
allowOutsideClickPermite hacer click, touch en el modal para cerrar o no la ventana modal. Tiene como valor por defecto true
modalTransparentEstablece o no la ventana modal en transparente. El componente hijo tiene un backgroundColor rgba(0,0,0,.4). Tiene como valor por defecto true
selectionLimitEstablece el límite de selección de los checks
activateVibrationActiva la vibración según su conveniencia.
hideListHeaderMuestra u oculta el contenido por defecto de ListHeaderComponent. Valor por defecto es true.
groupByCategoryAgrupa por categoría. Es importante que en optionsList exista la propiedad category. Tiene como valor por defecto false
orderByEstablece el orden de la lista. Acepta dos valores: DESC, ASC. Tiene como valor por defecto una cadena de texto vacía.
showButtonScrollBotones para subir y bajar el scroll de la lista. Tiene como valor por defecto false.
showButtonScrollBotones para controlar el scroll en FlatList.

Prop: activateVibration

Valores y definición

Definicion
1Vibrar al agregar un item.
2Vibrar al remover un item.
3Vibrar en valores 1,2.
4Vibrar al hacer click en item disabled.
5Vibrar al cumplir el limite de seleccion.

Props requeridos

Propiedades-------------
optionsListRequerido
modalStateRequerido
setModalStateRequerido
selectedOptionRequerido
setSelectedOptionsRequerido

optionsList

Propiedades requeridas
[
		{
					index: 0,
					disabled: false,
					category: "Vegetales",
					label: "Ensalada César con brócoli.",
					labelRight: '12',
					...: "...",
					...: '...',
		},
]

En caso de querer mostrar otro valor de otra propiedad en label o labelRight en la lista de artículos, debe usar el componente personalizable ComponentCustomItem que recibe valueSwitch, setSwitch, item como parametros.

Ejemplo

npm.io

ComponentCustomItem={ ({item, setSwitch} ) => {
    return <Pressable onPress={() => setSwitch()} style={{backgroundColor: 'red',width: '85%'}}>
        <Text >{item.title}</Text>
    </Pressable>
}}

Esto mostrará un solo texto en la propiedad title para cada artículo.

Otro ejemplo

<View style={{ flex: 1, flexDirection: 'row' }}>
    <Pressable style={{ flex: 1, padding: 10, paddingLeft: 0 }}
        onPress={() => setSwitch()} onLongPress={() => showLabelToast(item.label)}>
        <Text style={[{ color: SetTheme[Theme].color }, styles.textItem]} numberOfLines={1}>
            {item.label}
        </Text>
    </Pressable>
    <View style={{ justifyContent: 'center' }}>
        <Text style={[{ color: SetTheme[Theme].color, fontWeight: 'bold' }]}>
            {item.precio}
        </Text>
    </View>
</View>

Esto mostrará un texto a la izquierda y otro a la derecha de cada artículo usando la propiedad ComponentCustomItem.

npm.io

Ejemplo

export default function App() {
    const [orderBy] = useState('asc')
    const [groupByCategory] = useState(true)
    const [modalState, setModalState] = useState(true)
    const [selectedOption, setSelectedOptions] = useState([])

    const [optionsList, setOptionsList] = useState([
        {
            index: 0,
            disabled: false,
            category: "Vegetales",
            label: "Ensalada César con brócoli.",
            labelRight: '12',
            value: "valor 1",
            precio: '$ 1.80',
        }
    ])

    return (
        <View style={styles.container}>

            <Text style={{ marginVertical: 10 }}>
                {JSON.stringify(selectedOption)}
            </Text>

            <MultipleSelectionComponent 
                optionsList={optionsList}

                modalState={modalState}
                setModalState={setModalState}

                selectedOption={selectedOption}
                setSelectedOptions={setSelectedOptions} 

                typeCheck = 'CheckSquare'
                orderBy={orderBy}
                groupByCategory={groupByCategory}

                showButtonScroll={true}
            />
            <StatusBar style="auto" />
        </View>
    );
}

Ejemplo simple

<MultipleSelectionComponent 
    optionsList={optionsList}

    modalState={modalState} 
    setModalState={setModalState}

    selectedOption={selectedOption}
    setSelectedOptions={setSelectedOptions}  
/>

Ejemplos avanzados

Usando tipo de check opcional llamado CheckRadius.

<MultipleSelectionComponent
    optionsList={optionsList}

    modalState={modalState}
    setModalState={setModalState}

    selectedOption={selectedOption}
    setSelectedOptions={setSelectedOptions}

    typeCheck='CheckSquare'
/>

Usando CheckRadius y agrupando por categoria

<MultipleSelectionComponent
    optionsList={optionsList}

    modalState={modalState}
    setModalState={setModalState}

    selectedOption={selectedOption}
    setSelectedOptions={setSelectedOptions}

    typeCheck='CheckRadius'

    groupByCategory={true}
/>

Usando el package @expo/vector-icons

<MultipleSelectionComponent
    optionsList={optionsList}

    modalState={modalState}
    setModalState={setModalState}

    selectedOption={selectedOption}
    setSelectedOptions={setSelectedOptions}

    ComponentCustomCheck={({ valueSwitch, setSwitch }) => <Fontisto name={valueSwitch ? "checkbox-active" : "checkbox-passive"} size={24} color="black" onPress={() =>setSwitch(!valueSwitch)} />}
    typeCheck='Custom'
/>

npm.io


<MultipleSelectionComponent
    optionsList={optionsList}

    modalState={modalState}
    setModalState={setModalState}

    selectedOption={selectedOption}
    setSelectedOptions={setSelectedOptions}

    ComponentCustomHeader={() => <View style={{ backgroundColor: 'rgba(225,225,225,.4)' }}>
        <Text style={{ padding: 15, fontSize: 30, textAlign: 'center' }}>Platos del día</Text>
    </View>}

    ComponentCustomFooter={({ modalState, setModalDisplay }) => {
        return <View>
            <Button title="Ocultar Modal" onPress={() => setModalDisplay(!modalState)} />
        </View>
    }}
/>

SelectionRadioButtom

Usando SelectionRadioButtom.

Selection Radio Button, es otro componente de selección del mismo paquete de un solo valor parecido a los radio buttons de HTML.

Props

PropiedadValor
setNewThemeFunction
ThemeString
modalStateBoolean
setModalStateFunction
optionsListArray Object
selectedOptionArray Object
setSelectedOptionsFunction
ComponentCustomCheckComponent
ComponentCustomItemComponent
ComponentCustomHeaderComponent
ComponentCustomFooterComponent
allowOutsideClickBoolean

Definición de props

PropiedadDefinición
ThemeEstablece el tema registrado. Tiene el valor por defecto 'light'.
setNewThemeAcepta una función de flecha que devuelve un objeto con el valor del nuevo tema.
modalStateDevuelve un valor boolean que se usa para obtener y controlar la visibilidad del componente Modal.
setModalStateAcepta un valor boolean para controlar el nuevo estado del componente Modal.
optionsListAcepta un Array de Objects que se usa para la lista de opciones.
selectedOptionDevuelve un array de objects seleccionados de la lista de opciones.
setSelectedOptionsUsado para establecer un array de objects según el criterio requerido.
ComponentCustomHeaderEstablece un componente para el header del contenedor. Acepta como props: modalDisplayState, setModalDisplay, ThemeBgColor, ThemeTextColor
ComponentCustomFooterEstablece un componente para el footer del contenedor de la lista. Acepta como props: reset, setModalDisplay, modalDisplayState, ThemeBgColor, ThemeTextColor
ComponentCustomItemEstablece un component que envuelve tanto el label izquiero como el label derecho. Acepta como props: selectItem, item, index
ComponentCustomCheckEstablece un nuevo componente que reemplazara el check por defecto que es el componente Switch.
TrackColorAcepta un objeto para el componente Switch : {false: color, true: color}. Tiene como valor por defecto { false: '#fff', true: '#fff' }
allowOutsideClickPermite hacer click, touch en el modal para cerrar o no la ventana modal. Tiene como valor por defecto true
TrackColorAcepta un objeto para el componente Switch : {false: color, true: color}. Tiene como valor por defecto { false: '#fff', true: '#fff' }
showButtonScrollBotones para controlar el scroll.
import { SelectionRadioButtom } from 'multiple-item-selection-rn'

import { Fontisto } from '@expo/vector-icons';

export default () => {
    const [selectedOption, setSelectedOptions] = useState({})
    const [modalState, setModalState] = useState(true)
    const [optionsList, setOptionsList] = useState([
        {
            index: 0,
            disabled: false,
            category: "Vegetales",
            label: "Ensalada César con brócoli.",
            value: "valor 1",
            //precio: '$ 1.80',
            labelRight: '12'
        },
        {
            index: 1,
            disabled: false,
            category: "Carne",
            label: "Calabacines rellenos de pollo y piquillos.",
            value: "valor 2",
            //precio: '$ 1.00',
            labelRight: '5'
        }
    ])
    return (
        <View  style={{marginTop: 50}}> 
            <Button title="Open Options" onPress={() => setModalState(!modalState)} />
            <SelectionRadioButtom 
                optionsList={optionsList} 
                modalState={modalState}
                setModalState={setModalState}
                selectedOption={selectedOption} 
                setSelectedOptions={setSelectedOptions}    
 
                ComponentCustomCheck={({status, index, item, selectItem, ThemeTextColor}) => <> 
                    <Fontisto name={status?"radio-btn-active":"radio-btn-passive"} size={24} color={ThemeTextColor} onPress={() => selectItem(index, item)} />
                </>}
            />
        </View>
    )
}

npm.io

npm.io

Se mostrarán otros detalles dependiendo de futuras actualizaciones.

Autor
Benjamin Canario

Si quieres hacerme una donación hazlo mediante este link paypal.me/LuisCanarioDO

Contactame para mejoras benjamincanario7@gmail.com

1.0.2

12 months ago

1.0.1

12 months ago

1.0.0

12 months ago