diff options
Diffstat (limited to 'animism-align/frontend/api/crud.upload.js')
| -rw-r--r-- | animism-align/frontend/api/crud.upload.js | 115 |
1 files changed, 0 insertions, 115 deletions
diff --git a/animism-align/frontend/api/crud.upload.js b/animism-align/frontend/api/crud.upload.js deleted file mode 100644 index beec86c..0000000 --- a/animism-align/frontend/api/crud.upload.js +++ /dev/null @@ -1,115 +0,0 @@ -import { as_type } from './crud.types' - -export function crud_upload(type, data, dispatch) { - return new Promise( (resolve, reject) => { - // console.log(type, data) - const { id } = data - - const fd = new FormData() - if (!data.tag) { - data.tag = 'misc' - } - - Object.keys(data).forEach(key => { - if (key.indexOf('__') !== -1) return - if (key === 'id') return - const fn_key = '__' + key + '_filename' - if (fn_key in data) { - fd.append(key, data[key], data[fn_key]) - } else { - fd.append(key, data[key]) - } - }) - - let url = id ? '/api/v1/' + type + '/' + id + '/' - : '/api/v1/' + type + '/' - // console.log(url) - - const xhr = new XMLHttpRequest() - xhr.upload.addEventListener("progress", uploadProgress, false) - xhr.addEventListener("load", uploadComplete, false) - xhr.addEventListener("error", uploadFailed, false) - xhr.addEventListener("abort", uploadCancelled, false) - xhr.open("POST", url) - xhr.send(fd) - - dispatch && dispatch({ type: as_type(type, 'upload_loading')}) - - let complete = false - - function uploadProgress (e) { - if (e.lengthComputable) { - const percent = Math.round(e.loaded * 100 / e.total) || 0 - if (percent > 99) { - dispatch && dispatch({ - type: as_type(type, 'upload_waiting'), - percent, - [type]: id, - }) - } else { - dispatch && dispatch({ - type: as_type(type, 'upload_progress'), - percent, - [type]: id, - }) - } - } - else { - dispatch && dispatch({ - type: as_type(type, 'upload_error'), - error: 'unable to compute upload progress', - [type]: id, - }) - } - } - - function uploadComplete (e) { - let parsed; - try { - parsed = JSON.parse(e.target.responseText) - } catch (e) { - dispatch && dispatch({ - type: as_type(type, 'upload_error'), - error: 'upload failed', - [type]: id, - }) - reject(e) - return - } - dispatch && dispatch({ - type: as_type(type, 'upload_complete'), - data: parsed, - [type]: id, - }) - if (parsed.res) { - (parsed.res.length ? parsed.res : [parsed.res]).forEach(file => { - dispatch && dispatch({ - type: as_type('upload', 'create'), - data: { res: file }, - }) - }) - } - resolve(parsed) - } - - function uploadFailed (evt) { - dispatch && dispatch({ - type: as_type(type, 'upload_error'), - error: 'upload failed', - [type]: id, - }) - reject(evt) - } - - function uploadCancelled (evt) { - dispatch && dispatch({ - type: as_type(type, 'upload_error'), - error: 'upload cancelled', - [type]: id, - }) - reject(evt) - } - }) -} - -export const upload_action = (type, data) => dispatch => crud_upload(type, data, dispatch) |
