2024-06-11 10:35:26 +00:00
|
|
|
import axios from 'axios';
|
|
|
|
import cookie from 'react-cookies';
|
2024-06-29 09:58:27 +00:00
|
|
|
import { siteRoot } from '../utils/constants';
|
2024-09-14 08:31:32 +00:00
|
|
|
import { VIEW_TYPE_DEFAULT_BASIC_FILTER, VIEW_TYPE_DEFAULT_SORTS } from './constants';
|
2024-06-11 10:35:26 +00:00
|
|
|
|
2024-06-19 03:31:38 +00:00
|
|
|
class MetadataManagerAPI {
|
2024-09-14 08:31:32 +00:00
|
|
|
|
2024-06-11 10:35:26 +00:00
|
|
|
init({ server, username, password, token }) {
|
|
|
|
this.server = server;
|
|
|
|
this.username = username;
|
|
|
|
this.password = password;
|
2024-07-18 03:58:42 +00:00
|
|
|
this.token = token; // none
|
2024-06-11 10:35:26 +00:00
|
|
|
if (this.token && this.server) {
|
|
|
|
this.req = axios.create({
|
|
|
|
baseURL: this.server,
|
|
|
|
headers: { 'Authorization': 'Token ' + this.token },
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
initForSeahubUsage({ siteRoot, xcsrfHeaders }) {
|
2024-07-01 10:33:57 +00:00
|
|
|
if (siteRoot && siteRoot.charAt(siteRoot.length - 1) === '/') {
|
|
|
|
var server = siteRoot.substring(0, siteRoot.length - 1);
|
2024-06-11 10:35:26 +00:00
|
|
|
this.server = server;
|
|
|
|
} else {
|
|
|
|
this.server = siteRoot;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.req = axios.create({
|
|
|
|
headers: {
|
|
|
|
'X-CSRFToken': xcsrfHeaders,
|
|
|
|
}
|
|
|
|
});
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
_sendPostRequest(url, form) {
|
|
|
|
if (form.getHeaders) {
|
|
|
|
return this.req.post(url, form, {
|
2024-07-18 03:58:42 +00:00
|
|
|
headers: form.getHeaders()
|
2024-06-11 10:35:26 +00:00
|
|
|
});
|
|
|
|
} else {
|
|
|
|
return this.req.post(url, form);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-07-03 09:04:30 +00:00
|
|
|
getCollaborators = (repoID) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/related-users/';
|
|
|
|
return this.req.get(url);
|
|
|
|
};
|
|
|
|
|
2024-06-29 09:58:27 +00:00
|
|
|
getMetadataStatus(repoID) {
|
2024-06-11 10:35:26 +00:00
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/';
|
|
|
|
return this.req.get(url);
|
|
|
|
}
|
|
|
|
|
2024-06-29 09:58:27 +00:00
|
|
|
createMetadata(repoID) {
|
2024-06-11 10:35:26 +00:00
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/';
|
2024-06-12 01:56:53 +00:00
|
|
|
return this.req.put(url);
|
2024-06-11 10:35:26 +00:00
|
|
|
}
|
|
|
|
|
2024-06-29 09:58:27 +00:00
|
|
|
deleteMetadata(repoID) {
|
2024-06-11 10:35:26 +00:00
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/';
|
|
|
|
return this.req.delete(url);
|
|
|
|
}
|
|
|
|
|
2024-06-29 09:58:27 +00:00
|
|
|
getMetadata(repoID, params) {
|
2024-06-11 10:35:26 +00:00
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/records/';
|
2024-07-03 09:04:30 +00:00
|
|
|
return this.req.get(url, { params: params });
|
2024-06-11 10:35:26 +00:00
|
|
|
}
|
|
|
|
|
2024-07-05 07:13:26 +00:00
|
|
|
getMetadataRecordInfo(repoID, parentDir, name) {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/record/';
|
|
|
|
let params = {};
|
|
|
|
if (parentDir) {
|
|
|
|
params['parent_dir'] = parentDir;
|
|
|
|
}
|
|
|
|
if (name) {
|
|
|
|
params['name'] = name;
|
|
|
|
}
|
2024-07-18 03:58:42 +00:00
|
|
|
return this.req.get(url, { params: params });
|
2024-07-05 07:13:26 +00:00
|
|
|
}
|
|
|
|
|
2024-08-15 12:34:33 +00:00
|
|
|
modifyRecord = (repoID, recordID, update, objID) => {
|
2024-07-18 09:40:53 +00:00
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/records/';
|
2024-08-15 12:34:33 +00:00
|
|
|
const data = { records_data: [{ record_id: recordID, record: update, obj_id: objID }] };
|
2024-07-18 09:40:53 +00:00
|
|
|
return this.req.put(url, data);
|
|
|
|
};
|
|
|
|
|
|
|
|
modifyRecords = (repoID, recordsData, is_copy_paste = false) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/records/';
|
|
|
|
let data = { records_data: recordsData };
|
|
|
|
if (is_copy_paste) {
|
|
|
|
data.is_copy_paste = 'true';
|
|
|
|
}
|
2024-06-11 10:35:26 +00:00
|
|
|
return this.req.put(url, data);
|
2024-06-29 09:58:27 +00:00
|
|
|
};
|
2024-06-11 10:35:26 +00:00
|
|
|
|
2024-06-29 09:58:27 +00:00
|
|
|
listUserInfo = (userIds) => {
|
|
|
|
const url = this.server + '/api/v2.1/user-list/';
|
|
|
|
const params = { user_id_list: userIds };
|
|
|
|
return this._sendPostRequest(url, params, { headers: { 'Content-type': 'application/json' } });
|
|
|
|
};
|
|
|
|
|
2024-07-22 01:45:08 +00:00
|
|
|
// view
|
|
|
|
listViews = (repoID) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/views/';
|
|
|
|
return this.req.get(url);
|
|
|
|
};
|
|
|
|
|
2024-07-22 02:52:21 +00:00
|
|
|
getView = (repoID, viewId) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/views/' + viewId + '/';
|
|
|
|
return this.req.get(url);
|
|
|
|
};
|
|
|
|
|
2024-08-21 09:14:57 +00:00
|
|
|
addView = (repoID, name, type = 'table') => {
|
2024-07-22 01:45:08 +00:00
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/views/';
|
2024-09-08 04:16:33 +00:00
|
|
|
let params = {
|
|
|
|
name,
|
|
|
|
type,
|
|
|
|
data: {
|
|
|
|
basic_filters: VIEW_TYPE_DEFAULT_BASIC_FILTER[type],
|
|
|
|
sorts: VIEW_TYPE_DEFAULT_SORTS[type],
|
|
|
|
}
|
|
|
|
};
|
2024-07-22 01:45:08 +00:00
|
|
|
return this._sendPostRequest(url, params, { headers: { 'Content-type': 'application/json' } });
|
|
|
|
};
|
|
|
|
|
2024-08-28 08:06:47 +00:00
|
|
|
duplicateView = (repoID, viewId) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/duplicate-view/';
|
|
|
|
const params = { view_id: viewId };
|
|
|
|
return this._sendPostRequest(url, params, { headers: { 'Content-type': 'application/json' } });
|
|
|
|
};
|
|
|
|
|
2024-07-22 01:45:08 +00:00
|
|
|
modifyView = (repoID, viewId, viewData) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/views/';
|
|
|
|
const params = {
|
|
|
|
view_id: viewId,
|
|
|
|
view_data: viewData,
|
|
|
|
};
|
|
|
|
return this.req.put(url, params);
|
|
|
|
};
|
|
|
|
|
|
|
|
deleteView = (repoID, viewId) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/views/';
|
|
|
|
const params = {
|
|
|
|
view_id: viewId,
|
|
|
|
};
|
2024-07-22 02:52:21 +00:00
|
|
|
return this.req.delete(url, { data: params });
|
2024-07-22 01:45:08 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
moveView = (repoID, viewId, targetViewId) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/move-views/';
|
|
|
|
const params = {
|
|
|
|
view_id: viewId,
|
|
|
|
target_view_id: targetViewId,
|
|
|
|
};
|
|
|
|
return this._sendPostRequest(url, params, { headers: { 'Content-type': 'application/json' } });
|
|
|
|
};
|
2024-07-25 08:42:18 +00:00
|
|
|
|
|
|
|
// column
|
|
|
|
insertColumn = (repoID, name, type, { key, data }) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/columns/';
|
|
|
|
let params = {
|
|
|
|
'column_name': name,
|
|
|
|
'column_type': type,
|
|
|
|
};
|
|
|
|
if (key) {
|
|
|
|
params['column_key'] = key;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (data) {
|
|
|
|
params['column_data'] = data;
|
|
|
|
}
|
|
|
|
return this.req.post(url, params);
|
|
|
|
};
|
|
|
|
|
|
|
|
deleteColumn = (repoID, columnKey) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/columns/';
|
|
|
|
const params = {
|
|
|
|
column_key: columnKey,
|
|
|
|
};
|
|
|
|
return this.req.delete(url, { data: params });
|
|
|
|
};
|
|
|
|
|
|
|
|
renameColumn = (repoID, columnKey, name) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/columns/';
|
|
|
|
const params = {
|
|
|
|
column_key: columnKey,
|
|
|
|
name: name,
|
|
|
|
};
|
|
|
|
return this.req.put(url, params);
|
|
|
|
};
|
|
|
|
|
|
|
|
modifyColumnData = (repoID, columnKey, data) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/columns/';
|
|
|
|
const params = {
|
|
|
|
column_key: columnKey,
|
|
|
|
data: data,
|
|
|
|
};
|
|
|
|
return this.req.put(url, params);
|
|
|
|
};
|
2024-08-23 09:51:52 +00:00
|
|
|
|
|
|
|
// ai
|
2024-09-10 07:18:07 +00:00
|
|
|
generateDescription = (repoID, filePath) => {
|
2024-08-30 06:36:52 +00:00
|
|
|
const url = this.server + '/api/v2.1/ai/generate-summary/';
|
2024-08-23 09:51:52 +00:00
|
|
|
const params = {
|
2024-08-30 06:36:52 +00:00
|
|
|
path: filePath,
|
|
|
|
repo_id: repoID,
|
|
|
|
};
|
|
|
|
return this.req.post(url, params);
|
|
|
|
};
|
|
|
|
|
|
|
|
imageCaption = (repoID, filePath, lang) => {
|
|
|
|
const url = this.server + '/api/v2.1/ai/image-caption/';
|
|
|
|
const params = {
|
|
|
|
path: filePath,
|
|
|
|
repo_id: repoID,
|
|
|
|
lang: lang,
|
2024-08-23 09:51:52 +00:00
|
|
|
};
|
|
|
|
return this.req.post(url, params);
|
|
|
|
};
|
2024-09-21 08:41:21 +00:00
|
|
|
|
2024-10-18 05:25:10 +00:00
|
|
|
extractFileDetails = (repoID, objIds) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/extract-file-details/';
|
|
|
|
const params = {
|
|
|
|
obj_ids: objIds,
|
|
|
|
};
|
|
|
|
return this.req.post(url, params);
|
|
|
|
};
|
|
|
|
|
2024-09-21 08:41:21 +00:00
|
|
|
zipDownload(repoID, parent_dir, dirents) {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/zip-task/';
|
|
|
|
const form = new FormData();
|
|
|
|
form.append('parent_dir', parent_dir);
|
|
|
|
dirents.forEach(item => {
|
|
|
|
form.append('dirents', item);
|
|
|
|
});
|
|
|
|
|
|
|
|
return this._sendPostRequest(url, form);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Delete multiple files or folders in a repository, used to delete images in gallery originally
|
|
|
|
* @param {string} repoID - The ID of the repository
|
|
|
|
* @param {string[]} dirents - Array of file/folder paths to delete
|
|
|
|
* @returns {Promise} Axios delete request promise
|
|
|
|
*/
|
2024-09-29 09:52:25 +00:00
|
|
|
batchDeleteFiles(repo_id, file_names) {
|
2024-09-21 08:41:21 +00:00
|
|
|
const url = this.server + '/api/v2.1/repos/batch-delete-folders-item/';
|
|
|
|
const data = {
|
2024-09-29 09:52:25 +00:00
|
|
|
repo_id,
|
|
|
|
file_names,
|
2024-09-21 08:41:21 +00:00
|
|
|
};
|
|
|
|
return this.req.delete(url, { data });
|
|
|
|
}
|
2024-10-16 03:09:30 +00:00
|
|
|
|
|
|
|
// face recognition
|
|
|
|
getFaceRecognitionStatus(repoID) {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/face-recognition/';
|
|
|
|
return this.req.get(url);
|
|
|
|
}
|
|
|
|
|
|
|
|
openFaceRecognition = (repoID) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/face-recognition/';
|
|
|
|
return this.req.post(url);
|
|
|
|
};
|
|
|
|
|
2024-11-07 05:58:18 +00:00
|
|
|
closeFaceRecognition = (repoID) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/face-recognition/';
|
|
|
|
return this.req.delete(url);
|
|
|
|
};
|
|
|
|
|
2024-10-16 03:09:30 +00:00
|
|
|
getFaceData = (repoID, start = 0, limit = 1000) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/face-records/?start=' + start + '&limit=' + limit;
|
|
|
|
return this.req.get(url);
|
|
|
|
};
|
|
|
|
|
2024-11-05 09:37:24 +00:00
|
|
|
renamePeople = (repoID, recordId, name) => {
|
2024-10-16 03:09:30 +00:00
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/face-record/';
|
|
|
|
const params = {
|
2024-11-05 09:37:24 +00:00
|
|
|
record_id: recordId,
|
2024-10-16 03:09:30 +00:00
|
|
|
name: name,
|
|
|
|
};
|
|
|
|
return this.req.put(url, params);
|
|
|
|
};
|
|
|
|
|
2024-11-05 09:37:24 +00:00
|
|
|
getPeoplePhotos = (repoID, peopleId, start = 0, limit = 1000) => {
|
|
|
|
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/people-photos/' + peopleId + '/?start=' + start + '&limit=' + limit;
|
|
|
|
return this.req.get(url);
|
|
|
|
};
|
|
|
|
|
2024-06-11 10:35:26 +00:00
|
|
|
}
|
|
|
|
|
2024-06-29 09:58:27 +00:00
|
|
|
const metadataAPI = new MetadataManagerAPI();
|
2024-06-11 10:35:26 +00:00
|
|
|
const xcsrfHeaders = cookie.load('sfcsrftoken');
|
2024-06-29 09:58:27 +00:00
|
|
|
metadataAPI.initForSeahubUsage({ siteRoot, xcsrfHeaders });
|
2024-06-11 10:35:26 +00:00
|
|
|
|
2024-06-29 09:58:27 +00:00
|
|
|
export default metadataAPI;
|