diff --git a/apps/web/public/static/locales/en/common.json b/apps/web/public/static/locales/en/common.json index e2b3a9f147..89d95cee3c 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/apps/web/public/static/locales/en/common.json @@ -3583,5 +3583,7 @@ "you_have_one_team": "You have one team", "consider_consolidating_one_team_org": "Consider setting up an organization to unify billing, admin tools, and analytics across your team.", "consider_consolidating_multi_team_org": "Consider setting up an organization to unify billing, admin tools, and analytics across your teams.", + "search_variables": "Search variables", + "no_variables_found": "No variables found", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" } diff --git a/packages/ui/components/editor/plugins/AddVariablesDropdown.tsx b/packages/ui/components/editor/plugins/AddVariablesDropdown.tsx index dc73ab8544..a14be9ed29 100644 --- a/packages/ui/components/editor/plugins/AddVariablesDropdown.tsx +++ b/packages/ui/components/editor/plugins/AddVariablesDropdown.tsx @@ -1,5 +1,6 @@ +import { useMemo, useState } from "react"; + import { useLocale } from "@calcom/lib/hooks/useLocale"; -import classNames from "@calcom/ui/classNames"; import { Dropdown, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "../../dropdown"; import { Icon } from "../../icon"; @@ -14,9 +15,24 @@ interface IAddVariablesDropdown { export const AddVariablesDropdown = (props: IAddVariablesDropdown) => { const { t } = useLocale(); + const [query, setQuery] = useState(""); + + const filteredVariables = useMemo(() => { + const q = query.trim().toLowerCase(); + if (!q) return props.variables; + return props.variables.filter((variable) => { + const key = variable.toLowerCase(); + const name = t(`${variable}_variable`).toLowerCase(); + const info = t(`${variable}_info`).toLowerCase(); + return key.includes(q) || name.includes(q) || info.includes(q); + }); + }, [props.variables, query, t]); return ( - + { + if (!open) setQuery(""); + }}>
{props.isTextEditor ? ( @@ -49,25 +65,42 @@ export const AddVariablesDropdown = (props: IAddVariablesDropdown) => {
{t("add_dynamic_variables")}
+
+ setQuery(e.target.value)} + placeholder={t("search_variables")} + aria-label={t("search_variables")} + className="border-subtle bg-default focus:ring-brand-800 w-full rounded-md border px-3 py-2 text-sm outline-none focus:ring-1" + /> +
- {props.variables.map((variable) => ( - -
- - - ))} + + + )) + )}