multiple-item-selection-rn v1.0.2
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
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