diff --git a/frontend/src/metabase/query_builder/components/view/QueryHistoryButton/QueryHistoryButton.tsx b/frontend/src/metabase/query_builder/components/view/QueryHistoryButton/QueryHistoryButton.tsx index 720549f68e704..74abd8ed46769 100644 --- a/frontend/src/metabase/query_builder/components/view/QueryHistoryButton/QueryHistoryButton.tsx +++ b/frontend/src/metabase/query_builder/components/view/QueryHistoryButton/QueryHistoryButton.tsx @@ -14,6 +14,8 @@ import { } from "metabase/query_builder/components/view/QueryHistoryButton/hooks/useQueryHistory"; import { QueryHistoryMenuItem } from "metabase/query_builder/components/view/QueryHistoryButton/components/QueryHistoryMenuItem"; +const MAX_SHOWN_QUERIES = 10; + interface QueryHistoryButtonProps { onSelectQuery: (query: ParsedQueryHistory) => void; } @@ -47,17 +49,34 @@ export const QueryHistoryButton = ({ ); const records = useMemo(() => { - const queries = queryHistory.slice(0, 10).map(record => { + const queries: { + key: string; + label: React.ReactNode; + onClick: () => void; + }[] = []; + + for (const record of queryHistory) { + const key = + (record?.query?.native?.query?.trim() ?? "") + record.database_id; + + if (queries.length >= MAX_SHOWN_QUERIES) { + break; + } + if (!record.query.native?.query) { - return; + continue; + } + + if (queries.find(query => query.key === key)) { + continue; } - return { - key: record.hash + record.started_at, + queries.push({ + key: key, label: , onClick: () => onClickQuery(record), - }; - }); + }); + } return compact([ ...queries,