60 lines
1.2 KiB
TypeScript
Raw Normal View History

2022-09-03 23:32:20 +02:00
import { ref } from 'vue';
import { NProgress } from 'naive-ui';
import filesize from 'filesize';
2022-09-06 15:59:16 +02:00
import { Music, Video, Image, Document } from '@vicons/carbon';
2022-09-03 23:32:20 +02:00
import type { DialogApiInjection } from 'naive-ui/es/dialog/src/DialogProvider';
export default function createBlobDialog(
2022-09-03 23:32:20 +02:00
dialog: DialogApiInjection,
2022-09-06 15:59:16 +02:00
image: boolean,
audio: boolean,
2022-09-03 23:32:20 +02:00
video: boolean
) {
const progress = ref(0);
const total = ref(1);
const percentage = ref(0);
const dia = dialog.create({
title:
2022-09-06 15:59:16 +02:00
'Loading ' +
(video ? 'video' : audio ? 'audio' : image ? 'image' : 'content') +
'...',
2022-09-03 23:32:20 +02:00
closable: false,
closeOnEsc: false,
maskClosable: false,
2022-09-06 15:59:16 +02:00
icon: () =>
video ? (
<Video />
) : audio ? (
<Music />
) : image ? (
<Image />
) : (
<Document />
),
2022-09-03 23:32:20 +02:00
content: () => (
<NProgress
type="line"
percentage={percentage.value}
height={20}
status="info"
showIndicator={false}
/>
),
action: () => (
<div>
{filesize(progress.value, {
base: 2,
standard: 'jedec'
})}
/
{filesize(total.value, {
base: 2,
standard: 'jedec'
})}
- {Math.floor(percentage.value * 1000) / 1000}%
</div>
)
});
return { progress, total, percentage, dia };
}