FileViewer
FileViewer - компонент для просмотра содержимого файлов.
Компонент работает с несколькими разными viewer для поддержки бОльшего кол-ва форматов, определеяет viewer по расширению из названия файла.
Props
files
import type { Component } from 'vue';
import type { FileSource, IFile } from '#sf/components/file/types';
export type FileViewerSource = FileSource | 'raw';
export type File = Pick<IFile, 'id' | 'name' | 'url' | 'directUrl'> &
Partial<
Pick<IFile, 'isInfected' | 'isProcessing' | 'isSuspicious' | 'isClean'>
> & {
downloadUrl?: string | null;
fetchUrl?: () => Promise<string>;
source?: FileViewerSource;
/**
* @deprecated instead use `source`
*/
fileSource?: FileViewerSource;
};
export type Viewer = {
id: string;
types: string[];
component: Component;
};
- type:
File[] - required:
true
Массив файлов для предпросмотра. Поддерживается так же указание прямого урла до файла через асинхронный file.fetchUrl или file.url и file.source: 'raw'.
source в файле приоритетнее source пропа
fp
source
| 'example-work'
| 'forum'
| 'reference-page'
| 'shop'
| 'shop-demo'
| 'shop-correction'
| 'shop-correction-demo'
| 'pretension'
| 'pretension-report'
- type:
FileSource - default:
null
"Источник" файлов относительно моделей бекенда
В отличии от File.source здесь нет 'raw'
index
- type:
number | null - default:
null
Индекс открытого файла относительно files. Если index !== null, FileViewer открывается.
Emits
update:index
result
- type:
{ action: 'close' }
Событие из useCloseModal, вызывается в момент закрытия модалки
Methods
open
(index: number = 0) => void
Открытие FileViewer с данным индексом и вызовом emit('update:index', index)
close
Закрытие модального окна и вызов emit('update:index', false)
Programmatic api
Апи для открытия файло-превью без добавления компонента в шаблоны
import { useFileViewer } from '#sf/components/file-viewer/api/index';
export default defineComponent({
setup() {
const { preview } = useFileViewer();
const onClick = async () => {
await preview({
files: [],
index: 0,
source: 'message'
});
}
},
});
import type { File, FileViewerSource } from '../types';
export interface PreviewProps {
files: File[];
index?: number;
source?: FileViewerSource;
isDownloadDisabled?: boolean;
Ref api
<template>
<div>
<button @click="onOpen">
Open
</button>
<FileViewer
ref="fileViewer"
:files="files"
/>
</div>
</template>
<script>
import { ref } from 'vue';
const fileViewer = ref(null);
const onOpen = () => {
fileViewer.value?.open(0);
}
</script>