Merge effects into a single NgRx store

I am trying to merge similar effects into one, but I'm not sure how to do it.

Below are the effects I have (I need to pass different id depending on the action type):

setTopics$ = createEffect(
  () => this.actions$.pipe(
    ofType(setTopics),
    map((action) => 
      this.service.set(action.payload.id))),
  { dispatch: false });

setHeadlines$ = createEffect(
  () => this.actions$.pipe(
    ofType(setHeadlines),
    map((action) => 
      this.service.set(`ldb:${action.payload.id}:0`))),
  { dispatch: false });

I attempted to combine actions using ofType(setTopics,setHeadlines), but I'm unsure how to pass different ids in this.service.set().

Any help would be greatly appreciated!

Answer №1

There are two approaches to accomplishing this:

  1. If you want the effect to be specific to what it receives, use the set headlines action to set ldb:<id>:0 in the payload as the label. The setTopics payload will then set the label same as the id (or if the label does not exist in setTopics, check if the label exists in the effect and use the label, otherwise use the id).
  2. If being generic is not a concern, try something like this:
if (action.type === actionsType.ACTION1) {
    value = action.payload.id
  } else if (action.type === actionsType.ACTION2) {
    value = `ldb:${action.payload.id}:0`
  }
this.service.set(`ldb:${action.payload.id}:0`)

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

What are the steps to input text into a textbox on a different domain using my own domain?

Is it possible to input a value into a textbox on a different domain, to which I do not have access, by submitting a form from my own domain? Here is the form on my domain: <form action="" method="post" name="birthdaysend"> <input type="text" v ...

What is the correct way to align text in jsPDF?

I'm currently encountering an issue with the jsPDF library. Although PDF generation works fine, I am struggling to justify text properly. The align: 'justify' attribute seems to function the same as align: 'left', and setting a spe ...

Randomize elements with the click of a button

Every time the page refreshes, the words shuffle around. For instance, "May I# know# your name?" shuffles to "know May I your name". To display the correct sentence with "#" as "May I know your name?", click the SHUFFLE button to trigger the shuffling. HT ...

Switching classes in real time with JavaScript

I'm struggling to understand how to toggle a class based on the anchor text that is clicked. <div> <a id="Menu1" href="#">Menu</a> <div id="subMenu1" class="subLevel"> <p>stuff</p> </div> <div> <a i ...

Problems Encountered with Basic JSON-P Example

I am currently working on a mobile app project that involves fetching JSON data from a MySQL database using PHP. This is a new venture for me, so I started with a basic example to test things out. Everything works fine when the data is on the same domain, ...

Incorporate a Variety of Elements onto Your Webpage

I have developed a custom tooltip plugin using JQuery, and I am implementing it on multiple A tags. Each A tag should have a unique tooltip associated with it, so I have the following code: var $tooltip = $("<div>").attr("id", tooltip.id).attr("cla ...

Installation of the package was unsuccessful: npm encountered an error with code ERESOLVE, indicating that it was unable to destructure the property 'name' from 'node' as it is currently null

Mohameds-MacBook-Air:client sakeeljawfer$ ng add @ng-bootstrap/ng-bootstrap ℹ Using package manager: npm ✔ Found compatible package version: @ng-bootstrap/<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="c6a ...

Enhance the Vue.js performance by preloading components

After discovering the benefits of lazy loading components, I decided to start implementing it in my project. However, I encountered some issues when trying to prefetch the lazy loaded components and vue-router routes. Upon inspecting with Chrome DevTools, ...

Enhance multiple select functionality

I am currently working on a function to dynamically update the options in a select input based on the selection made in another select input. Specifically, when Method1 is selected, I want only the options 1A, 1B, and 1C to appear in the second select. S ...

In Javascript, the color can be changed by clicking on an object, and the color

Looking for help with my current HTML code: <li><a href="index.php" id="1" onclick="document.getElementById('1').style.background = '#8B4513';">Weblog</a></li> The color changes while clicking, but when the lin ...

Set element back to its default state

When working with JavaScript, how do you go about restoring the default behavior of a DOM element's event handler? For instance, let's say you've set the onkeypress event for an input element: elem.onkeypress = function() { alert("Key pres ...

Differences in JSON parsing behavior between Chrome and Firefox

I encountered an unusual issue with the return error of JSON.parse() function: I am using this function to validate a JSON string obtained from a web-based editor. The string is pre-manipulated using the JSON.stringify() function. To be more specific: JSO ...

Passing information from the main component to a service through API connections

Currently, I am in the process of developing a website dedicated to showcasing the top 20 highest-rated Sci-fi movies. The main component on the homepage leverages a GET request via a service to fetch an array of objects containing the movie data. This mov ...

What is the best way to automatically log out a user once their session cookie has expired during an online exam?

While developing an MVC ExpressJS Test app, I encountered an issue with auto-logout functionality for users who stop answering test questions. The error message "Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client" keeps app ...

Skip ahead button for fast forwarding html5 video

One of the features in my video player is a skip button that allows users to jump to the end of the video. Below is the HTML code for the video player: <video id="video1" style="height: 100%" class="video-js vjs-default-skin" controls muted autoplay=" ...

What is the best way to implement a timer or interval system in React and Next.js that continues running even when the tab is not in focus or the browser is in

I am attempting to create a stopwatch feature using next js. However, I have encountered an unusual issue where the stopwatch does not function correctly when the tab is not focused or when the system goes to sleep or becomes inactive. It appears that the ...

There appears to be an issue with displaying the graph

I am having trouble understanding how to transfer the values entered in the input to the graph that is displayed successfully. Although the update seems correct, nothing changes when I try to update it and the data remains stagnant. Page.vue <script&g ...

"Delve into the art of utilizing negative space between elements with

Looking to implement hover detection between rows in a grid container, rather than on individual items. The number of items in the container and per row may vary. https://i.sstatic.net/yBgKI.png It's important to note that the item count in the cont ...

Tips for positioning a chat box at the bottom of a v-card's visible area

My goal is to create a chat app using Vuejs 3 and Vuetify 3, but I'm encountering an issue aligning the chatbox with the v-card component. Instead of being positioned at the bottom of the v-card, the chatbox (green) appears at the bottom of the page. ...

Are there advantages to incorporating d3.js through npm in an Angular 2 TypeScript project?

Summary: It is recommended to install d3.js via npm along with the typings. The accepted answer provides more details on this issue. This question was asked during my initial stages of learning Angular. The npm process is commonly used for tree-shaking, pa ...