Como criar um item sem passar o id do aplicativo angular para o firestore com ngrx / entity?

Rudy F

Estou tentando realizar uma operação CRUD completa usando Angular + Cloud Firestore + NGRX / Entity.

Id é o parâmetro necessário para executar ngrx / entidade. Mas quando crio um item da minha forma angular para a minha loja de fogo, ainda não sei o id, pois seria atribuído automaticamente com o id do documento da minha futura criação.

Como posso enviar dados para o firestore usando ngrx / entity sem enviar o id?

Eu tenho uma interface como a seguir:

Interface da entidade:

export interface Recipe {
    id: string;
    recipeTitle: string;
}

actions.ts:

export const addRecipe = createAction(
    '[Recipe Add Component] Add Recipe',
    props<{ recipe: Recipe }>()
);

export const addRecipeSuccess = createAction(
    '[Recipe Add Effect] Add Recipe Success',
    props<{ recipe: Recipe }>()
);

export const addRecipeFailure = createAction(
    '[Recipe Add Effect] Add Recipe Failure',
    props<{ error: any }>()
);

Reducer.ts

// entity adapter
export const recipeAdapter: EntityAdapter<Recipe> = createEntityAdapter<Recipe>({
});

export interface RecipeState extends EntityState<Recipe> {
  error: any;
  selectedRecipe: Recipe;
}

export const initialState: RecipeState = recipeAdapter.getInitialState({
  error: undefined,
  selectedRecipe: undefined
});

export const recipeReducer = createReducer(
  initialState,

  on(RecipeActions.addRecipeSuccess, (state, action) => {
    return recipeAdapter.addOne(action.recipe, state);
  }),
  on(RecipeActions.addRecipeFailure, (state, action) => {
    return {
      ...state,
      error: action.error
    };
  }),

Effects.ts

  createRecipe$ = createEffect(() =>
        this.actions$.pipe(
            ofType(fromRecipeActions.addRecipe),
            mergeMap(action =>
                this.recipeService.createRecipe(action.recipe).pipe(
                    map(recipe => fromRecipeActions.addRecipeSuccess({recipe})),
                    catchError(error =>
                        of(fromRecipeActions.addRecipeFailure({ error }))
                    )
                )
            )
        )
    );

Criar Component.ts


  createRecipe(formGroup): void {
    const recipeCreated = {
      recipeTitle: formGroup.recipeTitle
    };
    this.store.dispatch(actions.addRecipe({recipe: recipeCreated}));
    this.router.navigate(['tabs/recipe']);
  }

service.ts

 createRecipe(recipe): Observable<any> {
      return from(this.firestore.collection(`recipes`).add(recipe));
  }


  getRecipes(): Observable<any[]> {
    return this.firestore.collection<Recipe>('recipes').snapshotChanges().pipe(map(arr => {
      return arr.map(doc => {
        const data = doc.payload.doc.data();
        return {
          id: doc.payload.doc.id,
          ...data
        } as Recipe;
    });
  }));
}


  deleteRecipe(recipeId: string) {
    return from(this.firestore.collection<Recipe>('recipes/').doc(recipeId).delete());

  }
pixelbits

Você pode criar um seletor de ID personalizado que tornaria o id opcional:

export const recipeAdapter: EntityAdapter<Recipe> = createEntityAdapter<Recipe>({
   selectId: t => t.id || 0
});

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como atribuir o layout de bolha de envio e recebimento sem criar / passar a ID do usuário para o aplicativo SMS offline no kotlin ..?

Sem permissão para criar um aplicativo do App Engine

Como criar um botão de compartilhamento do Facebook sem SDK ou ID de aplicativo personalizado?

Como passar um objeto para o construtor de serviço no NgModule do aplicativo angular 2/4

Como criar um CDN para um aplicativo em execução no host local / endereço IP sem um domínio (.com)

Como passar um resultado do modal do angular-ui-bootstrap para o pai sem fechar?

Como passar um id de um item com um botão de uma lista de itens para um modal, depois do modal para um controlador?

Como passar o id do item para Swipeable para excluir ou editar o item com este id

Como posso passar um id e uma rota para o meu controlador com Entity Framework

Como faço para passar um único ID de documento do Firestore para outra classe com base em uma seleção usando Flutter / Dart?

Como faço para passar um único ID de documento do Firestore para outra classe com base em uma seleção usando Flutter / Dart?

Como passar um id do item da lista para outra função

Como passar os dados do item para o evento de clique com angular 2?

Como posso passar a id do usuário para um serializador com dados de solicitação?

Como passar o valor do item para a função oracle no aplicativo oracle express?

Como faço para criar um novo aplicativo angular com o comando ng usando a bandeira yarn offline?

Obter o contexto do aplicativo em uma classe sem atividade para passar um arquivo CSV

Como obter o id do aplicativo para o aplicativo iOS com o aplicativo Linkedin?

Como criar um aplicativo para iniciar o Wine e o aplicativo do Windows

Como faço para enviar meu novo item sem criar um novo item de mangusto

Como passar um blob de uma extensão do Chrome para um aplicativo do Chrome

Como passar um blob de uma extensão do Chrome para um aplicativo do Chrome

Redux: como passar um ID para a função mapStateToProps para obter do estado uma entidade com esse ID

Como posso obter o identificador do aplicativo host em um projeto dll com Delphi sem passar o parâmetro de identificador

Como faço para criar um aplicativo sem uma atividade principal no android studio?

Como faço para instalar rails e criar um novo aplicativo sem acesso root?

Como faço para criar um aplicativo Ruby que pode ser executado sem chamar "Ruby" no terminal?

Como testar o aplicativo cliente sem criar um servidor?

Como criar um aplicativo Blazor sem o Visual Studio?

TOP lista

quentelabel

Arquivo