您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { type OnlineDriveFile, OnlineDriveFileType } from '@/models/pipeline'
  2. import type { OnlineDriveData } from '@/types/pipeline'
  3. export const isFile = (type: 'file' | 'folder'): boolean => {
  4. return type === 'file'
  5. }
  6. export const isBucketListInitiation = (data: OnlineDriveData[], prefix: string[], bucket: string): boolean => {
  7. if (bucket || prefix.length > 0) return false
  8. return data.length > 1 || (data.length === 1 && !!data[0].bucket && data[0].files.length === 0)
  9. }
  10. export const convertOnlineDriveData = (data: OnlineDriveData[], prefix: string[], bucket: string): {
  11. fileList: OnlineDriveFile[],
  12. isTruncated: boolean,
  13. nextPageParameters: Record<string, any>
  14. } => {
  15. const fileList: OnlineDriveFile[] = []
  16. let isTruncated = false
  17. let nextPageParameters: Record<string, any> = {}
  18. if (data.length === 0)
  19. return { fileList, isTruncated, nextPageParameters }
  20. if (isBucketListInitiation(data, prefix, bucket)) {
  21. data.forEach((item) => {
  22. fileList.push({
  23. id: item.bucket,
  24. name: item.bucket,
  25. type: OnlineDriveFileType.bucket,
  26. })
  27. })
  28. }
  29. else {
  30. data[0].files.forEach((file) => {
  31. const { id, name, size, type } = file
  32. const isFileType = isFile(type)
  33. fileList.push({
  34. id,
  35. name,
  36. size: isFileType ? size : undefined,
  37. type: isFileType ? OnlineDriveFileType.file : OnlineDriveFileType.folder,
  38. })
  39. })
  40. isTruncated = data[0].is_truncated ?? false
  41. nextPageParameters = data[0].next_page_parameters ?? {}
  42. }
  43. return { fileList, isTruncated, nextPageParameters }
  44. }