Skip to content

Commit 9acc619

Browse files
authored
Merge pull request #137 from huyjs9/feat/search-nested-fields-tables
Search nested fields in tables
2 parents 0899b2c + 960d8fe commit 9acc619

File tree

2 files changed

+42
-17
lines changed

2 files changed

+42
-17
lines changed

src/components/EditorSidePanel/TablesTab/SearchBar.jsx

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,64 @@
1-
import { useMemo, useState } from "react";
1+
import { useMemo } from "react";
22
import { useSelect } from "../../../hooks";
3-
import { AutoComplete } from "@douyinfe/semi-ui";
3+
import { TreeSelect } from "@douyinfe/semi-ui";
44
import { IconSearch } from "@douyinfe/semi-icons";
55
import { ObjectType } from "../../../data/constants";
66
import { useTranslation } from "react-i18next";
77

88
export default function SearchBar({ tables }) {
99
const { setSelectedElement } = useSelect();
10-
const [searchText, setSearchText] = useState("");
1110
const { t } = useTranslation();
12-
const filteredTable = useMemo(
13-
() => tables.map((t) => t.name).filter((i) => i.includes(searchText)),
14-
[tables, searchText],
15-
);
11+
12+
const treeData = useMemo(() => {
13+
return tables.map(({ id, name: parentName, fields }, i) => {
14+
const children = fields.map(({ name }, j) => ({
15+
tableId: id,
16+
id: `${j}`,
17+
label: name,
18+
value: name,
19+
key: `${i}-${j}`,
20+
}));
21+
22+
return {
23+
tableId: id,
24+
id: `${i}`,
25+
label: parentName,
26+
value: parentName,
27+
key: `${i}`,
28+
children,
29+
};
30+
});
31+
}, [tables]);
1632

1733
return (
18-
<AutoComplete
19-
data={filteredTable}
20-
value={searchText}
21-
showClear
34+
<TreeSelect
35+
searchPosition="trigger"
36+
dropdownStyle={{ maxHeight: 400, overflow: "auto" }}
37+
treeData={treeData}
2238
prefix={<IconSearch />}
23-
placeholder={t("search")}
2439
emptyContent={<div className="p-3 popover-theme">{t("not_found")}</div>}
25-
onChange={(v) => setSearchText(v)}
26-
onSelect={(v) => {
27-
const { id } = tables.find((t) => t.name === v);
40+
filterTreeNode
41+
placeholder={t("search")}
42+
onChange={(node) => {
43+
const { tableId, id, children } = node;
44+
2845
setSelectedElement((prev) => ({
2946
...prev,
30-
id: id,
47+
id: tableId,
3148
open: true,
3249
element: ObjectType.TABLE,
3350
}));
3451
document
35-
.getElementById(`scroll_table_${id}`)
52+
.getElementById(`scroll_table_${tableId}`)
3653
.scrollIntoView({ behavior: "smooth" });
54+
55+
if (!children) {
56+
document
57+
.getElementById(`scroll_table_${tableId}_input_${id}`)
58+
.focus();
59+
}
3760
}}
61+
onChangeWithObject
3862
className="w-full"
3963
/>
4064
);

src/components/EditorSidePanel/TablesTab/TableField.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export default function TableField({ data, tid, index }) {
1919
<Row gutter={6} className="hover-1 my-2">
2020
<Col span={7}>
2121
<Input
22+
id={`scroll_table_${tid}_input_${index}`}
2223
value={data.name}
2324
validateStatus={data.name.trim() === "" ? "error" : "default"}
2425
placeholder="Name"

0 commit comments

Comments
 (0)