11import { clsx , type ClassValue } from "clsx"
22import { twMerge } from "tailwind-merge"
3- import type { FileSystemNode } from "@/types/file.types"
4- import type { StandardFileItem , DeletedFileItem , PrivateFileItem } from "@/types/file-manager"
3+ import type { FileSystemNode , SharedFileSystemNode } from "@/types/file.types"
4+ import type { StandardFileItem , DeletedFileItem , PrivateFileItem , SharedFileItem } from "@/types/file-manager"
55import {
66 FileText ,
77 FolderIcon ,
@@ -192,4 +192,52 @@ export function transformFileSystemNodeToPrivateFileItem(node: FileSystemNode, p
192192// Transform FileSystemNode array to PrivateFileItem array
193193export function transformFileSystemNodesToPrivateFileItems ( nodes : FileSystemNode [ ] ) : PrivateFileItem [ ] {
194194 return nodes . map ( node => transformFileSystemNodeToPrivateFileItem ( node ) )
195+ }
196+
197+ // Transform SharedFileSystemNode to SharedFileItem
198+ export function transformSharedFileSystemNodeToSharedFileItem ( node : SharedFileSystemNode , parentPath : string [ ] = [ ] ) : SharedFileItem {
199+ const isFolder = node . is_folder
200+ const fileType = node . file_info ?. file_type || null
201+ const size = node . file_info ?. file_size || 0
202+ const thumbnail = node . file_info ?. thumbnail_path || null
203+
204+ // Handle potential null updated_at
205+ const modifiedDate = node . updated_at || node . created_at
206+
207+ return {
208+ id : node . id ,
209+ name : node . name ,
210+ type : isFolder ? "folder" : "file" ,
211+ fileType : isFolder ? "folder" : getFileTypeCategory ( fileType ) ,
212+ size : formatFileSize ( size ) ,
213+ modified : formatRelativeTime ( modifiedDate ) ,
214+ icon : isFolder ? FolderIcon : getFileIcon ( fileType ) ,
215+ thumbnail,
216+ file_info : node . file_info || undefined ,
217+ starred : false , // This would need to be fetched from favorites API
218+ shared : true ,
219+ parentPath,
220+ variant : "shared" ,
221+ sharedBy : {
222+ name : node . shared_by_user ?. display_name || "Unknown" ,
223+ avatar : node . shared_by_user ?. avatar_url || null ,
224+ initials : ( node . shared_by_user ?. display_name || "U" ) . charAt ( 0 ) . toUpperCase ( ) ,
225+ } ,
226+ sharedWith : [
227+ {
228+ name : node . shared_with_user ?. display_name || "Unknown" ,
229+ avatar : node . shared_with_user ?. avatar_url || null ,
230+ initials : ( node . shared_with_user ?. display_name || "U" ) . charAt ( 0 ) . toUpperCase ( ) ,
231+ }
232+ ] ,
233+ permission : ( node . permission_level as "view" | "edit" | "admin" ) || "view" ,
234+ sharedDate : formatRelativeTime ( node . share_created_at ) ,
235+ isOwner : false , // This will be overridden in the page component based on current user
236+ children : node . children ? node . children . map ( ( child : SharedFileSystemNode ) => transformSharedFileSystemNodeToSharedFileItem ( child , [ ...parentPath , node . name ] ) ) : undefined ,
237+ }
238+ }
239+
240+ // Transform SharedFileSystemNode array to SharedFileItem array
241+ export function transformSharedFileSystemNodesToSharedFileItems ( nodes : SharedFileSystemNode [ ] ) : SharedFileItem [ ] {
242+ return nodes . map ( node => transformSharedFileSystemNodeToSharedFileItem ( node ) )
195243}
0 commit comments