12.2210.2 • Published 2 years ago

@marxa/index v12.2210.2

Weekly downloads
-
License
-
Repository
github
Last release
2 years ago

MxIndex (beta)

Complemento para crear listas a partir de consultas de Firebase Firestore en Angular

Primerso pasos

❗ IMPORTANTE ❗
Esta librería requiere @angular/material y @angular/fire
<!--Esta librería no funciona en proyectos de versiones anteriores a Angular 11, puedes usar la versión para Angular 9 si lo necesitas-->

Sigue estos pasos para empezar un proyecto Firebase - Angular

  1. Ve a Firebase console y pícale en Crear proyecto o selecciona alguno que ya hayas creado.
  2. Ve a la configuración y baja a la parte Fireabase SDK y pícale en la opción de Configuracion.
  3. Copia las lineas de código que están entre los corchetes
  4. Ve a tu proyecto de Angular y entra en el archivo src/environments/environment.ts y pega las lineas de código en una variable nueva. El código se debe ver así:
    export  const  environment  =  {
    	production:  false,
    	firebaseConfig:  {
    		apiKey:  "AIzaS++++++++++++++++++++++++++",
    		authDomain:  "++++++++.firebaseapp.com",
    		projectId:  "++++++++",
    		storageBucket:  "+++++++++.appspot.com",
    		messagingSenderId:  "0000000000",
    		appId:  "1:000000000000:web:++++++++++++++",
    		measurementId:  "G-++++++++++"
    	}
    }; 
 5. Corre los siguientes comandos y sigue sus respectivas instrucciones:
	 `ng add @angular/fire`
	 `ng add @angular/material`
  6. Inicializa tu proyecto de **Firebases** en `app.module.ts`:
```ts
import { AngularFireModule } from "@angular/fire";

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    AngularFireModule.initializeApp(environment.firebaseConfig)
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }
  1. Ahora sí, ya puedes instalar esta librería:

Como dependencia Node

  1. Inicia sesión en https://marxa.jfrog.io/. En el menú de navegación ve a Set me up. y sigue las instrucciones para ingresar tus contraseñas.
  2. Si usas VSCode, en la terminal corre el comando code ~/.npmrc, si no, navega a ~/.npmrc en tu explorador de archivos y ábrelo.
  3. Pega el código resultante de las instrucciones, asegurándote que la URL del artifact tenga el prefijo @marxa: en cada uno de los registros. Ejemplo:
_auth = <PASSWORD> (converted to base 64)
email = youremail@email.com
always-auth = true
@marxa:registry = https://marxa.jfrog.io/artifactory/api/npm/mx-library-npm/
  1. Importa la dependencia
npm i -s @marxa/devkit

Como submódulo

  1. Asegúrate de que tienes permisos para copiar el repositorio
  2. Abre la terminal en la raíz de tu proyecto
  3. Corre los comandos
git submodule init
git submodule add -b develop https://github.com/Marxa-Digital/mx-devkit libs/marxa/devkit

Modo de uso

En algún componente que necesites deberás cargar el serivicio.

Inicializa el index

import { MxIndex } from '@marxa/devkit';

export class AppComponent implements OnInit {

  products: Product[] = []
  products$: Observable<Product[]>
	constructor(
    private _index: MxIndex
  )  {}

  ngOnInit(){
    // Requiere una ruta de firestore, un selector y la cantidad por página
    this._index.initIndex( `productos`, 'id', 10 )
    // Para obtener la data puedes suscribirte a este método
    this._index.queryData.subscribe( data => {
      this.products = data
    } )
    // Podrías también acceder a la data en un observable
    this.producs$ = this._index.queryData

    // Puedes suscribirte al observable que indica cuando aún firestore apenas hace la consulta
    this._index.loadingQuery.subscribe( (loading: boolean) => {
      
    } )
    
  }

}

Controla las páginas

Puedes cargar el index-caller el cuál te permitirá controla el comportamiento del index y mandar a llamar más elementos de la colección

  <mx-index-caller
  prevBtn="Anterior"
  nextBtn="Siguiente" 
  colorBtn="primary" 
  centerMessage="{
    showing: 'Mostrando',
    from: 'del',
    to: 'al'
  }"
  merge="false"
  (pageEvent)="$event"
  ></mx-index-caller>
PropiedadDescripción
@Input() prevBtn: stringOPCIONAL La etiqueta que llevará el botón de página previa. DEFAULT: Anterior
@Input() nextBtn: stringOPCIONAL La etiqueta que llevará el botón de página siguiente. DEFAULT: Siguiente
@Input() colorBtn: ThemePaletteOPCIONAL El color basado en la paleta de colores de Angular Material. DEFAULT: primary
@Input() centerMessage: mxIndexCenterMessageOPCIONAL Composición de la etiqueta central que marca el indexado. DEFAULT: `{showing: 'Mostrando', from: 'del', to: 'al'}
@Input() merge: booleanOPCIONAL Propiedad que indica si la lista indexada cargará continuamente o paginará
@Output() pageEvent: EventEmitter<mxIndexEvent>OPCIONAL Emite los eventos en los cambios de página

