1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-25 12:56:41 +07:00

fixed eslint

This commit is contained in:
muerwre 2019-08-07 14:23:04 +07:00
parent 8c448f2ab6
commit 42fbacdd66
9 changed files with 327 additions and 102 deletions

View file

@ -64,6 +64,11 @@ export interface IFile {
updatedAt?: string;
}
export interface IFileWithUUID {
temp_id?: UUID;
file: File;
}
export interface IBlock {
type: 'image' | 'text' | 'media' | 'youtube' | 'video',
temp_ids: UUID[];

View file

@ -4,6 +4,7 @@ const prefix = 'UPLOAD.';
export const UPLOAD_ACTIONS = {
UPLOAD_FILES: `${prefix}UPLOAD_FILES`,
UPLOAD_CANCEL: `${prefix}UPLOAD_CANCEL`,
};
export const EMPTY_FILE: IFile = {

View file

@ -1,6 +1,94 @@
import {takeEvery} from "redux-saga/effects";
import {UPLOAD_ACTIONS} from "~/redux/uploads/constants";
import { takeEvery, all, spawn, call, put, take, fork, race } from 'redux-saga/effects';
import { UPLOAD_ACTIONS } from '~/redux/uploads/constants';
import { uploadUploadFiles } from './actions';
import { reqWrapper } from '../auth/sagas';
import { createUploader, uploadGetThumb } from '~/utils/uploader';
import { HTTP_RESPONSES } from '~/utils/api';
import { VALIDATORS } from '~/utils/validators';
import { UUID, IFileWithUUID, IResultWithStatus } from '../types';
function* uploadCall({ temp_id, onProgress, file }) {
return yield call(reqWrapper, console.log, { file, onProgress });
}
function* onUploadProgress(chan) {
while (true) {
const { progress, temp_id }: { progress: number; temp_id: string } = yield take(chan);
console.log('progress', { progress, temp_id });
// replace with the one, that changes upload status with progress
// yield put(inventoryUploadSet(temp_id, { progress }));
}
}
function* uploadCancelWorker(id) {
while (true) {
const { temp_id } = yield take(UPLOAD_ACTIONS.UPLOAD_CANCEL);
if (temp_id === id) break;
}
return true;
}
function* uploadWorker(file: File, temp_id: UUID) {
const [promise, chan] = createUploader<{ temp_id; file }, { temp_id }>(uploadCall, { temp_id });
yield fork(onUploadProgress, chan);
return yield call(promise, { temp_id, file });
}
function* uploadFile({ file, temp_id }: IFileWithUUID): IResultWithStatus<any> {
if (!file.type || !VALIDATORS.IS_IMAGE_MIME(file.type)) {
return { error: 'File_Not_Image', status: HTTP_RESPONSES.BAD_REQUEST, data: {} };
}
const preview = yield call(uploadGetThumb, file);
// yield put(inventoryUploadAdd( // replace with the one, what adds file upload status
// temp_id,
// {
// ...EMPTY_INVENTORY_UPLOAD,
// preview,
// is_uploading: true,
// type: file.type,
// },
// ));
const { result, cancel, cancel_editing, save_inventory } = yield race({
result: call(uploadWorker, file, temp_id),
cancel: call(uploadCancelWorker, temp_id),
// add here CANCEL_UPLOADS worker, that will watch for subject
// cancel_editing: take(UPLOAD_ACTIONS.CANCEL_EDITING),
// save_inventory: take(INVENTORY_ACTIONS.SAVE_INVENTORY),
}) as any;
if (cancel || cancel_editing || save_inventory) {
// return yield put(inventoryUploadDrop(temp_id)); // replace with the one, that will delete file upload status record
return { error: null, status: HTTP_RESPONSES.NOT_FOUND, data: {} };
}
const { data, error } = result;
if (error) {
// replace with the one, that changes file upload status to error
// return yield put(inventoryUploadSet(temp_id, { is_uploading: false, error: data.detail || error }));
return { error: null, status: HTTP_RESPONSES.NOT_FOUND, data: {} };
}
// replace with the one, that updates upload status with actual data
// yield put(inventoryUploadSet(temp_id, {
// is_uploading: false,
// error: null,
// uuid: data.uuid,
// url: data.url,
// thumbnail_url: data.url,
// }));
return { error: null, status: HTTP_RESPONSES.CREATED, data: {} }; // add file here as data
}
function* uploadFiles({ files }: ReturnType<typeof uploadUploadFiles>) {
yield all(files.map(file => spawn(uploadFile, file)));
}
export default function* () {
yield takeEvery(UPLOAD_ACTIONS.UPLOAD_FILES, console.log);
yield takeEvery(UPLOAD_ACTIONS.UPLOAD_FILES, uploadFiles);
}