box-ui-elements-mlh
Version:
119 lines (100 loc) • 3.86 kB
Flow
/**
* @flow
* @file Versions Sidebar API Helper
* @author Box
*/
import API from '../../../api';
import { FILE_VERSION_FIELDS_TO_FETCH } from '../../../utils/fields';
import type { BoxItem, FileVersions, BoxItemVersion } from '../../../common/types/core';
export type fetchPayload = [BoxItem, FileVersions];
export default class VersionsSidebarAPI {
api: API;
fileId: string;
constructor({ api, fileId }: { api: API, fileId: string }) {
this.api = api;
this.fileId = fileId;
}
fetchData = (): Promise<fetchPayload> => {
return Promise.all([this.fetchFile(), this.fetchVersions()]).then(this.fetchVersionCurrent);
};
fetchDownloadUrl = (version: ?BoxItemVersion): Promise<string> => {
return new Promise((resolve, reject) => {
if (!version) {
return reject(new Error('Could not find requested version'));
}
return this.api.getFileAPI().getDownloadUrl(this.fileId, version, resolve, reject);
});
};
fetchFile = (): Promise<BoxItem> => {
return new Promise((resolve, reject) =>
this.api.getFileAPI().getFile(this.fileId, resolve, reject, {
fields: FILE_VERSION_FIELDS_TO_FETCH,
forceFetch: true,
}),
);
};
fetchVersions = (): Promise<FileVersions> => {
return new Promise((resolve, reject) =>
this.api.getVersionsAPI(false).getVersions(this.fileId, resolve, reject),
);
};
fetchVersionCurrent = ([fileResponse, versionsResponse]: fetchPayload): Promise<fetchPayload> => {
const { file_version = {} } = fileResponse;
return new Promise((resolve, reject) =>
this.api.getVersionsAPI(false).getVersion(
this.fileId,
file_version.id,
(currentVersionResponse: BoxItemVersion) => {
resolve([
fileResponse,
this.api
.getVersionsAPI(false)
.addCurrentVersion(currentVersionResponse, versionsResponse, fileResponse),
]);
},
reject,
),
);
};
fetchVersion = (versionId: string): Promise<BoxItemVersion> => {
return new Promise((resolve, reject) =>
this.api.getVersionsAPI(false).getVersion(this.fileId, versionId, resolve, reject),
);
};
deleteVersion = (version: ?BoxItemVersion): Promise<null> => {
const { id: versionId, permissions = {} } = version || {};
return new Promise((resolve, reject) =>
this.api.getVersionsAPI(false).deleteVersion({
fileId: this.fileId,
permissions,
successCallback: resolve,
errorCallback: reject,
versionId,
}),
);
};
promoteVersion = (version: ?BoxItemVersion): Promise<BoxItemVersion> => {
const { id: versionId, permissions = {} } = version || {};
return new Promise((resolve, reject) =>
this.api.getVersionsAPI(false).promoteVersion({
fileId: this.fileId,
permissions,
successCallback: resolve,
errorCallback: reject,
versionId,
}),
);
};
restoreVersion = (version: ?BoxItemVersion): Promise<any> => {
const { id: versionId, permissions = {} } = version || {};
return new Promise((resolve, reject) =>
this.api.getVersionsAPI(false).restoreVersion({
fileId: this.fileId,
permissions,
successCallback: resolve,
errorCallback: reject,
versionId,
}),
);
};
}