angular / angular/angularfire

Providers and Injections should be by name or at least by Map<string,type> and not by a simple Array<type>

Abierto
#3,271 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
TypeScript
Estrellas
7.8k
Forks
2.2k
Merge medio
22 h 28 min
PR fusionados (30 d)
6

Descripción

### Version info

**Angular:** 14.2

**Firebase:** 9.9.3

**AngularFire:** 7.4.1

**Other (e.g. Ionic/Cordova, Node, browser, operating system):** Irrelevant

### Expected behavior

Provide / Injection by name or Map where the string is the name to find easy and clean your angular firebase components or have a function to findByName(name: string).

I'm not talking only about Auth, I'm talking regarding all your types but I use Auth for the examples

``` typescript
@NgModule({
imports: [
provideFirebaseApp(() => initializeApp(config)), // default app
provideFirebaseApp(() => initializeApp(config2, 'app2')),
provideFirebaseApp(() => initializeApp(config3, 'app3')),
provideAuth(() => getAuth()), // from default app
provideAuth(() => getAuth(getApp('app2'))),
provideAuth(() => getAuth(getApp('app3'))),
],
})
```

One of the next options should be there to be use it easy:

**Option 1** - Could be work with your actual Array but I think that search this search byName in this array is dirty and I recommend to not reinvent the wheel and use a Map
``` typescript
constructor(
private authApp: Auth,
private authApp2: AuthInstances.getByName('app2'),
private authApp3: AuthInstances.getByName('app3'),
) { }
```

**Option 2** - Could be work with your actual Array but again I recommend to not reinvent the wheel and use a Map
``` typescript
constructor(private authInstances: AuthInstances) { }

doWithAuth(name: string) {
const auth = this.authInstances.getByName(name)
// the things that you want to do with your auth
}
```

**Other options** - Any idea that let you select your angular fire element more easy and clean that now.

### Actual behavior

Provide / Injection is a simple Array and does not have any method to select by name.

``` typescript
@NgModule({
imports: [
provideFirebaseApp(() => initializeApp(config)), // default app
provideFirebaseApp(() => initializeApp(config2, 'app2')),
provideFirebaseApp(() => initializeApp(config3, 'app3')),
provideAuth(() => getAuth()), // from default app
provideAuth(() => getAuth(getApp('app2'))),
provideAuth(() => getAuth(getApp('app3'))),
],
})
```

``` typescript
private authMap: Map;
constructor(private authInstances: AuthInstances) {
this.authInstances.forEach(auth => {
this.authMap.set(auth.name,auth);
});
}
```

### Feedback

I think that your Provide / Injection should work with maps or with something that can be select the future injection by name.

Another important thing, is that you must declare a default app, if not the AuthInstaces fail because default app is not initializate and then to find this default app is so ugly `name: "[DEFAULT]"`

To finish, you cannot import only one auth if your auth is not default, because you have a way to import default and to import an array with default and another auths. Is there a way to inject `auth: Auth` by name and avoid import all the array?

Issue post from discussion: _Originally posted by @todosybuenrollo in https://github.com/angular/angularfire/discussions/1026#discussioncomment-3613308_

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza rastreando los puntos de entrada provideFirebaseApp, provideAuth y AuthInstances descritos en el issue, incluido cómo se resuelven las aplicaciones Firebase predeterminada y con nombre. Revisa el comportamiento actual de la inyección y las pruebas relacionadas, si existen, antes de decidir entre la inyección con nombre y una API basada en mapas. La tarea estará terminada cuando los consumidores puedan seleccionar instancias de Auth no predeterminadas por nombre sin tener que recorrer manualmente un array, preservando al mismo tiempo el comportamiento de la aplicación predeterminada.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
angular, firebase, typescript
Área
backend-api-design
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
28/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.