2024-07-10 10:18:57 +00:00
|
|
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
import { FilterSetter, GroupbySetter, SortSetter, HideColumnSetter } from '../data-process-setter';
|
|
|
|
import { EVENT_BUS_TYPE } from '../../constants';
|
|
|
|
|
|
|
|
import './index.css';
|
|
|
|
|
2024-07-22 01:45:08 +00:00
|
|
|
const ViewToolBar = ({ metadataViewId }) => {
|
2024-07-10 10:18:57 +00:00
|
|
|
const [view, setView] = useState(null);
|
|
|
|
const [collaborators, setCollaborators] = useState([]);
|
|
|
|
|
|
|
|
const columns = useMemo(() => {
|
|
|
|
if (!view) return [];
|
|
|
|
return view.available_columns;
|
|
|
|
}, [view]);
|
|
|
|
|
|
|
|
const onHeaderClick = useCallback(() => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.SELECT_NONE);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const modifyFilters = useCallback((filters, filterConjunction) => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_FILTERS, filters, filterConjunction);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const modifySorts = useCallback((sorts) => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_SORTS, sorts);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const modifyGroupbys = useCallback(() => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_GROUPBYS);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const modifyHiddenColumns = useCallback(() => {
|
|
|
|
window.sfMetadataContext.eventBus.dispatch(EVENT_BUS_TYPE.MODIFY_GROUPBYS);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const viewChange = useCallback((view) => {
|
|
|
|
setView(view);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
useEffect(() => {
|
2024-07-22 01:45:08 +00:00
|
|
|
let unsubscribeViewChange;
|
2024-07-10 10:18:57 +00:00
|
|
|
let timer = setInterval(() => {
|
2024-07-18 09:40:53 +00:00
|
|
|
if (window.sfMetadataContext && window.sfMetadataStore.data) {
|
2024-07-10 10:18:57 +00:00
|
|
|
timer && clearInterval(timer);
|
|
|
|
timer = null;
|
|
|
|
setView(window.sfMetadataStore.data.view);
|
|
|
|
setCollaborators(window.sfMetadataStore?.collaborators || []);
|
2024-07-22 01:45:08 +00:00
|
|
|
unsubscribeViewChange = window.sfMetadataContext.eventBus.subscribe(EVENT_BUS_TYPE.VIEW_CHANGED, viewChange);
|
2024-07-10 10:18:57 +00:00
|
|
|
}
|
|
|
|
}, 300);
|
|
|
|
return () => {
|
|
|
|
timer && clearInterval(timer);
|
2024-07-22 01:45:08 +00:00
|
|
|
unsubscribeViewChange && unsubscribeViewChange();
|
2024-07-10 10:18:57 +00:00
|
|
|
};
|
2024-07-22 01:45:08 +00:00
|
|
|
}, [metadataViewId]);
|
2024-07-10 10:18:57 +00:00
|
|
|
|
|
|
|
if (!view) return null;
|
|
|
|
|
|
|
|
return (
|
|
|
|
<div
|
2024-07-23 02:49:42 +00:00
|
|
|
className='sf-metadata-tool'
|
2024-07-10 10:18:57 +00:00
|
|
|
// style={{ zIndex: Z_INDEX.TABLE_HEADER, transform: 'translateZ(1000px)' }}
|
|
|
|
onClick={onHeaderClick}
|
|
|
|
>
|
|
|
|
<div className="sf-metadata-tool-left-operations">
|
|
|
|
<FilterSetter
|
2024-07-11 09:46:15 +00:00
|
|
|
wrapperClass="sf-metadata-view-tool-operation-btn sf-metadata-view-tool-filter"
|
2024-07-10 10:18:57 +00:00
|
|
|
filtersClassName="sf-metadata-filters"
|
|
|
|
target="sf-metadata-filter-popover"
|
|
|
|
filterConjunction={view.filter_conjunction}
|
|
|
|
filters={view.filters}
|
|
|
|
columns={columns}
|
|
|
|
modifyFilters={modifyFilters}
|
|
|
|
collaborators={collaborators}
|
|
|
|
/>
|
|
|
|
<SortSetter
|
2024-07-11 09:46:15 +00:00
|
|
|
wrapperClass="sf-metadata-view-tool-operation-btn sf-metadata-view-tool-sort"
|
2024-07-10 10:18:57 +00:00
|
|
|
target="sf-metadata-sort-popover"
|
|
|
|
sorts={view.sorts}
|
|
|
|
columns={columns}
|
|
|
|
modifySorts={modifySorts}
|
|
|
|
/>
|
|
|
|
<GroupbySetter
|
2024-07-11 09:46:15 +00:00
|
|
|
wrapperClass="sf-metadata-view-tool-operation-btn sf-metadata-view-tool-groupby"
|
2024-07-10 10:18:57 +00:00
|
|
|
target={'sf-metadata-groupby-popover'}
|
|
|
|
columns={[]}
|
|
|
|
groupbys={[]}
|
|
|
|
modifyGroupbys={modifyGroupbys}
|
|
|
|
/>
|
|
|
|
<HideColumnSetter
|
2024-07-11 09:46:15 +00:00
|
|
|
wrapperClass="sf-metadata-view-tool-operation-btn sf-metadata-view-tool-hide-column"
|
2024-07-10 10:18:57 +00:00
|
|
|
target={'sf-metadata-hide-column-popover'}
|
|
|
|
columns={[]}
|
|
|
|
modifyHiddenColumns={modifyHiddenColumns}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
<div className="sf-metadata-tool-right-operations"></div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
ViewToolBar.propTypes = {
|
2024-07-22 01:45:08 +00:00
|
|
|
metadataViewId: PropTypes.string,
|
2024-07-10 10:18:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export default ViewToolBar;
|