diff --git a/client/constants.js b/client/constants.js
index 13c74e0504..2aba15cecf 100644
--- a/client/constants.js
+++ b/client/constants.js
@@ -51,6 +51,7 @@ export const SHOW_MODAL = 'SHOW_MODAL';
export const HIDE_MODAL = 'HIDE_MODAL';
export const CREATE_FILE = 'CREATE_FILE';
export const SET_BLOB_URL = 'SET_BLOB_URL';
+export const UPLOAD_FILE_BY_URL = 'UPLOAD_FILE_BY_URL';
export const EXPAND_SIDEBAR = 'EXPAND_SIDEBAR';
export const COLLAPSE_SIDEBAR = 'COLLAPSE_SIDEBAR';
@@ -84,6 +85,9 @@ export const SHOW_FOLDER_CHILDREN = 'SHOW_FOLDER_CHILDREN';
export const HIDE_FOLDER_CHILDREN = 'HIDE_FOLDER_CHILDREN';
export const OPEN_UPLOAD_FILE_MODAL = 'OPEN_UPLOAD_FILE_MODAL';
export const CLOSE_UPLOAD_FILE_MODAL = 'CLOSE_UPLOAD_FILE_MODAL';
+// Updates
+export const OPEN_UPLOAD_FILE_BY_URL_MODAL = 'OPEN_UPLOAD_FILE_BY_URL_MODAL';
+export const CLOSE_UPLOAD_FILE_BY_URL_MODAL = 'CLOSE_UPLOAD_FILE_BY_URL_MODAL';
export const SHOW_SHARE_MODAL = 'SHOW_SHARE_MODAL';
export const CLOSE_SHARE_MODAL = 'CLOSE_SHARE_MODAL';
diff --git a/client/modules/IDE/actions/files.js b/client/modules/IDE/actions/files.js
index c8a656c83c..6b8b1f8a21 100644
--- a/client/modules/IDE/actions/files.js
+++ b/client/modules/IDE/actions/files.js
@@ -3,8 +3,10 @@ import blobUtil from 'blob-util';
import { reset } from 'redux-form';
import apiClient from '../../../utils/apiClient';
import * as ActionTypes from '../../../constants';
-import { setUnsavedChanges, closeNewFolderModal, closeNewFileModal } from './ide';
+import { setUnsavedChanges, closeNewFolderModal, closeNewFileModal, closeUploadFileByURLModal } from './ide';
import { setProjectSavedTime } from './project';
+import { CREATE_FILE_REGEX } from '../../../../server/utils/fileUtils';
+import { showToast, setToastText } from './toast';
function appendToFilename(filename, string) {
@@ -92,6 +94,39 @@ export function createFile(formProps) {
};
}
+export function uploadFileByURL(data) {
+ return (dispatch, getState) => {
+ const fileUrlArray = data.url.split('/');
+ const fileName = fileUrlArray[fileUrlArray.length - 1];
+ const file = {
+ name: fileName
+ };
+ if (fileName.match(CREATE_FILE_REGEX)) {
+ fetch(data.url, {
+ method: 'GET'
+ })
+ .then(r => r.text())
+ .then((res) => {
+ file.content = res;
+ createFile(file)(dispatch, getState);
+ dispatch(showToast(2000));
+ dispatch(setToastText('UploadFileByURL.Success'));
+ dispatch(closeUploadFileByURLModal());
+ })
+ .catch((err) => {
+ dispatch(showToast(2000));
+ dispatch(setToastText('UploadFileByURL.Error'));
+ });
+ } else {
+ file.url = data.url;
+ createFile(file)(dispatch, getState);
+ dispatch(showToast(2000));
+ dispatch(setToastText('UploadFileByURL.Success'));
+ dispatch(closeUploadFileByURLModal());
+ }
+ };
+}
+
export function createFolder(formProps) {
return (dispatch, getState) => {
const state = getState();
diff --git a/client/modules/IDE/actions/ide.js b/client/modules/IDE/actions/ide.js
index 239dc6c757..33a8d9d8be 100644
--- a/client/modules/IDE/actions/ide.js
+++ b/client/modules/IDE/actions/ide.js
@@ -88,6 +88,20 @@ export function closeUploadFileModal() {
};
}
+export function openUploadFileByURLModal(parentId) {
+ return {
+ type: ActionTypes.OPEN_UPLOAD_FILE_BY_URL_MODAL,
+ parentId
+ };
+}
+
+export function closeUploadFileByURLModal() {
+ return {
+ type: ActionTypes.CLOSE_UPLOAD_FILE_BY_URL_MODAL
+ };
+}
+
+
export function expandSidebar() {
return {
type: ActionTypes.EXPAND_SIDEBAR
diff --git a/client/modules/IDE/components/FileNode.jsx b/client/modules/IDE/components/FileNode.jsx
index f4b8166d31..3f0bd64c50 100644
--- a/client/modules/IDE/components/FileNode.jsx
+++ b/client/modules/IDE/components/FileNode.jsx
@@ -153,6 +153,11 @@ class FileNode extends React.Component {
setTimeout(this.hideFileOptions, 0);
}
+ handleClickUploadFileByURL = () => {
+ this.props.openUploadFileByURLModal(this.props.id);
+ setTimeout(this.hideFileOptions, 0);
+ }
+
handleClickDelete = () => {
const prompt = this.props.t('Common.DeleteConfirmation', { name: this.props.name });
@@ -248,12 +253,12 @@ class FileNode extends React.Component {
{ !isRoot &&
- { isFile &&
+ {isFile &&
}
- { isFolder &&
+ {isFolder &&