This is an automated email from the ASF dual-hosted git repository.

abeizn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new 4f65bce1e fix(config-ui): some bugs (#6295)
4f65bce1e is described below

commit 4f65bce1e9a82d76b66f5aa5658c21c351d20218
Author: 青湛 <[email protected]>
AuthorDate: Fri Oct 20 20:22:32 2023 +1300

    fix(config-ui): some bugs (#6295)
    
    * fix(config-ui): missed connections when refreshing connection detail page
    
    * fix(config-ui): adjust the spacing for webhook
    
    * fix(config-ui): adjust some content about api-keys
    
    * fix(config-ui): hidden edit scope config when plugin doesn't have it
---
 .../pages/blueprint/connection-detail/index.tsx    | 15 +++++---
 config-ui/src/pages/connection/detail/index.tsx    | 13 ++-----
 config-ui/src/plugins/register/webhook/styled.ts   |  2 +-
 config-ui/src/routes/api-keys/api-keys.tsx         | 40 ++++++----------------
 config-ui/src/routes/api-keys/styled.ts            | 10 ------
 5 files changed, 24 insertions(+), 56 deletions(-)

diff --git a/config-ui/src/pages/blueprint/connection-detail/index.tsx 
b/config-ui/src/pages/blueprint/connection-detail/index.tsx
index bae6b58f8..bb13c4b05 100644
--- a/config-ui/src/pages/blueprint/connection-detail/index.tsx
+++ b/config-ui/src/pages/blueprint/connection-detail/index.tsx
@@ -24,7 +24,7 @@ import { Popover2 } from '@blueprintjs/popover2';
 import API from '@/api';
 import { PageLoading, PageHeader, ExternalLink, Message, Buttons, Table, 
Dialog } from '@/components';
 import { useRefreshData, useTips } from '@/hooks';
-import { DataScopeSelect, getPluginScopeId } from '@/plugins';
+import { DataScopeSelect, getPluginScopeId, PluginConfig, PluginConfigType } 
from '@/plugins';
 import { operator } from '@/utils';
 
 import { encodeName } from '../../project/utils';
@@ -50,8 +50,11 @@ export const BlueprintConnectionDetailPage = () => {
     return API.blueprint.get(bid as any);
   };
 
+  const [plugin, connectionId] = unique.split('-');
+
+  const pluginConfig = PluginConfig.find((p) => p.plugin === plugin) as 
PluginConfigType;
+
   const { ready, data } = useRefreshData(async () => {
-    const [plugin, connectionId] = unique.split('-');
     const [blueprint, connection] = await Promise.all([
       getBlueprint(pname, bid),
       API.connection.get(plugin, connectionId),
@@ -205,9 +208,11 @@ export const BlueprintConnectionDetailPage = () => {
       </S.Top>
       <Buttons position="top">
         <Button intent={Intent.PRIMARY} icon="annotation" text="Manage Data 
Scope" onClick={handleShowDataScope} />
-        <ExternalLink style={{ marginLeft: 8 }} 
link={`/connections/${connection.plugin}/${connection.id}`}>
-          <Button intent={Intent.PRIMARY} icon="annotation" text="Edit Scope 
Config" />
-        </ExternalLink>
+        {pluginConfig.scopeConfig && (
+          <ExternalLink style={{ marginLeft: 8 }} 
link={`/connections/${connection.plugin}/${connection.id}`}>
+            <Button intent={Intent.PRIMARY} icon="annotation" text="Edit Scope 
Config" />
+          </ExternalLink>
+        )}
       </Buttons>
       <Table
         columns={[
diff --git a/config-ui/src/pages/connection/detail/index.tsx 
b/config-ui/src/pages/connection/detail/index.tsx
index 2668392f3..2ce5e207e 100644
--- a/config-ui/src/pages/connection/detail/index.tsx
+++ b/config-ui/src/pages/connection/detail/index.tsx
@@ -41,16 +41,6 @@ import { operator } from '@/utils';
 import * as S from './styled';
 
 export const ConnectionDetailPage = () => {
-  const { plugin, id } = useParams() as { plugin: string; id: string };
-  return <ConnectionDetail plugin={plugin} connectionId={+id} />;
-};
-
-interface Props {
-  plugin: string;
-  connectionId: ID;
-}
-
-const ConnectionDetail = ({ plugin, connectionId }: Props) => {
   const [type, setType] = useState<
     | 'deleteConnection'
     | 'updateConnection'
@@ -71,6 +61,9 @@ const ConnectionDetail = ({ plugin, connectionId }: Props) => 
{
   const [conflict, setConflict] = useState<string[]>([]);
   const [errorMsg, setErrorMsg] = useState('');
 
+  const { plugin, id } = useParams() as { plugin: string; id: string };
+  const connectionId = +id;
+
   const connection = useAppSelector((state) => selectConnection(state, 
`${plugin}-${connectionId}`)) as IConnection;
   const navigate = useNavigate();
   const { setTips } = useTips();
diff --git a/config-ui/src/plugins/register/webhook/styled.ts 
b/config-ui/src/plugins/register/webhook/styled.ts
index 2ac463152..12d83227d 100644
--- a/config-ui/src/plugins/register/webhook/styled.ts
+++ b/config-ui/src/plugins/register/webhook/styled.ts
@@ -36,7 +36,7 @@ export const Wrapper = styled.div`
   }
 
   h5 {
-    margin: 8px 0;
+    margin: 16px 0 8px;
   }
 
   p {
diff --git a/config-ui/src/routes/api-keys/api-keys.tsx 
b/config-ui/src/routes/api-keys/api-keys.tsx
index b37a525e0..cfb8419fc 100644
--- a/config-ui/src/routes/api-keys/api-keys.tsx
+++ b/config-ui/src/routes/api-keys/api-keys.tsx
@@ -18,22 +18,9 @@
 
 import { useState, useMemo } from 'react';
 import { Button, Intent, InputGroup } from '@blueprintjs/core';
-import { CopyToClipboard } from 'react-copy-to-clipboard';
 
 import API from '@/api';
-import {
-  PageHeader,
-  Table,
-  Dialog,
-  FormItem,
-  Selector,
-  ExternalLink,
-  TextTooltip,
-  IconButton,
-  toast,
-  Buttons,
-  Message,
-} from '@/components';
+import { PageHeader, Table, Dialog, FormItem, Selector, ExternalLink, 
CopyText, Message } from '@/components';
 import { useRefreshData } from '@/hooks';
 import { operator, formatTime } from '@/utils';
 
@@ -47,7 +34,7 @@ export const ApiKeys = () => {
   const [operating, setOperating] = useState(false);
   const [modal, setModal] = useState<'create' | 'show' | 'delete'>();
   const [currentId, setCurrentId] = useState<string>();
-  const [currentKey, setCurrentKey] = useState<string>();
+  const [currentKey, setCurrentKey] = useState<string>('');
   const [form, setForm] = useState<{
     name: string;
     expiredAt?: string;
@@ -61,6 +48,7 @@ export const ApiKeys = () => {
   const { data, ready } = useRefreshData(() => API.apiKey.list({ page, 
pageSize }), [version, page, pageSize]);
 
   const [dataSource, total] = useMemo(() => [data?.apikeys ?? [], data?.count 
?? 0], [data]);
+  const hasError = useMemo(() => !form.name || !form.allowedPath, [form]);
 
   const timeSelectedItem = useMemo(() => {
     return C.timeOptions.find((it) => it.value === form.expiredAt || 
!it.value);
@@ -73,7 +61,6 @@ export const ApiKeys = () => {
   const handleSubmit = async () => {
     const [success, res] = await operator(() => API.apiKey.create(form), {
       setOperating,
-      hideToast: true,
     });
 
     if (success) {
@@ -164,6 +151,7 @@ export const ApiKeys = () => {
           title="Generate a New API Key"
           okLoading={operating}
           okText="Generate"
+          okDisabled={hasError}
           onCancel={handleCancel}
           onOk={handleSubmit}
         >
@@ -191,8 +179,8 @@ export const ApiKeys = () => {
             subLabel={
               <p>
                 Enter a Regular Expression that matches the API URL(s) from 
the{' '}
-                <ExternalLink link="">DevLake API docs</ExternalLink>. The 
default Regular Expression is set to all
-                APIs.
+                <ExternalLink link="/api/swagger/index.html">DevLake API 
docs</ExternalLink>. The default Regular
+                Expression is set to all APIs.
               </p>
             }
             required
@@ -216,18 +204,10 @@ export const ApiKeys = () => {
           footer={null}
           onCancel={handleCancel}
         >
-          <div>Please make sure to copy your API key now. You will not be able 
to see it again.</div>
-          <S.KeyContainer>
-            <TextTooltip style={{ width: '96%' }} content="">
-              {currentKey}
-            </TextTooltip>
-            <CopyToClipboard text={currentKey as string} onCopy={() => 
toast.success('Copy successfully.')}>
-              <IconButton icon="clipboard" tooltip="Copy" />
-            </CopyToClipboard>
-          </S.KeyContainer>
-          <Buttons position="bottom" align="right">
-            <Button intent={Intent.PRIMARY} text="Confirm" 
onClick={handleCancel} />
-          </Buttons>
+          <div style={{ marginBottom: 16 }}>
+            Please make sure to copy your API key now. You will not be able to 
see it again.
+          </div>
+          <CopyText content={currentKey} />
         </Dialog>
       )}
       {modal === 'delete' && (
diff --git a/config-ui/src/routes/api-keys/styled.ts 
b/config-ui/src/routes/api-keys/styled.ts
index 3838e3d19..9a4aa557a 100644
--- a/config-ui/src/routes/api-keys/styled.ts
+++ b/config-ui/src/routes/api-keys/styled.ts
@@ -26,13 +26,3 @@ export const InputContainer = styled.div`
     margin-right: 4px;
   }
 `;
-
-export const KeyContainer = styled.div`
-  display: flex;
-  align-items: center;
-  justify-content: space-between;
-  margin-top: 24px;
-  margin-bottom: 16px;
-  padding: 10px 16px;
-  background: #f0f4fe;
-`;

Reply via email to