import {type CSSResultGroup, html, type PropertyValues, unsafeCSS} from 'lit';
import {FormControlController, validValidityState} from "../../internal/form";
import {property} from 'lit/decorators.js';
import ZincElement, {type ZincFormControl} from '../../internal/zinc-element';
import styles from './data-table-filter.scss';
/**
* @summary Short summary of the component's intended use.
* @documentation https://zinc.style/components/data-table-filter
* @status experimental
* @since 1.0
*
* @dependency zn-example
*
* @event zn-event-name - Emitted as an example.
*
* @slot - The default slot.
* @slot example - An example slot.
*
* @csspart base - The component's base wrapper.
*
* @cssproperty --example - An example CSS custom property.
*/
export default class ZnDataTableFilter extends ZincElement implements ZincFormControl {
static styles: CSSResultGroup = unsafeCSS(styles);
private _formController: FormControlController = new FormControlController(this, {});
@property() filters = "";
@property() name: string = "data-table-filter";
@property() value: string;
get validationMessage(): string {
return '';
}
get validity(): ValidityState {
return validValidityState;
}
checkValidity(): boolean {
return true;
}
getForm(): HTMLFormElement | null {
return this._formController.getForm();
}
reportValidity(): boolean {
return true;
}
setCustomValidity(): void {
this._formController.updateValidity();
}
protected firstUpdated(_changedProperties: PropertyValues) {
super.firstUpdated(_changedProperties);
this._formController.updateValidity();
}
handleQBClear = () => {
const builder = this.shadowRoot?.querySelector('zn-query-builder');
if (!builder) {
return;
}
builder.clear();
}
handleQBReset = () => {
const builder = this.shadowRoot?.querySelector('zn-query-builder');
if (!builder) {
return;
}
builder.reset();
}
handleQBUpdate = () => {
const builder = this.shadowRoot?.querySelector('zn-query-builder');
if (!builder) {
return;
}
this.value = builder.value as string;
this.closeSlideout();
this._formController.updateValidity();
this.emit('zn-filter-change');
}
closeSlideout() {
const slideout = this.shadowRoot?.querySelector('zn-slideout');
if (slideout) {
slideout.hide();
}
}
render() {
return html`
Cancel
Clear
Show Results
`;
}
}