``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import * as React from "react";
|
|
|
|
import { CharacterTheme } from "@dndbeyond/character-rules-engine/es";
|
|
|
|
import Checkbox from "../Checkbox";
|
|
|
|
interface Props {
|
|
choices: Array<string>;
|
|
onSelection?: (slotIdx: number) => void;
|
|
activeChoice: number | null;
|
|
theme?: CharacterTheme;
|
|
}
|
|
|
|
export default class ExclusiveCheckbox extends React.PureComponent<Props, {}> {
|
|
handleSelection = (slotIdx: number): void => {
|
|
const { onSelection } = this.props;
|
|
|
|
if (onSelection) {
|
|
onSelection(slotIdx);
|
|
}
|
|
};
|
|
|
|
render() {
|
|
const { activeChoice, choices, theme } = this.props;
|
|
|
|
const parentClassNames: Array<string> = ["ddbc-exclusive-checkbox"];
|
|
if (theme?.isDarkMode) {
|
|
parentClassNames.push("ddbc-exclusive-checkbox--dark-mode");
|
|
}
|
|
|
|
return (
|
|
<div className={parentClassNames.join(" ")}>
|
|
{choices.map((choice, slotIdx) => {
|
|
const classNames: Array<string> = ["ddbc-exclusive-checkbox__slot"];
|
|
|
|
if (activeChoice === null) {
|
|
classNames.push("ddbc-exclusive-checkbox__slot--active");
|
|
} else {
|
|
if (activeChoice === slotIdx) {
|
|
classNames.push("ddbc-exclusive-checkbox__slot--selected");
|
|
} else {
|
|
classNames.push("ddbc-exclusive-checkbox__slot--inactive");
|
|
}
|
|
}
|
|
|
|
return (
|
|
<div key={slotIdx} className={classNames.join(" ")}>
|
|
<Checkbox
|
|
label={choice}
|
|
enabled={activeChoice === slotIdx}
|
|
onChange={this.handleSelection.bind(this, slotIdx)}
|
|
/>
|
|
</div>
|
|
);
|
|
})}
|
|
</div>
|
|
);
|
|
}
|
|
}
|