Skip to content

Commit 215abba

Browse files
committed
feature(FR-1471): migrate the GitHub/GitLab importing feature to React
1 parent 53cfb56 commit 215abba

File tree

28 files changed

+463
-498
lines changed

28 files changed

+463
-498
lines changed

packages/backend.ai-ui/src/hooks/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,4 @@ export { default as useErrorMessageResolver } from './useErrorMessageResolver';
3737
export { default as useViewer } from './useViewer';
3838
export type { ErrorResponse } from './useErrorMessageResolver';
3939
export type { ESMClientErrorResponse } from './useErrorMessageResolver';
40+
export { default as useGetAvailableFolderName } from './useGetAvailableFolderName';
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { useGetAvailableFolderNameQuery } from '../__generated__/useGetAvailableFolderNameQuery.graphql';
2+
import { generateRandomString } from '../helper';
3+
import { fetchQuery, graphql, useRelayEnvironment } from 'react-relay';
4+
5+
export const useGetAvailableFolderName = () => {
6+
'use memo';
7+
const relayEnv = useRelayEnvironment();
8+
return async (seedName: string) => {
9+
// Limit folder name length to 64 characters
10+
const targetName = seedName.substring(0, 64);
11+
const count = await fetchQuery<useGetAvailableFolderNameQuery>(
12+
relayEnv,
13+
graphql`
14+
query useGetAvailableFolderNameQuery($filter: String!) {
15+
vfolder_nodes(filter: $filter, permission: "read_attribute") {
16+
edges {
17+
node {
18+
name
19+
status
20+
}
21+
}
22+
count
23+
}
24+
}
25+
`,
26+
{
27+
filter: `(name == "${targetName}") & (status != "delete-complete")`,
28+
},
29+
)
30+
.toPromise()
31+
.then((data) => data?.vfolder_nodes?.count)
32+
.catch(() => 0);
33+
34+
const hash = generateRandomString(5);
35+
console.log(targetName, count);
36+
return count === 0 ? targetName : `${targetName.substring(0, 58)}_${hash}`;
37+
};
38+
};
39+
40+
export default useGetAvailableFolderName;

react/src/components/ImportNotebook.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ const ImportNotebook: React.FC<FormProps> = (props) => {
5454
} as PrimaryAppOption,
5555
},
5656
]);
57+
webuiNavigate('/session');
5758
}
5859

5960
if (results?.rejected && results.rejected.length > 0) {
@@ -63,13 +64,10 @@ const ImportNotebook: React.FC<FormProps> = (props) => {
6364
content: getErrorMessage(error),
6465
});
6566
}
66-
67-
webuiNavigate('/session');
68-
6967
};
7068

7169
return (
72-
<Form ref={formRef} layout="inline" {...props}>
70+
<Form ref={formRef} layout="vertical" {...props}>
7371
<Form.Item
7472
name="url"
7573
label={t('import.NotebookURL')}
@@ -95,6 +93,7 @@ const ImportNotebook: React.FC<FormProps> = (props) => {
9593
<BAIButton
9694
icon={<CloudDownloadOutlined />}
9795
type="primary"
96+
block
9897
action={async () => {
9998
const values = await formRef.current
10099
?.validateFields()

0 commit comments

Comments
 (0)