/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import Component from '@glimmer/component';
import { action } from '@ember/object';
import { HTMLElementEvent } from 'forms';
interface CheckboxGridArgs {
name: string;
label: string;
subText?: string;
fields: Field[];
value: string[] | undefined;
onChange: (name: string, value: string[]) => void;
}
interface Field {
key: string;
label: string;
}
/**
* @module CheckboxGrid
* CheckboxGrid components are used to allow users to select any
* number of predetermined options, aligned in a 3-column grid.
*
* @example
* ```js
*
* ```
*/
export default class CheckboxGrid extends Component {
get checkboxes() {
const list = this.args.value || [];
return this.args.fields.map((field) => ({
...field,
value: list.includes(field.key),
}));
}
@action checkboxChange(event: HTMLElementEvent) {
const list = this.args.value || [];
const checkboxName = event.target.id;
const checkboxVal = event.target.checked;
const idx = list.indexOf(checkboxName);
if (checkboxVal === true && idx < 0) {
list.push(checkboxName);
} else if (checkboxVal === false && idx >= 0) {
list.splice(idx, 1);
}
this.args.onChange(this.args.name, list);
}
}