1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-04-27 11:01:14 +00:00
seahub/frontend/src/metadata/components/view-toolbar/index.js
Aries 3b384be610
Feature/add map view (#7034)
* add map

* use custom baidu js

* use custom baidu plugin

* optimize user location

* optimize code

* show tips when request user location failed

* optimize code

* feat: optimize code

* feat: optimize code

* feat: optimize code

* feat: optimize code

---------

Co-authored-by: zhouwenxuan <aries@Mac.local>
Co-authored-by: 杨国璇 <ygx@Hello-word.local>
2024-11-18 17:36:49 +08:00

134 lines
4.3 KiB
JavaScript

import React, { useCallback, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
import { EVENT_BUS_TYPE, VIEW_TYPE } from '../../constants';
import TableViewToolbar from './table-view-toolbar';
import GalleryViewToolbar from './gallery-view-toolbar';
import FaceRecognitionViewToolbar from './face-recognition';
import KanbanViewToolBar from './kanban-view-toolbar';
import MapViewToolBar from './map-view-toolbar';
import './index.css';
const ViewToolBar = ({ viewId, isCustomPermission, showDetail, closeDetail }) => {
const [view, setView] = useState(null);
const [collaborators, setCollaborators] = useState([]);
const onHeaderClick = useCallback(() => {
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.SELECT_NONE);
}, []);
const modifyFilters = useCallback((filters, filterConjunction, basicFilters) => {
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_FILTERS, filters, filterConjunction, basicFilters);
}, []);
const modifySorts = useCallback((sorts) => {
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_SORTS, sorts);
}, []);
const modifyGroupbys = useCallback((groupbys) => {
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_GROUPBYS, groupbys);
}, []);
const modifyHiddenColumns = useCallback((hiddenColumns) => {
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_HIDDEN_COLUMNS, hiddenColumns);
}, []);
const modifyColumnOrder = useCallback((sourceColumnKey, targetColumnKey) => {
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_COLUMN_ORDER, sourceColumnKey, targetColumnKey);
}, []);
const viewChange = useCallback((view) => {
setView(view);
}, []);
useEffect(() => {
let unsubscribeViewChange;
let timer = setInterval(() => {
if (window.sfMetadataContext && window.sfMetadataStore.data) {
timer && clearInterval(timer);
timer = null;
setView(window.sfMetadataStore.data.view);
setCollaborators(window.sfMetadataStore?.collaborators || []);
unsubscribeViewChange = window.sfMetadataContext.eventBus.subscribe(EVENT_BUS_TYPE.VIEW_CHANGED, viewChange);
}
}, 300);
return () => {
timer && clearInterval(timer);
unsubscribeViewChange && unsubscribeViewChange();
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [viewId]);
if (!view) return null;
const viewType = view.type;
const readOnly = window.sfMetadataContext ? !window.sfMetadataContext.canModifyView(view) : true;
return (
<div
className="sf-metadata-tool"
onClick={onHeaderClick}
>
{viewType === VIEW_TYPE.TABLE && (
<TableViewToolbar
readOnly={readOnly}
view={view}
collaborators={collaborators}
modifyFilters={modifyFilters}
modifySorts={modifySorts}
modifyGroupbys={modifyGroupbys}
modifyHiddenColumns={modifyHiddenColumns}
modifyColumnOrder={modifyColumnOrder}
/>
)}
{viewType === VIEW_TYPE.GALLERY && (
<GalleryViewToolbar
readOnly={readOnly}
isCustomPermission={isCustomPermission}
view={view}
collaborators={collaborators}
modifyFilters={modifyFilters}
modifySorts={modifySorts}
showDetail={showDetail}
/>
)}
{viewType === VIEW_TYPE.FACE_RECOGNITION && (
<FaceRecognitionViewToolbar
isCustomPermission={isCustomPermission}
view={view}
showDetail={showDetail}
/>
)}
{viewType === VIEW_TYPE.KANBAN && (
<KanbanViewToolBar
isCustomPermission={isCustomPermission}
readOnly={readOnly}
view={view}
collaborators={collaborators}
modifyFilters={modifyFilters}
modifySorts={modifySorts}
showDetail={showDetail}
closeDetail={closeDetail}
/>
)}
{viewType === VIEW_TYPE.MAP && (
<MapViewToolBar
readOnly={readOnly}
view={view}
collaborators={collaborators}
modifyFilters={modifyFilters}
/>
)}
</div>
);
};
ViewToolBar.propTypes = {
viewId: PropTypes.string,
isCustomPermission: PropTypes.bool,
showDetail: PropTypes.func,
closeDetail: PropTypes.func,
};
export default ViewToolBar;