You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by ju...@apache.org on 2020/06/03 07:53:56 UTC
[incubator-apisix-dashboard] branch next updated: fix: timeout
(#236)
This is an automated email from the ASF dual-hosted git repository.
juzhiyuan pushed a commit to branch next
in repository https://gitbox.apache.org/repos/asf/incubator-apisix-dashboard.git
The following commit(s) were added to refs/heads/next by this push:
new 6aba3fa fix: timeout (#236)
6aba3fa is described below
commit 6aba3faa724dd0ad79a9fb240ad43dc34f427cb3
Author: litesun <31...@users.noreply.github.com>
AuthorDate: Wed Jun 3 15:53:47 2020 +0800
fix: timeout (#236)
* feat: limit upload file
* feat: intercept default upload api request
* feat: limit upload file type
* fix: show file when parse SSL file fail
* feat: add search feature
* feat: format code
* fix: remove list item not work
* feat: remove relatedRouting
* feat: add routes step1 page
* feat: update route
* feat: format code
* feat: update
* feat: update
* feat: add checkbox rule
* feat: handle Modal close event
* feat: format code
* feat: add page skip
* feat: format code
* merge
* feat: clean code
* fix: step4 error
* feat: add edit modal
* feat: add form validation
* fix: step4 lose data
* fix: step4 edit
* add: WebSocket switch
* feat: https methods list Validation
* fix: timeout
* clean code
---
.../Routes/components/Step1/RequestConfigView.tsx | 48 ++++++----------------
.../Routes/components/Step2/RequestRewriteView.tsx | 47 +++++++++++++--------
src/pages/Routes/constants.ts | 13 +++++-
src/pages/Routes/typing.d.ts | 1 +
4 files changed, 53 insertions(+), 56 deletions(-)
diff --git a/src/pages/Routes/components/Step1/RequestConfigView.tsx b/src/pages/Routes/components/Step1/RequestConfigView.tsx
index a758103..dc24649 100644
--- a/src/pages/Routes/components/Step1/RequestConfigView.tsx
+++ b/src/pages/Routes/components/Step1/RequestConfigView.tsx
@@ -1,8 +1,7 @@
-import React, { useState } from 'react';
+import React from 'react';
import Form from 'antd/es/form';
-import { Checkbox, Button, Input } from 'antd';
+import { Checkbox, Button, Input, Switch } from 'antd';
import { CheckboxValueType } from 'antd/lib/checkbox/Group';
-import { CheckboxChangeEvent } from 'antd/lib/checkbox';
import { PlusOutlined, MinusCircleOutlined } from '@ant-design/icons';
import {
@@ -18,28 +17,11 @@ interface Props extends RouteModule.Data {}
const RequestConfigView: React.FC<Props> = ({ data, disabled, onChange }) => {
const { protocols } = data.step1Data;
- // TODO: checkedList Validation
- const [checkedList, setCheckedList] = useState(HTTP_METHOD_OPTION_LIST);
- const [indeterminate, setIndeterminate] = useState(false);
- const [checkAll, setCheckAll] = useState(true);
-
const onProtocolChange = (e: CheckboxValueType[]) => {
if (!e.includes('HTTP') && !e.includes('HTTPS')) return;
onChange({ ...data.step1Data, protocols: e });
};
- const onMethodsChange = (methods: CheckboxValueType[]) => {
- setCheckedList(methods as RouteModule.HttpMethod[]);
- setIndeterminate(!!methods.length && methods.length < HTTP_METHOD_OPTION_LIST.length);
- setCheckAll(methods.length === HTTP_METHOD_OPTION_LIST.length);
- };
-
- const onCheckAllChange = (e: CheckboxChangeEvent) => {
- setCheckedList(e.target.checked ? HTTP_METHOD_OPTION_LIST : []);
- setIndeterminate(false);
- setCheckAll(e.target.checked);
- };
-
const renderHosts = () => (
<Form.List name="hosts">
{(fields, { add, remove }) => {
@@ -139,28 +121,22 @@ const RequestConfigView: React.FC<Props> = ({ data, disabled, onChange }) => {
<Form.Item label="协议" name="protocols" rules={[{ required: true, message: '请勾选协议' }]}>
<Checkbox.Group
disabled={disabled}
- options={['HTTP', 'HTTPS', 'WebSocket']}
+ options={['HTTP', 'HTTPS']}
value={protocols}
onChange={onProtocolChange}
/>
</Form.Item>
+ <Form.Item label="WebSocket" name="WebSocket" valuePropName="checked">
+ <Switch disabled={disabled} />
+ </Form.Item>
{renderHosts()}
<Form.Item label="路径">{renderPaths()}</Form.Item>
- <Form.Item label="HTTP 方法" name="httpMethods">
- <Checkbox
- indeterminate={indeterminate}
- onChange={onCheckAllChange}
- checked={checkAll}
- disabled={disabled}
- >
- ANY
- </Checkbox>
- <Checkbox.Group
- options={HTTP_METHOD_OPTION_LIST}
- value={checkedList}
- onChange={onMethodsChange}
- disabled={disabled}
- />
+ <Form.Item
+ label="HTTP 方法"
+ name="httpMethods"
+ rules={[{ required: true, message: '请勾选 HTTP 方法' }]}
+ >
+ <Checkbox.Group options={HTTP_METHOD_OPTION_LIST} disabled={disabled} />
</Form.Item>
</PanelSection>
);
diff --git a/src/pages/Routes/components/Step2/RequestRewriteView.tsx b/src/pages/Routes/components/Step2/RequestRewriteView.tsx
index 857f435..373c534 100644
--- a/src/pages/Routes/components/Step2/RequestRewriteView.tsx
+++ b/src/pages/Routes/components/Step2/RequestRewriteView.tsx
@@ -88,6 +88,8 @@ const RequestRewriteView: React.FC<Props> = ({ data, form, disabled, onChange })
</Form.List>
);
+ const renderTimeUnit = () => <span style={{ margin: '0 8px' }}>ms</span>;
+
return (
<PanelSection title="请求改写">
<Form
@@ -116,26 +118,35 @@ const RequestRewriteView: React.FC<Props> = ({ data, form, disabled, onChange })
>
<Input disabled={disabled} />
</Form.Item>
- <Form.Item
- label="连接超时"
- name={['timeout', 'connect']}
- rules={[{ required: true, message: '连接超时时间' }]}
- >
- <InputNumber disabled={disabled} defaultValue={30000} /> ms
+ <Form.Item label="连接超时">
+ <Form.Item
+ name={['timeout', 'connect']}
+ noStyle
+ rules={[{ required: true, message: '请输入连接超时时间' }]}
+ >
+ <InputNumber disabled={disabled} />
+ </Form.Item>
+ {renderTimeUnit()}
</Form.Item>
- <Form.Item
- label="发送超时"
- name={['timeout', 'send']}
- rules={[{ required: true, message: '发送超时时间' }]}
- >
- <InputNumber disabled={disabled} defaultValue={30000} /> ms
+ <Form.Item label="发送超时">
+ <Form.Item
+ name={['timeout', 'send']}
+ noStyle
+ rules={[{ required: true, message: '请输入发送超时时间' }]}
+ >
+ <InputNumber disabled={disabled} />
+ </Form.Item>
+ {renderTimeUnit()}
</Form.Item>
- <Form.Item
- label="接收超时"
- name={['timeout', 'read']}
- rules={[{ required: true, message: '接收超时时间' }]}
- >
- <InputNumber disabled={disabled} defaultValue={30000} /> ms
+ <Form.Item label="接收超时">
+ <Form.Item
+ name={['timeout', 'read']}
+ noStyle
+ rules={[{ required: true, message: '请输入接收超时时间' }]}
+ >
+ <InputNumber disabled={disabled} />
+ </Form.Item>
+ {renderTimeUnit()}
</Form.Item>
</Form>
</PanelSection>
diff --git a/src/pages/Routes/constants.ts b/src/pages/Routes/constants.ts
index 88387e1..b7d9574 100644
--- a/src/pages/Routes/constants.ts
+++ b/src/pages/Routes/constants.ts
@@ -1,4 +1,12 @@
-export const HTTP_METHOD_OPTION_LIST = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'];
+export const HTTP_METHOD_OPTION_LIST: RouteModule.HttpMethod[] = [
+ 'GET',
+ 'HEAD',
+ 'POST',
+ 'PUT',
+ 'DELETE',
+ 'OPTIONS',
+ 'PATCH',
+];
export const FORM_ITEM_LAYOUT = {
labelCol: {
@@ -19,9 +27,10 @@ export const FORM_ITEM_WITHOUT_LABEL = {
export const DEFAULT_STEP_1_DATA: RouteModule.Step1Data = {
name: '',
protocols: ['HTTP', 'HTTPS'],
+ WebSocket: false,
hosts: [''],
paths: [],
- httpMethods: [],
+ httpMethods: HTTP_METHOD_OPTION_LIST,
advancedMatchingRules: [],
};
diff --git a/src/pages/Routes/typing.d.ts b/src/pages/Routes/typing.d.ts
index 7be88b2..a50f0fe 100644
--- a/src/pages/Routes/typing.d.ts
+++ b/src/pages/Routes/typing.d.ts
@@ -13,6 +13,7 @@ declare namespace RouteModule {
type Step1Data = {
name: string;
protocols: RequestProtocol[];
+ WebSocket: boolean;
hosts: string[];
paths: string[];
httpMethods: HttpMethod[];