+
{step === Step.SignIn && }
{step === Step.SignUp && }
{step === Step.VerifyEmail && }
diff --git a/web/src/routes.ts b/web/src/routes.ts
index 456fa0844..abbc6cfe5 100644
--- a/web/src/routes.ts
+++ b/web/src/routes.ts
@@ -7,6 +7,7 @@ export enum Routes {
Agent = '/agent',
Search = '/next-search',
Chat = '/next-chat',
+ Files = '/files',
ProfileSetting = '/profile-setting',
DatasetTesting = '/testing',
DatasetSetting = '/setting',
@@ -189,6 +190,17 @@ const routes = [
},
],
},
+ {
+ path: Routes.Files,
+ layout: false,
+ component: '@/layouts/next',
+ routes: [
+ {
+ path: Routes.Files,
+ component: `@/pages${Routes.Files}`,
+ },
+ ],
+ },
{
path: Routes.DatasetBase,
layout: false,
diff --git a/web/src/utils/common-util.ts b/web/src/utils/common-util.ts
index fb41adead..9ad4d1638 100644
--- a/web/src/utils/common-util.ts
+++ b/web/src/utils/common-util.ts
@@ -113,3 +113,28 @@ export function hexToArrayBuffer(input: string) {
return view.buffer;
}
+
+export function formatFileSize(bytes: number, si = true, dp = 1) {
+ let nextBytes = bytes;
+ const thresh = si ? 1000 : 1024;
+
+ if (Math.abs(bytes) < thresh) {
+ return nextBytes + ' B';
+ }
+
+ const units = si
+ ? ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
+ : ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];
+ let u = -1;
+ const r = 10 ** dp;
+
+ do {
+ nextBytes /= thresh;
+ ++u;
+ } while (
+ Math.round(Math.abs(nextBytes) * r) / r >= thresh &&
+ u < units.length - 1
+ );
+
+ return nextBytes.toFixed(dp) + ' ' + units[u];
+}
diff --git a/web/typings.d.ts b/web/typings.d.ts
index bd56ed098..34e505311 100644
--- a/web/typings.d.ts
+++ b/web/typings.d.ts
@@ -1,5 +1,13 @@
+import '@tanstack/react-table';
declare module 'lodash';
declare global {
type Nullable = T | null;
}
+
+declare module '@tanstack/react-table' {
+ interface ColumnMeta {
+ headerClassName?: string;
+ cellClassName?: string;
+ }
+}