1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
import { createSelector } from "reselect";
import { shallowEqual, arrayShallowEqual } from "../utils/shallow-equal";
import { getSelectedSource, getSourceActorsForSource } from "./";
export const getSelectedSourceExceptions = createSelector(
getSelectedSourceActors,
// Do not retrieve mutableExceptionsMap as it will never change and createSelector would
// prevent re-running the selector in case of modification. state.exception is the `state`
// in the reducer, which we take care of cloning in case of new exception.
state => state.exceptions,
(sourceActors, exceptionsState) => {
const { mutableExceptionsMap } = exceptionsState;
const sourceExceptions = [];
for (const sourceActor of sourceActors) {
const exceptions = mutableExceptionsMap.get(sourceActor.id);
if (exceptions) {
sourceExceptions.push(...exceptions);
}
}
return sourceExceptions;
},
// Shallow compare both input and output because of arrays being possibly always
// different instance but with same content.
{
memoizeOptions: {
equalityCheck: shallowEqual,
resultEqualityCheck: arrayShallowEqual,
},
}
);
function getSelectedSourceActors(state) {
const selectedSource = getSelectedSource(state);
if (!selectedSource) {
return [];
}
return getSourceActorsForSource(state, selectedSource.id);
}
export function getSelectedException(state, line, column) {
const sourceExceptions = getSelectedSourceExceptions(state);
if (!sourceExceptions) {
return undefined;
}
return sourceExceptions.find(
sourceExc =>
sourceExc.lineNumber === line && sourceExc.columnNumber === column
);
}
|