2024-10-18 16:01:00 +08:00
|
|
|
import React, { useCallback, useEffect, useState } from 'react';
|
2024-07-10 18:18:57 +08:00
|
|
|
import PropTypes from 'prop-types';
|
2024-10-18 16:01:00 +08:00
|
|
|
import { EVENT_BUS_TYPE, VIEW_TYPE } from '../../constants';
|
|
|
|
import TableViewToolbar from './table-view-toolbar';
|
|
|
|
import GalleryViewToolbar from './gallery-view-toolbar';
|
2024-11-05 17:37:24 +08:00
|
|
|
import FaceRecognitionViewToolbar from './face-recognition';
|
2024-11-08 15:31:48 +08:00
|
|
|
import KanbanViewToolBar from './kanban-view-toolbar';
|
2024-11-18 17:36:49 +08:00
|
|
|
import MapViewToolBar from './map-view-toolbar';
|
2024-07-10 18:18:57 +08:00
|
|
|
|
|
|
|
import './index.css';
|
|
|
|
|
2024-12-24 17:52:18 +08:00
|
|
|
const ViewToolBar = ({ viewId, isCustomPermission, onToggleDetail, onCloseDetail }) => {
|
2024-07-10 18:18:57 +08:00
|
|
|
const [view, setView] = useState(null);
|
|
|
|
const [collaborators, setCollaborators] = useState([]);
|
|
|
|
|
|
|
|
const onHeaderClick = useCallback(() => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.SELECT_NONE);
|
|
|
|
}, []);
|
|
|
|
|
2024-08-26 16:21:23 +08:00
|
|
|
const modifyFilters = useCallback((filters, filterConjunction, basicFilters) => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_FILTERS, filters, filterConjunction, basicFilters);
|
2024-07-10 18:18:57 +08:00
|
|
|
}, []);
|
|
|
|
|
|
|
|
const modifySorts = useCallback((sorts) => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_SORTS, sorts);
|
|
|
|
}, []);
|
|
|
|
|
2024-07-31 12:11:00 +08:00
|
|
|
const modifyGroupbys = useCallback((groupbys) => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_GROUPBYS, groupbys);
|
2024-07-10 18:18:57 +08:00
|
|
|
}, []);
|
|
|
|
|
2024-07-31 12:11:00 +08:00
|
|
|
const modifyHiddenColumns = useCallback((hiddenColumns) => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_HIDDEN_COLUMNS, hiddenColumns);
|
2024-07-10 18:18:57 +08:00
|
|
|
}, []);
|
|
|
|
|
2024-08-23 17:11:24 +08:00
|
|
|
const modifyColumnOrder = useCallback((sourceColumnKey, targetColumnKey) => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_COLUMN_ORDER, sourceColumnKey, targetColumnKey);
|
|
|
|
}, []);
|
|
|
|
|
2024-07-10 18:18:57 +08:00
|
|
|
const viewChange = useCallback((view) => {
|
|
|
|
setView(view);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
useEffect(() => {
|
2024-07-22 09:45:08 +08:00
|
|
|
let unsubscribeViewChange;
|
2024-07-10 18:18:57 +08:00
|
|
|
let timer = setInterval(() => {
|
2024-07-18 17:40:53 +08:00
|
|
|
if (window.sfMetadataContext && window.sfMetadataStore.data) {
|
2024-07-10 18:18:57 +08:00
|
|
|
timer && clearInterval(timer);
|
|
|
|
timer = null;
|
|
|
|
setView(window.sfMetadataStore.data.view);
|
|
|
|
setCollaborators(window.sfMetadataStore?.collaborators || []);
|
2024-07-22 09:45:08 +08:00
|
|
|
unsubscribeViewChange = window.sfMetadataContext.eventBus.subscribe(EVENT_BUS_TYPE.VIEW_CHANGED, viewChange);
|
2024-07-10 18:18:57 +08:00
|
|
|
}
|
|
|
|
}, 300);
|
|
|
|
return () => {
|
|
|
|
timer && clearInterval(timer);
|
2024-07-22 09:45:08 +08:00
|
|
|
unsubscribeViewChange && unsubscribeViewChange();
|
2024-07-10 18:18:57 +08:00
|
|
|
};
|
2024-07-25 16:42:18 +08:00
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
2024-08-12 17:15:56 +08:00
|
|
|
}, [viewId]);
|
2024-07-10 18:18:57 +08:00
|
|
|
|
|
|
|
if (!view) return null;
|
|
|
|
|
2024-09-08 12:16:33 +08:00
|
|
|
const viewType = view.type;
|
2024-10-18 16:01:00 +08:00
|
|
|
const readOnly = window.sfMetadataContext ? !window.sfMetadataContext.canModifyView(view) : true;
|
2024-08-06 14:32:15 +08:00
|
|
|
|
2024-07-10 18:18:57 +08:00
|
|
|
return (
|
|
|
|
<div
|
2024-08-02 22:31:46 +08:00
|
|
|
className="sf-metadata-tool"
|
2024-07-10 18:18:57 +08:00
|
|
|
onClick={onHeaderClick}
|
|
|
|
>
|
2024-10-18 16:01:00 +08:00
|
|
|
{viewType === VIEW_TYPE.TABLE && (
|
|
|
|
<TableViewToolbar
|
2024-08-06 14:32:15 +08:00
|
|
|
readOnly={readOnly}
|
2024-10-18 16:01:00 +08:00
|
|
|
view={view}
|
2024-07-10 18:18:57 +08:00
|
|
|
collaborators={collaborators}
|
2024-10-18 16:01:00 +08:00
|
|
|
modifyFilters={modifyFilters}
|
|
|
|
modifySorts={modifySorts}
|
|
|
|
modifyGroupbys={modifyGroupbys}
|
|
|
|
modifyHiddenColumns={modifyHiddenColumns}
|
|
|
|
modifyColumnOrder={modifyColumnOrder}
|
2024-07-10 18:18:57 +08:00
|
|
|
/>
|
2024-10-18 16:01:00 +08:00
|
|
|
)}
|
|
|
|
{viewType === VIEW_TYPE.GALLERY && (
|
|
|
|
<GalleryViewToolbar
|
2024-08-06 14:32:15 +08:00
|
|
|
readOnly={readOnly}
|
2024-10-18 16:01:00 +08:00
|
|
|
isCustomPermission={isCustomPermission}
|
|
|
|
view={view}
|
|
|
|
collaborators={collaborators}
|
|
|
|
modifyFilters={modifyFilters}
|
2024-07-10 18:18:57 +08:00
|
|
|
modifySorts={modifySorts}
|
2024-12-23 17:47:20 +08:00
|
|
|
onToggleDetail={onToggleDetail}
|
2024-07-10 18:18:57 +08:00
|
|
|
/>
|
2024-10-18 16:01:00 +08:00
|
|
|
)}
|
2024-11-05 17:37:24 +08:00
|
|
|
{viewType === VIEW_TYPE.FACE_RECOGNITION && (
|
|
|
|
<FaceRecognitionViewToolbar
|
2025-01-08 14:40:28 +08:00
|
|
|
readOnly={readOnly}
|
2024-11-05 17:37:24 +08:00
|
|
|
isCustomPermission={isCustomPermission}
|
2024-12-23 17:47:20 +08:00
|
|
|
onToggleDetail={onToggleDetail}
|
2024-11-05 17:37:24 +08:00
|
|
|
/>
|
|
|
|
)}
|
2024-11-08 15:31:48 +08:00
|
|
|
{viewType === VIEW_TYPE.KANBAN && (
|
|
|
|
<KanbanViewToolBar
|
2024-11-15 16:08:46 +08:00
|
|
|
isCustomPermission={isCustomPermission}
|
2024-11-08 15:31:48 +08:00
|
|
|
readOnly={readOnly}
|
|
|
|
view={view}
|
|
|
|
collaborators={collaborators}
|
|
|
|
modifyFilters={modifyFilters}
|
|
|
|
modifySorts={modifySorts}
|
2024-12-23 17:47:20 +08:00
|
|
|
onToggleDetail={onToggleDetail}
|
2024-12-24 17:52:18 +08:00
|
|
|
onCloseDetail={onCloseDetail}
|
2024-11-08 15:31:48 +08:00
|
|
|
/>
|
|
|
|
)}
|
2024-11-18 17:36:49 +08:00
|
|
|
{viewType === VIEW_TYPE.MAP && (
|
|
|
|
<MapViewToolBar
|
|
|
|
readOnly={readOnly}
|
2025-01-08 14:40:28 +08:00
|
|
|
isCustomPermission={isCustomPermission}
|
2025-01-10 15:51:11 +08:00
|
|
|
view={view}
|
2024-11-18 17:36:49 +08:00
|
|
|
collaborators={collaborators}
|
|
|
|
modifyFilters={modifyFilters}
|
2024-12-28 11:47:46 +08:00
|
|
|
onToggleDetail={onToggleDetail}
|
2024-11-18 17:36:49 +08:00
|
|
|
/>
|
|
|
|
)}
|
2024-07-10 18:18:57 +08:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
ViewToolBar.propTypes = {
|
2024-08-12 17:15:56 +08:00
|
|
|
viewId: PropTypes.string,
|
2024-10-18 16:01:00 +08:00
|
|
|
isCustomPermission: PropTypes.bool,
|
2024-12-23 17:47:20 +08:00
|
|
|
onToggleDetail: PropTypes.func,
|
2024-12-24 17:52:18 +08:00
|
|
|
onCloseDetail: PropTypes.func,
|
2024-07-10 18:18:57 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
export default ViewToolBar;
|