<commit_before>/*
 *  @license
 *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.
 *
 *  Use of this source code is governed by an Apache-2.0 license that can be
 *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE
 */

import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { AfterContentInit, AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Optional, Output, Self, ViewChild, ViewEncapsulation } from '@angular/core';
import { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';
import { MatInput } from '@angular/material';
import 'rxjs/add/operator/delayWhen';
import 'rxjs/add/operator/takeWhile';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
import { Subscription } from 'rxjs/Subscription';
import { IViewListResult } from '../../common/core/item-list/item-list.service';
import { KeyCodes } from '../../common/core/keycodes.enum';
import { MediaService } from '../../common/core/media/media.service';
import { DejaConnectionPositionPair } from '../../common/core/overlay/connection-position-pair';
import { DejaChildValidatorDirective } from '../../common/core/validation/child-validator.directive';
import { DejaChipsCloseEvent } from '../chips/chips.component';
import { DejaOverlayComponent } from '../overlay/overlay.component';
import { IItemBase } from './../../common/core/item-list/item-base';
import { DejaItemEvent } from './../../common/core/item-list/item-event';
import { ItemListBase } from './../../common/core/item-list/item-list-base';
import { ItemListService } from './../../common/core/item-list/item-list.service';
import { IItemTree } from './../../common/core/item-list/item-tree';
import { DejaItemComponent } from './../../common/core/item-list/item.component';
import { DejaItemsEvent } from './../../common/core/item-list/items-event';
import { IViewPort, ViewportMode, ViewPortService } from './../../common/core/item-list/viewport.service';

const noop = () => { };

export enum DejaSelectSelectionPosition {
    above = 0, // value in HTML
    below = 1, // value in HTML
}

/** Combo box avec une liste basée sur la treelist */
@Component({
    changeDetection: ChangeDetectionStrategy.OnPush,
    encapsulation: ViewEncapsulation.None,
    providers: [ViewPortService, MediaService],
    selector: 'deja-select',
    styleUrls: [
        './select.component.scss',
    ],
    templateUrl: './select.component.html',
})
export class DejaSelectComponent extends ItemListBase implements ControlValueAccessor, AfterViewInit, AfterContentInit {
    /** Texte à afficher par default dans la zone de recherche */
    @Input() public placeholder: string;
    /** Offset de position horizontal de la zone de dropdown */
    @Input() public overlayOffsetX = 0;
    /** Permet de définir un template de ligne par binding */
    @Input() public itemTemplateExternal;
    /** Permet de définir un template de ligne parente par binding. */
    @Input() public parentItemTemplateExternal;
    /** Permet de définir un template pour la zone de texte d'information. */
    @Input() public placeHolderTemplateExternal;
    /** Permet de définir un template pour l'élément de conseil ou d'affichage d'erreur. */
    @Input() public hintTemplateExternal;
    /** Définit une valeur indiquant si en reactive form le model renvoyé doit être un obeject oue une valeur */
    @Input() public modelIsValue = false;
    /** Exécuté lorsque le calcul du viewPort est terminé. */
    @Output() public viewPortChanged = new EventEmitter<IViewPort>();
    /** Exécuté lorsque l'utilisateur sélectionne ou désélectionne une ligne. */
    @Output() public selectedChange = new EventEmitter<DejaItemsEvent | DejaItemEvent>();
<commit_msg>fix(DejaSelect): modelIsValue property initialized to undefined and is determined by the first passed model<commit_after>/*
 *  @license
 *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.
 *
 *  Use of this source code is governed by an Apache-2.0 license that can be
 *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE
 */

import { coerceBooleanProperty } from '@angular/cdk/coercion';
import { AfterContentInit, AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Optional, Output, Self, ViewChild, ViewEncapsulation } from '@angular/core';
import { ControlValueAccessor, FormGroupDirective, NgControl, NgForm } from '@angular/forms';
import { MatInput } from '@angular/material';
import 'rxjs/add/operator/delayWhen';
import 'rxjs/add/operator/takeWhile';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Observable } from 'rxjs/Observable';
import { Subject } from 'rxjs/Subject';
import { Subscription } from 'rxjs/Subscription';
import { IViewListResult } from '../../common/core/item-list/item-list.service';
import { KeyCodes } from '../../common/core/keycodes.enum';
import { MediaService } from '../../common/core/media/media.service';
import { DejaConnectionPositionPair } from '../../common/core/overlay/connection-position-pair';
import { DejaChildValidatorDirective } from '../../common/core/validation/child-validator.directive';
import { DejaChipsCloseEvent } from '../chips/chips.component';
import { DejaOverlayComponent } from '../overlay/overlay.component';
import { IItemBase } from './../../common/core/item-list/item-base';
import { DejaItemEvent } from './../../common/core/item-list/item-event';
import { ItemListBase } from './../../common/core/item-list/item-list-base';
import { ItemListService } from './../../common/core/item-list/item-list.service';
import { IItemTree } from './../../common/core/item-list/item-tree';
import { DejaItemComponent } from './../../common/core/item-list/item.component';
import { DejaItemsEvent } from './../../common/core/item-list/items-event';
import { IViewPort, ViewportMode, ViewPortService } from './../../common/core/item-list/viewport.service';

const noop = () => { };

export enum DejaSelectSelectionPosition {
    above = 0, // value in HTML
    below = 1, // value in HTML
}

/** Combo box avec une liste basée sur la treelist */
@Component({
    changeDetection: ChangeDetectionStrategy.OnPush,
    encapsulation: ViewEncapsulation.None,
    providers: [ViewPortService, MediaService],
    selector: 'deja-select',
    styleUrls: [
        './select.component.scss',
    ],
    templateUrl: './select.component.html',
})
export class DejaSelectComponent extends ItemListBase implements ControlValueAccessor, AfterViewInit, AfterContentInit {
    /** Texte à afficher par default dans la zone de recherche */
    @Input() public placeholder: string;
    /** Offset de position horizontal de la zone de dropdown */
    @Input() public overlayOffsetX = 0;
    /** Permet de définir un template de ligne par binding */
    @Input() public itemTemplateExternal;
    /** Permet de définir un template de ligne parente par binding. */
    @Input() public parentItemTemplateExternal;
    /** Permet de définir un template pour la zone de texte d'information. */
    @Input() public placeHolderTemplateExternal;
    /** Permet de définir un template pour l'élément de conseil ou d'affichage d'erreur. */
    @Input() public hintTemplateExternal;
    /** Définit une valeur indiquant si en reactive form le model renvoyé doit être un obeject oue une valeur */
    @Input() public modelIsValue: boolean;
    /** Exécuté lorsque le calcul du viewPort est terminé. */
    @Output() public viewPortChanged = new EventEmitter<IViewPort>();
    /** Exécuté lorsque l'utilisateur sélectionne ou désélectionne une ligne. */
    @Output() public selectedChange = new EventEmitter<DejaItemsEvent | DejaItemEvent>();

{'fraction_non_alphanumeric': 0.13235845519310085, 'fraction_numerical': 0.001249843769528809, 'mean_word_length': 4.048580441640379, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 9, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2259678', 'n_tokens_mistral': 2253, 'n_tokens_neox': 2270, 'n_words': 661}