c291edfc44
Co-authored-by: dwelle <luzar.david@gmail.com> Co-authored-by: Lipis <lipiridis@gmail.com>
30 lines
689 B
TypeScript
30 lines
689 B
TypeScript
import React from "react";
|
|
import clsx from "clsx";
|
|
|
|
export const ButtonIconCycle = <T extends any>({
|
|
options,
|
|
value,
|
|
onChange,
|
|
group,
|
|
}: {
|
|
options: { value: T; text: string; icon: JSX.Element }[];
|
|
value: T | null;
|
|
onChange: (value: T) => void;
|
|
group: string;
|
|
}) => {
|
|
const current = options.find((op) => op.value === value);
|
|
|
|
function cycle() {
|
|
const index = options.indexOf(current!);
|
|
const next = (index + 1) % options.length;
|
|
onChange(options[next].value);
|
|
}
|
|
|
|
return (
|
|
<label key={group} className={clsx({ active: current!.value !== null })}>
|
|
<input type="button" name={group} onClick={cycle} />
|
|
{current!.icon}
|
|
</label>
|
|
);
|
|
};
|