From cc13489fdf4662b19f2acd0a9de94f19e3e02e42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=9B=BD=E7=92=87?= <37972689+YangGuoXuan-0503@users.noreply.github.com> Date: Tue, 2 Jul 2024 09:55:06 +0800 Subject: [PATCH] feat: metadata file name display (#6279) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: metadata file name display * feat: optimize code --------- Co-authored-by: 杨国璇 --- frontend/package-lock.json | 94 +++++++++++++++++-- frontend/package.json | 2 +- frontend/src/assets/icons/folder.svg | 1 + frontend/src/assets/icons/image.svg | 1 + frontend/src/assets/icons/markdown.svg | 1 + .../_basic/constants/column/common.js | 10 ++ .../_basic/constants/column/icon.js | 2 + .../_basic/constants/column/index.js | 8 ++ .../_basic/constants/column/private.js | 17 ++++ .../_basic/constants/column/type.js | 1 + .../metadata-view/_basic/constants/index.js | 2 + .../metadata/metadata-view/_basic/index.js | 2 + .../components/cell-formatter/index.js | 3 +- .../table/table-main/records/record-cell.js | 33 +++---- .../metadata/metadata-view/constants/index.js | 1 + .../metadata/metadata-view/hooks/metadata.js | 62 +++++++----- 16 files changed, 187 insertions(+), 53 deletions(-) create mode 100644 frontend/src/assets/icons/folder.svg create mode 100644 frontend/src/assets/icons/image.svg create mode 100644 frontend/src/assets/icons/markdown.svg create mode 100644 frontend/src/metadata/metadata-view/_basic/constants/column/common.js create mode 100644 frontend/src/metadata/metadata-view/_basic/constants/column/private.js diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 846889b9d5..95f951c4af 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -17,7 +17,7 @@ "@seafile/sdoc-editor": "1.0.4", "@seafile/seafile-calendar": "0.0.12", "@seafile/seafile-editor": "1.0.99", - "@seafile/sf-metadata-ui-component": "0.0.4", + "@seafile/sf-metadata-ui-component": "0.0.7", "@uiw/codemirror-extensions-langs": "^4.19.4", "@uiw/react-codemirror": "^4.19.4", "chart.js": "2.9.4", @@ -4953,9 +4953,9 @@ } }, "node_modules/@seafile/sf-metadata-ui-component": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@seafile/sf-metadata-ui-component/-/sf-metadata-ui-component-0.0.4.tgz", - "integrity": "sha512-Zf8SPVXkG7iQFqaDOtgsrcIVn5l0rfX7c8h4E9yf+Ho6Y/S4Rq3vL/emLUR4syE18OlWlw656oNhsvapeWsQjQ==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@seafile/sf-metadata-ui-component/-/sf-metadata-ui-component-0.0.7.tgz", + "integrity": "sha512-haLIkUnZaMqQQnLwjNnwb5rZoRAEv4qHE+G0xm51wBwDmFTQBkhnRJfxDlE7fxtkWGb6m5ea52U574ZnMWEarg==", "dependencies": { "@seafile/seafile-calendar": "0.0.24", "classnames": "2.3.2", @@ -8041,6 +8041,11 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "node_modules/bowser": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", + "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -9245,6 +9250,15 @@ "postcss": "^8.4" } }, + "node_modules/css-in-js-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", + "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", + "dependencies": { + "hyphenate-style-name": "^1.0.2", + "isobject": "^3.0.1" + } + }, "node_modules/css-loader": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", @@ -12593,6 +12607,18 @@ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, + "node_modules/glamor": { + "version": "2.20.40", + "resolved": "https://registry.npmjs.org/glamor/-/glamor-2.20.40.tgz", + "integrity": "sha512-DNXCd+c14N9QF8aAKrfl4xakPk5FdcFwmH7sD0qnC0Pr7xoZ5W9yovhUrY/dJc3psfGGXC58vqQyRtuskyUJxA==", + "dependencies": { + "fbjs": "^0.8.12", + "inline-style-prefixer": "^3.0.6", + "object-assign": "^4.1.1", + "prop-types": "^15.5.10", + "through": "^2.3.8" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -14055,6 +14081,15 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "node_modules/inline-style-prefixer": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz", + "integrity": "sha512-ne8XIyyqkRaNJ1JfL1NYzNdCNxq+MCBQhC8NgOQlzNm2vv3XxlP0VSLQUbSRCF6KPEoveCVEpayHoHzcMyZsMQ==", + "dependencies": { + "bowser": "^1.7.3", + "css-in-js-utils": "^2.0.0" + } + }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -26311,6 +26346,11 @@ "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", "dev": true }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -32120,9 +32160,9 @@ } }, "@seafile/sf-metadata-ui-component": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@seafile/sf-metadata-ui-component/-/sf-metadata-ui-component-0.0.4.tgz", - "integrity": "sha512-Zf8SPVXkG7iQFqaDOtgsrcIVn5l0rfX7c8h4E9yf+Ho6Y/S4Rq3vL/emLUR4syE18OlWlw656oNhsvapeWsQjQ==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@seafile/sf-metadata-ui-component/-/sf-metadata-ui-component-0.0.7.tgz", + "integrity": "sha512-haLIkUnZaMqQQnLwjNnwb5rZoRAEv4qHE+G0xm51wBwDmFTQBkhnRJfxDlE7fxtkWGb6m5ea52U574ZnMWEarg==", "requires": { "@seafile/seafile-calendar": "0.0.24", "classnames": "2.3.2", @@ -34544,6 +34584,11 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "bowser": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", + "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -35499,6 +35544,15 @@ "postcss-selector-parser": "^6.0.9" } }, + "css-in-js-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", + "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", + "requires": { + "hyphenate-style-name": "^1.0.2", + "isobject": "^3.0.1" + } + }, "css-loader": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", @@ -38047,6 +38101,18 @@ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, + "glamor": { + "version": "2.20.40", + "resolved": "https://registry.npmjs.org/glamor/-/glamor-2.20.40.tgz", + "integrity": "sha512-DNXCd+c14N9QF8aAKrfl4xakPk5FdcFwmH7sD0qnC0Pr7xoZ5W9yovhUrY/dJc3psfGGXC58vqQyRtuskyUJxA==", + "requires": { + "fbjs": "^0.8.12", + "inline-style-prefixer": "^3.0.6", + "object-assign": "^4.1.1", + "prop-types": "^15.5.10", + "through": "^2.3.8" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -39151,6 +39217,15 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, + "inline-style-prefixer": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-3.0.8.tgz", + "integrity": "sha512-ne8XIyyqkRaNJ1JfL1NYzNdCNxq+MCBQhC8NgOQlzNm2vv3XxlP0VSLQUbSRCF6KPEoveCVEpayHoHzcMyZsMQ==", + "requires": { + "bowser": "^1.7.3", + "css-in-js-utils": "^2.0.0" + } + }, "internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -48271,6 +48346,11 @@ "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index c3660d9c40..a31158d74c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -12,7 +12,7 @@ "@seafile/sdoc-editor": "1.0.4", "@seafile/seafile-calendar": "0.0.12", "@seafile/seafile-editor": "1.0.99", - "@seafile/sf-metadata-ui-component": "0.0.4", + "@seafile/sf-metadata-ui-component": "0.0.7", "@uiw/codemirror-extensions-langs": "^4.19.4", "@uiw/react-codemirror": "^4.19.4", "chart.js": "2.9.4", diff --git a/frontend/src/assets/icons/folder.svg b/frontend/src/assets/icons/folder.svg new file mode 100644 index 0000000000..e27c353e93 --- /dev/null +++ b/frontend/src/assets/icons/folder.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/icons/image.svg b/frontend/src/assets/icons/image.svg new file mode 100644 index 0000000000..95d85455eb --- /dev/null +++ b/frontend/src/assets/icons/image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/assets/icons/markdown.svg b/frontend/src/assets/icons/markdown.svg new file mode 100644 index 0000000000..9cf579c53a --- /dev/null +++ b/frontend/src/assets/icons/markdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/metadata/metadata-view/_basic/constants/column/common.js b/frontend/src/metadata/metadata-view/_basic/constants/column/common.js new file mode 100644 index 0000000000..5c35ecae80 --- /dev/null +++ b/frontend/src/metadata/metadata-view/_basic/constants/column/common.js @@ -0,0 +1,10 @@ +import { PRIVATE_COLUMN_KEY } from './private'; + +export const NOT_DISPLAY_COLUMN_KEYS = [ + PRIVATE_COLUMN_KEY.ID, + PRIVATE_COLUMN_KEY.CTIME, + PRIVATE_COLUMN_KEY.MTIME, + PRIVATE_COLUMN_KEY.CREATOR, + PRIVATE_COLUMN_KEY.LAST_MODIFIER, + PRIVATE_COLUMN_KEY.IS_DIR, +]; diff --git a/frontend/src/metadata/metadata-view/_basic/constants/column/icon.js b/frontend/src/metadata/metadata-view/_basic/constants/column/icon.js index 7668cd4e70..9d5a60132f 100644 --- a/frontend/src/metadata/metadata-view/_basic/constants/column/icon.js +++ b/frontend/src/metadata/metadata-view/_basic/constants/column/icon.js @@ -7,6 +7,7 @@ const COLUMNS_ICON_CONFIG = { [CellType.MTIME]: 'creation-time', [CellType.DEFAULT]: 'text', [CellType.TEXT]: 'text', + [CellType.FILE_NAME]: 'text', }; const COLUMNS_ICON_NAME = { @@ -16,6 +17,7 @@ const COLUMNS_ICON_NAME = { [CellType.MTIME]: 'Last modified time', [CellType.DEFAULT]: 'Text', [CellType.TEXT]: 'Text', + [CellType.FILE_NAME]: 'File name', }; export { diff --git a/frontend/src/metadata/metadata-view/_basic/constants/column/index.js b/frontend/src/metadata/metadata-view/_basic/constants/column/index.js index 51a8e8d493..c6c5c5b8d0 100644 --- a/frontend/src/metadata/metadata-view/_basic/constants/column/index.js +++ b/frontend/src/metadata/metadata-view/_basic/constants/column/index.js @@ -20,8 +20,16 @@ export { SINGLE_CELL_VALUE_COLUMN_TYPE_MAP, } from './format'; +export { + PRIVATE_COLUMN_KEY +} from './private'; + export { CellType, COLUMNS_ICON_CONFIG, COLUMNS_ICON_NAME, }; + +export { + NOT_DISPLAY_COLUMN_KEYS +} from './common'; diff --git a/frontend/src/metadata/metadata-view/_basic/constants/column/private.js b/frontend/src/metadata/metadata-view/_basic/constants/column/private.js new file mode 100644 index 0000000000..81725b7ae3 --- /dev/null +++ b/frontend/src/metadata/metadata-view/_basic/constants/column/private.js @@ -0,0 +1,17 @@ +export const PRIVATE_COLUMN_KEY = { + ID: '_id', + + // base key + CTIME: '_ctime', + MTIME: '_mtime', + CREATOR: '_creator', + LAST_MODIFIER: '_last_modifier', + + IS_DIR: '_is_dir', + PARENT_DIR: '_parent_dir', + FILE_CTIME: '_file_ctime', + FILE_MTIME: '_file_mtime', + FILE_CREATOR: '_file_creator', + FILE_MODIFIER: '_file_modifier', + FILE_NAME: '_name', +}; diff --git a/frontend/src/metadata/metadata-view/_basic/constants/column/type.js b/frontend/src/metadata/metadata-view/_basic/constants/column/type.js index 6b04be5e40..a4bf9ffa8f 100644 --- a/frontend/src/metadata/metadata-view/_basic/constants/column/type.js +++ b/frontend/src/metadata/metadata-view/_basic/constants/column/type.js @@ -5,6 +5,7 @@ const CellType = { CTIME: 'ctime', LAST_MODIFIER: 'last-modifier', MTIME: 'mtime', + FILE_NAME: 'file-name', }; export default CellType; diff --git a/frontend/src/metadata/metadata-view/_basic/constants/index.js b/frontend/src/metadata/metadata-view/_basic/constants/index.js index 040dfff621..b540d6a8f5 100644 --- a/frontend/src/metadata/metadata-view/_basic/constants/index.js +++ b/frontend/src/metadata/metadata-view/_basic/constants/index.js @@ -18,6 +18,8 @@ export { NOT_SUPPORT_EDIT_COLUMN_TYPE_MAP, MULTIPLE_CELL_VALUE_COLUMN_TYPE_MAP, SINGLE_CELL_VALUE_COLUMN_TYPE_MAP, + PRIVATE_COLUMN_KEY, + NOT_DISPLAY_COLUMN_KEYS, } from './column'; export { FILTER_CONJUNCTION_TYPE, diff --git a/frontend/src/metadata/metadata-view/_basic/index.js b/frontend/src/metadata/metadata-view/_basic/index.js index 6773942b37..ced47a1cfa 100644 --- a/frontend/src/metadata/metadata-view/_basic/index.js +++ b/frontend/src/metadata/metadata-view/_basic/index.js @@ -45,6 +45,8 @@ export { Z_INDEX, GROUPBY_DATE_GRANULARITY_LIST, HEADER_HEIGHT_TYPE, + PRIVATE_COLUMN_KEY, + NOT_DISPLAY_COLUMN_KEYS, } from './constants'; export { diff --git a/frontend/src/metadata/metadata-view/components/cell-formatter/index.js b/frontend/src/metadata/metadata-view/components/cell-formatter/index.js index 3c230c2f03..25aa5dc1ee 100644 --- a/frontend/src/metadata/metadata-view/components/cell-formatter/index.js +++ b/frontend/src/metadata/metadata-view/components/cell-formatter/index.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { Formatter } from '@seafile/sf-metadata-ui-component'; import { useCollaborators } from '../../hooks'; -const CellFormatter = ({ readonly, value, field, }) => { +const CellFormatter = ({ readonly, value, field, ...params }) => { const { collaborators, collaboratorsCache, updateCollaboratorsCache } = useCollaborators(); return ( { collaboratorsCache={collaboratorsCache} updateCollaboratorsCache={updateCollaboratorsCache} queryUserAPI={window.sfMetadataContext.userService.queryUser} + { ...params } /> ); }; diff --git a/frontend/src/metadata/metadata-view/components/table/table-main/records/record-cell.js b/frontend/src/metadata/metadata-view/components/table/table-main/records/record-cell.js index 821890de82..c282e816b6 100644 --- a/frontend/src/metadata/metadata-view/components/table/table-main/records/record-cell.js +++ b/frontend/src/metadata/metadata-view/components/table/table-main/records/record-cell.js @@ -1,5 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; +import classnames from 'classnames'; import { toaster } from '@seafile/sf-metadata-ui-component'; import { isFunction } from '../../../../_basic'; import { isNameColumn } from '../../../../utils/column-utils'; @@ -42,28 +43,16 @@ class RecordCell extends React.Component { const { column, highlightClassName, isLastCell, isLastFrozenCell, isCellSelected } = this.props; const { isFileTipShow } = this.state; const { type } = column; - let className = `sf-metadata-result-table-cell sf-metadata-result-table-${type}-cell `; const canEditable = window.sfMetadataContext.canModifyCell(column); - className = `${className}${(canEditable || !TABLE_SUPPORT_EDIT_TYPE_MAP[type]) ? '' : 'table-cell-uneditable '}`; - if (highlightClassName) { - className += `${highlightClassName} `; - } - if (isLastCell) { - className += 'last-cell '; - } - if (isLastFrozenCell) { - className += 'table-last--frozen '; - } - if (isCellSelected) { - className += 'cell-selected '; - } - if (isFileTipShow) { - className += 'draging-file-to-cell '; - } - if (hasComment) { - className += 'row-comment-cell'; - } - return className; + return classnames('sf-metadata-result-table-cell', `sf-metadata-result-table-${type}-cell`, { + 'table-cell-uneditable': !canEditable && TABLE_SUPPORT_EDIT_TYPE_MAP[type], + [highlightClassName]: highlightClassName, + 'last-cell': isLastCell, + 'table-last--frozen': isLastFrozenCell, + 'cell-selected': isCellSelected, + 'draging-file-to-cell': isFileTipShow, + 'row-comment-cell': hasComment, + }); }; onCellClick = (e) => { @@ -170,7 +159,7 @@ class RecordCell extends React.Component { ...cellEvents, }; const cellContent = ( - + ); return ( diff --git a/frontend/src/metadata/metadata-view/constants/index.js b/frontend/src/metadata/metadata-view/constants/index.js index 1ce706c286..629f946834 100644 --- a/frontend/src/metadata/metadata-view/constants/index.js +++ b/frontend/src/metadata/metadata-view/constants/index.js @@ -37,6 +37,7 @@ export const TABLE_NOT_SUPPORT_EDIT_TYPE_MAP = { export const TABLE_SUPPORT_EDIT_TYPE_MAP = { [CellType.TEXT]: true, + [CellType.FILE_NAME]: true, }; export const TABLE_MOBILE_SUPPORT_EDIT_CELL_TYPE_MAP = { diff --git a/frontend/src/metadata/metadata-view/hooks/metadata.js b/frontend/src/metadata/metadata-view/hooks/metadata.js index 6eb9023d55..adcf138da1 100644 --- a/frontend/src/metadata/metadata-view/hooks/metadata.js +++ b/frontend/src/metadata/metadata-view/hooks/metadata.js @@ -3,7 +3,7 @@ import React, { useCallback, useContext, useEffect, useState } from 'react'; import { toaster } from '@seafile/sf-metadata-ui-component'; import { Metadata } from '../model'; import { gettext } from '../../../utils/constants'; -import { getErrorMsg, CellType } from '../_basic'; +import { getErrorMsg, CellType, PRIVATE_COLUMN_KEY, NOT_DISPLAY_COLUMN_KEYS } from '../_basic'; import Context from '../context'; const MetadataContext = React.createContext(null); @@ -17,27 +17,27 @@ export const MetadataProvider = ({ const getColumnName = useCallback((key, name) => { switch (key) { - case '_ctime': + case PRIVATE_COLUMN_KEY.CTIME: return gettext('Created time'); - case '_mtime': + case PRIVATE_COLUMN_KEY.MTIME: return gettext('Last modified time'); - case '_creator': + case PRIVATE_COLUMN_KEY.CREATOR: return gettext('Creator'); - case '_last_modifier': + case PRIVATE_COLUMN_KEY.LAST_MODIFIER: return gettext('Last modifier'); - case '_file_creator': + case PRIVATE_COLUMN_KEY.FILE_CREATOR: return gettext('File creator'); - case '_file_modifier': + case PRIVATE_COLUMN_KEY.FILE_MODIFIER: return gettext('File modifier'); - case '_file_ctime': + case PRIVATE_COLUMN_KEY.FILE_CTIME: return gettext('File created time'); - case '_file_mtime': + case PRIVATE_COLUMN_KEY.FILE_MTIME: return gettext('File last modified time'); - case '_is_dir': + case PRIVATE_COLUMN_KEY.IS_DIR: return gettext('Is dir'); - case '_parent_dir': + case PRIVATE_COLUMN_KEY.PARENT_DIR: return gettext('Parent dir'); - case '_name': + case PRIVATE_COLUMN_KEY.FILE_NAME: return gettext('File name'); default: return name; @@ -46,18 +46,20 @@ export const MetadataProvider = ({ const getColumnType = useCallback((key, type) => { switch (key) { - case '_ctime': - case '_file_ctime': + case PRIVATE_COLUMN_KEY.CTIME: + case PRIVATE_COLUMN_KEY.FILE_CTIME: return CellType.CTIME; - case '_mtime': - case '_file_mtime': + case PRIVATE_COLUMN_KEY.MTIME: + case PRIVATE_COLUMN_KEY.FILE_MTIME: return CellType.MTIME; - case '_creator': - case '_file_creator': + case PRIVATE_COLUMN_KEY.CREATOR: + case PRIVATE_COLUMN_KEY.FILE_CREATOR: return CellType.CREATOR; - case '_last_modifier': - case '_file_modifier': + case PRIVATE_COLUMN_KEY.LAST_MODIFIER: + case PRIVATE_COLUMN_KEY.FILE_MODIFIER: return CellType.LAST_MODIFIER; + case PRIVATE_COLUMN_KEY.FILE_NAME: + return CellType.FILE_NAME; default: return type; } @@ -65,7 +67,7 @@ export const MetadataProvider = ({ const getColumns = useCallback((columns) => { if (!Array.isArray(columns) || columns.length === 0) return []; - return columns.map((column) => { + const validColumns = columns.map((column) => { const { type, key, name, ...params } = column; return { key, @@ -74,7 +76,23 @@ export const MetadataProvider = ({ ...params, width: 200, }; - }).filter(column => !['_id', '_ctime', '_mtime', '_creator', '_last_modifier'].includes(column.key)); + }).filter(column => !NOT_DISPLAY_COLUMN_KEYS.includes(column.key)); + let displayColumns = []; + validColumns.forEach(column => { + if (column.key === '_name') { + displayColumns.unshift(column); + } else if (column.key === PRIVATE_COLUMN_KEY.PARENT_DIR) { + const nameColumnIndex = displayColumns.findIndex(column => column.key === PRIVATE_COLUMN_KEY.PARENT_DIR); + if (nameColumnIndex === -1) { + displayColumns.unshift(column); + } else { + displayColumns.splice(nameColumnIndex, 0, column); + } + } else { + displayColumns.push(column); + } + }); + return displayColumns; }, [getColumnType, getColumnName]); // init