fix: improve TypeAsyncDropdown component by optimizing state management and removing unnecessary console logs

This commit is contained in:
faisolavolut 2025-02-28 21:58:56 +07:00
parent ea4af5e09c
commit d26c3ca97c
2 changed files with 15 additions and 9 deletions

View File

@ -25,8 +25,7 @@ export const TypeAsyncDropdown: React.FC<any> = ({
required = false, required = false,
autoRefresh = false, autoRefresh = false,
}) => { }) => {
const [additionalData, setAdditionalData] = useState({ page: 1, cache: 0 }); const [cacheUniq, setCacheUniq] = useState(0);
const [open, setOpen] = useState(false as boolean); const [open, setOpen] = useState(false as boolean);
const [refreshKey, setRefreshKey] = useState(Date.now()); const [refreshKey, setRefreshKey] = useState(Date.now());
const selectRef = useRef<HTMLDivElement>(null); const selectRef = useRef<HTMLDivElement>(null);
@ -287,6 +286,13 @@ export const TypeAsyncDropdown: React.FC<any> = ({
setWidth(selectRef.current.offsetWidth); setWidth(selectRef.current.offsetWidth);
} }
}, [selectRef]); }, [selectRef]);
const customFilterOption = (option: any, rawInput: any) => {
// option.data berisi data opsi, misalnya label dan value
// rawInput adalah string yang diketik pengguna
console.log(option, rawInput);
return true;
};
const increaseUniq = (uniq: number) => uniq + 1;
return ( return (
<div ref={selectRef} className="w-full"> <div ref={selectRef} className="w-full">
<AsyncPaginate <AsyncPaginate
@ -339,10 +345,7 @@ export const TypeAsyncDropdown: React.FC<any> = ({
)} )}
isClearable={clearable} isClearable={clearable}
onMenuOpen={() => { onMenuOpen={() => {
if (autoRefresh) { if (autoRefresh) setCacheUniq(increaseUniq);
} else {
}
console.log(additionalData);
setOpen(true); setOpen(true);
}} }}
onMenuClose={() => { onMenuClose={() => {
@ -350,12 +353,14 @@ export const TypeAsyncDropdown: React.FC<any> = ({
}} }}
closeMenuOnSelect={mode === "dropdown" ? true : false} closeMenuOnSelect={mode === "dropdown" ? true : false}
// closeMenuOnSelect={false} // closeMenuOnSelect={false}
cacheUniqs={[cacheUniq]}
getOptionValue={(item) => item.value} getOptionValue={(item) => item.value}
getOptionLabel={(item) => item.label} getOptionLabel={(item) => item.label}
value={value} value={value}
components={{ MultiValue, Option, Menu: CustomMenu }} components={{ MultiValue, Option, Menu: CustomMenu }}
loadOptions={loadOptions} loadOptions={loadOptions}
isSearchable={true} isSearchable={true}
// filterOption={customFilterOption}
isMulti={mode === "multi"} isMulti={mode === "multi"}
onChange={(e) => { onChange={(e) => {
setOpen(mode === "dropdown" ? false : true); setOpen(mode === "dropdown" ? false : true);
@ -372,7 +377,9 @@ export const TypeAsyncDropdown: React.FC<any> = ({
onChange({ ...e, data: e }); onChange({ ...e, data: e });
} }
}} }}
additional={additionalData} additional={{
page: 1,
}}
/> />
</div> </div>
); );

View File

@ -153,7 +153,6 @@ export const TableEditBetter: React.FC<any> = ({
setColumns(col); setColumns(col);
local.data = fm?.data[name] || []; local.data = fm?.data[name] || [];
local.render(); local.render();
console.log(columns);
fm.fields[name] = { fm.fields[name] = {
name: name, name: name,
type: "table", type: "table",
@ -173,7 +172,7 @@ export const TableEditBetter: React.FC<any> = ({
<> <>
<div className="tbl-wrapper flex flex-grow flex-col"> <div className="tbl-wrapper flex flex-grow flex-col">
{!disabledHeader ? ( {!disabledHeader ? (
<div className="head-tbl-list block items-start justify-between bg-white px-0 py-4 sm:flex"> <div className="px-2 head-tbl-list block items-start justify-between bg-white px-0 py-4 sm:flex">
<div className="flex flex-row h-full"> <div className="flex flex-row h-full">
<div className="sm:flex flex flex-col space-y-2 flex-grow"> <div className="sm:flex flex flex-col space-y-2 flex-grow">
<div className="flex flex-grow flex-row"> <div className="flex flex-grow flex-row">