mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-02 07:27:04 +00:00
feat: metadata description property (#6744)
* feat: metadata description property * feat: optimize view --------- Co-authored-by: 杨国璇 <ygx@Hello-word.local>
This commit is contained in:
@@ -202,7 +202,7 @@ class MetadataManagerAPI {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// ai
|
// ai
|
||||||
generateSummary = (repoID, filePath) => {
|
generateDescription = (repoID, filePath) => {
|
||||||
const url = this.server + '/api/v2.1/ai/generate-summary/';
|
const url = this.server + '/api/v2.1/ai/generate-summary/';
|
||||||
const params = {
|
const params = {
|
||||||
path: filePath,
|
path: filePath,
|
||||||
|
@@ -4,7 +4,7 @@ const PREDEFINED_COLUMN_KEYS = [
|
|||||||
PRIVATE_COLUMN_KEY.FILE_COLLABORATORS,
|
PRIVATE_COLUMN_KEY.FILE_COLLABORATORS,
|
||||||
PRIVATE_COLUMN_KEY.FILE_EXPIRE_TIME,
|
PRIVATE_COLUMN_KEY.FILE_EXPIRE_TIME,
|
||||||
PRIVATE_COLUMN_KEY.FILE_KEYWORDS,
|
PRIVATE_COLUMN_KEY.FILE_KEYWORDS,
|
||||||
PRIVATE_COLUMN_KEY.FILE_SUMMARY,
|
PRIVATE_COLUMN_KEY.FILE_DESCRIPTION,
|
||||||
PRIVATE_COLUMN_KEY.FILE_EXPIRED,
|
PRIVATE_COLUMN_KEY.FILE_EXPIRED,
|
||||||
PRIVATE_COLUMN_KEY.FILE_STATUS,
|
PRIVATE_COLUMN_KEY.FILE_STATUS,
|
||||||
];
|
];
|
||||||
|
@@ -18,7 +18,7 @@ export const PRIVATE_COLUMN_KEY = {
|
|||||||
FILE_COLLABORATORS: '_collaborators',
|
FILE_COLLABORATORS: '_collaborators',
|
||||||
FILE_EXPIRE_TIME: '_expire_time',
|
FILE_EXPIRE_TIME: '_expire_time',
|
||||||
FILE_KEYWORDS: '_keywords',
|
FILE_KEYWORDS: '_keywords',
|
||||||
FILE_SUMMARY: '_summary',
|
FILE_DESCRIPTION: '_description',
|
||||||
FILE_EXPIRED: '_expired',
|
FILE_EXPIRED: '_expired',
|
||||||
FILE_STATUS: '_status',
|
FILE_STATUS: '_status',
|
||||||
LOCATION: '_location',
|
LOCATION: '_location',
|
||||||
@@ -45,7 +45,7 @@ export const PRIVATE_COLUMN_KEYS = [
|
|||||||
PRIVATE_COLUMN_KEY.FILE_COLLABORATORS,
|
PRIVATE_COLUMN_KEY.FILE_COLLABORATORS,
|
||||||
PRIVATE_COLUMN_KEY.FILE_EXPIRE_TIME,
|
PRIVATE_COLUMN_KEY.FILE_EXPIRE_TIME,
|
||||||
PRIVATE_COLUMN_KEY.FILE_KEYWORDS,
|
PRIVATE_COLUMN_KEY.FILE_KEYWORDS,
|
||||||
PRIVATE_COLUMN_KEY.FILE_SUMMARY,
|
PRIVATE_COLUMN_KEY.FILE_DESCRIPTION,
|
||||||
PRIVATE_COLUMN_KEY.FILE_EXPIRED,
|
PRIVATE_COLUMN_KEY.FILE_EXPIRED,
|
||||||
PRIVATE_COLUMN_KEY.FILE_STATUS,
|
PRIVATE_COLUMN_KEY.FILE_STATUS,
|
||||||
PRIVATE_COLUMN_KEY.LOCATION,
|
PRIVATE_COLUMN_KEY.LOCATION,
|
||||||
@@ -59,7 +59,7 @@ export const EDITABLE_PRIVATE_COLUMN_KEYS = [
|
|||||||
PRIVATE_COLUMN_KEY.FILE_COLLABORATORS,
|
PRIVATE_COLUMN_KEY.FILE_COLLABORATORS,
|
||||||
PRIVATE_COLUMN_KEY.FILE_EXPIRE_TIME,
|
PRIVATE_COLUMN_KEY.FILE_EXPIRE_TIME,
|
||||||
PRIVATE_COLUMN_KEY.FILE_KEYWORDS,
|
PRIVATE_COLUMN_KEY.FILE_KEYWORDS,
|
||||||
// PRIVATE_COLUMN_KEY.FILE_SUMMARY,
|
PRIVATE_COLUMN_KEY.FILE_DESCRIPTION,
|
||||||
PRIVATE_COLUMN_KEY.FILE_EXPIRED,
|
PRIVATE_COLUMN_KEY.FILE_EXPIRED,
|
||||||
PRIVATE_COLUMN_KEY.FILE_STATUS,
|
PRIVATE_COLUMN_KEY.FILE_STATUS,
|
||||||
];
|
];
|
||||||
@@ -72,7 +72,7 @@ export const DELETABLE_PRIVATE_COLUMN_KEY = [
|
|||||||
PRIVATE_COLUMN_KEY.FILE_COLLABORATORS,
|
PRIVATE_COLUMN_KEY.FILE_COLLABORATORS,
|
||||||
PRIVATE_COLUMN_KEY.FILE_EXPIRE_TIME,
|
PRIVATE_COLUMN_KEY.FILE_EXPIRE_TIME,
|
||||||
PRIVATE_COLUMN_KEY.FILE_KEYWORDS,
|
PRIVATE_COLUMN_KEY.FILE_KEYWORDS,
|
||||||
PRIVATE_COLUMN_KEY.FILE_SUMMARY,
|
PRIVATE_COLUMN_KEY.FILE_DESCRIPTION,
|
||||||
PRIVATE_COLUMN_KEY.FILE_EXPIRED,
|
PRIVATE_COLUMN_KEY.FILE_EXPIRED,
|
||||||
PRIVATE_COLUMN_KEY.FILE_STATUS,
|
PRIVATE_COLUMN_KEY.FILE_STATUS,
|
||||||
];
|
];
|
||||||
|
@@ -125,15 +125,12 @@ class PopupEditorContainer extends React.Component {
|
|||||||
getOldRowData = (originalOldCellValue) => {
|
getOldRowData = (originalOldCellValue) => {
|
||||||
const { column } = this.props;
|
const { column } = this.props;
|
||||||
const columnName = getColumnOriginName(column);
|
const columnName = getColumnOriginName(column);
|
||||||
const { key: columnKey, type: columnType } = column;
|
const { key: columnKey } = column;
|
||||||
let oldValue = originalOldCellValue;
|
let oldValue = originalOldCellValue;
|
||||||
if (this.getEditor().getOldValue) {
|
if (this.getEditor().getOldValue) {
|
||||||
const original = this.getEditor().getOldValue();
|
const original = this.getEditor().getOldValue();
|
||||||
oldValue = original[Object.keys(original)[0]];
|
oldValue = original[Object.keys(original)[0]];
|
||||||
}
|
}
|
||||||
if (columnType === CellType.LONG_TEXT) {
|
|
||||||
oldValue = this.getEditor().getValue(); // long-text cell value need format to {text: '', links: [], ...}
|
|
||||||
}
|
|
||||||
const oldRowData = { [columnName]: oldValue };
|
const oldRowData = { [columnName]: oldValue };
|
||||||
const originalOldRowData = { [columnKey]: originalOldCellValue }; // { [column.key]: cellValue }
|
const originalOldRowData = { [columnKey]: originalOldCellValue }; // { [column.key]: cellValue }
|
||||||
return { oldRowData, originalOldRowData };
|
return { oldRowData, originalOldRowData };
|
||||||
@@ -171,11 +168,6 @@ class PopupEditorContainer extends React.Component {
|
|||||||
const key = Object.keys(updated)[0];
|
const key = Object.keys(updated)[0];
|
||||||
const value = updated[key];
|
const value = updated[key];
|
||||||
const updates = PRIVATE_COLUMN_KEYS.includes(columnKey) ? { [columnKey]: value } : { [columnName]: value };
|
const updates = PRIVATE_COLUMN_KEYS.includes(columnKey) ? { [columnKey]: value } : { [columnName]: value };
|
||||||
|
|
||||||
// special treatment of long-text column types to keep the stored data consistent
|
|
||||||
if (columnType === CellType.LONG_TEXT) {
|
|
||||||
originalUpdates[key] = value.text;
|
|
||||||
}
|
|
||||||
const { oldRowData, originalOldRowData } = this.getOldRowData(originalOldCellValue);
|
const { oldRowData, originalOldRowData } = this.getOldRowData(originalOldCellValue);
|
||||||
|
|
||||||
// updates used for update remote record data
|
// updates used for update remote record data
|
||||||
|
@@ -44,6 +44,16 @@ class LongTextEditor extends React.PureComponent {
|
|||||||
return { text: '', preview: '', links: [], images: [], checklist: { completed: 0, count: 0 } };
|
return { text: '', preview: '', links: [], images: [], checklist: { completed: 0, count: 0 } };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
getOldValue = () => {
|
||||||
|
const value = this.props.value;
|
||||||
|
if (value) {
|
||||||
|
if (typeof value === 'object') return value.text;
|
||||||
|
if (typeof value === 'string') return value;
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
};
|
||||||
|
|
||||||
getValue = () => {
|
getValue = () => {
|
||||||
const updated = {};
|
const updated = {};
|
||||||
updated[this.props.column.key] = this.value.text;
|
updated[this.props.column.key] = this.value.text;
|
||||||
|
@@ -14,7 +14,7 @@ const OPERATION = {
|
|||||||
COPY_SELECTED: 'copy-selected',
|
COPY_SELECTED: 'copy-selected',
|
||||||
OPEN_PARENT_FOLDER: 'open-parent-folder',
|
OPEN_PARENT_FOLDER: 'open-parent-folder',
|
||||||
OPEN_IN_NEW_TAB: 'open-new-tab',
|
OPEN_IN_NEW_TAB: 'open-new-tab',
|
||||||
GENERATE_SUMMARY: 'generate-summary',
|
GENERATE_DESCRIPTION: 'generate-description',
|
||||||
IMAGE_CAPTION: 'image-caption',
|
IMAGE_CAPTION: 'image-caption',
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ const ContextMenu = ({
|
|||||||
const permission = window.sfMetadataContext.getPermission();
|
const permission = window.sfMetadataContext.getPermission();
|
||||||
const isReadonly = permission === 'r';
|
const isReadonly = permission === 'r';
|
||||||
const { columns } = metadata;
|
const { columns } = metadata;
|
||||||
const summaryColumn = getColumnByKey(columns, PRIVATE_COLUMN_KEY.FILE_SUMMARY);
|
const descriptionColumn = getColumnByKey(columns, PRIVATE_COLUMN_KEY.FILE_DESCRIPTION);
|
||||||
const canModifyRow = window.sfMetadataContext.canModifyRow;
|
const canModifyRow = window.sfMetadataContext.canModifyRow;
|
||||||
let list = [];
|
let list = [];
|
||||||
|
|
||||||
@@ -48,13 +48,13 @@ const ContextMenu = ({
|
|||||||
!isReadonly && list.push({ value: OPERATION.CLEAR_SELECTED, label: gettext('Clear selected') });
|
!isReadonly && list.push({ value: OPERATION.CLEAR_SELECTED, label: gettext('Clear selected') });
|
||||||
list.push({ value: OPERATION.COPY_SELECTED, label: gettext('Copy selected') });
|
list.push({ value: OPERATION.COPY_SELECTED, label: gettext('Copy selected') });
|
||||||
|
|
||||||
if (summaryColumn) {
|
if (descriptionColumn) {
|
||||||
const { topLeft, bottomRight } = selectedRange;
|
const { topLeft, bottomRight } = selectedRange;
|
||||||
for (let i = topLeft.rowIdx; i <= bottomRight.rowIdx; i++) {
|
for (let i = topLeft.rowIdx; i <= bottomRight.rowIdx; i++) {
|
||||||
const record = recordGetterByIndex({ isGroupView, groupRecordIndex: topLeft.groupRecordIndex, recordIndex: i });
|
const record = recordGetterByIndex({ isGroupView, groupRecordIndex: topLeft.groupRecordIndex, recordIndex: i });
|
||||||
const fileName = record[PRIVATE_COLUMN_KEY.FILE_NAME];
|
const fileName = record[PRIVATE_COLUMN_KEY.FILE_NAME];
|
||||||
if (Utils.isSummarySupportedFile(fileName) && canModifyRow(record)) {
|
if (Utils.isDescriptionSupportedFile(fileName) && canModifyRow(record)) {
|
||||||
list.push({ value: OPERATION.GENERATE_SUMMARY, label: gettext('Generate summary') });
|
list.push({ value: OPERATION.GENERATE_DESCRIPTION, label: gettext('Generate description') });
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,17 +64,17 @@ const ContextMenu = ({
|
|||||||
|
|
||||||
const selectedRecords = Object.keys(recordMetrics.idSelectedRecordMap);
|
const selectedRecords = Object.keys(recordMetrics.idSelectedRecordMap);
|
||||||
if (selectedRecords.length > 1) {
|
if (selectedRecords.length > 1) {
|
||||||
if (summaryColumn) {
|
if (descriptionColumn) {
|
||||||
const isIncludeSdocRecord = selectedRecords.filter(id => {
|
const isIncludeSdocRecord = selectedRecords.filter(id => {
|
||||||
const record = metadata.id_row_map[id];
|
const record = metadata.id_row_map[id];
|
||||||
if (record) {
|
if (record) {
|
||||||
const fileName = record[PRIVATE_COLUMN_KEY.FILE_NAME];
|
const fileName = record[PRIVATE_COLUMN_KEY.FILE_NAME];
|
||||||
return Utils.isSummarySupportedFile(fileName) && canModifyRow(record);
|
return Utils.isDescriptionSupportedFile(fileName) && canModifyRow(record);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
if (isIncludeSdocRecord.length > 0) {
|
if (isIncludeSdocRecord.length > 0) {
|
||||||
list.push({ value: OPERATION.GENERATE_SUMMARY, label: gettext('Generate summary') });
|
list.push({ value: OPERATION.GENERATE_DESCRIPTION, label: gettext('Generate description') });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
@@ -87,10 +87,10 @@ const ContextMenu = ({
|
|||||||
const isFolder = record[PRIVATE_COLUMN_KEY.IS_DIR];
|
const isFolder = record[PRIVATE_COLUMN_KEY.IS_DIR];
|
||||||
list.push({ value: OPERATION.OPEN_IN_NEW_TAB, label: isFolder ? gettext('Open folder in new tab') : gettext('Open file in new tab') });
|
list.push({ value: OPERATION.OPEN_IN_NEW_TAB, label: isFolder ? gettext('Open folder in new tab') : gettext('Open file in new tab') });
|
||||||
list.push({ value: OPERATION.OPEN_PARENT_FOLDER, label: gettext('Open parent folder') });
|
list.push({ value: OPERATION.OPEN_PARENT_FOLDER, label: gettext('Open parent folder') });
|
||||||
if (summaryColumn) {
|
if (descriptionColumn) {
|
||||||
const fileName = record[PRIVATE_COLUMN_KEY.FILE_NAME];
|
const fileName = record[PRIVATE_COLUMN_KEY.FILE_NAME];
|
||||||
if (Utils.isSummarySupportedFile(fileName) && canModifyRow(record)) {
|
if (Utils.isDescriptionSupportedFile(fileName) && canModifyRow(record)) {
|
||||||
list.push({ value: OPERATION.GENERATE_SUMMARY, label: gettext('Generate summary') });
|
list.push({ value: OPERATION.GENERATE_DESCRIPTION, label: gettext('Generate description') });
|
||||||
} else if (Utils.imageCheck(fileName) && canModifyRow(record)) {
|
} else if (Utils.imageCheck(fileName) && canModifyRow(record)) {
|
||||||
list.push({ value: OPERATION.IMAGE_CAPTION, label: gettext('Generate image description') });
|
list.push({ value: OPERATION.IMAGE_CAPTION, label: gettext('Generate image description') });
|
||||||
}
|
}
|
||||||
@@ -140,40 +140,40 @@ const ContextMenu = ({
|
|||||||
window.open(url, '_blank');
|
window.open(url, '_blank');
|
||||||
}, [isGroupView, recordGetterByIndex, selectedPosition]);
|
}, [isGroupView, recordGetterByIndex, selectedPosition]);
|
||||||
|
|
||||||
const generateSummary = useCallback(() => {
|
const generateDescription = useCallback(() => {
|
||||||
const canModifyRow = window.sfMetadataContext.canModifyRow;
|
const canModifyRow = window.sfMetadataContext.canModifyRow;
|
||||||
const summaryColumnKey = PRIVATE_COLUMN_KEY.FILE_SUMMARY;
|
const descriptionColumnKey = PRIVATE_COLUMN_KEY.FILE_DESCRIPTION;
|
||||||
let path = '';
|
let path = '';
|
||||||
let idOldRecordData = {};
|
let idOldRecordData = {};
|
||||||
let idOriginalOldRecordData = {};
|
let idOriginalOldRecordData = {};
|
||||||
const { groupRecordIndex, rowIdx } = selectedPosition;
|
const { groupRecordIndex, rowIdx } = selectedPosition;
|
||||||
const record = recordGetterByIndex({ isGroupView, groupRecordIndex, recordIndex: rowIdx });
|
const record = recordGetterByIndex({ isGroupView, groupRecordIndex, recordIndex: rowIdx });
|
||||||
const fileName = record[PRIVATE_COLUMN_KEY.FILE_NAME];
|
const fileName = record[PRIVATE_COLUMN_KEY.FILE_NAME];
|
||||||
if (Utils.isSummarySupportedFile(fileName) && canModifyRow(record)) {
|
if (Utils.isDescriptionSupportedFile(fileName) && canModifyRow(record)) {
|
||||||
const parentDir = record[PRIVATE_COLUMN_KEY.PARENT_DIR];
|
const parentDir = record[PRIVATE_COLUMN_KEY.PARENT_DIR];
|
||||||
path = Utils.joinPath(parentDir, fileName);
|
path = Utils.joinPath(parentDir, fileName);
|
||||||
idOldRecordData[record[PRIVATE_COLUMN_KEY.ID]] = { [summaryColumnKey]: record[summaryColumnKey] };
|
idOldRecordData[record[PRIVATE_COLUMN_KEY.ID]] = { [descriptionColumnKey]: record[descriptionColumnKey] };
|
||||||
idOriginalOldRecordData[record[PRIVATE_COLUMN_KEY.ID]] = { [summaryColumnKey]: record[summaryColumnKey] };
|
idOriginalOldRecordData[record[PRIVATE_COLUMN_KEY.ID]] = { [descriptionColumnKey]: record[descriptionColumnKey] };
|
||||||
}
|
}
|
||||||
if (path === '') return;
|
if (path === '') return;
|
||||||
window.sfMetadataContext.generateSummary(path).then(res => {
|
window.sfMetadataContext.generateDescription(path).then(res => {
|
||||||
const summary = res.data.summary;
|
const description = res.data.summary;
|
||||||
const updateRecordId = record[PRIVATE_COLUMN_KEY.ID];
|
const updateRecordId = record[PRIVATE_COLUMN_KEY.ID];
|
||||||
const recordIds = [updateRecordId];
|
const recordIds = [updateRecordId];
|
||||||
let idRecordUpdates = {};
|
let idRecordUpdates = {};
|
||||||
let idOriginalRecordUpdates = {};
|
let idOriginalRecordUpdates = {};
|
||||||
idRecordUpdates[updateRecordId] = { [summaryColumnKey]: summary };
|
idRecordUpdates[updateRecordId] = { [descriptionColumnKey]: description };
|
||||||
idOriginalRecordUpdates[updateRecordId] = { [summaryColumnKey]: summary };
|
idOriginalRecordUpdates[updateRecordId] = { [descriptionColumnKey]: description };
|
||||||
updateRecords({ recordIds, idRecordUpdates, idOriginalRecordUpdates, idOldRecordData, idOriginalOldRecordData });
|
updateRecords({ recordIds, idRecordUpdates, idOriginalRecordUpdates, idOldRecordData, idOriginalOldRecordData });
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
const errorMessage = gettext('Failed to generate summary');
|
const errorMessage = gettext('Failed to generate description');
|
||||||
toaster.danger(errorMessage);
|
toaster.danger(errorMessage);
|
||||||
});
|
});
|
||||||
}, [isGroupView, selectedPosition, recordGetterByIndex, updateRecords]);
|
}, [isGroupView, selectedPosition, recordGetterByIndex, updateRecords]);
|
||||||
|
|
||||||
const imageCaption = useCallback(() => {
|
const imageCaption = useCallback(() => {
|
||||||
const canModifyRow = window.sfMetadataContext.canModifyRow;
|
const canModifyRow = window.sfMetadataContext.canModifyRow;
|
||||||
const summaryColumnKey = PRIVATE_COLUMN_KEY.FILE_SUMMARY;
|
const summaryColumnKey = PRIVATE_COLUMN_KEY.FILE_DESCRIPTION;
|
||||||
let path = '';
|
let path = '';
|
||||||
let idOldRecordData = {};
|
let idOldRecordData = {};
|
||||||
let idOriginalOldRecordData = {};
|
let idOriginalOldRecordData = {};
|
||||||
@@ -221,8 +221,8 @@ const ContextMenu = ({
|
|||||||
onClearSelected && onClearSelected();
|
onClearSelected && onClearSelected();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OPERATION.GENERATE_SUMMARY: {
|
case OPERATION.GENERATE_DESCRIPTION: {
|
||||||
generateSummary && generateSummary();
|
generateDescription && generateDescription();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case OPERATION.IMAGE_CAPTION: {
|
case OPERATION.IMAGE_CAPTION: {
|
||||||
@@ -234,7 +234,7 @@ const ContextMenu = ({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
setVisible(false);
|
setVisible(false);
|
||||||
}, [onOpenFileInNewTab, onOpenParentFolder, onCopySelected, onClearSelected, generateSummary, imageCaption]);
|
}, [onOpenFileInNewTab, onOpenParentFolder, onCopySelected, onClearSelected, generateDescription, imageCaption]);
|
||||||
|
|
||||||
const getMenuPosition = useCallback((x = 0, y = 0) => {
|
const getMenuPosition = useCallback((x = 0, y = 0) => {
|
||||||
let menuStyles = {
|
let menuStyles = {
|
||||||
|
@@ -38,9 +38,9 @@ const COLUMNS = [
|
|||||||
}, {
|
}, {
|
||||||
icon: COLUMNS_ICON_CONFIG[CellType.LONG_TEXT],
|
icon: COLUMNS_ICON_CONFIG[CellType.LONG_TEXT],
|
||||||
type: CellType.LONG_TEXT,
|
type: CellType.LONG_TEXT,
|
||||||
name: getColumnDisplayName(PRIVATE_COLUMN_KEY.FILE_SUMMARY),
|
name: getColumnDisplayName(PRIVATE_COLUMN_KEY.FILE_DESCRIPTION),
|
||||||
unique: true,
|
unique: true,
|
||||||
key: PRIVATE_COLUMN_KEY.FILE_SUMMARY,
|
key: PRIVATE_COLUMN_KEY.FILE_DESCRIPTION,
|
||||||
canChangeName: false,
|
canChangeName: false,
|
||||||
groupby: 'predefined'
|
groupby: 'predefined'
|
||||||
}, {
|
}, {
|
||||||
|
@@ -218,7 +218,7 @@ class SortPopover extends Component {
|
|||||||
return (
|
return (
|
||||||
<div key={'sort-item-' + index} className="sort-item">
|
<div key={'sort-item-' + index} className="sort-item">
|
||||||
{!readOnly &&
|
{!readOnly &&
|
||||||
<div className="delete-sort" onClick={!(viewType === VIEW_TYPE.GALLERY && index === 0) ? () => {} : (event) => this.deleteSort(event, index)}>
|
<div className="delete-sort" onClick={(viewType === VIEW_TYPE.GALLERY && index === 0) ? () => {} : (event) => this.deleteSort(event, index)}>
|
||||||
{!(viewType === VIEW_TYPE.GALLERY && index === 0) && <Icon iconName="fork-number"/>}
|
{!(viewType === VIEW_TYPE.GALLERY && index === 0) && <Icon iconName="fork-number"/>}
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
@@ -42,7 +42,7 @@ const Gallery = () => {
|
|||||||
const fileName = record[PRIVATE_COLUMN_KEY.FILE_NAME];
|
const fileName = record[PRIVATE_COLUMN_KEY.FILE_NAME];
|
||||||
const parentDir = record[PRIVATE_COLUMN_KEY.PARENT_DIR];
|
const parentDir = record[PRIVATE_COLUMN_KEY.PARENT_DIR];
|
||||||
const path = Utils.encodePath(Utils.joinPath(parentDir, fileName));
|
const path = Utils.encodePath(Utils.joinPath(parentDir, fileName));
|
||||||
const date = firstSort ? getDateDisplayString(record[firstSort.column_key], 'YYYY-MM-DD') : record[PRIVATE_COLUMN_KEY.FILE_CTIME].split('T')[0];
|
const date = getDateDisplayString(record[firstSort.column_key], 'YYYY-MM-DD');
|
||||||
const img = {
|
const img = {
|
||||||
name: fileName,
|
name: fileName,
|
||||||
url: `${siteRoot}lib/${repoID}/file${path}`,
|
url: `${siteRoot}lib/${repoID}/file${path}`,
|
||||||
|
@@ -192,9 +192,9 @@ class Context {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// ai
|
// ai
|
||||||
generateSummary = (filePath) => {
|
generateDescription = (filePath) => {
|
||||||
const repoID = this.settings['repoID'];
|
const repoID = this.settings['repoID'];
|
||||||
return this.metadataAPI.generateSummary(repoID, filePath);
|
return this.metadataAPI.generateDescription(repoID, filePath);
|
||||||
};
|
};
|
||||||
|
|
||||||
imageCaption = (filePath) => {
|
imageCaption = (filePath) => {
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { getColumnByKey, VIEW_NOT_DISPLAY_COLUMN_KEYS, VIEW_TYPE_DEFAULT_BASIC_FILTER, VIEW_TYPE } from '../../_basic';
|
import { getColumnByKey, VIEW_NOT_DISPLAY_COLUMN_KEYS, VIEW_TYPE_DEFAULT_BASIC_FILTER, VIEW_TYPE, VIEW_TYPE_DEFAULT_SORTS } from '../../_basic';
|
||||||
|
|
||||||
class View {
|
class View {
|
||||||
constructor(object, columns) {
|
constructor(object, columns) {
|
||||||
@@ -17,7 +17,7 @@ class View {
|
|||||||
this.basic_filters = object.basic_filters && object.basic_filters.length > 0 ? object.basic_filters : VIEW_TYPE_DEFAULT_BASIC_FILTER[this.type];
|
this.basic_filters = object.basic_filters && object.basic_filters.length > 0 ? object.basic_filters : VIEW_TYPE_DEFAULT_BASIC_FILTER[this.type];
|
||||||
|
|
||||||
// sort
|
// sort
|
||||||
this.sorts = object.sorts || [];
|
this.sorts = object.sorts && object.sorts.length > 0 ? object.sorts : VIEW_TYPE_DEFAULT_SORTS[this.type];
|
||||||
|
|
||||||
// group
|
// group
|
||||||
this.groupbys = object.groupbys || [];
|
this.groupbys = object.groupbys || [];
|
||||||
|
@@ -40,9 +40,7 @@ export default function apply(data, operation) {
|
|||||||
const rowId = row._id;
|
const rowId = row._id;
|
||||||
const originalRowUpdates = id_original_row_updates[rowId];
|
const originalRowUpdates = id_original_row_updates[rowId];
|
||||||
const rowUpdates = id_row_updates[rowId];
|
const rowUpdates = id_row_updates[rowId];
|
||||||
if (!rowUpdates && !originalRowUpdates) {
|
if (!rowUpdates && !originalRowUpdates) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
const updatedRow = Object.assign({}, row, rowUpdates, originalRowUpdates, {
|
const updatedRow = Object.assign({}, row, rowUpdates, originalRowUpdates, {
|
||||||
'_mtime': modifyTime,
|
'_mtime': modifyTime,
|
||||||
'_last_modifier': modifier,
|
'_last_modifier': modifier,
|
||||||
|
@@ -196,8 +196,8 @@ export const getColumnDisplayName = (key, name) => {
|
|||||||
return gettext('File expire time');
|
return gettext('File expire time');
|
||||||
case PRIVATE_COLUMN_KEY.FILE_KEYWORDS:
|
case PRIVATE_COLUMN_KEY.FILE_KEYWORDS:
|
||||||
return gettext('Document keywords');
|
return gettext('Document keywords');
|
||||||
case PRIVATE_COLUMN_KEY.FILE_SUMMARY:
|
case PRIVATE_COLUMN_KEY.FILE_DESCRIPTION:
|
||||||
return gettext('Document summary');
|
return gettext('Description');
|
||||||
case PRIVATE_COLUMN_KEY.FILE_EXPIRED:
|
case PRIVATE_COLUMN_KEY.FILE_EXPIRED:
|
||||||
return gettext('Is expired');
|
return gettext('Is expired');
|
||||||
case PRIVATE_COLUMN_KEY.FILE_STATUS:
|
case PRIVATE_COLUMN_KEY.FILE_STATUS:
|
||||||
@@ -243,7 +243,7 @@ export const getColumnType = (key, type) => {
|
|||||||
return CellType.DATE;
|
return CellType.DATE;
|
||||||
case PRIVATE_COLUMN_KEY.FILE_KEYWORDS:
|
case PRIVATE_COLUMN_KEY.FILE_KEYWORDS:
|
||||||
return CellType.TEXT;
|
return CellType.TEXT;
|
||||||
case PRIVATE_COLUMN_KEY.FILE_SUMMARY:
|
case PRIVATE_COLUMN_KEY.FILE_DESCRIPTION:
|
||||||
return CellType.LONG_TEXT;
|
return CellType.LONG_TEXT;
|
||||||
case PRIVATE_COLUMN_KEY.FILE_EXPIRED:
|
case PRIVATE_COLUMN_KEY.FILE_EXPIRED:
|
||||||
return CellType.CHECKBOX;
|
return CellType.CHECKBOX;
|
||||||
|
@@ -905,7 +905,7 @@ export const Utils = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
isSummarySupportedFile: function (filePath) {
|
isDescriptionSupportedFile: function (filePath) {
|
||||||
return Utils.isSdocFile(filePath) || Utils.isMarkdownFile(filePath) || Utils.pdfCheck(filePath) || Utils.isDocxFile(filePath);
|
return Utils.isSdocFile(filePath) || Utils.isMarkdownFile(filePath) || Utils.pdfCheck(filePath) || Utils.isDocxFile(filePath);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user