Filter component

El componente auxiliar para realizar filtrados y ordernamiento puedes trabajarlo de la siguiente manera.

<mx-sort-options [fields]="['id', 'referencia']" ></mx-sort-options>

Este componente muestra campos de input para filtrados dinámicos. **Las búsquedas en firestore dependen de la sensibilidad a las Mayúsculas y minúsculas

PropiedadDescripción
@Input() filterByField: stringDefine un campo para hacer búsquedas por criterio. Cuando esta propiedad tiene un valor, El selector de campos desaparece.
@Input() fields: stringArreglo de campos seleccionables para hacer filtrados u ordenamiento. Los campos deben coincidir exactamente con los modelos de tus documentos en firestore.
@Input() sortOption: booleanPermite desactivar el campo de ordenamiento. DEFAULT: true
@Input() filterOption: booleanPermite desactivar el campo de filtrado. DEFAULT: true

Servicio

Propiedades

PropiedadDescripción
indexEvent: EventEmitter<mxIndexEvent>Emite eventos de las páginas del index
queryData: Subject<any[]>Observable de la data obtenida por el index
loadingQuery: Subject<boolean>Notifica cuando la consulta a firestore conmienza (true) y cuando termina (false)
collection: stringColección de firestore a la que se hará la consulta indexada
fieldCampo por default con la que se buscará en la colleción
order: 'asc' | 'desc'Orden de la consulta
criteria: stringCriterio de comparación con el campo para hacer búsquedas filtradas
mergeQuery: booleanPermite traer consultas mezcladas o cambiar por página
queryCant: numberCantidad por cada consulta

Métodos

Init Index

Inicializa las propiedades para la indexación. Si la colección está vacía, el parámetro queryData no recibe evento.

Ejemplo

  this.initIndex('productos', 'referencia', 20, 'desc', true)
ParámetroDescripción
CollectionToSort: stringColección para hacer la consulta
FieldToSort: stringCampo para hacer las consultas
queryCant: numberCantidad que traerá cada consulta
order?: 'asc' | 'desc'Orden de los resultados
merge?: booleanMezcla o no los resultados de cada consulta que se realice

Change Page

Ejecuta consultas con la siguiente o la anterior cantidad configurada. Si la consulta resulta vacía, el parámetro queryData no recibe evento.

Ejemplo

this.changePage('next')
ParámetroDescripción
direction: 'next' | 'prev'Colección para hacer la consulta

Set field to sort

Indica o cambia el campo con el que se harán las consultas

Ejemplo

this.setFieldtoSort('referencia')
ParámetroDescripción
fieldSelected: MatSelectChange | stringCampo que debe ser exacto al campo a consultar. Puede ser string o selección de MatSelect

Set order sort

Indica o cambia el ordenamiento de las consultas

Ejemplo

this.setOrderSort('asc')
ParámetroDescripción
sortOrder: MatSelectChange | 'asc' | 'desc'Define el orden de las consultas. Puede ser string o selección de MatSelect

Set criteria filter

Indica o cambia el criterio a comparar en las consultas.

Ejmeplo

this.setCriteriaFilter('productName', 'referencia', 'asc' )
ParámetroDescripción
criteria: MatSelectChange | string | string[] | null Define el criterio con el que se consultará. ATENCIÓN Esta propiedad es relacionado a las mayúsculas y minúsculas. Puede ser string (Un criterios específico a buscar); string[] (Hasta 3 criterios para buscar) o selección de MatSelectChange (El valor de un select cambiado)
field: MatSelectChange | string | string[]Campo o cantidad de campos relacionados a la criteria. Debe ser exacto al campo a consultar. (La cantidad de fields debe ser exactamente igua a la criteria)
order: 'asc' | 'desc'Define el orden de las consultas.
collection: stringDefine el la collection o collectionGroup de firebase.

Modelos

mxIndexAnchor

ParámetroDescripción
page: numberNúmero de la página actual
firstQuery: anyValor del primer resultado de la página conincidente al campo
lastQuery: anyValor del último resultado de la página conincidente al campo

mxIndexEvent

ParámetroDescripción
firstIndex: anyPrimer número index en la colección de firestore completa de la página actual
lastIndex: anyÚltimo número index en la colección de firestore completa de la página actual
pageSize: numberCantidad del resultado de la página actual

mxIndexCenterMessage

ParámetroDescripción
showing: stringDEFAULT: 'Mostrando'
from: stringDEFAULT: 'del'
to: stringDEFAULT: 'al'

This library was generated with Angular CLI version 11.0.9.

0.0.10

3 years ago

0.0.11

3 years ago

12.1.0

3 years ago

12.2210.2

2 years ago

0.0.9

3 years ago

0.0.8

3 years ago

0.0.5

3 years ago

0.0.7

3 years ago

0.0.6

3 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago