You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

utils.ts 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { type OnlineDriveFile, OnlineDriveFileType } from '@/models/pipeline'
  2. import type { OnlineDriveData } from '@/types/pipeline'
  3. const filePathRegex = /^(?:.*\/)?[^\/]+\.[^\/\.]+$/
  4. export const isFile = (path: string): boolean => {
  5. return filePathRegex.test(path)
  6. }
  7. export const isBucketListInitiation = (data: OnlineDriveData[], prefix: string[], bucket: string): boolean => {
  8. if (bucket || prefix.length > 0) return false
  9. return data.length > 1 || (data.length === 1 && !!data[0].bucket && data[0].files.length === 0)
  10. }
  11. export const convertOnlineDriveData = (data: OnlineDriveData[], prefix: string[], bucket: string): { fileList: OnlineDriveFile[], isTruncated: boolean } => {
  12. const fileList: OnlineDriveFile[] = []
  13. let isTruncated = false
  14. if (data.length === 0)
  15. return { fileList, isTruncated }
  16. if (isBucketListInitiation(data, prefix, bucket)) {
  17. data.forEach((item) => {
  18. fileList.push({
  19. key: item.bucket,
  20. displayName: item.bucket,
  21. type: OnlineDriveFileType.bucket,
  22. })
  23. })
  24. }
  25. else {
  26. data[0].files.forEach((file) => {
  27. const isFileType = isFile(file.key)
  28. const filePathList = file.key.split('/')
  29. fileList.push({
  30. key: file.key,
  31. displayName: `${isFileType ? filePathList.pop() : filePathList[filePathList.length - 2]}${isFileType ? '' : '/'}`,
  32. size: isFileType ? file.size : undefined,
  33. type: isFileType ? OnlineDriveFileType.file : OnlineDriveFileType.folder,
  34. })
  35. })
  36. isTruncated = data[0].is_truncated ?? false
  37. }
  38. return { fileList, isTruncated }
  39. }