import { DeleteOutlined, MoreOutlined, SaveOutlined, ShareAltOutlined, } from '@ant-design/icons'; import { Button, Col, Dropdown, MenuProps, Popover, Row, Select, Space, Typography, } from 'antd'; import axios from 'axios'; import TextToolTip from 'components/TextToolTip'; import { SOMETHING_WENT_WRONG } from 'constants/api'; import { QueryParams } from 'constants/query'; import { useGetSearchQueryParam } from 'hooks/queryBuilder/useGetSearchQueryParam'; import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder'; import { useDeleteView } from 'hooks/saveViews/useDeleteView'; import { useGetAllViews } from 'hooks/saveViews/useGetAllViews'; import { useUpdateView } from 'hooks/saveViews/useUpdateView'; import useErrorNotification from 'hooks/useErrorNotification'; import { useNotifications } from 'hooks/useNotifications'; import { mapCompositeQueryFromQuery } from 'lib/newQueryBuilder/queryBuilderMappers/mapCompositeQueryFromQuery'; import { useState } from 'react'; import { useCopyToClipboard } from 'react-use'; import { popupContainer } from 'utils/selectPopupContainer'; import { ExploreHeaderToolTip, SaveButtonText } from './constants'; import MenuItemGenerator from './MenuItemGenerator'; import SaveViewWithName from './SaveViewWithName'; import { DropDownOverlay, ExplorerCardHeadContainer, OffSetCol, } from './styles'; import { ExplorerCardProps } from './types'; import { deleteViewHandler } from './utils'; function ExplorerCard({ sourcepage, children, }: ExplorerCardProps): JSX.Element { const [isOpen, setIsOpen] = useState(false); const [, setCopyUrl] = useCopyToClipboard(); const { notifications } = useNotifications(); const onCopyUrlHandler = (): void => { setCopyUrl(window.location.href); notifications.success({ message: 'Copied to clipboard', }); }; const { currentQuery, panelType, redirectWithQueryBuilderData, updateAllQueriesOperators, isStagedQueryUpdated, } = useQueryBuilder(); const { data: viewsData, isLoading, error, isRefetching, refetch: refetchAllView, } = useGetAllViews(sourcepage); useErrorNotification(error); const handleOpenChange = (newOpen = false): void => { setIsOpen(newOpen); }; const viewName = useGetSearchQueryParam(QueryParams.viewName) || ''; const viewKey = useGetSearchQueryParam(QueryParams.viewKey) || ''; const isQueryUpdated = isStagedQueryUpdated(viewsData?.data?.data, viewKey); const { mutateAsync: updateViewAsync } = useUpdateView({ compositeQuery: mapCompositeQueryFromQuery(currentQuery, panelType), viewKey, extraData: '', sourcePage: sourcepage, viewName, }); const { mutateAsync: deleteViewAsync } = useDeleteView(viewKey); const showErrorNotification = (err: Error): void => { notifications.error({ message: axios.isAxiosError(err) ? err.message : SOMETHING_WENT_WRONG, }); }; const onDeleteHandler = (): void => deleteViewHandler({ deleteViewAsync, notifications, panelType, redirectWithQueryBuilderData, refetchAllView, viewId: viewKey, viewKey, updateAllQueriesOperators, sourcePage: sourcepage, }); const onUpdateQueryHandler = (): void => { updateViewAsync( { compositeQuery: mapCompositeQueryFromQuery(currentQuery, panelType), viewKey, extraData: '', sourcePage: sourcepage, viewName, }, { onSuccess: () => { notifications.success({ message: 'View Updated Successfully', }); refetchAllView(); }, onError: (err) => { showErrorNotification(err); }, }, ); }; const moreOptionMenu: MenuProps = { items: [ { key: 'delete', label: Delete, onClick: onDeleteHandler, icon: , }, ], }; const saveButtonType = isQueryUpdated ? 'default' : 'primary'; const saveButtonIcon = isQueryUpdated ? null : ; const showSaveView = false; return ( <> {showSaveView && ( Query Builder {viewsData?.data.data && viewsData?.data.data.length && ( )} {isQueryUpdated && ( )} } showArrow={false} open={isOpen} onOpenChange={handleOpenChange} > {viewKey && ( )} )}
{children}
); } export default ExplorerCard;