Implement some flow and cleanup API call for file manager

This commit is contained in:
Dane Everitt 2018-09-23 16:06:23 -07:00
parent c3ef290145
commit aee42df3ad
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
9 changed files with 186 additions and 118 deletions

View file

@ -0,0 +1,25 @@
// @flow
import axios from 'axios';
import type { AxiosInstance } from 'axios';
// This token is set in the bootstrap.js file at the beginning of the request
// and is carried through from there.
// const token: string = '';
const http: AxiosInstance = axios.create({
'X-Requested-With': 'XMLHttpRequest',
'Accept': 'application/json',
'Content-Type': 'application/json',
});
// If we have a phpdebugbar instance registered at this point in time go
// ahead and route the response data through to it so things show up.
if (typeof window.phpdebugbar !== 'undefined') {
http.interceptors.response.use(response => {
window.phpdebugbar.ajaxHandler.handle(response.request);
return response;
});
}
export default http;

View file

@ -0,0 +1,50 @@
// @flow
import http from './../http';
import filter from 'lodash/filter';
import isObject from 'lodash/isObject';
import route from '../../../../../vendor/tightenco/ziggy/src/js/route';
export interface DirectoryContentsResponse {
files: Object,
directories: Object,
editable: Array<string>,
}
/**
* Get the contents of a specific directory for a given server.
*
* @param {String} server
* @param {String} directory
* @return {Promise<DirectoryContentsResponse>}
*/
export function getDirectoryContents(server: string, directory: string): Promise<DirectoryContentsResponse> {
return new Promise((resolve, reject) => {
http.get(route('server.files', { server, directory }))
.then((response) => {
return resolve({
files: filter(response.data.contents, function (o) {
return o.file;
}),
directories: filter(response.data.contents, function (o) {
return o.directory;
}),
editable: response.data.editable,
});
})
.catch(err => {
if (err.response && err.response.status === 404) {
return reject('The directory you requested could not be located on the server');
}
if (err.response.data && isObject(err.response.data.errors)) {
err.response.data.errors.forEach(error => {
return reject(error.detail);
});
}
return reject(err);
});
});
}
export default getDirectoryContents;