diff --git a/comps/filter/parser/single-filter.ts b/comps/filter/parser/single-filter.ts index 15855ee..b633f70 100755 --- a/comps/filter/parser/single-filter.ts +++ b/comps/filter/parser/single-filter.ts @@ -13,14 +13,40 @@ export const parseSingleFilter = (filter: FilterLocal, fields: GFCol[]) => { switch (type) { case "search-all": fields - .filter((e) => e.type === "varchar" || e.type === "text") + .filter( + (e) => + e.type === "varchar" || + e.type === "text" || + e.type === "string" || + e.type === "has-one" + ) .map((e) => { - OR.push({ - [e.name]: { - contains: "%" + value + "%", - mode: "insensitive", - }, - }); + if (e.type === "has-one") { + for (const f of e.relation?.fields || []) { + if ( + !f.is_pk && + (f.type === "varchar" || + f.type === "text" || + f.type === "string") + ) { + OR.push({ + [e.name]: { + [f.name]: { + contains: "%" + value + "%", + mode: "insensitive", + }, + }, + }); + } + } + } else { + OR.push({ + [e.name]: { + contains: "%" + value + "%", + mode: "insensitive", + }, + }); + } }); break; case "text": diff --git a/comps/form/gen/gen-rel-many.ts b/comps/form/gen/gen-rel-many.ts index d73ad5d..73af9d3 100755 --- a/comps/form/gen/gen-rel-many.ts +++ b/comps/form/gen/gen-rel-many.ts @@ -118,33 +118,49 @@ export const genRelMany = (prop: { `; const cols = getColumn(select) || []; const get_label = `\ - (row: { value: string; label: string; data?: any }) => { - const cols = ${JSON.stringify(cols)}; - - if (isEditor) { - return row.label; - } - const result = []; - if (!!row.data && !row.label && !Array.isArray(row.data)) { - if(cols.length > 0){ - cols.map((e) => { - if (row.data[e]) { - result.push(row.data[e]); - } - }); - return result.join(" - "); - } else { - const fields = parseGenField(rel__gen_fields); - return fields - .filter((e) => !e.is_pk) - .map((e) => row.data[e.name]) - .filter((e) => e) - .join(" - "); - } - } - return row.label; +(row: { value: string; label: string; data?: any }) => { + const cols = ${JSON.stringify(cols)}; + + if (isEditor) { + return row.label; + } + + const is_tree = + typeof rel__feature !== "undefined" && + Array.isArray(rel__feature) && + rel__feature.includes("tree") && + typeof rel__id_parent === "string" && + rel__id_parent; + + let prefix = ""; + if (is_tree) { + for (let i = 0; i < row.data.__depth; i++) { + prefix += "ยทยทยท"; } - `; + prefix += " "; + } + + const result = []; + if (!!row.data && !row.label && !Array.isArray(row.data)) { + if(cols.length > 0){ + cols.map((e) => { + if (row.data[e]) { + result.push(row.data[e]); + } + }); + return prefix + result.join(" - "); + } else { + const fields = parseGenField(rel__gen_fields); + return prefix + fields + .filter((e) => !e.is_pk) + .map((e) => row.data[e.name]) + .filter((e) => e) + .join(" - "); + } + } + return prefix + row.label; +} +`; result.get_label = get_label; result.get_value = get_value; diff --git a/comps/form/gen/on_load_rel.ts b/comps/form/gen/on_load_rel.ts index 97bd713..5f028d6 100755 --- a/comps/form/gen/on_load_rel.ts +++ b/comps/form/gen/on_load_rel.ts @@ -40,7 +40,16 @@ async (arg: { return new Promise(async (done) => { ${!isEmptyString(type) && ["checkbox", "typeahead", "button"].includes(type as any) ? `` : `const fields = parseGenField(rel__gen_fields); const res = generateSelect(fields);`} - + + + const is_tree = + typeof rel__feature !== "undefined" && + Array.isArray(rel__feature) && + rel__feature.includes("tree"); + + if (is_tree && typeof rel__id_parent === "string" && rel__id_parent) { + res.select[rel__id_parent] = true; + } const items = await db.${table}.findMany({ ${!isEmptyString(type) && ["checkbox", "typeahead", "button"].includes(type as any) ? `` : `select: { @@ -52,6 +61,11 @@ async (arg: { }, ...arg.paging, }); + + if (is_tree && typeof rel__id_parent === "string" && rel__id_parent) { + items = sortTree(items, rel__id_parent, "${pk}"); + } + if(items.length){ const cols = ${JSON.stringify(cols)}; const getLabel = (data: any) => { diff --git a/exports.tsx b/exports.tsx index 67d237b..e3fd03f 100755 --- a/exports.tsx +++ b/exports.tsx @@ -62,6 +62,7 @@ export { filterModifier } from "@/comps/filter/utils/filter-modifier"; export { generateField } from "@/comps/form/gen/gen-field"; export { generateForm } from "@/comps/form/gen/gen-form"; export { validate as validateField } from "./comps/form/utils/validate"; +export { sortTree } from "./comps/list/utils/sort-tree"; export { FMLocal, @@ -80,6 +81,7 @@ export { GetValue } from "@/utils/get-value"; export { password } from "@/utils/password"; export { prasi_events, call_prasi_events } from "lib/utils/prasi-events"; + /** Session */ export { Login } from "@/preset/login/Login"; export { generateLogin } from "@/preset/login/utils/generate";