mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-27 03:01:26 +00:00
* remove photo * update * update * update * update * update * update --------- Co-authored-by: zheng.shen <zheng.shen@seafile.com>
279 lines
7.0 KiB
JavaScript
279 lines
7.0 KiB
JavaScript
import metadataAPI from './api';
|
|
import tagsAPI from '../tag/api';
|
|
import {
|
|
PRIVATE_COLUMN_KEYS, EDITABLE_DATA_PRIVATE_COLUMN_KEYS, EDITABLE_PRIVATE_COLUMN_KEYS, DELETABLE_PRIVATE_COLUMN_KEY,
|
|
FACE_RECOGNITION_VIEW_ID,
|
|
} from './constants';
|
|
import LocalStorage from './utils/local-storage';
|
|
import EventBus from '../components/common/event-bus';
|
|
import { username, lang } from '../utils/constants';
|
|
|
|
class Context {
|
|
|
|
constructor() {
|
|
this.settings = { lang };
|
|
this.metadataAPI = null;
|
|
this.tagsAPI = null;
|
|
this.localStorage = null;
|
|
this.eventBus = null;
|
|
this.hasInit = false;
|
|
this.permission = 'r';
|
|
this.collaboratorsCache = {};
|
|
}
|
|
|
|
async init(settings) {
|
|
if (this.hasInit) return;
|
|
|
|
// init settings
|
|
this.settings = { ...this.settings, ...settings };
|
|
|
|
// init API
|
|
const { repoInfo } = this.settings;
|
|
this.metadataAPI = metadataAPI;
|
|
this.tagsAPI = tagsAPI;
|
|
|
|
// init localStorage
|
|
const { repoID, viewID } = this.settings;
|
|
const localStorageName = viewID ? `sf-metadata-${repoID}-${viewID}` : `sf-metadata-${repoID}`;
|
|
this.localStorage = new LocalStorage(localStorageName);
|
|
|
|
const eventBus = new EventBus();
|
|
this.eventBus = eventBus;
|
|
|
|
this.permission = repoInfo.permission !== 'admin' && repoInfo.permission !== 'rw' ? 'r' : 'rw';
|
|
|
|
this.hasInit = true;
|
|
}
|
|
|
|
destroy = () => {
|
|
this.settings = {};
|
|
this.metadataAPI = null;
|
|
this.tagsAPI = null;
|
|
this.localStorage = null;
|
|
this.eventBus = null;
|
|
this.hasInit = false;
|
|
this.permission = 'r';
|
|
};
|
|
|
|
getSetting = (key) => {
|
|
if (this.settings[key] === false) return this.settings[key];
|
|
return this.settings[key] || '';
|
|
};
|
|
|
|
setSetting = (key, value) => {
|
|
this.settings[key] = value;
|
|
};
|
|
|
|
getUsername = () => {
|
|
return username;
|
|
};
|
|
|
|
// collaborators
|
|
getCollaborators = () => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.metadataAPI.getCollaborators(repoID);
|
|
};
|
|
|
|
// metadata
|
|
getMetadata = (params) => {
|
|
if (!this.metadataAPI) return null;
|
|
const repoID = this.settings['repoID'];
|
|
const { view_id, start, limit } = params;
|
|
if (view_id === FACE_RECOGNITION_VIEW_ID) {
|
|
return this.metadataAPI.getFaceData(repoID, start, limit);
|
|
}
|
|
|
|
return this.metadataAPI.getMetadata(repoID, params);
|
|
};
|
|
|
|
getViews = () => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.metadataAPI.listViews(repoID);
|
|
};
|
|
|
|
getView = (viewId) => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.metadataAPI.getView(repoID, viewId);
|
|
};
|
|
|
|
getPermission = () => {
|
|
return this.permission;
|
|
};
|
|
|
|
canModify = () => {
|
|
if (this.permission === 'r') return false;
|
|
return true;
|
|
};
|
|
|
|
canModifyRow = (row) => {
|
|
if (this.permission === 'r') return false;
|
|
return true;
|
|
};
|
|
|
|
checkCanDeleteRow = () => {
|
|
if (this.permission === 'r') return false;
|
|
return true;
|
|
};
|
|
|
|
canModifyRows = () => {
|
|
if (this.permission === 'r') return false;
|
|
return true;
|
|
};
|
|
|
|
canDuplicateRow = () => {
|
|
if (this.permission === 'r') return false;
|
|
const viewId = this.getSetting('viewID');
|
|
return viewId !== FACE_RECOGNITION_VIEW_ID;
|
|
};
|
|
|
|
canModifyColumn = (column) => {
|
|
if (this.permission === 'r') return false;
|
|
const { editable } = column;
|
|
if (!editable) return false;
|
|
if (PRIVATE_COLUMN_KEYS.includes(column.key) && !EDITABLE_PRIVATE_COLUMN_KEYS.includes(column.key)) return false;
|
|
return true;
|
|
};
|
|
|
|
canRenameColumn = (column) => {
|
|
if (this.permission === 'r') return false;
|
|
if (PRIVATE_COLUMN_KEYS.includes(column.key)) return false;
|
|
return true;
|
|
};
|
|
|
|
canModifyColumnData = (column) => {
|
|
if (this.permission === 'r') return false;
|
|
const { key } = column;
|
|
if (PRIVATE_COLUMN_KEYS.includes(key)) return EDITABLE_DATA_PRIVATE_COLUMN_KEYS.includes(key);
|
|
return true;
|
|
};
|
|
|
|
canDeleteColumn = (column) => {
|
|
if (this.permission === 'r') return false;
|
|
const { key } = column;
|
|
if (PRIVATE_COLUMN_KEYS.includes(key)) return DELETABLE_PRIVATE_COLUMN_KEY.includes(key);
|
|
return true;
|
|
};
|
|
|
|
canModifyColumnOrder = () => {
|
|
if (this.permission === 'r') return false;
|
|
return true;
|
|
};
|
|
|
|
canModifyView = (view) => {
|
|
if (this.permission === 'r') return false;
|
|
return true;
|
|
};
|
|
|
|
canRemovePhotoFromPeople = () => {
|
|
const viewId = this.getSetting('viewID');
|
|
return viewId === FACE_RECOGNITION_VIEW_ID;
|
|
};
|
|
|
|
restoreRows = () => {
|
|
// todo
|
|
};
|
|
|
|
updateRows = () => {
|
|
// todo
|
|
};
|
|
|
|
lockRowViaButton = () => {
|
|
// todo
|
|
};
|
|
|
|
updateRowViaButton = () => {
|
|
// todo
|
|
};
|
|
|
|
// column
|
|
insertColumn = (repoId, name, type, { key, data }) => {
|
|
return this.metadataAPI.insertColumn(repoId, name, type, { key, data });
|
|
};
|
|
|
|
deleteColumn = (repoId, columnKey) => {
|
|
return this.metadataAPI.deleteColumn(repoId, columnKey);
|
|
};
|
|
|
|
renameColumn = (repoId, columnKey, name) => {
|
|
return this.metadataAPI.renameColumn(repoId, columnKey, name);
|
|
};
|
|
|
|
modifyColumnData = (repoId, columnKey, data) => {
|
|
return this.metadataAPI.modifyColumnData(repoId, columnKey, data);
|
|
};
|
|
|
|
// record
|
|
modifyRecord = (repoId, recordId, update) => {
|
|
return this.metadataAPI.modifyRecord(repoId, { recordId }, update);
|
|
};
|
|
|
|
modifyRecords = (repoId, recordsData, isCopyPaste) => {
|
|
return this.metadataAPI.modifyRecords(repoId, recordsData, isCopyPaste);
|
|
};
|
|
|
|
batchDeleteFiles = (repoId, fileNames) => {
|
|
return this.metadataAPI.batchDeleteFiles(repoId, fileNames);
|
|
};
|
|
|
|
// view
|
|
modifyView = (repoId, viewId, viewData) => {
|
|
return this.metadataAPI.modifyView(repoId, viewId, viewData);
|
|
};
|
|
|
|
getRowsByIds = () => {
|
|
// todo
|
|
};
|
|
|
|
// ai
|
|
generateDescription = (filePath) => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.metadataAPI.generateDescription(repoID, filePath);
|
|
};
|
|
|
|
imageCaption = (filePath) => {
|
|
const repoID = this.settings['repoID'];
|
|
const lang = this.settings['lang'];
|
|
return this.metadataAPI.imageCaption(repoID, filePath, lang);
|
|
};
|
|
|
|
generateFileTags = (filePath) => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.metadataAPI.generateFileTags(repoID, filePath);
|
|
};
|
|
|
|
ocr = (filePath) => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.metadataAPI.ocr(repoID, filePath);
|
|
};
|
|
|
|
extractFileDetails = (objIds) => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.metadataAPI.extractFileDetails(repoID, objIds);
|
|
};
|
|
|
|
// face api
|
|
renamePeople = (recordId, name) => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.metadataAPI.renamePeople(repoID, recordId, name);
|
|
};
|
|
|
|
getPeoplePhotos = (recordId, start, limit) => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.metadataAPI.getPeoplePhotos(repoID, recordId, start, limit);
|
|
};
|
|
|
|
removePeoplePhotos = (recordId, photoIds) => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.metadataAPI.removePeoplePhotos(repoID, recordId, photoIds);
|
|
};
|
|
|
|
// file tag
|
|
updateFileTags = (data) => {
|
|
const repoID = this.settings['repoID'];
|
|
return this.tagsAPI.updateFileTags(repoID, data);
|
|
};
|
|
|
|
}
|
|
|
|
export default Context;
|