Skip to content

Commit 75f7343

Browse files
committed
Refactor 'build rule from exchange' logic up into the View page
1 parent c8960b1 commit 75f7343

File tree

3 files changed

+22
-10
lines changed

3 files changed

+22
-10
lines changed

src/components/view/http/http-details-footer.tsx

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export const HttpDetailsFooter = inject('rulesStore')(
9494
event: CollectedEvent,
9595
onDelete: (event: CollectedEvent) => void,
9696
onScrollToEvent: (event: CollectedEvent) => void,
97+
onBuildRuleFromExchange: (event: HttpExchange) => void,
9798
isPaidUser: boolean,
9899
navigate: (url: string) => void
99100
}) => {
@@ -117,15 +118,7 @@ export const HttpDetailsFooter = inject('rulesStore')(
117118
<MockButton
118119
isExchange={event.isHttp()}
119120
isPaidUser={props.isPaidUser}
120-
onClick={() => {
121-
const rule = buildRuleFromExchange(
122-
event as HttpExchange
123-
);
124-
runInAction(() => {
125-
props.rulesStore!.draftRules.items.unshift(rule);
126-
});
127-
props.navigate(`/mock/${rule.id}`);
128-
}}
121+
onClick={() => props.onBuildRuleFromExchange(props.event as HttpExchange)}
129122
/>
130123
</ButtonsContainer>;
131124
}

src/components/view/http/http-details-pane.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ export class HttpDetailsPane extends React.Component<{
7171
navigate: (path: string) => void,
7272
onDelete: (event: CollectedEvent) => void,
7373
onScrollToEvent: (event: CollectedEvent) => void,
74+
onBuildRuleFromExchange: (exchange: HttpExchange) => void,
7475

7576
// Injected:
7677
uiStore?: UiStore,
@@ -87,6 +88,7 @@ export class HttpDetailsPane extends React.Component<{
8788
exchange,
8889
onDelete,
8990
onScrollToEvent,
91+
onBuildRuleFromExchange,
9092
uiStore,
9193
accountStore,
9294
navigate
@@ -135,6 +137,7 @@ export class HttpDetailsPane extends React.Component<{
135137
event={exchange}
136138
onDelete={onDelete}
137139
onScrollToEvent={onScrollToEvent}
140+
onBuildRuleFromExchange={onBuildRuleFromExchange}
138141
navigate={navigate}
139142
isPaidUser={isPaidUser}
140143
/>

src/components/view/view-page.tsx

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ import { UnreachableCheck } from '../../util/error';
2222
import { UiStore } from '../../model/ui-store';
2323
import { ProxyStore } from '../../model/proxy-store';
2424
import { EventsStore } from '../../model/events/events-store';
25+
import { RulesStore } from '../../model/rules/rules-store';
2526
import { HttpExchange } from '../../model/http/exchange';
2627
import { FilterSet } from '../../model/filters/search-filters';
28+
import { buildRuleFromExchange } from '../../model/rules/rule-creation';
2729

2830
import { SplitPane } from '../split-pane';
2931
import { EmptyState } from '../common/empty-state';
@@ -43,6 +45,7 @@ interface ViewPageProps {
4345
eventsStore: EventsStore;
4446
proxyStore: ProxyStore;
4547
uiStore: UiStore;
48+
rulesStore: RulesStore,
4649
navigate: (path: string) => void;
4750
eventId?: string;
4851
}
@@ -103,6 +106,7 @@ type EditorKey = typeof EDITOR_KEYS[number];
103106
@inject('eventsStore')
104107
@inject('proxyStore')
105108
@inject('uiStore')
109+
@inject('rulesStore')
106110
@observer
107111
class ViewPage extends React.Component<ViewPageProps> {
108112

@@ -268,6 +272,7 @@ class ViewPage extends React.Component<ViewPageProps> {
268272
navigate={this.props.navigate}
269273
onDelete={this.onDelete}
270274
onScrollToEvent={this.onScrollToCenterEvent}
275+
onBuildRuleFromExchange={this.onBuildRuleFromExchange}
271276
/>;
272277
} else if (this.selectedEvent.isTlsFailure()) {
273278
rightPane = <TlsFailureDetailsPane
@@ -402,6 +407,15 @@ class ViewPage extends React.Component<ViewPageProps> {
402407
event.pinned = !event.pinned;
403408
}
404409

410+
@action.bound
411+
onBuildRuleFromExchange(exchange: HttpExchange) {
412+
const { rulesStore, navigate } = this.props;
413+
414+
const rule = buildRuleFromExchange(exchange);
415+
rulesStore!.draftRules.items.unshift(rule);
416+
navigate(`/mock/${rule.id}`);
417+
}
418+
405419
@action.bound
406420
onDelete(event: CollectedEvent) {
407421
const { filteredEvents } = this.filteredEventState;
@@ -492,7 +506,9 @@ const LeftPane = styled.div`
492506

493507
const StyledViewPage = styled(
494508
// Exclude stores etc from the external props, as they're injected
495-
ViewPage as unknown as WithInjected<typeof ViewPage, 'uiStore' | 'proxyStore' | 'eventsStore' | 'navigate'>
509+
ViewPage as unknown as WithInjected<typeof ViewPage,
510+
'uiStore' | 'proxyStore' | 'eventsStore' | 'rulesStore' | 'navigate'
511+
>
496512
)`
497513
height: 100vh;
498514
position: relative;

0 commit comments

Comments
 (0)