legacy UI defaults to showing all users (#1430)

This is basically a backport of #1371 to the legacy UI.

Test plan: Manual inspection verifies it's doing the right thing. `yarn
test` passes.

Part of https://discourse.sourcecred.io/t/fixup-legacy-explorer/316
This commit is contained in:
Dandelion Mané 2019-10-28 23:55:53 -06:00 committed by GitHub
parent dfc7ee8524
commit d47e6e28c0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 37 deletions

View File

@ -20,7 +20,6 @@ import {
type StateTransitionMachineInterface,
initialState,
} from "./state";
import {userNodeType} from "../../plugins/github/declaration";
const credOverviewUrl =
"https://discourse.sourcecred.io/t/a-gentle-introduction-to-cred/20";
@ -116,7 +115,6 @@ export function createApp(
const pnd = appState.pagerankNodeDecomposition;
pagerankTable = (
<PagerankTable
defaultNodeType={userNodeType}
weightConfig={weightConfig}
weightFileManager={weightFileManager}
manualWeights={this.state.weights.nodeManualWeights}

View File

@ -8,7 +8,6 @@ import {WeightsFileManager} from "../../weights/WeightsFileManager";
import {Graph, NodeAddress, type NodeAddressT} from "../../../core/graph";
import type {PagerankNodeDecomposition} from "../../../analysis/pagerankNodeDecomposition";
import {NodeRowList} from "./Node";
import {type NodeType} from "../../../analysis/types";
import {type PluginDeclaration} from "../../../analysis/pluginDeclaration";
type PagerankTableProps = {|
@ -16,27 +15,23 @@ type PagerankTableProps = {|
+declarations: $ReadOnlyArray<PluginDeclaration>,
+graph: Graph,
+maxEntriesPerList: number,
+defaultNodeType: ?NodeType,
+manualWeights: Map<NodeAddressT, number>,
+onManualWeightsChange: (NodeAddressT, number) => void,
+weightConfig: React$Element<typeof WeightConfig>,
+weightFileManager: React$Element<typeof WeightsFileManager>,
|};
type PagerankTableState = {|
selectedNodeTypePrefix: NodeAddressT,
selectedNodeTypePrefix: NodeAddressT | null,
showWeightConfig: boolean,
|};
export class PagerankTable extends React.PureComponent<
PagerankTableProps,
PagerankTableState
> {
constructor(props: PagerankTableProps): void {
constructor(): void {
super();
const {defaultNodeType} = props;
const selectedNodeTypePrefix =
defaultNodeType != null ? defaultNodeType.prefix : NodeAddress.empty;
this.state = {
selectedNodeTypePrefix,
selectedNodeTypePrefix: null,
showWeightConfig: false,
};
}
@ -135,6 +130,15 @@ export class PagerankTable extends React.PureComponent<
onManualWeightsChange,
graph,
};
const userTypes = [].concat(...declarations.map((p) => p.userTypes));
const userPrefixes = userTypes.map((x) => x.prefix);
const filterAllUsers = (n) =>
userPrefixes.some((p) => NodeAddress.hasPrefix(n, p));
const {selectedNodeTypePrefix} = this.state;
const nodeFilter =
selectedNodeTypePrefix == null
? filterAllUsers
: (n) => NodeAddress.hasPrefix(n, selectedNodeTypePrefix);
return (
<table
style={{
@ -155,9 +159,7 @@ export class PagerankTable extends React.PureComponent<
<tbody>
<NodeRowList
sharedProps={sharedProps}
nodes={Array.from(pnd.keys()).filter((node) =>
NodeAddress.hasPrefix(node, this.state.selectedNodeTypePrefix)
)}
nodes={Array.from(pnd.keys()).filter(nodeFilter)}
/>
</tbody>
</table>

View File

@ -9,12 +9,11 @@ import {PagerankTable} from "./Table";
import {example, COLUMNS} from "./sharedTestUtils";
import {NodeRowList} from "./Node";
import {WeightConfig} from "../../weights/WeightConfig";
import {type NodeType} from "../../../analysis/types";
require("../../../webutil/testUtil").configureEnzyme();
describe("explorer/legacy/pagerankTable/Table", () => {
describe("PagerankTable", () => {
async function setup(defaultNodeType?: NodeType) {
async function setup() {
const {
pnd,
sharedProps,
@ -26,7 +25,6 @@ describe("explorer/legacy/pagerankTable/Table", () => {
} = await example();
const element = shallow(
<PagerankTable
defaultNodeType={defaultNodeType}
weightConfig={weightConfig}
weightFileManager={weightFileManager}
pnd={pnd}
@ -122,9 +120,8 @@ describe("explorer/legacy/pagerankTable/Table", () => {
const value = option.prop("value");
expect(value).not.toEqual(NodeAddress.empty);
const previousNodes = element.find("NodeRowList").prop("nodes");
expect(
previousNodes.every((n) => NodeAddress.hasPrefix(n, value))
).toBe(false);
// No user nodes, so no nodes shown
expect(previousNodes).toHaveLength(0);
element.find("select").simulate("change", {target: {value}});
const actualNodes = element.find("NodeRowList").prop("nodes");
expect(actualNodes.every((n) => NodeAddress.hasPrefix(n, value))).toBe(
@ -134,20 +131,7 @@ describe("explorer/legacy/pagerankTable/Table", () => {
});
it("filter defaults to show all if defaultNodeType not passed", async () => {
const {element} = await setup();
expect(element.state().selectedNodeTypePrefix).toEqual(
NodeAddress.empty
);
});
it("selectedNodeTypePrefix defaults to provided NodeType, if available", async () => {
const nodeType: NodeType = {
name: "testNodeType",
pluralName: "testNodeTypes",
prefix: NodeAddress.fromParts(["foo"]),
defaultWeight: 1,
description: "test type",
};
const {element} = await setup(nodeType);
expect(element.state().selectedNodeTypePrefix).toEqual(nodeType.prefix);
expect(element.state().selectedNodeTypePrefix).toEqual(null);
});
});
@ -157,11 +141,10 @@ describe("explorer/legacy/pagerankTable/Table", () => {
const nrl = element.find(NodeRowList);
expect(nrl.props().sharedProps).toEqual(sharedProps);
});
it("including all nodes by default", async () => {
const {element, pnd} = await setup();
it("including all user nodes by default", async () => {
const {element} = await setup();
const nrl = element.find(NodeRowList);
const expectedNodes = Array.from(pnd.keys());
expect(nrl.props().nodes).toEqual(expectedNodes);
expect(nrl.props().nodes).toEqual([]);
});
});
});