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"