feat(hosted-files): introduce standardized download component and V3 action support
- Created AE_Comp_Hosted_Files_Download_Button using Svelte 5 and Lucide icons. - Added file_extension_icon_lucide utility for direct Lucide icon mapping. - Refactored download logic to core__hosted_files.ts using V3 Action endpoint (/v3/action/hosted_file/.../download). - Integrated new component into Event File Object Table. - Cleaned up legacy window.postMessage calls in several file management views. NOTE: The new download component is currently in development and may not be fully functional.
This commit is contained in:
@@ -8,6 +8,7 @@ import {
|
||||
} from './ae_utils__files';
|
||||
import { get_obj_li_w_match_prop } from './ae_utils__get_obj_li_w_match_prop';
|
||||
import { file_extension_icon } from './ae_utils__file_extension_icon';
|
||||
import { file_extension_icon_lucide } from './ae_utils__file_extension_icon_lucide';
|
||||
import { process_permission_checks } from './ae_utils__perm_checks';
|
||||
import { iso_datetime_formatter } from './ae_utils__datetime_format';
|
||||
import { is_datetime_recent } from './ae_utils__is_datetime_recent';
|
||||
@@ -337,6 +338,7 @@ export const ae_util = {
|
||||
shorten_string: shorten_string,
|
||||
shorten_filename: shorten_filename,
|
||||
file_extension_icon: file_extension_icon,
|
||||
file_extension_icon_lucide: file_extension_icon_lucide,
|
||||
format_html: format_html,
|
||||
set_obj_prop_display_name: set_obj_prop_display_name,
|
||||
return_obj_type_path: return_obj_type_path,
|
||||
|
||||
66
src/lib/ae_utils/ae_utils__file_extension_icon_lucide.ts
Normal file
66
src/lib/ae_utils/ae_utils__file_extension_icon_lucide.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
import * as Lucide from 'lucide-svelte';
|
||||
|
||||
/**
|
||||
* Returns a Lucide icon component based on the provided file extension.
|
||||
* @param extension The file extension (e.g., 'pdf', 'jpg').
|
||||
* @returns The Lucide icon component.
|
||||
*/
|
||||
export function file_extension_icon_lucide(extension: string | undefined | null): any {
|
||||
const ext = extension?.toLowerCase() || '';
|
||||
|
||||
const icon_map: Record<string, any> = {
|
||||
'pdf': Lucide.FileText,
|
||||
'doc': Lucide.FileText,
|
||||
'docx': Lucide.FileText,
|
||||
'txt': Lucide.FileText,
|
||||
'rtf': Lucide.FileText,
|
||||
|
||||
'xls': Lucide.FileSpreadsheet,
|
||||
'xlsx': Lucide.FileSpreadsheet,
|
||||
'csv': Lucide.FileSpreadsheet,
|
||||
|
||||
'png': Lucide.FileImage,
|
||||
'jpg': Lucide.FileImage,
|
||||
'jpeg': Lucide.FileImage,
|
||||
'gif': Lucide.FileImage,
|
||||
'webp': Lucide.FileImage,
|
||||
'bmp': Lucide.FileImage,
|
||||
'svg': Lucide.FileImage,
|
||||
|
||||
'mp3': Lucide.FileAudio,
|
||||
'wav': Lucide.FileAudio,
|
||||
'm4a': Lucide.FileAudio,
|
||||
'flac': Lucide.FileAudio,
|
||||
'aac': Lucide.FileAudio,
|
||||
'aif': Lucide.FileAudio,
|
||||
'aiff': Lucide.FileAudio,
|
||||
|
||||
'mp4': Lucide.FileVideo,
|
||||
'mkv': Lucide.FileVideo,
|
||||
'mov': Lucide.FileVideo,
|
||||
'avi': Lucide.FileVideo,
|
||||
'3gp': Lucide.FileVideo,
|
||||
|
||||
'ppt': Lucide.Presentation,
|
||||
'pptx': Lucide.Presentation,
|
||||
'key': Lucide.Presentation,
|
||||
'odp': Lucide.Presentation,
|
||||
|
||||
'zip': Lucide.FileArchive,
|
||||
'7z': Lucide.FileArchive,
|
||||
'rar': Lucide.FileArchive,
|
||||
'tar': Lucide.FileArchive,
|
||||
'gz': Lucide.FileArchive,
|
||||
|
||||
'json': Lucide.FileJson,
|
||||
|
||||
'html': Lucide.FileCode,
|
||||
'htm': Lucide.FileCode,
|
||||
'js': Lucide.FileCode,
|
||||
'ts': Lucide.FileCode,
|
||||
'css': Lucide.FileCode,
|
||||
'php': Lucide.FileCode
|
||||
};
|
||||
|
||||
return icon_map[ext] || Lucide.File;
|
||||
}
|
||||
Reference in New Issue
Block a user