Ngrx selector not triggering updates










0















My state is :



export interface RequestState 
tabsContent: TabContent;



Where TabContent represent an array of visual tabs containing 1 Request each and additionnal infos :



export interface TabContent 
tabInfo: TabInfo;
request: Request;
results?: any;



I have this specialized selector to get one Request from a single TabContent :



export const getRequestForTabInfo = (tabInfo: TabInfo) => createSelector(
getTabContent,
(tabContent: TabContent) =>
const tabContentFiltered = tabContent.filter(tab =>
tab.tabInfo.id === tabInfo.id
&& tab.tabInfo.index === tabInfo.index
&& tab.tabInfo.state === tabInfo.state);
if (tabContentFiltered && tabContentFiltered.length === 1)
return tabContentFiltered[0].request;

return as Request;
,
);


and this basic one to get all TabsContent :



export const getTabContent = createSelector(
getRequestFeatureState,
state => state.tabsContent,
);


based on this FeatureSelector :



const getRequestFeatureState = createFeatureSelector<RequestState>('requests');


Defined in a facade service :



tabsContent$: Observable<TabContent>;
constructor(private store: Store<fromRequest.State>)
this.tabsContent$ = this.store.pipe(
select(fromRequest.getTabContent),
takeUntil(this.componentDestroy()),
);

public getRequest(tabInfo: TabInfo): Observable<Request>
return this.store.pipe(
select(fromRequest.getRequestForTabInfo(tabInfo)),
takeUntil(this.componentDestroy()),
);



and used in the component :



private initializeComponent(): void 
this.requestFacade.getRequest(this.tabInfo).pipe(
takeUntil(this.componentDestroy()),
).subscribe(request =>
console.log('request : ', request);
this.request = request;
);
this.requestFacade.tabsContent$.pipe(
takeUntil(this.componentDestroy()),
).subscribe(tab =>
console.log('tab : ', tab);
);



When the component is consctructed I get both logs, but when I update part of the related state (I update the content of one Request) only the tab log appear.



Why is the filtered selector observable not doing anything ?










share|improve this question






















  • Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.

    – KiraAG
    Nov 14 '18 at 6:22











  • Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change

    – An-droid
    Nov 14 '18 at 8:42















0















My state is :



export interface RequestState 
tabsContent: TabContent;



Where TabContent represent an array of visual tabs containing 1 Request each and additionnal infos :



export interface TabContent 
tabInfo: TabInfo;
request: Request;
results?: any;



I have this specialized selector to get one Request from a single TabContent :



export const getRequestForTabInfo = (tabInfo: TabInfo) => createSelector(
getTabContent,
(tabContent: TabContent) =>
const tabContentFiltered = tabContent.filter(tab =>
tab.tabInfo.id === tabInfo.id
&& tab.tabInfo.index === tabInfo.index
&& tab.tabInfo.state === tabInfo.state);
if (tabContentFiltered && tabContentFiltered.length === 1)
return tabContentFiltered[0].request;

return as Request;
,
);


and this basic one to get all TabsContent :



export const getTabContent = createSelector(
getRequestFeatureState,
state => state.tabsContent,
);


based on this FeatureSelector :



const getRequestFeatureState = createFeatureSelector<RequestState>('requests');


Defined in a facade service :



tabsContent$: Observable<TabContent>;
constructor(private store: Store<fromRequest.State>)
this.tabsContent$ = this.store.pipe(
select(fromRequest.getTabContent),
takeUntil(this.componentDestroy()),
);

public getRequest(tabInfo: TabInfo): Observable<Request>
return this.store.pipe(
select(fromRequest.getRequestForTabInfo(tabInfo)),
takeUntil(this.componentDestroy()),
);



and used in the component :



private initializeComponent(): void 
this.requestFacade.getRequest(this.tabInfo).pipe(
takeUntil(this.componentDestroy()),
).subscribe(request =>
console.log('request : ', request);
this.request = request;
);
this.requestFacade.tabsContent$.pipe(
takeUntil(this.componentDestroy()),
).subscribe(tab =>
console.log('tab : ', tab);
);



When the component is consctructed I get both logs, but when I update part of the related state (I update the content of one Request) only the tab log appear.



Why is the filtered selector observable not doing anything ?










share|improve this question






















  • Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.

    – KiraAG
    Nov 14 '18 at 6:22











  • Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change

    – An-droid
    Nov 14 '18 at 8:42













0












0








0








My state is :



export interface RequestState 
tabsContent: TabContent;



Where TabContent represent an array of visual tabs containing 1 Request each and additionnal infos :



export interface TabContent 
tabInfo: TabInfo;
request: Request;
results?: any;



I have this specialized selector to get one Request from a single TabContent :



