Skip to content

Commit 8e86470

Browse files
committed
Removed superfluous endpoint /dashi/extensions
1 parent 5aa4761 commit 8e86470

File tree

11 files changed

+138
-180
lines changed

11 files changed

+138
-180
lines changed

dashi/src/actions/handleComponentPropertyChange.ts renamed to dashi/src/actions/applyPropertyChange.ts

Lines changed: 27 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,13 @@ import { PropertyChangeEvent } from "../model/event";
1313

1414
import { ContribPoint } from "../model/extension";
1515

16-
export default function handleComponentPropertyChange(
16+
export default function applyPropertyChange(
1717
contribPoint: ContribPoint,
1818
contribIndex: number,
1919
contribEvent: PropertyChangeEvent,
2020
) {
21-
const appState = appStore.getState();
22-
const contributionModels =
23-
appState.contributionsRecordResult.data![contribPoint];
21+
const { contributionModelsRecord } = appStore.getState();
22+
const contributionModels = contributionModelsRecord[contribPoint];
2423
const componentId = contribEvent.componentId;
2524
const componentPropertyName = contribEvent.propertyName;
2625
const componentPropertyValue = contribEvent.propertyValue;
@@ -108,15 +107,14 @@ function applyChangeRequests(changeRequests: ChangeRequest[]) {
108107
contribIndex,
109108
changes,
110109
);
111-
const contributionStatesRecord =
112-
appStore.getState().contributionStatesRecord;
110+
const { contributionStatesRecord } = appStore.getState();
113111
const contributionStates = contributionStatesRecord[contribPoint];
114112
const contributionState = contributionStates[contribIndex];
115-
const componentModelOld = contributionState.componentState;
116-
let componentModel = componentModelOld;
113+
const componentStateOld = contributionState.componentState;
114+
let componentState = componentStateOld;
117115
changes.forEach((change) => {
118-
if (componentModel && (!change.kind || change.kind === "Component")) {
119-
componentModel = updateComponentState(componentModel, change);
116+
if (componentState && (!change.kind || change.kind === "Component")) {
117+
componentState = applyComponentStateChange(componentState, change);
120118
} else {
121119
// TODO: process other output kinds which may not require componentModel.
122120
console.warn(
@@ -125,47 +123,44 @@ function applyChangeRequests(changeRequests: ChangeRequest[]) {
125123
);
126124
}
127125
});
128-
if (componentModel && componentModel !== componentModelOld) {
126+
if (componentState && componentState !== componentStateOld) {
129127
appStore.setState({
130128
contributionStatesRecord: {
131129
...contributionStatesRecord,
132130
[contribPoint]: updateArray<ContributionState>(
133131
contributionStates,
134132
contribIndex,
135-
{
136-
...contributionState,
137-
componentState: componentModel,
138-
},
133+
{ ...contributionState, componentState },
139134
),
140135
},
141136
});
142137
}
143138
});
144139
}
145140

146-
function updateComponentState(
147-
componentModel: ComponentState,
141+
function applyComponentStateChange(
142+
componentState: ComponentState,
148143
change: Change,
149144
): ComponentState {
150-
if (componentModel.id === change.id) {
151-
return { ...componentModel, [change.property]: change.value };
152-
} else if (isContainerState(componentModel)) {
153-
const containerModelOld: ContainerState = componentModel;
154-
let containerModelNew: ContainerState = containerModelOld;
155-
for (let i = 0; i < containerModelOld.components.length; i++) {
156-
const itemOld = containerModelOld.components[i];
157-
const itemNew = updateComponentState(itemOld, change);
145+
if (componentState.id === change.id) {
146+
return { ...componentState, [change.property]: change.value };
147+
} else if (isContainerState(componentState)) {
148+
const containerStateOld: ContainerState = componentState;
149+
let containerStateNew: ContainerState = containerStateOld;
150+
for (let i = 0; i < containerStateOld.components.length; i++) {
151+
const itemOld = containerStateOld.components[i];
152+
const itemNew = applyComponentStateChange(itemOld, change);
158153
if (itemNew !== itemOld) {
159-
if (containerModelNew === containerModelOld) {
160-
containerModelNew = {
161-
...containerModelOld,
162-
components: [...containerModelOld.components],
154+
if (containerStateNew === containerStateOld) {
155+
containerStateNew = {
156+
...containerStateOld,
157+
components: [...containerStateOld.components],
163158
};
164159
}
165-
containerModelNew.components[i] = itemNew;
160+
containerStateNew.components[i] = itemNew;
166161
}
167162
}
168-
return containerModelNew;
163+
return containerStateNew;
169164
}
170-
return componentModel;
165+
return componentState;
171166
}

dashi/src/actions/initAppStore.ts

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
11
import appStore from "../store/appStore";
22
import fetchApiResult from "../utils/fetchApiResult";
3-
import { fetchContributionsRecord, fetchExtensions } from "../api";
3+
import { fetchContributions } from "../api";
44
import { Contribution } from "../model/contribution";
55
import { ContributionState } from "../state/contribution";
6+
import { ContribPoint } from "../model/extension";
67

78
export function initAppStore() {
89
const set = appStore.setState;
910

10-
set({ extensionsResult: { status: "pending" } });
11-
fetchApiResult(fetchExtensions).then((extensionsResult) => {
12-
set({ extensionsResult });
13-
});
14-
15-
set({ contributionsRecordResult: { status: "pending" } });
16-
fetchApiResult(fetchContributionsRecord).then((contributionsRecordResult) => {
17-
if (contributionsRecordResult.data) {
18-
const contributionStatesRecord: Record<string, ContributionState[]> = {};
19-
Object.getOwnPropertyNames(contributionsRecordResult.data).forEach(
20-
(contribPoint) => {
21-
const contributions: Contribution[] =
22-
contributionsRecordResult.data![contribPoint];
23-
contributionStatesRecord[contribPoint] = contributions.map(
24-
(contribution) => ({
25-
title: contribution.title,
26-
visible: contribution.visible,
27-
componentStateResult: {},
28-
}),
29-
);
30-
},
31-
);
32-
set({ contributionsRecordResult, contributionStatesRecord });
33-
} else {
34-
set({ contributionsRecordResult });
35-
}
11+
set({ contributionsResult: { status: "pending" } });
12+
fetchApiResult(fetchContributions).then((contributionsResult) => {
13+
// TODO: assert Boolean(contributionsResult.data)
14+
const { extensions, contributions: contributionModelsRecord } =
15+
contributionsResult.data!;
16+
const contributionStatesRecord: Record<ContribPoint, ContributionState[]> =
17+
{};
18+
Object.getOwnPropertyNames(contributionModelsRecord).forEach(
19+
(contribPoint: ContribPoint) => {
20+
const contributionModels: Contribution[] =
21+
contributionModelsRecord[contribPoint];
22+
contributionStatesRecord[contribPoint] = contributionModels.map(
23+
(contribution) => ({
24+
title: contribution.title,
25+
visible: contribution.visible,
26+
componentStateResult: {},
27+
}),
28+
);
29+
},
30+
);
31+
set({
32+
contributionsResult,
33+
extensions,
34+
contributionModelsRecord,
35+
contributionStatesRecord,
36+
});
3637
});
3738
}

dashi/src/actions/setComponentVisibility.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import appStore from "../store/appStore";
22
import fetchApiResult from "../utils/fetchApiResult";
3-
import { fetchComponentModel } from "../api";
3+
import { fetchInitialComponentState } from "../api";
44
import { updateContributionState } from "./updateContributionState";
55

66
import { ContribPoint } from "../model/extension";
@@ -26,7 +26,7 @@ export function setComponentVisibility(
2626
});
2727
const inputValues = getLayoutInputValues(contribPoint, panelIndex);
2828
fetchApiResult(
29-
fetchComponentModel,
29+
fetchInitialComponentState,
3030
contribPoint,
3131
panelIndex,
3232
inputValues,
@@ -44,8 +44,8 @@ function getLayoutInputValues(
4444
contribPoint: ContribPoint,
4545
contribIndex: number,
4646
): unknown[] {
47-
const contributionModels =
48-
appStore.getState().contributionsRecordResult.data![contribPoint];
47+
const { contributionModelsRecord } = appStore.getState();
48+
const contributionModels = contributionModelsRecord[contribPoint];
4949
const contributionModel = contributionModels[contribIndex];
5050
const inputs = contributionModel.layout!.inputs;
5151
if (inputs && inputs.length > 0) {

dashi/src/api.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,15 @@
11
import { ComponentState } from "./state/component";
2-
import { ContribPoint, Extension } from "./model/extension";
3-
import { Contribution } from "./model/contribution";
2+
import { ContribPoint, Contributions } from "./model/extension";
43
import { CallbackCallRequest, ChangeRequest } from "./model/callback";
54
import { callApi } from "./utils/fetchApiResult";
65

76
const serverUrl = "http://localhost:8888";
87

9-
export async function fetchExtensions(): Promise<Extension[]> {
10-
return callApi(`${serverUrl}/dashi/extensions`);
11-
}
12-
13-
export async function fetchContributionsRecord(): Promise<
14-
Record<ContribPoint, Contribution[]>
15-
> {
8+
export async function fetchContributions(): Promise<Contributions> {
169
return callApi(`${serverUrl}/dashi/contributions`);
1710
}
1811

19-
export async function fetchComponentModel(
12+
export async function fetchInitialComponentState(
2013
contribPoint: ContribPoint,
2114
contribIndex: number,
2215
inputValues: unknown[],

dashi/src/app/ExtensionInfo.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import useAppStore from "../store/appStore";
22
import { Typography } from "@mui/material";
33

44
function ExtensionsInfo() {
5-
const appState = useAppStore();
6-
const extensionsResult = appState.extensionsResult;
7-
if (extensionsResult.data) {
5+
const contributionsResult = useAppStore((state) => state.contributionsResult);
6+
const extensions = useAppStore((state) => state.extensions);
7+
if (contributionsResult.status === "ok") {
88
return (
99
<div style={{ display: "flex", gap: 5 }}>
10-
{extensionsResult.data.map((extension, extIndex) => {
10+
{extensions.map((extension, extIndex) => {
1111
const id = `extensions.${extIndex}`;
1212
return (
1313
<Typography
@@ -19,10 +19,10 @@ function ExtensionsInfo() {
1919
})}
2020
</div>
2121
);
22-
} else if (extensionsResult.error) {
23-
return <div>Error: {extensionsResult.error.message}</div>;
24-
} else if (extensionsResult.status === "pending") {
25-
return <div>{`Loading extensions...`}</div>;
22+
} else if (contributionsResult.error) {
23+
return <div>Error: {contributionsResult.error.message}</div>;
24+
} else if (contributionsResult.status === "pending") {
25+
return <div>{`Loading contributions...`}</div>;
2626
}
2727
return null;
2828
}

dashi/src/app/PanelsControl.tsx

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,23 @@ import { ContribPoint } from "../model/extension";
88
const contribPoint: ContribPoint = "panels";
99

1010
function PanelsControl() {
11-
const appState = useAppStore();
12-
13-
const contributionsRecordResult = appState.contributionsRecordResult;
14-
const contributionsRecord = contributionsRecordResult.data;
15-
if (!contributionsRecord) {
11+
const contributionModelsRecord = useAppStore(
12+
(state) => state.contributionModelsRecord,
13+
);
14+
const contributionStatesRecord = useAppStore(
15+
(state) => state.contributionStatesRecord,
16+
);
17+
const panelModels = contributionModelsRecord[contribPoint];
18+
const panelStates = contributionStatesRecord[contribPoint];
19+
if (!panelModels || !panelStates) {
20+
// Ok, not ready yet
1621
return null;
1722
}
18-
const panelModels = contributionsRecord[contribPoint];
19-
const panelStates = appState.contributionStatesRecord[contribPoint];
20-
if (
21-
!panelModels ||
22-
!panelStates ||
23-
panelModels.length != panelStates?.length
24-
) {
23+
// TODO: assert panelModels.length === panelStates.length
24+
if (panelModels.length != panelStates?.length) {
2525
throw Error("internal state error");
2626
}
27+
2728
return (
2829
<FormGroup>
2930
{panelStates.map((panelState, panelIndex) => {

0 commit comments

Comments
 (0)