diff --git a/src/qqq/components/horseshoe/NavBar.tsx b/src/qqq/components/horseshoe/NavBar.tsx index f2aefb4..fd7cfac 100644 --- a/src/qqq/components/horseshoe/NavBar.tsx +++ b/src/qqq/components/horseshoe/NavBar.tsx @@ -251,7 +251,7 @@ function NavBar({absolute, light, isMini}: Props): JSX.Element { pageHeader && - + {pageHeader} diff --git a/src/qqq/components/misc/SavedViews.tsx b/src/qqq/components/misc/SavedViews.tsx index 81237ea..59dcc07 100644 --- a/src/qqq/components/misc/SavedViews.tsx +++ b/src/qqq/components/misc/SavedViews.tsx @@ -405,7 +405,7 @@ function SavedViews({qController, metaData, tableMetaData, currentSavedView, tab } { - hasStorePermission && + hasStorePermission && currentSavedView != null && handleDropdownOptionClick(RENAME_OPTION)}> edit @@ -414,16 +414,16 @@ function SavedViews({qController, metaData, tableMetaData, currentSavedView, tab } { - hasStorePermission && - + hasStorePermission && currentSavedView != null && + handleDropdownOptionClick(DUPLICATE_OPTION)}> content_copy - Duplicate... + Save As... } { - hasDeletePermission && + hasStorePermission && currentSavedView != null && handleDropdownOptionClick(DELETE_OPTION)}> delete @@ -462,15 +462,6 @@ function SavedViews({qController, metaData, tableMetaData, currentSavedView, tab let buttonBorder = colors.grayLines.main; let buttonColor = colors.gray.main; - if(loadingSavedView) - { - buttonText = "Loading..."; - } - else if(currentSavedView) - { - buttonText = currentSavedView.values.get("label") - } - if(currentSavedView) { if (viewIsModified) diff --git a/src/qqq/components/query/BasicAndAdvancedQueryControls.tsx b/src/qqq/components/query/BasicAndAdvancedQueryControls.tsx index 907476a..e947bbf 100644 --- a/src/qqq/components/query/BasicAndAdvancedQueryControls.tsx +++ b/src/qqq/components/query/BasicAndAdvancedQueryControls.tsx @@ -99,6 +99,7 @@ const BasicAndAdvancedQueryControls = forwardRef((props: BasicAndAdvancedQueryCo const [addQuickFilterMenu, setAddQuickFilterMenu] = useState(null) const [addQuickFilterOpenCounter, setAddQuickFilterOpenCounter] = useState(0); const [showClearFiltersWarning, setShowClearFiltersWarning] = useState(false); + const [mouseOverElement, setMouseOverElement] = useState(null as string); const [, forceUpdate] = useReducer((x) => x + 1, 0); const {accentColor} = useContext(QContext); @@ -125,6 +126,24 @@ const BasicAndAdvancedQueryControls = forwardRef((props: BasicAndAdvancedQueryCo }); + /******************************************************************************* + ** + *******************************************************************************/ + function handleMouseOverElement(name: string) + { + setMouseOverElement(name); + } + + + /******************************************************************************* + ** + *******************************************************************************/ + function handleMouseOutElement() + { + setMouseOverElement(null); + } + + /******************************************************************************* ** for a given field, set its default operator for quick-filter dropdowns. *******************************************************************************/ @@ -391,11 +410,11 @@ const BasicAndAdvancedQueryControls = forwardRef((props: BasicAndAdvancedQueryCo counter++; return ( - + handleMouseOverElement(`queryPreview-${i}`)} onMouseOut={() => handleMouseOutElement()}> {counter > 1 ? {queryFilter.booleanOperator}  : } {FilterUtils.criteriaToHumanString(tableMetaData, criteria, true)} - removeCriteriaByIndex(i)} /> - + {mouseOverElement == `queryPreview-${i}` && removeCriteriaByIndex(i)} />} + ); } else @@ -433,7 +452,7 @@ const BasicAndAdvancedQueryControls = forwardRef((props: BasicAndAdvancedQueryCo //////////////////////////////////////////////////////////////////////////////////////////////// if (queryFilter && queryFilter.criteria) { - ensureAllFilterCriteriaAreActiveQuickFilters(tableMetaData, queryFilter, "modeToggleClicked"); + ensureAllFilterCriteriaAreActiveQuickFilters(tableMetaData, queryFilter, "modeToggleClicked", "basic"); } } @@ -449,7 +468,7 @@ const BasicAndAdvancedQueryControls = forwardRef((props: BasicAndAdvancedQueryCo ** make sure that all fields in the current query are on-screen as quick-filters ** (that is, if the query can be basic) *******************************************************************************/ - const ensureAllFilterCriteriaAreActiveQuickFilters = (tableMetaData: QTableMetaData, queryFilter: QQueryFilter, reason: "modeToggleClicked" | "defaultFilterLoaded" | "savedFilterSelected" | string) => + const ensureAllFilterCriteriaAreActiveQuickFilters = (tableMetaData: QTableMetaData, queryFilter: QQueryFilter, reason: "modeToggleClicked" | "defaultFilterLoaded" | "savedFilterSelected" | string, newMode?: string) => { if(!tableMetaData || !queryFilter) { @@ -465,7 +484,8 @@ const BasicAndAdvancedQueryControls = forwardRef((props: BasicAndAdvancedQueryCo return; } - if(mode == "basic") + const modeToUse = newMode ?? mode; + if(modeToUse == "basic") { for (let i = 0; i < queryFilter?.criteria?.length; i++) { @@ -601,6 +621,12 @@ const BasicAndAdvancedQueryControls = forwardRef((props: BasicAndAdvancedQueryCo handleAdornmentClick={handleSetSortArrowClick} />); + const filterBuilderMouseEvents = + { + onMouseOver: () => handleMouseOverElement("filterBuilderButton"), + onMouseOut: () => handleMouseOutElement() + }; + return ( @@ -703,20 +729,22 @@ const BasicAndAdvancedQueryControls = forwardRef((props: BasicAndAdvancedQueryCo <> { - hasValidFilters && setShowClearFiltersWarning(true)} /> + hasValidFilters && mouseOverElement == "filterBuilderButton" && setShowClearFiltersWarning(true)} /> } @@ -738,14 +766,15 @@ const BasicAndAdvancedQueryControls = forwardRef((props: BasicAndAdvancedQueryCo { {queryToAdvancedString()} diff --git a/src/qqq/components/query/FieldListMenu.tsx b/src/qqq/components/query/FieldListMenu.tsx index b277aa2..2436d57 100644 --- a/src/qqq/components/query/FieldListMenu.tsx +++ b/src/qqq/components/query/FieldListMenu.tsx @@ -561,6 +561,14 @@ export default function FieldListMenu({idPrefix, heading, placeholder, tableMeta const textFieldId = `field-list-dropdown-${idPrefix}-textField`; let listItemPadding = isModeToggle ? "0.125rem": "0.5rem"; + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // for z-indexes, we set each table header to i+1, then the fields in that table to i (so they go behind it) // + // then we increment i by 2 for the next table (so the next header goes above the previous header) // + // this fixes a thing where, if one table's name wrapped to 2 lines, then when the next table below it would // + // come up, if it was only 1 line, then the second line from the previous one would bleed through. // + /////////////////////////////////////////////////////////////////////////////////////////////////////////////// + let zIndex = 1; + return ( <>