export const getRequestForTabInfo = (tabInfo: TabInfo) => createSelector(
getTabContent,
(tabContent: TabContent) =>
const tabContentFiltered = tabContent.filter(tab =>
tab.tabInfo.id === tabInfo.id
&& tab.tabInfo.index === tabInfo.index
&& tab.tabInfo.state === tabInfo.state);
if (tabContentFiltered && tabContentFiltered.length === 1)
return tabContentFiltered[0].request;

return as Request;
,
);


and this basic one to get all TabsContent :



export const getTabContent = createSelector(
getRequestFeatureState,
state => state.tabsContent,
);


based on this FeatureSelector :



const getRequestFeatureState = createFeatureSelector<RequestState>('requests');


Defined in a facade service :



tabsContent$: Observable<TabContent>;
constructor(private store: Store<fromRequest.State>)
this.tabsContent$ = this.store.pipe(
select(fromRequest.getTabContent),
takeUntil(this.componentDestroy()),
);

public getRequest(tabInfo: TabInfo): Observable<Request>
return this.store.pipe(
select(fromRequest.getRequestForTabInfo(tabInfo)),
takeUntil(this.componentDestroy()),
);



and used in the component :



private initializeComponent(): void 
this.requestFacade.getRequest(this.tabInfo).pipe(
takeUntil(this.componentDestroy()),
).subscribe(request =>
console.log('request : ', request);
this.request = request;
);
this.requestFacade.tabsContent$.pipe(
takeUntil(this.componentDestroy()),
).subscribe(tab =>
console.log('tab : ', tab);
);



When the component is consctructed I get both logs, but when I update part of the related state (I update the content of one Request) only the tab log appear.



Why is the filtered selector observable not doing anything ?










share|improve this question














My state is :



export interface RequestState 
tabsContent: TabContent;



Where TabContent represent an array of visual tabs containing 1 Request each and additionnal infos :



export interface TabContent 
tabInfo: TabInfo;
request: Request;
results?: any;



I have this specialized selector to get one Request from a single TabContent :



export const getRequestForTabInfo = (tabInfo: TabInfo) => createSelector(
getTabContent,
(tabContent: TabContent) =>
const tabContentFiltered = tabContent.filter(tab =>
tab.tabInfo.id === tabInfo.id
&& tab.tabInfo.index === tabInfo.index
&& tab.tabInfo.state === tabInfo.state);
if (tabContentFiltered && tabContentFiltered.length === 1)
return tabContentFiltered[0].request;

return as Request;
,
);


and this basic one to get all TabsContent :



export const getTabContent = createSelector(
getRequestFeatureState,
state => state.tabsContent,
);


based on this FeatureSelector :



const getRequestFeatureState = createFeatureSelector<RequestState>('requests');


Defined in a facade service :



tabsContent$: Observable<TabContent>;
constructor(private store: Store<fromRequest.State>)
this.tabsContent$ = this.store.pipe(
select(fromRequest.getTabContent),
takeUntil(this.componentDestroy()),
);

public getRequest(tabInfo: TabInfo): Observable<Request>
return this.store.pipe(
select(fromRequest.getRequestForTabInfo(tabInfo)),
takeUntil(this.componentDestroy()),
);



and used in the component :



private initializeComponent(): void 
this.requestFacade.getRequest(this.tabInfo).pipe(
takeUntil(this.componentDestroy()),
).subscribe(request =>
console.log('request : ', request);
this.request = request;
);
this.requestFacade.tabsContent$.pipe(
takeUntil(this.componentDestroy()),
).subscribe(tab =>
console.log('tab : ', tab);
);



When the component is consctructed I get both logs, but when I update part of the related state (I update the content of one Request) only the tab log appear.



Why is the filtered selector observable not doing anything ?







javascript angular typescript rxjs ngrx






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 13 '18 at 13:51









An-droidAn-droid

3,45452859




3,45452859












  • Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.

    – KiraAG
    Nov 14 '18 at 6:22











  • Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change

    – An-droid
    Nov 14 '18 at 8:42

















  • Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.

    – KiraAG
    Nov 14 '18 at 6:22











  • Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change

    – An-droid
    Nov 14 '18 at 8:42
















Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.

– KiraAG
Nov 14 '18 at 6:22





Because your input argument(tabInfo) hasn't changed, so it is not emitting any new value. Try changing the input argument after updating a relevant part of the state and check whether its working.

– KiraAG
Nov 14 '18 at 6:22













Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change

– An-droid
Nov 14 '18 at 8:42





Of course after changing the input argument of the selector (tabInfo) it's triggering. But that's not how it should work, changes to the state should trigger it. My selector is not supposed to change

– An-droid
Nov 14 '18 at 8:42












0






active

oldest

votes











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282535%2fngrx-selector-not-triggering-updates%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























0






active

oldest

votes








0






active

oldest

votes









active

oldest

votes






active

oldest

votes















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53282535%2fngrx-selector-not-triggering-updates%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

How to how show current date and time by default on contact form 7 in WordPress without taking input from user in datetimepicker

Syphilis

Darth Vader #20