diff --git a/comps/filter/FilterContent.tsx b/comps/filter/FilterContent.tsx index 663e48d..a71019b 100755 --- a/comps/filter/FilterContent.tsx +++ b/comps/filter/FilterContent.tsx @@ -13,7 +13,7 @@ export const FilterContent: FC<{ child: any; _item: PrasiItem; }> = ({ mode, filter, PassProp, child, _item, onSubmit }) => { - const internal = useLocal({}); + filter.PassProp = PassProp; return (
{ - const fm = form.fm; + name={filter.name} + onSubmit={async ({ fm }) => { try { - if (typeof form.fm?.data === "object") { - form.render(); - form.fm.render(); + if (typeof fm.data === "object") { + fm.render(); + } + + if (mode === "raw" && fm) { + const submit = async (fm: FMLocal) => { + fm.render(); + if (typeof onSubmit === "function") { + const data = await onSubmit(fm); + if (typeof fm.data === "object") { + fm.data = { + __status: "submit", + ...fm.data, + _where: data, + }; + fm.render(); + filter.data = { + __status: "submit", + ...fm.data, + _where: data, + }; + filter.render(); + } + } + }; + await submit(fm); + } + const f = getFilter(filter.name); + if (f) { + for (const list of Object.values(f.list.ref)) { + list.reload(); + } } } catch (ex) {} - - if (mode === "raw" && fm) { - if (form && form.fm) { - Object.keys(form.fm.data).map((e) => { - if (!form?.fm.data?.[e]) { - delete form.fm?.data[e]; - } - }); - } - const submit = async (fm: FMLocal) => { - fm.render(); - if (typeof onSubmit === "function") { - const data = await onSubmit(fm); - if (typeof form.fm?.data === "object") { - form.fm.data = { - __status: "submit", - ...form.fm.data, - _where: data, - }; - form.fm.render(); - filter.data = { - __status: "submit", - ...form.fm.data, - _where: data, - }; - filter.render(); - } - } - }; - await submit(fm); - } - const f = getFilter(filter.name); - if (f) { - for (const list of Object.values(f.list.ref)) { - list.reload(); - } - } + return true; }} - render={internal.render} + // onSubmit={async (form) => { + // const fm = form.fm; + // try { + // if (typeof form.fm?.data === "object") { + // form.render(); + // form.fm.render(); + // } + // } catch (ex) {} + + // if (mode === "raw" && fm) { + // if (form && form.fm) { + // Object.keys(form.fm.data).map((e) => { + // if (!form?.fm.data?.[e]) { + // delete form.fm?.data[e]; + // } + // }); + // } + // const submit = async (fm: FMLocal) => { + // fm.render(); + // if (typeof onSubmit === "function") { + // const data = await onSubmit(fm); + // if (typeof form.fm?.data === "object") { + // form.fm.data = { + // __status: "submit", + // ...form.fm.data, + // _where: data, + // }; + // form.fm.render(); + // filter.data = { + // __status: "submit", + // ...form.fm.data, + // _where: data, + // }; + // filter.render(); + // } + // } + // }; + // await submit(fm); + // } + // const f = getFilter(filter.name); + // if (f) { + // for (const list of Object.values(f.list.ref)) { + // list.reload(); + // } + // } + // }} > - {(form) => { - filter.form = form; + {({ fm }) => { + filter.fm = fm; return ( <> {!!(PassProp && child) && ( - + {child} )} diff --git a/comps/filter/FilterField.tsx b/comps/filter/FilterField.tsx index 8cc623b..9202255 100755 --- a/comps/filter/FilterField.tsx +++ b/comps/filter/FilterField.tsx @@ -20,8 +20,9 @@ export const FilterField: FC<{ search_timeout: null as any, }); if (!name) return <>No Name; - if (!filter.form) return
Loading...
; + if (!filter.fm) return
Loading...
; + const fm = filter.fm; filter.types[name] = type; const singleOptions = ["equal", "not_equal"]; @@ -32,167 +33,183 @@ export const FilterField: FC<{ internal.render_timeout = setTimeout(() => { filter_window.prasiContext.render(); }, 500); - }, [filter.form]); + }, [fm]); let show_modifier = filter.mode !== "inline"; - return null; - // 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) => { - // field.fm.data[name] = e.currentTarget.value; - // field.fm.render(); - // clearTimeout(internal.search_timeout); - // internal.search_timeout = setTimeout(() => { - // filter.form?.submit(); - // }, 1500); - // }} - // /> - //
- // ); - // } + const arg = { + name: name || "", + fm, + label: label || name || "", + render: internal.render, + prefix: show_modifier + ? () => ( + { + 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", + }; - // 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]) && ( - // - // )} - // - // )} - // - // ); - // }} - //
- // ); + return ( + + {(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) => { + field.fm.data[name] = e.currentTarget.value; + field.fm.render(); + clearTimeout(internal.search_timeout); + if (!field.fm.data[name]) { + fm.submit(); + } else { + internal.search_timeout = setTimeout(() => { + fm?.submit(); + }, 1500); + } + }} + onKeyDown={(e) => { + if (e.key === "Enter") { + clearTimeout(internal.search_timeout); + fm?.submit(); + } + }} + /> +
+ ); + } + + 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]) && ( + + )} + + )} + + ); + }} +
+ ); }; diff --git a/comps/filter/MasterFilter.tsx b/comps/filter/MasterFilter.tsx index 085ef94..0f96678 100755 --- a/comps/filter/MasterFilter.tsx +++ b/comps/filter/MasterFilter.tsx @@ -73,7 +73,6 @@ export const MasterFilter: FC = ({ } filter.raw_status = "ready"; filter.render(); - }); } else { filter.raw_status = "ready"; @@ -95,6 +94,7 @@ export const MasterFilter: FC = ({ if (mode === "raw" && filter.raw_status !== "ready") { return ; } + return ( <> , + fm: null as null | FMLocal, + PassProp: null as null | any, modifiers: {} as Record, types: {} as Record, name: "",