1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-26 23:34:45 +00:00
Files
seahub/frontend/src/metadata/components/view-toolbar/map-view-toolbar/index.js

113 lines
3.6 KiB
JavaScript
Raw Normal View History

2024-12-28 11:47:46 +08:00
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import PropTypes from 'prop-types';
2024-12-28 11:47:46 +08:00
import { EVENT_BUS_TYPE, PRIVATE_COLUMN_KEY, VIEW_TYPE } from '../../../constants';
import { FilterSetter, GalleryGroupBySetter, GallerySliderSetter, MapTypeSetter, SortSetter } from '../../data-process-setter';
import { gettext } from '../../../../utils/constants';
const MapViewToolBar = ({
2024-12-28 11:47:46 +08:00
isCustomPermission,
readOnly,
2025-01-08 14:40:28 +08:00
viewID,
collaborators,
modifyFilters,
2024-12-28 11:47:46 +08:00
onToggleDetail,
}) => {
2024-12-28 11:47:46 +08:00
const [showGalleryToolbar, setShowGalleryToolbar] = useState(false);
const [view, setView] = useState({});
2025-01-08 14:40:28 +08:00
const viewType = useMemo(() => VIEW_TYPE.MAP, []);
const viewColumns = useMemo(() => {
if (!view) return [];
return view.columns;
}, [view]);
const filterColumns = useMemo(() => {
2024-12-28 11:47:46 +08:00
return viewColumns && viewColumns.filter(c => c.key !== PRIVATE_COLUMN_KEY.FILE_TYPE);
}, [viewColumns]);
2024-12-28 11:47:46 +08:00
const onToggle = useCallback((value) => {
setShowGalleryToolbar(value);
}, []);
const modifySorts = useCallback((sorts) => {
2025-01-08 14:40:28 +08:00
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.UPDATE_SERVER_VIEW, { sorts });
2024-12-28 11:47:46 +08:00
}, []);
2025-01-08 14:40:28 +08:00
const resetView = useCallback(view => {
setView(view);
}, []);
2024-12-28 11:47:46 +08:00
useEffect(() => {
2025-01-08 14:40:28 +08:00
const unsubscribeToggle = window.sfMetadataContext.eventBus.subscribe(EVENT_BUS_TYPE.TOGGLE_VIEW_TOOLBAR, onToggle);
const unsubscribeView = window.sfMetadataContext.eventBus.subscribe(EVENT_BUS_TYPE.RESET_VIEW, resetView);
2024-12-28 11:47:46 +08:00
return () => {
2025-01-08 14:40:28 +08:00
unsubscribeToggle && unsubscribeToggle();
unsubscribeView && unsubscribeView();
2024-12-28 11:47:46 +08:00
};
2025-01-08 14:40:28 +08:00
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
2024-12-28 11:47:46 +08:00
useEffect(() => {
2025-01-08 14:40:28 +08:00
setShowGalleryToolbar(false);
}, [viewID]);
2024-12-28 11:47:46 +08:00
2025-01-08 14:40:28 +08:00
if (showGalleryToolbar) {
return (
<>
2024-12-28 11:47:46 +08:00
<div className="sf-metadata-tool-left-operations">
2025-01-08 14:40:28 +08:00
<GalleryGroupBySetter view={{ _id: viewID }} />
<GallerySliderSetter view={{ _id: viewID }} />
<SortSetter
wrapperClass="sf-metadata-view-tool-operation-btn sf-metadata-view-tool-sort"
target="sf-metadata-sort-popover"
readOnly={readOnly}
sorts={view.sorts}
type={VIEW_TYPE.MAP}
columns={viewColumns}
modifySorts={modifySorts}
/>
2024-12-28 11:47:46 +08:00
{!isCustomPermission && (
<div className="cur-view-path-btn ml-2" onClick={onToggleDetail}>
<span className="sf3-font sf3-font-info" aria-label={gettext('Properties')} title={gettext('Properties')}></span>
</div>
)}
</div>
2025-01-08 14:40:28 +08:00
<div className="sf-metadata-tool-right-operations"></div>
</>
);
}
return (
<>
<div className="sf-metadata-tool-left-operations">
<MapTypeSetter view={view} />
<FilterSetter
isNeedSubmit={true}
wrapperClass="sf-metadata-view-tool-operation-btn sf-metadata-view-tool-filter"
filtersClassName="sf-metadata-filters"
target="sf-metadata-filter-popover"
readOnly={readOnly}
filterConjunction={view.filter_conjunction}
basicFilters={view.basic_filters}
filters={view.filters}
columns={filterColumns}
modifyFilters={modifyFilters}
collaborators={collaborators}
viewType={viewType}
/>
</div>
<div className="sf-metadata-tool-right-operations"></div>
</>
);
};
MapViewToolBar.propTypes = {
2024-12-28 11:47:46 +08:00
isCustomPermission: PropTypes.bool,
readOnly: PropTypes.bool,
collaborators: PropTypes.array,
modifyFilters: PropTypes.func,
2024-12-28 11:47:46 +08:00
onToggleDetail: PropTypes.func,
};
export default MapViewToolBar;