mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-31 18:48:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 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
 | |
|  * <CheckboxGrid
 | |
|  *   @name="modelKey"
 | |
|  *   @label="Model Attribute Label"
 | |
|  *   @fields={{options}}
 | |
|  *   @value={{['Hello', 'Yes']}}
 | |
|  * />
 | |
|  * ```
 | |
|  */
 | |
| 
 | |
| export default class CheckboxGrid extends Component<CheckboxGridArgs> {
 | |
|   get checkboxes() {
 | |
|     const list = this.args.value || [];
 | |
|     return this.args.fields.map((field) => ({
 | |
|       ...field,
 | |
|       value: list.includes(field.key),
 | |
|     }));
 | |
|   }
 | |
| 
 | |
|   @action checkboxChange(event: HTMLElementEvent<HTMLInputElement>) {
 | |
|     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);
 | |
|   }
 | |
| }
 | 
