app/javascript/connected_uploader/store/actions.js
import axios from 'lib/utils/axios_utils';
import * as types from './mutation_types';
export const dragOver = ({ commit }) => commit(types.DRAG_OVER);
export const dragLeave = ({ commit }) => commit(types.DRAG_LEAVE);
export const addOriginFiles = ({ commit, getters }, payload) => {
const { originFiles, dataType } = payload;
const normalizedOriginFiles = getters.getOriginFiles(originFiles, dataType);
Array.from(normalizedOriginFiles).forEach((originFile) => {
commit(types.ADD_FILE, {
uniqueId: originFile.id,
id: originFile.id,
filename: originFile.filename,
size: originFile.size,
url: originFile.url,
thumbUrl: originFile.thumbUrl,
});
});
}
export const addFile = ({ commit }, fileInfo) => commit(types.ADD_FILE, fileInfo);
export const removeFile = ({ commit }, uniqueId) => commit(types.REMOVE_FILE, uniqueId);
export const updateFileList = ({ commit }, fileList) => commit(types.UPDATE_FILE_LIST, fileList);
export const setFileStatus = ({ commit }, payload) => commit(types.SET_FILE_STATUS, payload);
export const receivePresignedPostError = ({ dispatch }, payload) => {
const error = payload.error.response.data;
dispatch('setFileStatus', {
actionName: 'ERROR_FILE',
uniqueId: payload.uniqueId,
error: Array.isArray(error) ? error.join(', ') : error
});
};
export const receivePresignedPostSuccess = ({ dispatch }, payload) => {
const { data, presignedPost } = payload;
presignedPost['Content-Type'] = payload.file.type;
data.formData = presignedPost;
data
.submit()
.then(() => { })
.catch(error => {
dispatch('setFileStatus', {
actionName: 'ERROR_FILE',
uniqueId: payload.uniqueId,
error: error.responseXML.getElementsByTagName('Message')[0].innerHTML,
});
});
};
export const requestPresignedPost = ({ dispatch }, uniqueId) => {
dispatch('setFileStatus', {
actionName: 'LOADING_FILE',
uniqueId,
});
};
export const fetchPresignedPost = ({ dispatch }, payload) => {
dispatch('requestPresignedPost', payload.uniqueId);
axios
.get(payload.uploaderUrl)
.then(({ data }) =>
dispatch('receivePresignedPostSuccess', {
presignedPost: data,
data: payload.data,
file: payload.file,
uniqueId: payload.uniqueId,
}),
)
.catch(error => {
const errorPayload = Object.assign(payload, { error });
dispatch('receivePresignedPostError', errorPayload);
});
};
export const receiveCreateFileResourceError = ({ dispatch }, payload) => {
const error = payload.error.response.data;
dispatch('setFileStatus', {
actionName: 'ERROR_FILE',
uniqueId: payload.uniqueId,
error: Array.isArray(error) ? error.join(', ') : error
});
};
export const receiveCreateFileResource = ({ dispatch }, payload) => {
dispatch('setFileStatus', {
actionName: 'FILE_DONE',
uniqueId: payload.uniqueId,
id: payload.id,
});
};
export const createNewFileResource = ({ dispatch }, payload) => {
axios
.post(payload.createUrl, {
[payload.dataType]: { key: payload.key },
})
.then(response => {
dispatch('receiveCreateFileResource', {
id: response.data.id,
uniqueId: payload.uniqueId,
});
})
.catch(error => {
const errorPayload = Object.assign(payload, { error });
dispatch('receiveCreateFileResourceError', errorPayload);
});
};