import type { PopsTitleConfig, PopsDragConfig, PopsGeneralConfig, PopsMoreButtonConfig, } from "../../../types/components"; /** * pops.folder的下载配置选项 */ export type PopsFolderDownloadOption = { /** * * 前置条件:url不为空 * * 下载方式,不传入就不下载(不做任何处理) * * * + `a`: 使用`a标签`进行下载 * + `aBlank`: 使用`a标签`进行下载(添加属性`target="_blank"`) * + `iframe`: 使用`iframe`进行下载 * + `open`: 使用`window.open`进行下载 * + `openBlank`: 使用`window.open`进行下载(添加参数`_blank`) * * @default "aBlank" */ mode?: "a" | "aBlank" | "iframe" | "open" | "openBlank"; /** * 触发下载后会根据提供的url链接进行下载 */ url: string; }; /** * pops.folder的folder配置信息 */ export interface PopsFolderDataConfig { /** * 文件/文件夹名 */ fileName: string; /** * 文件大小,如果是文件夹的话,请设置为`0` */ fileSize: number | string; /** * 文件类型,如果是文件夹,填入`""`即可 * * 填入后会根据文件类型,自动设置图标 */ fileType: string; /** * 文件图标 * @default undefined */ fileIcon?: string; /** * 创建时间 */ createTime: | number | (() => { /** * 该值用于排序 */ timeStamp: number; /** * 用于显示的文本 */ showText: string; }); /** * 修改时间(最新时间) */ latestTime: | number | (() => { /** * 该值用于排序 */ timeStamp: number; /** * 用于显示的文本 */ showText: string; }); /** * 是否是文件夹 * @default false */ isFolder: boolean; /** * 层级 */ index: number; /** * 列表项的点击事件回调 * * 如果是配置项,则自动根据配置项来创建下载事件,也可以自定义函数 * * 如果是自定义函数的话,根据返回值来判断,如果为空则什么都不做 */ clickEvent?: | (( /** * 点击事件 */ event: MouseEvent | PointerEvent, /** * 当前层级的文件|文件夹信息配置 */ config: PopsFolderDataConfig ) => IPromise) | PopsFolderDownloadOption | PopsFolderDataConfig[] | null | undefined | void; } /** * pops.folder */ export interface PopsFolderConfig extends PopsTitleConfig, PopsDragConfig, PopsMoreButtonConfig, PopsGeneralConfig { /** * 排序 */ sort: { /** * 比较的名字,默认为fileName */ name: "fileName" | "fileSize" | "latestTime"; /** * 是否降序,默认false(升序) * @default false */ isDesc: boolean; /** * 触发排序的回调 * @returns * + true 中止内部的排序 */ callback?: ( targert: HTMLElement, event: PointerEvent | MouseEvent, sortName: "fileName" | "fileSize" | "latestTime", sortDesc: boolean ) => boolean | undefined | void; }; /** * 文件夹信息 */ folder: PopsFolderDataConfig[]; }