mirror of
https://github.com/wassname/ray.git
synced 2026-08-08 11:25:28 +08:00
[Dashboard] Add the new dashboard code and prompt users to try it (#11667)
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
import { get } from "lodash";
|
||||
import { useState } from "react";
|
||||
|
||||
export const useFilter = <KeyType extends string>() => {
|
||||
const [filters, setFilters] = useState<{ key: KeyType; val: string }[]>([]);
|
||||
const changeFilter = (key: KeyType, val: string) => {
|
||||
const f = filters.find((e) => e.key === key);
|
||||
if (f) {
|
||||
f.val = val;
|
||||
} else {
|
||||
filters.push({ key, val });
|
||||
}
|
||||
setFilters([...filters]);
|
||||
};
|
||||
const filterFunc = (instance: { [key: string]: any }) => {
|
||||
return filters.every(
|
||||
(f) => !f.val || get(instance, f.key, "").toString().includes(f.val),
|
||||
);
|
||||
};
|
||||
|
||||
return {
|
||||
changeFilter,
|
||||
filterFunc,
|
||||
};
|
||||
};
|
||||
|
||||
export const useSorter = (initialSortKey?: string) => {
|
||||
const [sorter, setSorter] = useState({
|
||||
key: initialSortKey || "",
|
||||
desc: false,
|
||||
});
|
||||
|
||||
const sorterFunc = (
|
||||
instanceA: { [key: string]: any },
|
||||
instanceB: { [key: string]: any },
|
||||
) => {
|
||||
if (!sorter.key) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
let [b, a] = [instanceA, instanceB];
|
||||
if (sorter.desc) {
|
||||
[a, b] = [instanceA, instanceB];
|
||||
}
|
||||
|
||||
if (!get(a, sorter.key)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!get(b, sorter.key)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return get(a, sorter.key) > get(b, sorter.key) ? 1 : -1;
|
||||
};
|
||||
|
||||
return {
|
||||
sorterFunc,
|
||||
setSortKey: (key: string) => setSorter({ ...sorter, key }),
|
||||
setOrderDesc: (desc: boolean) => setSorter({ ...sorter, desc }),
|
||||
sorterKey: sorter.key,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user