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 });
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?.data[name]]);
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 (
);
}
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]) && (
)}
>
)}
>
);
}}
);
};