import './QueryAddOns.styles.scss'; import { Button, Radio, RadioChangeEvent } from 'antd'; import InputWithLabel from 'components/InputWithLabel/InputWithLabel'; import { GroupByFilter } from 'container/QueryBuilder/filters/GroupByFilter/GroupByFilter'; import { OrderByFilter } from 'container/QueryBuilder/filters/OrderByFilter/OrderByFilter'; import { useQueryOperations } from 'hooks/queryBuilder/useQueryBuilderOperations'; import { BarChart2, ScrollText, X } from 'lucide-react'; import { useCallback, useState } from 'react'; import { IBuilderQuery } from 'types/api/queryBuilder/queryBuilderData'; import { DataSource } from 'types/common/queryBuilder'; import HavingFilter from './HavingFilter/HavingFilter'; interface AddOn { icon: React.ReactNode; label: string; key: string; } const ADD_ONS: Record = { GROUP_BY: { icon: , label: 'Group By', key: 'group_by', }, HAVING: { icon: , label: 'Having', key: 'having', }, ORDER_BY: { icon: , label: 'Order By', key: 'order_by', }, LIMIT: { icon: , label: 'Limit', key: 'limit', }, LEGEND_FORMAT: { icon: , label: 'Legend format', key: 'legend_format', }, }; function QueryAddOns({ query, version, isListViewPanel, }: { query: IBuilderQuery; version: string; isListViewPanel: boolean; }): JSX.Element { const [selectedViews, setSelectedViews] = useState([]); const { handleChangeQueryData } = useQueryOperations({ index: 0, query, entityVersion: '', }); const handleOptionClick = (e: RadioChangeEvent): void => { if (selectedViews.find((view) => view.key === e.target.value.key)) { setSelectedViews( selectedViews.filter((view) => view.key !== e.target.value.key), ); } else { setSelectedViews([...selectedViews, e.target.value]); } }; const handleChangeGroupByKeys = useCallback( (value: IBuilderQuery['groupBy']) => { handleChangeQueryData('groupBy', value); }, [handleChangeQueryData], ); const handleChangeOrderByKeys = useCallback( (value: IBuilderQuery['orderBy']) => { handleChangeQueryData('orderBy', value); }, [handleChangeQueryData], ); const handleRemoveView = useCallback( (key: string): void => { setSelectedViews(selectedViews.filter((view) => view.key !== key)); }, [selectedViews], ); return (
{selectedViews.length > 0 && (
{selectedViews.find((view) => view.key === 'group_by') && (
Group By
)} {selectedViews.find((view) => view.key === 'having') && (
Having
{ setSelectedViews( selectedViews.filter((view) => view.key !== 'having'), ); }} />
)} {selectedViews.find((view) => view.key === 'limit') && (
{ setSelectedViews(selectedViews.filter((view) => view.key !== 'limit')); }} />
)} {selectedViews.find((view) => view.key === 'order_by') && (
Order By
)} {selectedViews.find((view) => view.key === 'legend_format') && (
{ setSelectedViews( selectedViews.filter((view) => view.key !== 'legend_format'), ); }} />
)}
)}
{Object.values(ADD_ONS).map((addOn) => ( view.key === addOn.key) ? 'selected-view tab' : 'tab' } value={addOn} >
{addOn.icon} {addOn.label}
))}
); } export default QueryAddOns; /*
{selectedView.label}
{selectedView.label}
{selectedView.label}
{selectedView.label}
{selectedView.label}
*/