feat: close #1301 support message actions
parent
1b19fdfe11
commit
222301307f
@ -0,0 +1,28 @@
|
|||||||
|
import { useSearchParams } from "react-router-dom";
|
||||||
|
|
||||||
|
type Command = (param: string) => void;
|
||||||
|
interface Commands {
|
||||||
|
fill?: Command;
|
||||||
|
submit?: Command;
|
||||||
|
mask?: Command;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function useCommand(commands: Commands = {}) {
|
||||||
|
const [searchParams, setSearchParams] = useSearchParams();
|
||||||
|
|
||||||
|
if (commands === undefined) return;
|
||||||
|
|
||||||
|
let shouldUpdate = false;
|
||||||
|
searchParams.forEach((param, name) => {
|
||||||
|
const commandName = name as keyof Commands;
|
||||||
|
if (typeof commands[commandName] === "function") {
|
||||||
|
commands[commandName]!(param);
|
||||||
|
searchParams.delete(name);
|
||||||
|
shouldUpdate = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (shouldUpdate) {
|
||||||
|
setSearchParams(searchParams);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue