Skip to content

Commit 1196468

Browse files
Merge pull request #346 from kubeshop/mm/fix/policiesforms
fix: policies form
2 parents a0fb616 + 68d5ce8 commit 1196468

File tree

12 files changed

+132
-164
lines changed

12 files changed

+132
-164
lines changed

src/components/ApiDetails/ApiPaths/ApiPolicies/ApiPolicies.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {
1414
AuthenticationPolicy,
1515
CORSPolicy,
1616
CachingPolicy,
17-
MockingPolicy,
1817
QOSPolicy,
1918
RateLimitingPolicy,
2019
TargetsPolicy,
@@ -104,9 +103,7 @@ const ApiPolicies = () => {
104103
{activePolicy === 'websocket' && (
105104
<WebsocketPolicy xKusk={selectedXKusk} onCancel={onCancelClickHandler} onFinish={onFinishClickHandler} />
106105
)}
107-
{activePolicy === 'mocking' && (
108-
<MockingPolicy xKusk={selectedXKusk} onCancel={onCancelClickHandler} onFinish={onFinishClickHandler} />
109-
)}
106+
110107
{activePolicy === 'caching' && (
111108
<CachingPolicy xKusk={selectedXKusk} onCancel={onCancelClickHandler} onFinish={onFinishClickHandler} />
112109
)}

src/components/Policies/Caching.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Form, Input, Typography} from 'antd';
1+
import {Form, Input} from 'antd';
22

33
import {FormCard} from '@components/FormComponents';
44

@@ -19,18 +19,18 @@ const Caching = ({xKusk, onFinish, onCancel}: IProps) => {
1919
subHeading="Current support for caching is experimental"
2020
helpTopic="Caching"
2121
helpLink="https://docs.kusk.io/guides/cache"
22-
formProps={{onFinish, form}}
22+
formProps={{onFinish, form, layout: 'vertical'}}
2323
cancelEditMode={onCancel}
2424
>
2525
<S.CardItem>
26-
<Typography.Text type="secondary">Max age (in seconds)</Typography.Text>
2726
<Form.Item hidden name={['x-kusk', 'cache', 'enabled']} initialValue={Boolean(true)} />
2827

2928
<Form.Item
3029
name={['x-kusk', 'cache', 'max_age']}
30+
label="Max age (in seconds)"
3131
initialValue={xKusk?.cache?.max_age}
3232
getValueFromEvent={e => Number(e.target.value)}
33-
rules={[{required: true}]}
33+
rules={[{required: true, message: 'Set cache max age'}]}
3434
>
3535
<Input type="number" placeholder="ex: 60" />
3636
</Form.Item>

src/components/Policies/Mocking.tsx

Lines changed: 0 additions & 35 deletions
This file was deleted.

src/components/Policies/RateLimiting.tsx

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,16 @@ const RateLimiting = ({xKusk, onCancel, onFinish}: IProps) => {
3535
helpLink="https://docs.kusk.io/extension/#rate-limiting"
3636
formProps={{onFinish: onSaveClickHandler, form}}
3737
cancelEditMode={onCancel}
38-
enableSaveButton
3938
>
4039
<CardLayout>
4140
<S.CardItem>
4241
<Typography.Text>Requests per unit</Typography.Text>
4342
<Form.Item
4443
name={['x-kusk', 'rate_limit', 'requests_per_unit']}
45-
initialValue={xKusk?.rate_limit?.requests_per_unit || 60}
44+
initialValue={xKusk?.rate_limit?.requests_per_unit}
4645
getValueFromEvent={e => Number(e.target.value)}
4746
>
48-
<Input type="number" />
47+
<Input type="number" placeholder="ex: 60" />
4948
</Form.Item>
5049
</S.CardItem>
5150

@@ -64,10 +63,10 @@ const RateLimiting = ({xKusk, onCancel, onFinish}: IProps) => {
6463
<Typography.Text>Response code</Typography.Text>
6564
<Form.Item
6665
name={['x-kusk', 'rate_limit', 'response_code']}
67-
initialValue={xKusk?.rate_limit?.response_code || 405}
66+
initialValue={xKusk?.rate_limit?.response_code}
6867
getValueFromEvent={e => Number(e.target.value)}
6968
>
70-
<Input type="number" />
69+
<Input type="number" placeholder="ex: 405" />
7170
</Form.Item>
7271
</S.CardItem>
7372
</CardLayout>

src/components/Policies/TargetForm/TargetForm.tsx

Lines changed: 0 additions & 104 deletions
This file was deleted.

src/components/Policies/TargetForm/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/components/Policies/Targets.tsx

Lines changed: 116 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
import {Button, Form} from 'antd';
2+
13
import _ from 'lodash';
24

5+
import {TargetType} from '@models/ui';
6+
37
import {FormCard} from '@components/FormComponents';
48

5-
import {TargetForm} from './TargetForm';
9+
import Mocking from './Targets/Mocking';
10+
import Redirect from './Targets/Redirect';
11+
import Upstream from './Targets/Upstream';
612

713
import * as S from './styled';
814

@@ -13,6 +19,23 @@ interface IProps {
1319
}
1420

1521
const Targets = ({xKusk, onFinish, onCancel}: IProps) => {
22+
const [form] = Form.useForm();
23+
24+
const routingType: TargetType = xKusk?.mocking
25+
? 'mocked'
26+
: xKusk?.redirect
27+
? 'redirect'
28+
: xKusk?.upstream?.host
29+
? 'host'
30+
: 'service';
31+
32+
const targetSelection = Form.useWatch<TargetType>('type', form);
33+
34+
const xKuskForm = _.set(_.cloneDeep(xKusk), 'upstream.rewrite.rewrite_regex', {
35+
pattern: xKusk?.upstream?.rewrite?.pattern,
36+
substitution: xKusk?.upstream?.rewrite?.substitution,
37+
});
38+
1639
const onSaveClickHandler = (values: any) => {
1740
let {redirect = null, upstream: {service = null, host = null, rewrite = null} = {}, mocking = null} = values;
1841
if (rewrite) {
@@ -31,23 +54,108 @@ const Targets = ({xKusk, onFinish, onCancel}: IProps) => {
3154

3255
onFinish(edits);
3356
};
34-
const xKuskForm = _.set(_.cloneDeep(xKusk), 'upstream.rewrite.rewrite_regex', {
35-
pattern: xKusk?.upstream?.rewrite?.pattern,
36-
substitution: xKusk?.upstream?.rewrite?.substitution,
37-
});
57+
58+
const changeRoutingType = (type: TargetType) => {
59+
if (type === 'mocked') {
60+
return {
61+
type,
62+
'x-kusk': {
63+
upstream: null,
64+
redirect: null,
65+
mocking: {
66+
enabled: true,
67+
},
68+
},
69+
};
70+
}
71+
if (type === 'redirect') {
72+
return {
73+
type,
74+
'x-kusk': {
75+
upstream: null,
76+
mocking: null,
77+
redirect: xKusk?.redirect,
78+
},
79+
};
80+
}
81+
82+
if (type === 'host') {
83+
return {
84+
type,
85+
'x-kusk': {
86+
upstream: {service: null, host: xKusk?.upstream?.host},
87+
mocking: null,
88+
redirect: null,
89+
},
90+
};
91+
}
92+
if (type === 'service') {
93+
return {
94+
type,
95+
'x-kusk': {
96+
upstream: {host: null, service: xKusk?.upstream?.service},
97+
mocking: null,
98+
redirect: null,
99+
},
100+
};
101+
}
102+
};
38103

39104
return (
40105
<FormCard
41106
enableCancelButton
42-
enableSaveButton
43107
heading="Routing"
44108
subHeading="Define the the upstreams or redirects your API is routing the requests to."
45109
helpTopic="Routing"
46110
helpLink="https://docs.kusk.io/guides/routing"
47-
formProps={{onFinish: onSaveClickHandler, layout: 'vertical', initialValues: xKuskForm}}
111+
formProps={{
112+
form,
113+
onFinish: onSaveClickHandler,
114+
layout: 'vertical',
115+
initialValues: {type: routingType, ...xKuskForm},
116+
}}
48117
cancelEditMode={onCancel}
49118
>
50-
<TargetForm />
119+
<Form.Item label="Type" name="type">
120+
<Button.Group>
121+
<Button
122+
type={targetSelection === 'service' ? 'primary' : undefined}
123+
onClick={() => {
124+
form.setFieldsValue(changeRoutingType('service'));
125+
}}
126+
value="Upstream service"
127+
>
128+
Upstream service
129+
</Button>
130+
<Button
131+
type={targetSelection === 'host' ? 'primary' : undefined}
132+
onClick={() => form.setFieldsValue(changeRoutingType('host'))}
133+
value="Upstream host"
134+
>
135+
Upstream host
136+
</Button>
137+
<Button
138+
type={targetSelection === 'redirect' ? 'primary' : undefined}
139+
onClick={() => form.setFieldsValue(changeRoutingType('redirect'))}
140+
value="Redirect"
141+
>
142+
Redirect
143+
</Button>
144+
<Button
145+
type={targetSelection === 'mocked' ? 'primary' : undefined}
146+
onClick={() => form.setFieldsValue(changeRoutingType('mocked'))}
147+
value="Mocking"
148+
>
149+
Mock
150+
</Button>
151+
</Button.Group>
152+
</Form.Item>
153+
{(targetSelection === 'service' || targetSelection === 'host') && (
154+
<Upstream reference={targetSelection === 'service' ? 'service' : 'host'} isRequiredFields />
155+
)}
156+
{targetSelection === 'redirect' && <Redirect isRequiredFields />}
157+
{targetSelection === 'mocked' && <Mocking />}
158+
51159
<S.Divider />
52160
</FormCard>
53161
);
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)