Skip to content

Commit 65e0e9f

Browse files
committed
Link Send request & response data to properly support multiple tabs
1 parent 78a6c4c commit 65e0e9f

File tree

4 files changed

+35
-21
lines changed

4 files changed

+35
-21
lines changed

src/components/send/request-pane.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export class RequestPane extends React.Component<{
5656
editorNode: portals.HtmlPortalNode<typeof ContainerSizedEditor>,
5757

5858
requestInput: RequestInput,
59-
sendRequest: (requestInput: RequestInput) => void
59+
sendRequest: () => void
6060
}> {
6161

6262
get cardProps() {
@@ -152,7 +152,7 @@ export class RequestPane extends React.Component<{
152152
this.isSending = true;
153153

154154
try {
155-
yield this.props.sendRequest(this.props.requestInput);
155+
yield this.props.sendRequest();
156156
} catch (e) {
157157
console.warn('Sending request failed', e);
158158
} finally {

src/components/send/send-page.tsx

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@ export class SendPage extends React.Component<{
3333

3434
render() {
3535
const {
36-
requestInputs,
37-
sendRequest,
38-
sentExchange
36+
sendRequests,
37+
sendRequest
3938
} = this.props.sendStore!;
4039

40+
const focusedSendRequest = sendRequests[0];
41+
4142
return <SendPageContainer>
4243
<SplitPane
4344
split='vertical'
@@ -47,13 +48,13 @@ export class SendPage extends React.Component<{
4748
maxSize={-300}
4849
>
4950
<RequestPane
50-
requestInput={requestInputs[0]}
51-
sendRequest={sendRequest}
51+
requestInput={focusedSendRequest.request}
52+
sendRequest={() => sendRequest(focusedSendRequest)}
5253
editorNode={this.requestEditorNode}
5354
/>
5455
<ResponsePane
55-
requestInput={requestInputs[0]}
56-
exchange={sentExchange}
56+
requestInput={focusedSendRequest.request}
57+
exchange={focusedSendRequest.sentExchange}
5758
editorNode={this.responseEditorNode}
5859
/>
5960
</SplitPane>

src/model/send/send-request-model.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,12 @@ export class RequestInput {
6666

6767
}
6868

69-
export const requestInputSchema = serializr.createModelSchema(RequestInput, {
69+
export interface SendRequest {
70+
request: RequestInput,
71+
sentExchange: HttpExchange | undefined
72+
}
73+
74+
const requestInputSchema = serializr.createModelSchema(RequestInput, {
7075
method: serializr.primitive(),
7176
url: serializr.primitive(),
7277
headers: serializr.list(serializr.list(serializr.primitive())),
@@ -85,6 +90,11 @@ export const requestInputSchema = serializr.createModelSchema(RequestInput, {
8590
});
8691
});
8792

93+
export const sendRequestSchema = serializr.createSimpleSchema({
94+
request: serializr.object(requestInputSchema),
95+
sentExchange: false // Never persisted here
96+
});
97+
8898
export async function buildRequestInputFromExchange(exchange: HttpExchange): Promise<RequestInput> {
8999
const body = await exchange.request.body.decodedPromise ??
90100
Buffer.from('!!! ORIGINAL REQUEST BODY COULD NOT BE DECODED !!!');

src/model/send/send-store.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@ import {
2727
buildRequestInputFromExchange,
2828
ClientProxyConfig,
2929
RequestInput,
30-
requestInputSchema,
31-
RULE_PARAM_REF_KEY
30+
SendRequest,
31+
RULE_PARAM_REF_KEY,
32+
sendRequestSchema
3233
} from './send-request-model';
3334

3435
export class SendStore {
@@ -55,18 +56,18 @@ export class SendStore {
5556
}
5657

5758
autorun(() => {
58-
if (this.requestInputs.length === 0) this.addRequestInput();
59+
if (this.sendRequests.length === 0) this.addRequestInput();
5960
})
6061

6162
console.log('Send store initialized');
6263
});
6364

64-
@persist('list', requestInputSchema) @observable
65-
requestInputs: RequestInput[] = [];
65+
@persist('list', sendRequestSchema) @observable
66+
sendRequests: Array<SendRequest> = [];
6667

6768
@action.bound
6869
addRequestInput(requestInput = new RequestInput()): RequestInput {
69-
this.requestInputs[0] = requestInput;
70+
this.sendRequests[0] = { request: requestInput, sentExchange: undefined };
7071
return requestInput;
7172
}
7273

@@ -78,12 +79,14 @@ export class SendStore {
7879
);
7980
}
8081

81-
@observable
82-
sentExchange: HttpExchange | undefined;
83-
84-
readonly sendRequest = async (requestInput: RequestInput) => {
82+
readonly sendRequest = async (sendRequest: SendRequest) => {
8583
trackEvent({ category: 'Send', action: 'Sent request' });
8684

85+
const requestInput = sendRequest.request;
86+
runInAction(() => {
87+
sendRequest.sentExchange = undefined;
88+
});
89+
8790
const exchangeId = uuid();
8891

8992
const passthroughOptions = this.rulesStore.activePassthroughOptions;
@@ -146,7 +149,7 @@ export class SendStore {
146149
}));
147150

148151
runInAction(() => {
149-
this.sentExchange = exchange;
152+
sendRequest.sentExchange = exchange;
150153
});
151154
}
152155

0 commit comments

Comments
 (0)