};
export const extractFilesData = (document: Document) => {
- const collectionUrlPrefix = /\/c=[0-9a-zA-Z\-]*/;
+ const collectionUrlPrefix = /\/c=([0-9a-zA-Z\-]*)/;
return Array
.from(document.getElementsByTagName('D:response'))
.slice(1) // omit first element which is collection itself
const size = parseInt(getTagValue(element, 'D:getcontentlength', '0'), 10);
const url = getTagValue(element, 'D:href', '');
const nameSuffix = `/${name || ''}`;
+ const collectionUuidMatch = collectionUrlPrefix.exec(url);
+ const collectionUuid = collectionUuidMatch ? collectionUuidMatch.pop() : '';
const directory = url
.replace(collectionUrlPrefix, '')
.replace(nameSuffix, '');
+
const data = {
url,
- id: `${directory}/${name}`,
+ id: [
+ collectionUuid ? collectionUuid : '',
+ directory ? '/' + directory : '',
+ '/' + name
+ ].join(''),
name,
path: directory,
};
});
};
+
+export const getFileFullPath = ({ name, path }: CollectionFile | CollectionDirectory) =>
+ `${path}/${name}`;
);
}
- private extendFileURL = (file: CollectionDirectory | CollectionFile) => ({
- ...file,
- url: this.webdavClient.defaults.baseURL + file.url + '?api_token=' + this.authService.getApiToken()
- })
+ private extendFileURL = (file: CollectionDirectory | CollectionFile) => {
+ const baseUrl = this.webdavClient.defaults.baseURL.endsWith('/')
+ ? this.webdavClient.defaults.baseURL.slice(0, -1)
+ : this.webdavClient.defaults.baseURL;
+ return {
+ ...file,
+ url: baseUrl + file.url + '?api_token=' + this.authService.getApiToken()
+ };
+ }
private async uploadFile(collectionUuid: string, file: File, fileId: number, onProgress: UploadProgress = () => { return; }) {
const fileURL = `c=${collectionUuid}/${file.name}`;
import { filterCollectionFilesBySelection } from './collection-panel-files-state';
import { startSubmit, stopSubmit, reset } from 'redux-form';
import { getDialog } from "~/store/dialog/dialog-reducer";
+import { getFileFullPath } from "~/services/collection-service/collection-service-files-response";
export const collectionPanelFilesAction = unionize({
SET_COLLECTION_FILES: ofType<CollectionFilesTree>(),
export const removeCollectionsSelectedFiles = () =>
(dispatch: Dispatch, getState: () => RootState) => {
- const paths = filterCollectionFilesBySelection(getState().collectionPanelFiles, true).map(file => file.id);
+ const paths = filterCollectionFilesBySelection(getState().collectionPanelFiles, true)
+ .map(getFileFullPath);
dispatch<any>(removeCollectionFiles(paths));
};
const dialog = getDialog<RenameFileDialogData>(getState().dialog, RENAME_FILE_DIALOG);
const currentCollection = getState().collectionPanel.item;
if (dialog && currentCollection) {
- dispatch(startSubmit(RENAME_FILE_DIALOG));
- const oldPath = dialog.data.id;
- const newPath = dialog.data.id.replace(dialog.data.name, newName);
- try {
- await services.collectionService.moveFile(currentCollection.uuid, oldPath, newPath);
- dispatch<any>(loadCollectionFiles(currentCollection.uuid));
- dispatch(dialogActions.CLOSE_DIALOG({ id: RENAME_FILE_DIALOG }));
- dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'File name changed.', hideDuration: 2000 }));
- } catch (e) {
- dispatch(stopSubmit(RENAME_FILE_DIALOG, { name: 'Could not rename the file' }));
+ const file = getNodeValue(dialog.data.id)(getState().collectionPanelFiles);
+ if (file) {
+ dispatch(startSubmit(RENAME_FILE_DIALOG));
+ const oldPath = getFileFullPath(file);
+ const newPath = getFileFullPath({ ...file, name: newName });
+ try {
+ await services.collectionService.moveFile(currentCollection.uuid, oldPath, newPath);
+ dispatch<any>(loadCollectionFiles(currentCollection.uuid));
+ dispatch(dialogActions.CLOSE_DIALOG({ id: RENAME_FILE_DIALOG }));
+ dispatch(snackbarActions.OPEN_SNACKBAR({ message: 'File name changed.', hideDuration: 2000 }));
+ } catch (e) {
+ dispatch(stopSubmit(RENAME_FILE_DIALOG, { name: 'Could not rename the file' }));
+ }
}
}
};