import type { VNode } from 'vue';
import type { DropdownButtonItemArgs } from '../dropdown-button/dropdown-button-item';
import type { FormItemWrapperArgs, MarginType } from '../form/form-item-wrapper';
import { Prop, toNative } from 'vue-facing-decorator';
import DropdownList from '.';
import TsxComponent, { Component } from '../../app/vuetsx';
import { isNullOrEmpty } from '../../common/utils/is-null-or-empty';
import { LanguageUtils } from '../../common/utils/language-utils';
interface LanguageDropdownArgs extends FormItemWrapperArgs {
value?: LanguageUtils.LanguageListItem;
placeholder?: string;
customOptions?: LanguageUtils.LanguageListItem[];
changed?: (newValue: LanguageUtils.LanguageListItem) => void;
}
const getFlaggedResult = (h, item): any => {
if (item.dataRow != null) {
return (
{item.dataRow.text}
);
}
return ({item.text || ''});
};
@Component
class LanguageDropdownComponent extends TsxComponent implements LanguageDropdownArgs {
@Prop() label!: string | VNode;
@Prop() labelButtons!: DropdownButtonItemArgs[];
@Prop() value!: LanguageUtils.LanguageListItem;
@Prop() marginType?: MarginType;
@Prop() placeholder!: string;
@Prop() mandatory!: boolean;
@Prop() wrap!: boolean;
@Prop() hint: string;
@Prop() subtitle!: string;
@Prop() appendIcon: string;
@Prop() prependIcon: string;
@Prop() customOptions: LanguageUtils.LanguageListItem[];
@Prop() appendClicked: () => void;
@Prop() prependClicked: () => void;
@Prop() changed: (newValue: LanguageUtils.LanguageListItem) => void;
raiseChangeEvent(e) {
this.populateValidationDeclaration();
if (this.changed != null) {
this.changed(e);
}
}
render(h) {
return (
{ return getFlaggedResult(h, item); }}
customRenderSelectionResult={(
h,
item,
o,
) => { return getFlaggedResult(h, item); }}
wrap={this.wrap}
mandatory={this.mandatory}
label={this.label}
labelButtons={this.labelButtons}
subtitle={this.subtitle}
selected={this.value}
hint={this.hint}
appendIcon={this.appendIcon}
prependIcon={this.prependIcon}
marginType={this.marginType}
appendClicked={this.appendClicked}
prependClicked={this.prependClicked}
changed={e => this.raiseChangeEvent(e)}
/>
);
}
}
const LanguageDropdown = toNative(LanguageDropdownComponent);
export default LanguageDropdown;