import { FC, useEffect } from "react"; import { BaseField } from "../form/base/BaseField"; import { FilterFieldType, FilterLocal, filter_window } from "./utils/types"; import { FieldTypeInput } from "../form/field/type/TypeInput"; import { FieldModifier } from "./FieldModifier"; import { useLocal } from "lib/utils/use-local"; import { FieldCheckbox } from "../form/field/type/TypeCheckbox"; import { SingleOption } from "../form/field/type/TypeSingleOption"; import { MultiOption } from "../form/field/type/TypeMultiOption"; export const FilterField: FC<{ filter: FilterLocal; name?: string; label?: string; type: FilterFieldType; modifiers?: any[]; }> = ({ filter, name, label, type, modifiers }) => { const internal = useLocal({ render_timeout: null as any, search_timeout: null as any, }); if (!name) return <>No Name; if (!filter.form) return
Loading...
; filter.types[name] = type; const singleOptions = ["equal", "not_equal"]; const multiOptions = ["includes", "excludes"]; useEffect(() => { clearTimeout(internal.render_timeout); internal.render_timeout = setTimeout(() => { filter_window.prasiContext.render(); }, 500); }, [filter.form]); let show_modifier = filter.mode !== "inline"; return ( ( { filter.modifiers[name] = modifier; filter.render(); filter_window.prasiContext.render(); }} modifier={filter.modifiers[name]} type={type} /> ) : undefined, onLoad() { return [{ label: "halo", value: "asda" }]; }, subType: singleOptions.includes(filter.modifiers[name]) ? "dropdown" : "typeahead", })} > {(field) => { if (type === "search-all") { return (
{ // clearTimeout(internal.search_timeout); // filter.form?.submit(); }} spellCheck={false} className="c-flex-1 c-transition-all c-bg-transparent c-outline-none c-px-2 c-text-sm c-w-full" onChange={(e) => { console.log("HALO") field.fm.data[name] = e.currentTarget.value; clearTimeout(internal.search_timeout); internal.search_timeout = setTimeout(() => { filter.form?.submit(); }, 1500); }} />
); } return ( <> {type === "text" && ( )} {type === "number" && ( <> {filter.modifiers[name] === "between" && ( )} )} {type === "date" && ( <> {filter.modifiers[name] === "between" && ( )} )} {type === "boolean" && ( )} {type === "options" && ( <> {singleOptions.includes(filter.modifiers[name]) && ( )} {multiOptions.includes(filter.modifiers[name]) && ( )} )} ); }}
); };