mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-17 21:30:31 +00:00
re-structure to monorepo.
This commit is contained in:
74
packages/webapp/src/hooks/useMedia.tsx
Normal file
74
packages/webapp/src/hooks/useMedia.tsx
Normal file
@@ -0,0 +1,74 @@
|
||||
// @ts-nocheck
|
||||
import React, { useState, useRef, useCallback } from 'react';
|
||||
import { ProgressBar, Classes, Intent } from '@blueprintjs/core';
|
||||
import classNames from 'classnames';
|
||||
import { AppToaster } from '@/components';
|
||||
import { saveFilesInAsync } from '@/utils';
|
||||
|
||||
const useMedia = ({ saveCallback, deleteCallback }) => {
|
||||
const [files, setFiles] = useState([]);
|
||||
const [deletedFiles, setDeletedFiles] = useState([]);
|
||||
const toastKey = useRef(0);
|
||||
|
||||
const openProgressToast = useCallback(
|
||||
(amount) => ({
|
||||
message: (
|
||||
<ProgressBar
|
||||
className={classNames('toast-progress', {
|
||||
[Classes.PROGRESS_NO_STRIPES]: amount >= 100,
|
||||
})}
|
||||
intent={amount < 100 ? Intent.PRIMARY : Intent.SUCCESS}
|
||||
value={amount / 100}
|
||||
/>
|
||||
),
|
||||
}),
|
||||
[],
|
||||
);
|
||||
|
||||
const saveMedia = useCallback(() => {
|
||||
const notUploadedFiles = files.filter((file) => file.uploaded === false);
|
||||
|
||||
if (notUploadedFiles.length > 0) {
|
||||
toastKey.current = AppToaster.show(openProgressToast(0));
|
||||
|
||||
const saveAction = (formData, attachment, progressCallback) => {
|
||||
return saveCallback(formData, {
|
||||
onUploadProgress: (progress) => {
|
||||
progressCallback(progress);
|
||||
},
|
||||
}).then((res) => {
|
||||
attachment.uploaded = true;
|
||||
return res;
|
||||
});
|
||||
};
|
||||
return saveFilesInAsync(notUploadedFiles, saveAction).onProgress(
|
||||
(progress) => {
|
||||
if (progress > 0) {
|
||||
AppToaster.show(
|
||||
openProgressToast(progress * 100),
|
||||
toastKey.current,
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
return Promise.resolve([]);
|
||||
}, [files, openProgressToast, saveCallback]);
|
||||
|
||||
const deleteMedia = useCallback(() => {
|
||||
return deletedFiles.length > 0
|
||||
? deleteCallback(deletedFiles)
|
||||
: Promise.resolve();
|
||||
}, [deletedFiles, deleteCallback]);
|
||||
|
||||
return {
|
||||
files,
|
||||
setFiles,
|
||||
saveMedia,
|
||||
deletedFiles,
|
||||
setDeletedFiles,
|
||||
deleteMedia,
|
||||
};
|
||||
};
|
||||
|
||||
export default useMedia;
|
||||
Reference in New Issue
Block a user