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/10/22 05:06:06 UTC
[apisix-dashboard] branch master updated: feat: improve codes style
& bug fix (#579)
This is an automated email from the ASF dual-hosted git repository.
juzhiyuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-dashboard.git
The following commit(s) were added to refs/heads/master by this push:
new e9d5040 feat: improve codes style & bug fix (#579)
e9d5040 is described below
commit e9d5040d528542096f2a3b266ec039b33411378c
Author: 琚致远 <ju...@apache.org>
AuthorDate: Thu Oct 22 13:06:00 2020 +0800
feat: improve codes style & bug fix (#579)
* feat: use svg locally
* feat(Route): use id as rowkey
* feat: update global request
* feat: update import order
* feat: remove unused rules
* fix(Route): PluginOrchestration
* feat(request): using code instead of status code
* feat: remove comments
* feat(i18n): consumer
* feat(SSL): hide SSL currently
* feat(Login): using errorHandler
* feat: update version
* feat: update version
* feat: update plugin's version
Co-authored-by: litesun <7s...@gmail.com>
---
package.json | 4 ++--
public/empty.svg | 1 +
src/app.tsx | 18 ++++++++++++++++-
src/helpers.tsx | 24 +++++++++++------------
src/locales/zh-CN/menu.ts | 2 +-
src/pages/Metrics/Metrics.tsx | 2 +-
src/pages/Route/Create.tsx | 5 +++--
src/pages/Route/List.tsx | 2 +-
src/pages/Route/service.ts | 1 -
src/pages/Route/transform.ts | 1 -
src/pages/SSL/service.ts | 3 +--
src/pages/Upstream/service.ts | 1 -
src/pages/User/Login.tsx | 8 ++------
src/pages/User/components/LoginMethodPassword.tsx | 9 +++++----
yarn.lock | 8 ++++----
15 files changed, 50 insertions(+), 39 deletions(-)
diff --git a/package.json b/package.json
index b3c86d5..ae92bb8 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "apisix-dashboard",
- "version": "1.6.1",
+ "version": "2.0.2",
"private": true,
"description": "Dashboard for Apache APISIX",
"scripts": {
@@ -54,7 +54,7 @@
"@ant-design/icons": "^4.0.0",
"@ant-design/pro-layout": "^6.0.0",
"@ant-design/pro-table": "2.6.3",
- "@api7-dashboard/plugin": "^1.0.7",
+ "@api7-dashboard/plugin": "^1.0.8",
"@api7-dashboard/pluginchart": "^1.0.14",
"@api7-dashboard/ui": "^1.0.3",
"@rjsf/antd": "2.2.0",
diff --git a/public/empty.svg b/public/empty.svg
new file mode 100644
index 0000000..bac1d28
--- /dev/null
+++ b/public/empty.svg
@@ -0,0 +1 @@
+<svg width="130" height="80" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1="52.348%" y1="74.611%" x2="52.348%" y2="-17.635%" id="a"><stop stop-color="#DEDEDE" stop-opacity="0" offset="0%"/><stop stop-color="#A9A9A9" stop-opacity=".3" offset="100%"/></linearGradient><linearGradient x1="44.79%" y1="100%" x2="44.79%" y2="0%" id="b"><stop stop-color="#FFF" stop-opacity="0" offset="0%"/><stop stop-color="#96A1C5" stop-opacity=".373" offset="100%"/></linearGradient><linearGradien [...]
\ No newline at end of file
diff --git a/src/app.tsx b/src/app.tsx
index b437cc9..41921f1 100644
--- a/src/app.tsx
+++ b/src/app.tsx
@@ -66,7 +66,7 @@ export const request: RequestConfig = {
credentials: 'same-origin',
requestInterceptors: [
(url, options) => {
- const newOptions = options;
+ const newOptions = { ...options };
newOptions.headers = {
...options.headers,
Authorization: localStorage.getItem('token') || '',
@@ -77,4 +77,20 @@ export const request: RequestConfig = {
};
},
],
+ responseInterceptors: [
+ async (res) => {
+ if (!res.ok) {
+ // NOTE: http code >= 400, using errorHandler
+ return res;
+ }
+
+ const data = await res.json();
+ const { code = -1 } = data as Res<any>;
+ if (code !== 0) {
+ // eslint-disable-next-line
+ return Promise.reject({ response: res, data });
+ }
+ return data;
+ },
+ ],
};
diff --git a/src/helpers.tsx b/src/helpers.tsx
index 39e97da..096c85c 100644
--- a/src/helpers.tsx
+++ b/src/helpers.tsx
@@ -34,11 +34,12 @@ export const getMenuData = (): MenuDataItem[] => {
path: '/routes/list',
icon: <IconFont type="iconroute" />,
},
- {
- name: 'ssl',
- path: '/ssl/list',
- icon: <IconFont type="iconSSLshuzizhengshu" />,
- },
+ // NOTE: disable SSL module in v2.0
+ // {
+ // name: 'ssl',
+ // path: '/ssl/list',
+ // icon: <IconFont type="iconSSLshuzizhengshu" />,
+ // },
{
name: 'upstream',
path: '/upstream/list',
@@ -64,24 +65,23 @@ export const isLoginPage = () => window.location.pathname.indexOf('/user/login')
*/
export const errorHandler = (error: { response: Response; data: any }): Promise<Response> => {
const { response } = error;
- if (response && response.status) {
+ if (error && response && response.status) {
if ([401].includes(response.status) && !isLoginPage()) {
history.replace(`/user/logout?redirect=${encodeURIComponent(window.location.pathname)}`);
return Promise.reject(response);
}
if ([401].includes(response.status) && isLoginPage()) return Promise.reject(response);
- const errorText =
- error.data.msg || error.data.message || error.data.error_msg || codeMessage[response.status];
-
+ // TODO: improve code message mapper
+ const errorText = error.data?.message || codeMessage[response.status];
notification.error({
- message: `请求错误,错误码: ${error.data.errorCode || response.status}`,
+ message: `Request Error Code: ${error.data.code}`,
description: errorText,
});
} else if (!response) {
notification.error({
- description: '您的网络发生异常,无法连接服务器',
- message: '网络异常',
+ description: 'Network Error',
+ message: '',
});
}
return Promise.reject(response);
diff --git a/src/locales/zh-CN/menu.ts b/src/locales/zh-CN/menu.ts
index df0fbca..4a7b3a2 100644
--- a/src/locales/zh-CN/menu.ts
+++ b/src/locales/zh-CN/menu.ts
@@ -68,6 +68,6 @@ export default {
'menu.routes': '路由',
'menu.ssl': '证书',
'menu.upstream': '上游',
- 'menu.consumer': '用户',
+ 'menu.consumer': 'Consumer',
'menu.setting': '设置',
};
diff --git a/src/pages/Metrics/Metrics.tsx b/src/pages/Metrics/Metrics.tsx
index 1da0e7f..cb8d3fc 100644
--- a/src/pages/Metrics/Metrics.tsx
+++ b/src/pages/Metrics/Metrics.tsx
@@ -36,7 +36,7 @@ const Metrics: React.FC = () => {
<Card>
{!grafanaURL && (
<Empty
- image="https://gw.alipayobjects.com/zos/antfincdn/ZHrcdLPrvN/empty.svg"
+ image="empty.svg"
imageStyle={{
height: 60,
}}
diff --git a/src/pages/Route/Create.tsx b/src/pages/Route/Create.tsx
index e6d7ffd..870b86d 100644
--- a/src/pages/Route/Create.tsx
+++ b/src/pages/Route/Create.tsx
@@ -93,7 +93,7 @@ const Page: React.FC<Props> = (props) => {
}
}, []);
- const StepList = () => {
+ const renderStepList = () => {
if (step === 1) {
return (
<Step1
@@ -261,7 +261,8 @@ const Page: React.FC<Props> = (props) => {
<Step title={item} key={item} />
))}
</Steps>
- <StepList />
+ {renderStepList()}
+ {/* NOTE: PluginOrchestration works unexpected when using <renderStepList/> */}
</Card>
</PageHeaderWrapper>
<ActionBar step={step} lastStep={redirect ? 2 : 4} onChange={onStepChange} withResultView />
diff --git a/src/pages/Route/List.tsx b/src/pages/Route/List.tsx
index aaf9825..1f28653 100644
--- a/src/pages/Route/List.tsx
+++ b/src/pages/Route/List.tsx
@@ -113,7 +113,7 @@ const Page: React.FC = () => {
>
<ProTable<RouteModule.ResponseBody>
actionRef={ref}
- rowKey="name"
+ rowKey="id"
columns={columns}
request={fetchList}
toolBarRender={() => [
diff --git a/src/pages/Route/service.ts b/src/pages/Route/service.ts
index 2bb835e..82172b1 100644
--- a/src/pages/Route/service.ts
+++ b/src/pages/Route/service.ts
@@ -64,7 +64,6 @@ export const checkUniqueName = (name = '', exclude = '') =>
});
export const fetchUpstreamList = () => {
- // TODO: Use Cache and search on local
return request<Res<ResListData<UpstreamModule.RequestBody>>>('/upstreams').then(({ data }) => ({
data: data.rows,
total: data.total_size,
diff --git a/src/pages/Route/transform.ts b/src/pages/Route/transform.ts
index 88e0cf3..ab9a81a 100644
--- a/src/pages/Route/transform.ts
+++ b/src/pages/Route/transform.ts
@@ -14,7 +14,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-/* eslint-disable @typescript-eslint/naming-convention */
import { omit, pick } from 'lodash';
export const transformStepData = ({
diff --git a/src/pages/SSL/service.ts b/src/pages/SSL/service.ts
index c1e9d4d..5513b88 100644
--- a/src/pages/SSL/service.ts
+++ b/src/pages/SSL/service.ts
@@ -14,7 +14,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-/* eslint-disable @typescript-eslint/naming-convention */
import { request } from 'umi';
import querystring from 'querystring';
import { identity, pickBy, omit } from 'lodash';
@@ -28,7 +27,7 @@ export const fetchList = (
queryObj = pickBy({ ...queryObj, expire_start, expire_end, sni: search }, identity);
const query = querystring.encode(queryObj);
return request<{ count: number; list: SSLModule.ResSSL[] }>(
- `/ssls?page=${current}&size=${pageSize}&${query}`,
+ `/ssl?page=${current}&page_size=${pageSize}&${query}`,
).then((data) => {
return {
total: data.count,
diff --git a/src/pages/Upstream/service.ts b/src/pages/Upstream/service.ts
index 78caa4a..3712f34 100644
--- a/src/pages/Upstream/service.ts
+++ b/src/pages/Upstream/service.ts
@@ -17,7 +17,6 @@
import { request } from 'umi';
export const fetchList = ({ current = 1, pageSize = 10, ...res }) => {
- // TODO: Use Cache and search on local
return request<Res<ResListData<UpstreamModule.RequestBody>>>('/upstreams', {
params: {
name: res.name,
diff --git a/src/pages/User/Login.tsx b/src/pages/User/Login.tsx
index 0937834..508205a 100644
--- a/src/pages/User/Login.tsx
+++ b/src/pages/User/Login.tsx
@@ -18,11 +18,12 @@ import React, { useState } from 'react';
import { Button, notification, Tabs } from 'antd';
import { SelectLang } from '@@/plugin-locale/SelectLang';
import { Link, useIntl, history } from 'umi';
+import { SettingOutlined } from '@ant-design/icons';
+
import LoginMethodPassword from '@/pages/User/components/LoginMethodPassword';
import LoginMethodExample from '@/pages/User/components/LoginMethodExample';
import { UserModule } from '@/pages/User/typing';
import logo from '@/assets/logo.svg';
-import { SettingOutlined } from '@ant-design/icons';
import { getUrlQuery } from '@/helpers';
import Footer from '@/components/Footer';
import styles from './Login.less';
@@ -66,11 +67,6 @@ const Page: React.FC = () => {
history.replace(redirect ? decodeURIComponent(redirect) : '/');
},
});
- } else {
- notification.error({
- message: formatMessage({ id: 'component.status.fail' }),
- description: response.message,
- });
}
});
}
diff --git a/src/pages/User/components/LoginMethodPassword.tsx b/src/pages/User/components/LoginMethodPassword.tsx
index 86eb3a8..e998cd9 100644
--- a/src/pages/User/components/LoginMethodPassword.tsx
+++ b/src/pages/User/components/LoginMethodPassword.tsx
@@ -15,12 +15,12 @@
* limitations under the License.
*/
import React from 'react';
-import { UserModule } from '@/pages/User/typing';
import { Form, Input } from 'antd';
import { FormInstance } from 'antd/lib/form';
import { UserOutlined, LockTwoTone } from '@ant-design/icons';
-import { formatMessage } from '@@/plugin-locale/localeExports';
-import { request } from '@@/plugin-request/request';
+import { request, formatMessage } from 'umi';
+
+import { UserModule } from '@/pages/User/typing';
const formRef = React.createRef<FormInstance>();
@@ -112,9 +112,10 @@ const LoginMethodPassword: UserModule.LoginMethod = {
data: [],
};
} catch (e) {
+ // NOTE: API failed, using errorHandler
return {
status: false,
- message: formatMessage({ id: 'component.user.loginMethodPassword.incorrectPassword' }),
+ message: '',
data: [],
};
}
diff --git a/yarn.lock b/yarn.lock
index 5d87a2e..41c0eac 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -199,10 +199,10 @@
json-schema "^0.2.5"
set-value "^3.0.2"
-"@api7-dashboard/plugin@^1.0.7":
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/@api7-dashboard/plugin/-/plugin-1.0.7.tgz#ab4bd47c0ce3f3aac3c1ed5de7f78725f77d31de"
- integrity sha512-VVQW6xfrKou2n1UBTBZVwZbvc1ZSskvvGlDb7x5kBbVoAzAVAT8bZqGnvrn6aZtei4f8YKkmSWFCD7+zBAKx8w==
+"@api7-dashboard/plugin@^1.0.8":
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/@api7-dashboard/plugin/-/plugin-1.0.8.tgz#31ab85755d5df69d22b4f45b0097f0da1b6a22ea"
+ integrity sha512-RK5R9rqRpEiNYmGvJjtVmkvwf7G2r2fZ4Ufbra/pOOTL8DyuvQHzw1JHOSWuO7qfjK4QDxf/SVKYOdJYy/CTZQ==
dependencies:
"@rjsf/antd" "^2.3.0"
"@rjsf/core" "^2.3.0"