This is an automated email from the ASF dual-hosted git repository. juzhiyuan pushed a commit to branch fix-upstream in repository https://gitbox.apache.org/repos/asf/incubator-apisix-dashboard.git
commit cc452260e9d7e4a1bb4f063999ad03da47f6587a Author: juzhiyuan <jjzhiy...@gmail.com> AuthorDate: Thu Jun 4 12:25:31 2020 +0800 feat: update upstream --- src/pages/Routes/Create.tsx | 2 +- .../Routes/components/Step2/RequestRewriteView.tsx | 28 ++++++++++++++++------ src/pages/Routes/constants.ts | 11 +++++---- src/pages/Routes/transform.ts | 26 +++++++++++++------- src/pages/Routes/typing.d.ts | 21 +++++++--------- 5 files changed, 53 insertions(+), 35 deletions(-) diff --git a/src/pages/Routes/Create.tsx b/src/pages/Routes/Create.tsx index 3196fc3..035f09b 100644 --- a/src/pages/Routes/Create.tsx +++ b/src/pages/Routes/Create.tsx @@ -33,7 +33,7 @@ const Create: React.FC = (props) => { const initRoute = (rid: number) => { fetchRoute(rid).then((data) => { form1.setFieldsValue(data.step1Data); - setStep1Data(data.step1Data); + setStep1Data(data.step1Data as RouteModule.Step1Data); form2.setFieldsValue(data.step2Data); setStep2Data(data.step2Data); diff --git a/src/pages/Routes/components/Step2/RequestRewriteView.tsx b/src/pages/Routes/components/Step2/RequestRewriteView.tsx index dc31a1c..3c622e2 100644 --- a/src/pages/Routes/components/Step2/RequestRewriteView.tsx +++ b/src/pages/Routes/components/Step2/RequestRewriteView.tsx @@ -105,19 +105,33 @@ const RequestRewriteView: React.FC<Props> = ({ data, form, disabled, onChange }) rules={[{ required: true, message: '请勾选协议' }]} > <Radio.Group onChange={onProtocolChange} name="upstreamProtocol" disabled={disabled}> - <Radio value="original">原始请求</Radio> + <Radio value="keep">保持原样</Radio> <Radio value="http">HTTP</Radio> <Radio value="https">HTTPS</Radio> </Radio.Group> </Form.Item> {renderUpstreamMeta()} - <Form.Item - label="请求路径" - name="upstreamPath" - rules={[{ required: true, message: '请输入请求路径' }]} - > - <Input disabled={disabled} /> + <Form.Item label="请求路径"> + <Radio.Group + defaultValue={step2Data.upstreamPath === undefined ? 'keep' : 'modify'} + onChange={(e) => { + onChange({ upstreamPath: e.target.value === 'keep' ? undefined : '' }); + }} + disabled={disabled} + > + <Radio value="keep">保持原样</Radio> + <Radio value="modify">修改</Radio> + </Radio.Group> </Form.Item> + {step2Data.upstreamPath !== undefined && ( + <Form.Item + label="新路径" + name="upstreamPath" + rules={[{ required: true, message: '请输入请求路径' }]} + > + <Input disabled={disabled} /> + </Form.Item> + )} <Form.Item label="连接超时" required> <Form.Item name={['timeout', 'connect']} diff --git a/src/pages/Routes/constants.ts b/src/pages/Routes/constants.ts index fade6a1..b943542 100644 --- a/src/pages/Routes/constants.ts +++ b/src/pages/Routes/constants.ts @@ -38,14 +38,15 @@ export const DEFAULT_STEP_1_DATA: RouteModule.Step1Data = { }; export const DEFAULT_STEP_2_DATA: RouteModule.Step2Data = { - upstreamProtocol: 'original', + upstreamProtocol: 'keep', + // TODO: 展示 placeholder upstreamHostList: [{ host: '', port: 80, weight: 0 }], upstreamHeaderList: [], - upstreamPath: '', + upstreamPath: undefined, timeout: { - connect: 30000, - send: 30000, - read: 30000, + connect: 10000, + send: 10000, + read: 10000, }, }; diff --git a/src/pages/Routes/transform.ts b/src/pages/Routes/transform.ts index 0842978..4000ffd 100644 --- a/src/pages/Routes/transform.ts +++ b/src/pages/Routes/transform.ts @@ -30,7 +30,7 @@ export const transformStepData = ({ protocols = protocols.concat('websocket'); } - const data: RouteModule.Body = { + const data: Partial<RouteModule.Body> = { ...step1Data, ...step2Data, ...step3Data, @@ -59,11 +59,14 @@ export const transformStepData = ({ timeout: step2Data.timeout, }, upstream_header, - upstream_path: { - to: step2Data.upstreamPath, - }, }; + if (step2Data.upstreamPath) { + data.upstream_path = { + to: step2Data.upstreamPath, + }; + } + return omit(data, [ 'advancedMatchingRules', 'upstreamProtocol', @@ -102,10 +105,9 @@ const transformUpstreamNodes = (nodes: { [key: string]: number }): RouteModule.U }; export const transformRouteData = (data: RouteModule.Body) => { - const { name, desc, methods, uris, protocols, hosts, vars } = data; - // TODO: redirect + const { name, desc, methods, uris, protocols, hosts, vars, redirect } = data; - const step1Data: RouteModule.Step1Data = { + const step1Data: Partial<RouteModule.Step1Data> = { name, desc, protocols: protocols.filter((item) => item !== 'websocket'), @@ -114,8 +116,15 @@ export const transformRouteData = (data: RouteModule.Body) => { paths: uris, methods, advancedMatchingRules: transformVarsToRules(vars), + redirect: Boolean(redirect), + forceHttps: Boolean(redirect.redirect_to_https), }; + if (redirect.code) { + step1Data.redirectCode = redirect.code; + step1Data.redirectURI = redirect.uri; + } + const { upstream, upstream_path, upstream_header } = data; const upstreamHeaderList = Object.entries(upstream_header).map(([k, v]) => { @@ -123,8 +132,7 @@ export const transformRouteData = (data: RouteModule.Body) => { }); const step2Data: RouteModule.Step2Data = { - // TODO: API - upstreamProtocol: 'original', + upstreamProtocol: 'keep', upstreamHeaderList, upstreamHostList: transformUpstreamNodes(upstream.nodes), upstreamPath: upstream_path.to, diff --git a/src/pages/Routes/typing.d.ts b/src/pages/Routes/typing.d.ts index 5024e20..5f513ba 100644 --- a/src/pages/Routes/typing.d.ts +++ b/src/pages/Routes/typing.d.ts @@ -25,7 +25,7 @@ declare namespace RouteModule { redirect: boolean; forceHttps: boolean; redirectURI?: string; - redirectCode?: boolean; + redirectCode?: number; advancedMatchingRules: MatchingRule[]; }; @@ -61,9 +61,9 @@ declare namespace RouteModule { } type Step2Data = { - upstreamProtocol: 'http' | 'https' | 'original'; + upstreamProtocol: 'http' | 'https' | 'keep'; upstreamHostList: UpstreamHost[]; - upstreamPath: string; + upstreamPath: string | undefined; upstreamHeaderList: UpstreamHeader[]; timeout: { connect: number; @@ -74,16 +74,11 @@ declare namespace RouteModule { type ModalType = 'CREATE' | 'EDIT'; - type Redirect = - | { - redirect_to_https: boolean; - code: 301 | 302; - uri: string; - } - | { - redirect_to_https: boolean; - } - | {}; + type Redirect = { + code?: number; + uri?: string; + redirect_to_https?: boolean; + }; // Request Body or Response Data for API type Body = {