mirror of
https://github.com/laurent22/joplin.git
synced 2024-12-24 10:27:10 +02:00
35 lines
952 B
TypeScript
35 lines
952 B
TypeScript
|
import shim from '@joplin/lib/shim';
|
||
|
import { basename } from '@joplin/utils/path';
|
||
|
import Share from 'react-native-share';
|
||
|
|
||
|
const shareFile = async (path: string, mime: string) => {
|
||
|
if (shim.mobilePlatform() === 'web') {
|
||
|
const downloadLink = document.createElement('a');
|
||
|
|
||
|
const file = await shim.fsDriver().fileAtPath(path);
|
||
|
const downloadUrl = URL.createObjectURL(file);
|
||
|
downloadLink.href = downloadUrl;
|
||
|
downloadLink.download = basename(path);
|
||
|
|
||
|
document.body.appendChild(downloadLink);
|
||
|
downloadLink.click();
|
||
|
downloadLink.remove();
|
||
|
|
||
|
// While it might be fine to revoke the object URL
|
||
|
// immediately after download starts, it also might not be.
|
||
|
// See https://stackoverflow.com/a/71164969
|
||
|
shim.setTimeout(() => {
|
||
|
URL.revokeObjectURL(downloadUrl);
|
||
|
}, 10000);
|
||
|
} else {
|
||
|
await Share.open({
|
||
|
type: mime,
|
||
|
filename: basename(path),
|
||
|
url: `file://${path}`,
|
||
|
failOnCancel: false,
|
||
|
});
|
||
|
}
|
||
|
};
|
||
|
|
||
|
export default shareFile;
|