diff --git a/DysonNetwork.Drive/Client/src/components/FilePoolSelect.vue b/DysonNetwork.Drive/Client/src/components/FilePoolSelect.vue
new file mode 100644
index 0000000..22b6bbc
--- /dev/null
+++ b/DysonNetwork.Drive/Client/src/components/FilePoolSelect.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
diff --git a/DysonNetwork.Drive/Client/src/views/dashboard/files.vue b/DysonNetwork.Drive/Client/src/views/dashboard/files.vue
index 6611c7f..d335018 100644
--- a/DysonNetwork.Drive/Client/src/views/dashboard/files.vue
+++ b/DysonNetwork.Drive/Client/src/views/dashboard/files.vue
@@ -1,6 +1,22 @@
@@ -27,10 +43,12 @@ import {
import { h, onMounted, ref } from 'vue'
import { useRouter } from 'vue-router'
import { formatBytes } from '../format'
+import FilePoolSelect from '@/components/FilePoolSelect.vue'
const router = useRouter()
const files = ref([])
+const filePool = ref(null)
const tableColumns: DataTableColumns = [
{
@@ -95,7 +113,6 @@ const tableColumns: DataTableColumns = [
h(
NButton,
{
- quaternary: true,
circle: true,
text: true,
onClick: () => {
@@ -109,7 +126,6 @@ const tableColumns: DataTableColumns = [
h(
NButton,
{
- quaternary: true,
circle: true,
text: true,
type: 'error',
@@ -129,11 +145,19 @@ const tableColumns: DataTableColumns = [
const tablePagination = ref({
page: 1,
itemCount: 0,
+ pageSize: 10,
+ showSizePicker: true,
+ pageSizes: [10, 20, 30, 40, 50],
})
async function fetchFiles() {
+ if (loading.value) return
try {
- const response = await fetch('/api/files/me')
+ loading.value = true
+ const pag = tablePagination.value
+ const response = await fetch(
+ `/api/files/me?take=${pag.pageSize}&offset=${(pag.page! - 1) * pag.pageSize!}${filePool.value ? '&pool=' + filePool.value : ''}`,
+ )
if (!response.ok) {
throw new Error('Network response was not ok')
}
@@ -142,10 +166,19 @@ async function fetchFiles() {
tablePagination.value.itemCount = parseInt(response.headers.get('x-total') ?? '0')
} catch (error) {
console.error('Failed to fetch files:', error)
+ } finally {
+ loading.value = false
}
}
onMounted(() => fetchFiles())
+function handlePageChange(page: number) {
+ tablePagination.value.page = page
+ fetchFiles()
+}
+
+const loading = ref(false)
+
const dialog = useDialog()
const messageDialog = useMessage()
const loadingBar = useLoadingBar()
diff --git a/DysonNetwork.Drive/Client/src/views/index.vue b/DysonNetwork.Drive/Client/src/views/index.vue
index af6cfd2..7c52755 100644
--- a/DysonNetwork.Drive/Client/src/views/index.vue
+++ b/DysonNetwork.Drive/Client/src/views/index.vue
@@ -23,17 +23,7 @@
-
+
@@ -134,6 +124,8 @@ import { useUserStore } from '@/stores/user'
import type { SnFilePool } from '@/types/pool'
import { formatBytes } from './format'
+import FilePoolSelect from '@/components/FilePoolSelect.vue'
+
import * as tus from 'tus-js-client'
const userStore = useUserStore()
diff --git a/DysonNetwork.Drive/Storage/FileController.cs b/DysonNetwork.Drive/Storage/FileController.cs
index 3dae816..0a79310 100644
--- a/DysonNetwork.Drive/Storage/FileController.cs
+++ b/DysonNetwork.Drive/Storage/FileController.cs
@@ -146,16 +146,17 @@ public class FileController(
.Where(e => e.AccountId == accountId)
.Include(e => e.Pool)
.OrderByDescending(e => e.CreatedAt)
- .Skip(offset)
- .Take(take);
+ .AsQueryable();
if (pool.HasValue) query = query.Where(e => e.PoolId == pool);
-
- var files = await query.ToListAsync();
-
+
var total = await query.CountAsync();
Response.Headers.Append("X-Total", total.ToString());
+ var files = await query
+ .Skip(offset)
+ .Take(take)
+ .ToListAsync();
return Ok(files);
}