From dccfe3fe6c412caa36bb95639d8aebd0cb18228f Mon Sep 17 00:00:00 2001 From: zhouwenxuan Date: Mon, 23 Dec 2024 22:33:32 +0800 Subject: [PATCH] update tag options --- .../cell-editors/tags-editor/index.js | 6 +-- .../view-toolbar/table-view-toolbar/index.js | 4 +- .../src/metadata/constants/column/type.js | 2 +- .../src/metadata/utils/validate/filter.js | 7 ---- frontend/src/tag/context.js | 4 ++ frontend/src/tag/hooks/tags.js | 5 +++ seahub/repo_metadata/apis.py | 41 ++++++++++++++++++- seahub/repo_metadata/metadata_server_api.py | 2 +- 8 files changed, 54 insertions(+), 17 deletions(-) diff --git a/frontend/src/metadata/components/cell-editors/tags-editor/index.js b/frontend/src/metadata/components/cell-editors/tags-editor/index.js index f7e699e6c70..6f530e953d8 100644 --- a/frontend/src/metadata/components/cell-editors/tags-editor/index.js +++ b/frontend/src/metadata/components/cell-editors/tags-editor/index.js @@ -9,7 +9,7 @@ import { useTags } from '../../../../tag/hooks'; import { getTagColor, getTagId, getTagName, getTagsByNameOrColor, getTagByNameOrColor } from '../../../../tag/utils/cell/core'; import { getRecordIdFromRecord } from '../../../utils/cell'; import { getRowById } from '../../../utils/table'; -import { SELECT_OPTION_COLORS } from '../../../constants'; +import { PRIVATE_COLUMN_KEY, SELECT_OPTION_COLORS } from '../../../constants'; import { PRIVATE_COLUMN_KEY as TAG_PRIVATE_COLUMN_KEY } from '../../../../tag/constants'; import DeleteTags from './delete-tags'; @@ -106,10 +106,10 @@ const TagsEditor = forwardRef(({ updateFileTags([{ record_id: recordId, tags: newValue, old_tags: value }]); setValue(newValue); const options = tagsData.rows.map(tag => ({ - row_id: getTagId(tag), + id: getTagId(tag), display_value: getTagName(tag), })) || []; - modifyColumnData(column.key, { options }, { options: column.data.options || [] }); + modifyColumnData(PRIVATE_COLUMN_KEY.TAGS, { options }, { options: column.data.options || [] }); }, fail_callback: () => { diff --git a/frontend/src/metadata/components/view-toolbar/table-view-toolbar/index.js b/frontend/src/metadata/components/view-toolbar/table-view-toolbar/index.js index e02277dedd3..8d3bc3c6c03 100644 --- a/frontend/src/metadata/components/view-toolbar/table-view-toolbar/index.js +++ b/frontend/src/metadata/components/view-toolbar/table-view-toolbar/index.js @@ -4,7 +4,7 @@ import { FilterSetter, GroupbySetter, SortSetter, HideColumnSetter } from '../.. import { PRIVATE_COLUMN_KEY } from '../../../constants'; const TableViewToolbar = ({ - readOnly, view, collaborators, tags, + readOnly, view, collaborators, modifyFilters, modifySorts, modifyGroupbys, modifyHiddenColumns, modifyColumnOrder }) => { const viewType = useMemo(() => view.type, [view]); @@ -33,7 +33,6 @@ const TableViewToolbar = ({ modifyFilters={modifyFilters} collaborators={collaborators} viewType={viewType} - tags={tags} /> { + return this.api.getTagsStatus(this.repoId); + }; + } export default Context; diff --git a/frontend/src/tag/hooks/tags.js b/frontend/src/tag/hooks/tags.js index d3e0ee25662..0a326535f87 100644 --- a/frontend/src/tag/hooks/tags.js +++ b/frontend/src/tag/hooks/tags.js @@ -39,6 +39,10 @@ export const TagsProvider = ({ repoID, currentPath, selectTagsView, children, .. setTagsData(data); }, []); + const getTagsStatus = useCallback(() => { + return contextRef.current.api.getTagsStatus(repoID); + }, [repoID]); + const reloadTags = useCallback(() => { setReloading(true); storeRef.current.reload(PER_LOAD_NUMBER).then(() => { @@ -258,6 +262,7 @@ export const TagsProvider = ({ repoID, currentPath, selectTagsView, children, .. deleteTagLinks, updateLocalTag, selectTag: handelSelectTag, + getTagsStatus, }}> {children} diff --git a/seahub/repo_metadata/apis.py b/seahub/repo_metadata/apis.py index 2f79b0cc2fc..aa18779c658 100644 --- a/seahub/repo_metadata/apis.py +++ b/seahub/repo_metadata/apis.py @@ -1882,7 +1882,7 @@ def put(self, request, repo_id): metadata_server_api = MetadataServerAPI(repo_id, request.user.username) - from seafevents.repo_metadata.constants import TAGS_TABLE + from seafevents.repo_metadata.constants import TAGS_TABLE, METADATA_TABLE, MetadataColumn try: tags_table = get_table_by_name(metadata_server_api, TAGS_TABLE.name) except Exception as e: @@ -1942,6 +1942,27 @@ def put(self, request, repo_id): error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) + try: + columns_data = metadata_server_api.list_columns(METADATA_TABLE.id) + columns = columns_data.get('columns', []) + tags_column = next((col for col in columns if col['key'] == METADATA_TABLE.columns.tags.key), None) + if tags_column: + options = tags_column.get('data', {}).get('options', []) + for tag_data in tags_data: + tag = tag_data.get('tag', {}) + tag_id = tag_data.get('tag_id', '') + display_value = tag.get(TAGS_TABLE.columns.name.name) + option = next((opt for opt in options if opt['id'] == tag_id), None) + if option: + option['display_value'] = display_value + new_column_data = {**tags_column.get('data', {}), 'options': options} + new_column = MetadataColumn(tags_column['key'], tags_column['name'], tags_column['type'], new_column_data).to_dict() + metadata_server_api.update_column(METADATA_TABLE.id, new_column) + except Exception as e: + logger.error(e) + error_msg = 'Internal Server Error' + return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) + return Response({'success': True}) def delete(self, request, repo_id): @@ -1967,7 +1988,7 @@ def delete(self, request, repo_id): metadata_server_api = MetadataServerAPI(repo_id, request.user.username) - from seafevents.repo_metadata.constants import TAGS_TABLE + from seafevents.repo_metadata.constants import TAGS_TABLE, METADATA_TABLE, MetadataColumn try: tags_table = get_table_by_name(metadata_server_api, TAGS_TABLE.name) except Exception as e: @@ -1986,6 +2007,22 @@ def delete(self, request, repo_id): error_msg = 'Internal Server Error' return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) + try: + columns_data = metadata_server_api.list_columns(METADATA_TABLE.id) + columns = columns_data.get('columns', []) + tags_column = next((col for col in columns if col['key'] == METADATA_TABLE.columns.tags.key), None) + if tags_column: + options = tags_column.get('data', {}).get('options', []) + options = [opt for opt in options if opt['id'] not in tag_ids] + new_column_data = {**tags_column.get('data', {}), 'options': options} + new_column = MetadataColumn(tags_column['key'], tags_column['name'], tags_column['type'], new_column_data).to_dict() + resp = metadata_server_api.update_column(METADATA_TABLE.id, new_column) + print('resp', resp) + except Exception as e: + logger.error(e) + error_msg = 'Internal Server Error' + return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) + return Response({'success': True}) diff --git a/seahub/repo_metadata/metadata_server_api.py b/seahub/repo_metadata/metadata_server_api.py index 2aab6d42334..625f19ba186 100644 --- a/seahub/repo_metadata/metadata_server_api.py +++ b/seahub/repo_metadata/metadata_server_api.py @@ -49,7 +49,7 @@ def list_metadata_view_records(repo_id, user, view, start=0, limit=1000): metadata_server_api = MetadataServerAPI(repo_id, user) columns = metadata_server_api.list_columns(METADATA_TABLE.id).get('columns') sql = gen_view_data_sql(METADATA_TABLE, columns, view, start, limit, user) - print(sql) + # Remove face-vectors from the query SQL because they are too large query_fields_str = '' for column in columns: