94 строки
3.0 KiB
JavaScript
94 строки
3.0 KiB
JavaScript
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
import {batchActions} from 'redux-batched-actions';
|
|
import request from 'superagent';
|
|
|
|
import store from 'stores/redux_store.jsx';
|
|
|
|
import * as Utils from 'utils/utils.jsx';
|
|
|
|
import {FileTypes} from 'mattermost-redux/action_types';
|
|
import {forceLogoutIfNecessary} from 'mattermost-redux/actions/helpers';
|
|
import {getLogErrorAction} from 'mattermost-redux/actions/errors';
|
|
import {Client4} from 'mattermost-redux/client';
|
|
|
|
export function uploadFile(file, name, channelId, clientId, successCallback, errorCallback) {
|
|
const {dispatch, getState} = store;
|
|
|
|
function handleResponse(err, res) {
|
|
if (err) {
|
|
let e;
|
|
if (res && res.body && res.body.id) {
|
|
e = res.body;
|
|
} else if (err.status === 0 || !err.status) {
|
|
e = {message: Utils.localizeMessage('channel_loader.connection_error', 'There appears to be a problem with your internet connection.')};
|
|
} else {
|
|
e = {message: Utils.localizeMessage('channel_loader.unknown_error', 'We received an unexpected status code from the server.') + ' (' + err.status + ')'};
|
|
}
|
|
|
|
forceLogoutIfNecessary(err, dispatch);
|
|
|
|
const failure = {
|
|
type: FileTypes.UPLOAD_FILES_FAILURE,
|
|
clientIds: [clientId],
|
|
channelId,
|
|
rootId: null,
|
|
error: err
|
|
};
|
|
|
|
dispatch(batchActions([failure, getLogErrorAction(err)]), getState);
|
|
|
|
if (errorCallback) {
|
|
errorCallback(e, err, res);
|
|
}
|
|
} else if (res) {
|
|
const data = res.body.file_infos.map((fileInfo, index) => {
|
|
return {
|
|
...fileInfo,
|
|
clientId: res.body.client_ids[index]
|
|
};
|
|
});
|
|
|
|
dispatch(batchActions([
|
|
{
|
|
type: FileTypes.RECEIVED_UPLOAD_FILES,
|
|
data,
|
|
channelId,
|
|
rootId: null
|
|
},
|
|
{
|
|
type: FileTypes.UPLOAD_FILES_SUCCESS
|
|
}
|
|
]), getState);
|
|
|
|
if (successCallback) {
|
|
successCallback(res.body, res);
|
|
}
|
|
}
|
|
}
|
|
|
|
dispatch({type: FileTypes.UPLOAD_FILES_REQUEST}, getState);
|
|
|
|
return request.
|
|
post(Client4.getFilesRoute()).
|
|
set(Client4.getOptions().headers).
|
|
attach('files', file, name).
|
|
field('channel_id', channelId).
|
|
field('client_ids', clientId).
|
|
accept('application/json').
|
|
end(handleResponse);
|
|
}
|
|
|
|
export async function getPublicLink(fileId, success) {
|
|
Client4.getFilePublicLink(fileId).then(
|
|
(data) => {
|
|
if (data && success) {
|
|
success(data.link);
|
|
}
|
|
}
|
|
).catch(
|
|
() => {} //eslint-disable-line no-empty-function
|
|
);
|
|
}
|