import React, { useState } from "react"; import { bitwiseDecode, bitwiseEncode, enumLike } from "@app/core/utils/bitwise.js"; import { Listbox } from "@headlessui/react"; import { Protobuf } from "@meshtastic/meshtasticjs"; import { InfoWrapper } from "./InfoWrapper.js"; export interface BitwiseSelectProps { label?: string; description?: string; error?: string; selected: number; decodeEnun: enumLike; onChange: (value: number) => void; } export const BitwiseSelect = ({ label, description, error, selected, decodeEnun, onChange }: BitwiseSelectProps): JSX.Element => { const [decodedSelected, setDecodedSelected] = useState([]); const options = Object.entries(decodeEnun) .filter((value) => typeof value[1] !== "number") .map((value) => { return { value: parseInt(value[0]), label: value[1] .toString() .replace("POS_", "") .toLowerCase() .toLocaleUpperCase() //TODO: Investigate }; }); React.useEffect(() => { setDecodedSelected( bitwiseDecode(selected, Protobuf.Config_PositionConfig_PositionFlags).map( (flag) => Protobuf.Config_PositionConfig_PositionFlags[flag] .replace("POS_", "") .toLowerCase() ) ); }, [selected]); return ( { onChange(bitwiseEncode(value)); }} multiple > {decodedSelected.map((option) => ( {option} ))} {options.map((option) => ( {option.label} ))} ); };