diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index a6181ed0ec..82f606357e 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -19,7 +19,7 @@
"@seafile/sdoc-editor": "1.0.29",
"@seafile/seafile-calendar": "0.0.12",
"@seafile/seafile-editor": "1.0.105",
- "@seafile/sf-metadata-ui-component": "0.0.11",
+ "@seafile/sf-metadata-ui-component": "0.0.12",
"@uiw/codemirror-extensions-langs": "^4.19.4",
"@uiw/react-codemirror": "^4.19.4",
"chart.js": "2.9.4",
@@ -4971,9 +4971,9 @@
}
},
"node_modules/@seafile/sf-metadata-ui-component": {
- "version": "0.0.11",
- "resolved": "https://registry.npmjs.org/@seafile/sf-metadata-ui-component/-/sf-metadata-ui-component-0.0.11.tgz",
- "integrity": "sha512-9mZEusTyIuUiLkkQVRCdIt9/SIZSIUqU64WHgWz31kKgFjEi59Q5pgRGYCxynq1D8/G3SAZ4/pYULoj9A3MbLQ==",
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/@seafile/sf-metadata-ui-component/-/sf-metadata-ui-component-0.0.12.tgz",
+ "integrity": "sha512-GJrOSBNWJyimy/Kj/H35hwAPh2FmiJ0nsCEuqDFPtih8lbp65DrRjYx/FE/RzIyCdqIVk3xtnubprNoT9PKEiw==",
"dependencies": {
"@seafile/seafile-calendar": "0.0.24",
"classnames": "2.3.2",
@@ -32200,9 +32200,9 @@
}
},
"@seafile/sf-metadata-ui-component": {
- "version": "0.0.11",
- "resolved": "https://registry.npmjs.org/@seafile/sf-metadata-ui-component/-/sf-metadata-ui-component-0.0.11.tgz",
- "integrity": "sha512-9mZEusTyIuUiLkkQVRCdIt9/SIZSIUqU64WHgWz31kKgFjEi59Q5pgRGYCxynq1D8/G3SAZ4/pYULoj9A3MbLQ==",
+ "version": "0.0.12",
+ "resolved": "https://registry.npmjs.org/@seafile/sf-metadata-ui-component/-/sf-metadata-ui-component-0.0.12.tgz",
+ "integrity": "sha512-GJrOSBNWJyimy/Kj/H35hwAPh2FmiJ0nsCEuqDFPtih8lbp65DrRjYx/FE/RzIyCdqIVk3xtnubprNoT9PKEiw==",
"requires": {
"@seafile/seafile-calendar": "0.0.24",
"classnames": "2.3.2",
diff --git a/frontend/package.json b/frontend/package.json
index f6508ecc49..56d089f89e 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -14,7 +14,7 @@
"@seafile/sdoc-editor": "1.0.29",
"@seafile/seafile-calendar": "0.0.12",
"@seafile/seafile-editor": "1.0.105",
- "@seafile/sf-metadata-ui-component": "0.0.11",
+ "@seafile/sf-metadata-ui-component": "0.0.12",
"@uiw/codemirror-extensions-langs": "^4.19.4",
"@uiw/react-codemirror": "^4.19.4",
"chart.js": "2.9.4",
diff --git a/frontend/src/metadata/metadata-view/components/cell-editor/editor-container/index.js b/frontend/src/metadata/metadata-view/components/cell-editor/editor-container/index.js
index 412abbcb17..ee1c432677 100644
--- a/frontend/src/metadata/metadata-view/components/cell-editor/editor-container/index.js
+++ b/frontend/src/metadata/metadata-view/components/cell-editor/editor-container/index.js
@@ -2,6 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import NormalEditorContainer from './normal';
import PopupEditorContainer from './popup';
+import PreviewEditorContainer from './preview';
import { CellType } from '../../../_basic';
const POPUP_EDITOR_COLUMN_TYPES = [
@@ -11,12 +12,20 @@ const POPUP_EDITOR_COLUMN_TYPES = [
CellType.LONG_TEXT,
];
+const PREVIEW_EDITOR_COLUMN_TYPES = [
+ CellType.FILE_NAME,
+];
+
const EditorContainer = (props) => {
const { column } = props;
if (!column) return null;
if (POPUP_EDITOR_COLUMN_TYPES.includes(column.type)) {
return ();
}
+
+ if (PREVIEW_EDITOR_COLUMN_TYPES.includes(column.type)) {
+ return ();
+ }
return ();
};
diff --git a/frontend/src/metadata/metadata-view/components/cell-editor/editor-container/preview.js b/frontend/src/metadata/metadata-view/components/cell-editor/editor-container/preview.js
new file mode 100644
index 0000000000..96b2ce7d36
--- /dev/null
+++ b/frontend/src/metadata/metadata-view/components/cell-editor/editor-container/preview.js
@@ -0,0 +1,8 @@
+import React from 'react';
+import Editor from '../editor';
+
+const PreviewEditorContainer = (props) => {
+ return ();
+};
+
+export default PreviewEditorContainer;
diff --git a/frontend/src/metadata/metadata-view/components/cell-editor/editor.js b/frontend/src/metadata/metadata-view/components/cell-editor/editor.js
index 8953c27718..96ee8bc347 100644
--- a/frontend/src/metadata/metadata-view/components/cell-editor/editor.js
+++ b/frontend/src/metadata/metadata-view/components/cell-editor/editor.js
@@ -1,6 +1,6 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { Calendar } from '@seafile/sf-metadata-ui-component';
+import { SfCalendar } from '@seafile/sf-metadata-ui-component';
import { CellType } from '../../_basic';
import FileNameEditor from './file-name-editor';
import TextEditor from './text-editor';
@@ -15,8 +15,12 @@ const Editor = React.forwardRef((props, ref) => {
case CellType.TEXT: {
return ();
}
+ case CellType.DATE: {
+ const lang = window.sfMetadataContext.getSetting('lang');
+ return ();
+ }
default: {
- return ();
+ return null;
}
}
});
diff --git a/frontend/src/metadata/metadata-view/components/popover/filter-popover/widgets/filter-calendar.js b/frontend/src/metadata/metadata-view/components/popover/filter-popover/widgets/filter-calendar.js
index 55560ea11b..b3e8c4349d 100644
--- a/frontend/src/metadata/metadata-view/components/popover/filter-popover/widgets/filter-calendar.js
+++ b/frontend/src/metadata/metadata-view/components/popover/filter-popover/widgets/filter-calendar.js
@@ -1,18 +1,19 @@
import React from 'react';
import PropTypes from 'prop-types';
-import { Calendar } from '@seafile/sf-metadata-ui-component';
+import { SfFilterCalendar } from '@seafile/sf-metadata-ui-component';
import { getDateColumnFormat } from '../../../../utils/column-utils';
const FilterCalendar = ({ value, filterColumn, isReadOnly, onChange }) => {
const format = getDateColumnFormat(filterColumn).trim();
const lang = window.sfMetadataContext.getSetting('lang');
return (
-
);
};
diff --git a/frontend/src/metadata/metadata-view/store/index.js b/frontend/src/metadata/metadata-view/store/index.js
index 632a9a7609..c147e753a6 100644
--- a/frontend/src/metadata/metadata-view/store/index.js
+++ b/frontend/src/metadata/metadata-view/store/index.js
@@ -7,7 +7,7 @@ import { Operation, LOCAL_APPLY_OPERATION_TYPE, NEED_APPLY_AFTER_SERVER_OPERATIO
import { EVENT_BUS_TYPE, PER_LOAD_NUMBER } from '../constants';
import DataProcessor from './data-processor';
import ServerOperator from './server-operator';
-import { getColumns } from '../utils/column-utils';
+import { normalizeColumns } from '../utils/column-utils';
import { Metadata, User } from '../model';
class Store {
@@ -41,7 +41,7 @@ class Store {
const res = await this.context.getMetadata({ start: this.startIndex, limit });
const view = this.context.localStorage.getItem('view');
const rows = res?.data?.results || [];
- const columns = getColumns(res?.data?.metadata);
+ const columns = normalizeColumns(res?.data?.metadata);
let data = new Metadata({ rows, columns, view });
data.view.rows = data.row_ids;
const loadedCount = rows.length;
diff --git a/frontend/src/metadata/metadata-view/utils/column-utils.js b/frontend/src/metadata/metadata-view/utils/column-utils.js
index eb736501f8..4877c2796a 100644
--- a/frontend/src/metadata/metadata-view/utils/column-utils.js
+++ b/frontend/src/metadata/metadata-view/utils/column-utils.js
@@ -3,6 +3,7 @@ import {
DEFAULT_DATE_FORMAT,
PRIVATE_COLUMN_KEY,
NOT_DISPLAY_COLUMN_KEYS,
+ PRIVATE_COLUMN_KEYS,
} from '../_basic';
import {
SEQUENCE_COLUMN_WIDTH
@@ -240,7 +241,8 @@ const getColumnType = (key, type) => {
}
};
-const getFileTypeColumnData = (data) => {
+const getFileTypeColumnData = (column) => {
+ const { data } = column;
const _OPTIONS = {
'_picture': { name: gettext('Picture'), color: '#FFFCB5', textColor: '#202428', id: '_picture' },
'_document': { name: gettext('Document'), color: '#B7CEF9', textColor: '#202428', id: '_document' },
@@ -251,15 +253,45 @@ const getFileTypeColumnData = (data) => {
let newData = { ...data };
newData.options = Array.isArray(newData.options) ? newData.options.map(o => {
return { ..._OPTIONS[o.name] };
- }) : [];
+ }) : Object.keys(_OPTIONS);
return newData;
};
-export const getColumns = (columns) => {
+const getFileStatusColumnData = (column) => {
+ const { data } = column;
+ const _OPTIONS = {
+ '_draft': { name: gettext('Draft'), color: '#EED5FF', textColor: '#202428', id: '_draft' },
+ '_in_review': { name: gettext('In review'), color: '#FFFDCF', textColor: '#202428', id: '_in_review' },
+ '_done': { name: gettext('Done'), color: '#59CB74', textColor: '#FFFFFF', borderColor: '#844BD2', id: '_done' },
+ };
+
+ let newData = { ...data };
+ newData.options = Array.isArray(newData.options) ? newData.options.map(o => {
+ return { ..._OPTIONS[o.name] };
+ }) : Object.keys(_OPTIONS);
+ return newData;
+};
+
+const normalizeColumnData = (column) => {
+ const { key, data } = column;
+ if (PRIVATE_COLUMN_KEYS.includes(key)) {
+ if (key === PRIVATE_COLUMN_KEY.FILE_TYPE) return getFileTypeColumnData(column);
+ if (key === PRIVATE_COLUMN_KEY.FILE_STATUS) return getFileStatusColumnData(column);
+ }
+ if (column.type === CellType.SINGLE_SELECT) {
+ return { ...data, options: data?.options || [] };
+ }
+ if (column.type === CellType.DATE) {
+ return { ...data, format: data?.format || DEFAULT_DATE_FORMAT };
+ }
+ return data;
+};
+
+export const normalizeColumns = (columns) => {
if (!Array.isArray(columns) || columns.length === 0) return [];
const columnsWidth = window.sfMetadataContext.localStorage.getItem('columns_width') || {};
const validColumns = columns.map((column) => {
- const { type, key, name, data, ...params } = column;
+ const { type, key, name, ...params } = column;
return {
...params,
key,
@@ -267,7 +299,7 @@ export const getColumns = (columns) => {
name: getColumnName(key, name),
width: columnsWidth[key] || 200,
editable: !key.startsWith('_'),
- data: key === PRIVATE_COLUMN_KEY.FILE_TYPE ? getFileTypeColumnData(data) : data,
+ data: normalizeColumnData(column)
};
}).filter(column => !NOT_DISPLAY_COLUMN_KEYS.includes(column.key));
let displayColumns = [];