multiple-item-selection-rn

1.0.2 • Public • Published

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

Shell Command
sh npm 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}
/>
...


Props

Propiedad Valor
setNewTheme Function
Theme String
modalState Boolean
setModalState Function
optionsList Array Object
selectedOption Array Object
setSelectedOptions Function
ComponentCustomHeader Component
ComponentCustomFooter Component
ComponentCustomItem Component
ComponentCustomCheck Component
ComponentTitleCategory Component
MainListHeader Component
animationType String
typeCheck String
TrackColor Object
allowOutsideClick Boolean
modalTransparent Boolean
selectionLimit Number
activateVibration Number
hideListHeader Boolean
groupByCategory Boolean
orderBy String
showButtonScroll Boolean

Definición de props

Propiedad Definición
Theme Establece el tema registrado. Tiene el valor por defecto 'light'.
setNewTheme Acepta una función de flecha que devuelve un objeto con el valor del nuevo tema.
modalState Devuelve un valor boolean que se usa para obtener y controlar la visibilidad del componente Modal.
setModalState Acepta un valor boolean para controlar el nuevo estado del componente Modal.
optionsList Acepta un Array de Objects que se usa para la lista de opciones.
selectedOption Devuelve un array de objects seleccionados de la lista de opciones.
setSelectedOptions Usado para establecer un array de objects según el criterio requerido.
ComponentCustomHeader Establece un componente para el header del contenedor. Acepta como props: modalState, setModalDisplay, ThemeBgColor, ThemeTextColor
ComponentCustomFooter Establece un componente para el footer del contenedor de la lista. Acepta como props: modalState, setModalDisplay, ThemeBgColor, ThemeTextColor
ComponentCustomItem Establece un component que envuelve tanto el label izquiero como el label derecho. Acepta como props: valueSwitch, setSwitch, item
ComponentCustomCheck Establece 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.
ComponentTitleCategory Establece un nuevo componente que muestra un nombre o título para cuando la lista esté agrupada. Acepta como props: title
MainListHeader Establece un nuevo componente equivalente a ListHeaderComponent de FlatList
animationType Establece el tipo de animación para el modal. Valores : slide, fade. Tiene como valor por defecto slide
typeCheck Establece 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
TrackColor Acepta un objeto para el componente Switch : {false: color, true: color}. Tiene como valor por defecto { false: '#fff', true: '#fff' }
allowOutsideClick Permite hacer click, touch en el modal para cerrar o no la ventana modal. Tiene como valor por defecto true
modalTransparent Establece o no la ventana modal en transparente. El componente hijo tiene un backgroundColor rgba(0,0,0,.4). Tiene como valor por defecto true
selectionLimit Establece el límite de selección de los checks
activateVibration Activa la vibración según su conveniencia.
hideListHeader Muestra u oculta el contenido por defecto de ListHeaderComponent. Valor por defecto es true.
groupByCategory Agrupa por categoría. Es importante que en optionsList exista la propiedad category. Tiene como valor por defecto false
orderBy Establece el orden de la lista. Acepta dos valores: DESC, ASC. Tiene como valor por defecto una cadena de texto vacía.
showButtonScroll Botones para subir y bajar el scroll de la lista. Tiene como valor por defecto false.
showButtonScroll Botones para controlar el scroll en FlatList.

Prop: activateVibration

Valores y definición

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

Props requeridos

Propiedades -------------
optionsList Requerido
modalState Requerido
setModalState Requerido
selectedOption Requerido
setSelectedOptions Requerido

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

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.

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'
/>


<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

Propiedad Valor
setNewTheme Function
Theme String
modalState Boolean
setModalState Function
optionsList Array Object
selectedOption Array Object
setSelectedOptions Function
ComponentCustomCheck Component
ComponentCustomItem Component
ComponentCustomHeader Component
ComponentCustomFooter Component
allowOutsideClick Boolean

Definición de props

Propiedad Definición
Theme Establece el tema registrado. Tiene el valor por defecto 'light'.
setNewTheme Acepta una función de flecha que devuelve un objeto con el valor del nuevo tema.
modalState Devuelve un valor boolean que se usa para obtener y controlar la visibilidad del componente Modal.
setModalState Acepta un valor boolean para controlar el nuevo estado del componente Modal.
optionsList Acepta un Array de Objects que se usa para la lista de opciones.
selectedOption Devuelve un array de objects seleccionados de la lista de opciones.
setSelectedOptions Usado para establecer un array de objects según el criterio requerido.
ComponentCustomHeader Establece un componente para el header del contenedor. Acepta como props: modalDisplayState, setModalDisplay, ThemeBgColor, ThemeTextColor
ComponentCustomFooter Establece un componente para el footer del contenedor de la lista. Acepta como props: reset, setModalDisplay, modalDisplayState, ThemeBgColor, ThemeTextColor
ComponentCustomItem Establece un component que envuelve tanto el label izquiero como el label derecho. Acepta como props: selectItem, item, index
ComponentCustomCheck Establece un nuevo componente que reemplazara el check por defecto que es el componente Switch.
TrackColor Acepta un objeto para el componente Switch : {false: color, true: color}. Tiene como valor por defecto { false: '#fff', true: '#fff' }
allowOutsideClick Permite hacer click, touch en el modal para cerrar o no la ventana modal. Tiene como valor por defecto true
TrackColor Acepta un objeto para el componente Switch : {false: color, true: color}. Tiene como valor por defecto { false: '#fff', true: '#fff' }
showButtonScroll Botones 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>
    )
}

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

Package Sidebar

Install

npm i multiple-item-selection-rn

Weekly Downloads

5

Version

1.0.2

License

ISC

Unpacked Size

50.8 kB

Total Files

3

Last publish

Collaborators

  • nestor-o