angular / angular/angularfire

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

Ouverte
#3,271 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
TypeScript
Étoiles
7.8k
Forks
2.2k
Merge moyen
22 h 28 min
PR mergées (30 j)
6

Description

### 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_

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par suivre les points d’entrée provideFirebaseApp, provideAuth et AuthInstances décrits dans l’issue, notamment la façon dont les applications Firebase par défaut et nommées sont résolues. Examinez le comportement actuel de l’injection et les tests associés, s’ils existent, avant de choisir entre une injection nommée et une API basée sur une map. La tâche est terminée lorsque les consommateurs peuvent sélectionner des instances Auth autres que celle par défaut par leur nom sans parcourir manuellement un tableau, tout en préservant le comportement de l’application par défaut.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
angular, firebase, typescript
Domaine
backend-api-design
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
28/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.