{"version":3,"file":"ironsource-fusion-ui-components-tags-input-common-base.mjs","sources":["../../../projects/fusion-ui/components/tags-input/common/base/tags-input.base.component.ts","../../../projects/fusion-ui/components/tags-input/common/base/ironsource-fusion-ui-components-tags-input-common-base.ts"],"sourcesContent":["import {Directive, EventEmitter, HostBinding, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {FormControl} from '@angular/forms';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {detectChangesDecorator} from '@ironsource/fusion-ui/decorators';\nimport {isNullOrUndefined} from '@ironsource/fusion-ui/utils';\nimport {InputComponent} from '@ironsource/fusion-ui/components/input/v1';\nimport {\n    TagsInputBulkInsertOptions,\n    TagsInputClearSearchOn,\n    TagsInputComponentConfigurations\n} from '@ironsource/fusion-ui/components/tags-input/entities';\nimport {DropdownOption} from '@ironsource/fusion-ui/components/dropdown-option/entities';\nimport {DropdownBaseComponent} from '@ironsource/fusion-ui/components/dropdown/common/base';\nimport {Tag} from '@ironsource/fusion-ui/components/tag/common/entities';\n\n@Directive()\nexport abstract class TagsInputBaseComponent extends DropdownBaseComponent implements OnInit {\n    @ViewChild('tagInput') set tagInput(value: InputComponent) {\n        if (!!value && !!value.elementRef && !!value.elementRef.nativeElement) {\n            if (this.isAddTagsAllowed || this.autoComplete) {\n                this.inputElement = value.elementRef.nativeElement.querySelector('input');\n            }\n        }\n    }\n\n    // deprecated inputs\n    @Input() id: string;\n    @Input() isAddTagsAllowed = false; // define if input exist nd user can enter new tag\n    @Input() isPredefinedTags = false;\n    @Input() inputPlaceholder = 'Add...';\n    @Input() saveSelectedAsITagObjects = false;\n    @Input() generateOnlyCustomTags = false;\n    @Input() placeholderPrefix: string;\n    @Input() noResultMessage = 'No item matched your search...';\n    @Input() generateTagsRegexPattern: string;\n    @Input() isBulkInsertTags = false;\n    @Input() bulkInsertOptions: TagsInputBulkInsertOptions;\n    @Input() maxHeight: number;\n    @Input() footer: boolean | {clearAll?: boolean | string};\n    @Input() clearSearchOn?: TagsInputClearSearchOn;\n\n    // when using input tags inside an isClickOutside directive,\n    // the click from the onremove will cause isClickOutside to trigger as an outside click\n    // due to the tag being already removed from the DOM tree when the click reaches isClickOutside\n    // in which case we want to set suppressClickOnRemove as true\n    @Input() suppressClickOnRemove = false;\n\n    @Input()\n    set loading(loading: boolean) {\n        this._loading = loading;\n    }\n    get loading(): boolean {\n        return this._loading;\n    }\n\n    @Input()\n    set error(error: string) {\n        this._error = error;\n    }\n    get error(): string {\n        return this._error;\n    }\n\n    @Input()\n    set tags(value: Array<any>) {\n        this.tagsState = !!value\n            ? value.map(item => {\n                  if (typeof item === 'string') {\n                      return {id: this.titleToId(item), title: item};\n                  } else if (item?.tooltip) {\n                      return Object.assign(item, {\n                          tooltipText: item?.tooltip\n                      });\n                  }\n                  return item;\n              })\n            : [];\n        this.setCheckedInOptions();\n        if (this.bulkInsertion) {\n            this.searchValue.setValue('', {emitEvent: false});\n        }\n\n        const newTagsList =\n            this.isBulkInMaxValue(this.tagsState) && this.isBulkInsertTags\n                ? this.tagsState.slice(0, this.bulkInsertOptions.maxTagsShown)\n                : this.tagsState;\n        this.displaySelectedTags$.next(newTagsList);\n    }\n    @Input()\n    set tagList(value: Array<any>) {\n        this.options = !!value\n            ? value.map(item => {\n                  if (typeof item === 'string') {\n                      return {\n                          id: this.titleToId(item),\n                          title: item,\n                          checked: this.isTagSelected({title: item}),\n                          displayText: item\n                      };\n                  }\n                  return Object.assign(item, {\n                      checked: this.isTagSelected({title: item.title, id: item.id}),\n                      tooltipText: item?.tooltip\n                  });\n              })\n            : [];\n        this.tagListChanged.emit();\n    }\n\n    // new input configuration -----------\n    @Input() set configuration(value: TagsInputComponentConfigurations) {\n        if (!!value) {\n            this.id = value.id;\n            this.tags = value.tags;\n            this.tagList = value.tagList;\n            this.isPredefinedTags = value.isPredefinedTags;\n            this.inputPlaceholder = value.inputPlaceholder;\n            this.placeholderPrefix = value.placeholderPrefix;\n            this.noResultMessage = value.noResultMessage || 'No item matched your search...';\n            this.autoComplete = true;\n            this.loading = value.loading;\n            this.error = value.error;\n            this.maxHeight = value.maxHeight;\n            this.isBulkInsertTags = value.isBulkInsertTags;\n            this.bulkInsertOptions = value.bulkInsertOptions;\n            this.footer = value.footer;\n            this.clearSearchOn = value.clearSearchOn;\n            this.searchByProperties = value.searchByProperties ?? [];\n        }\n    }\n\n    @Output() tagsChanged = new EventEmitter();\n    @Output() addCustomTag = new EventEmitter();\n    @Output() tagListChanged = new EventEmitter();\n    @Output() bulkInsert = new EventEmitter<string[]>();\n\n    get tagsSelected() {\n        return this.tagsState;\n    }\n\n    get displayPlaceholder(): string {\n        return this.tagsSelected && this.tagsSelected.length > 0 && this.placeholderPrefix ? this.placeholderPrefix : this.inputPlaceholder;\n    }\n\n    get tagsOptions() {\n        return this.options;\n    }\n\n    get bulkInsertDelimiter(): string {\n        return !!this.bulkInsertOptions && !!this.bulkInsertOptions.delimiter ? this.bulkInsertOptions.delimiter : ',';\n    }\n\n    get bulkInsertValidator(): (key: string) => boolean {\n        return !!this.bulkInsertOptions && !!this.bulkInsertOptions.validateKeyMethod ? this.bulkInsertOptions.validateKeyMethod : Boolean;\n    }\n\n    get bulkInsertion(): boolean {\n        return this.isBulkInsertTags && this.searchValue.value.indexOf(this.bulkInsertDelimiter) !== -1;\n    }\n\n    get isApplyByConfirm(): boolean {\n        return !!this.footer;\n    }\n\n    get hasClearAll(): boolean {\n        return !!this.footer && typeof this.footer !== 'boolean' && this.footer.hasOwnProperty('clearAll');\n    }\n\n    get clearAllText(): string {\n        return !!this.footer &&\n            typeof this.footer !== 'boolean' &&\n            this.footer.hasOwnProperty('clearAll') &&\n            typeof this.footer.clearAll !== 'boolean'\n            ? this.footer.clearAll\n            : 'Clear selection';\n    }\n\n    filteredDisplayedOptions$: Observable<DropdownOption[]>;\n    searchValue = new FormControl('');\n    isNotFoundPredefined = false;\n    isAddCustomTag = false;\n    _error = '';\n    _loading = false;\n    displaySelectedTags$ = new BehaviorSubject<Tag[] | string[]>([]);\n\n    protected tagsState: Array<Tag> = [];\n    protected uid: string;\n    protected inputElement: any;\n\n    protected initialSelectedTags = [];\n    protected initialTagsOptions = [];\n\n    @HostBinding('class.fu-disabled') get disabled(): boolean {\n        return this.isDisabled || this.isDisabledForm;\n    }\n\n    private isBulkInMaxValue(value): boolean {\n        return !!this.bulkInsertOptions?.maxTagsShown && value.length > this.bulkInsertOptions?.maxTagsShown;\n    }\n\n    private titleToId(title: string): string {\n        return title.toLowerCase().replace(/ /gi, '_');\n    }\n\n    private _mapSelected(): Array<any> {\n        return this.saveSelectedAsITagObjects ? this.tagsSelected : this.tagsSelected.map(item => (item.id ? item.id : item));\n    }\n\n    private isTagSelected({title, id}: {title: string; id?: number | string}): boolean {\n        return this.tagsState.some(tag => tag.title === title && (!isNullOrUndefined(id) ? id === tag.id : true));\n    }\n\n    private isAddCustomTagShowed(searchVal: string): boolean {\n        if (this.searchValue.value && this.searchValue.value.trim().length >= 2) {\n            return this.options.filter(item => item.title.toLowerCase() === searchVal.toLowerCase()).length === 0;\n        } else {\n            return false;\n        }\n    }\n\n    private addToTags(newTag: string): boolean {\n        if (newTag.length !== 0) {\n            if (\n                !this.tagsState.some(tag => tag.title.toLowerCase() === newTag.toLowerCase()) &&\n                this.shouldAddTagAfterRegExpValidation(newTag)\n            ) {\n                this.tagsState.push({id: this.titleToId(newTag), title: newTag});\n                if (!!this.inputElement) {\n                    this.inputElement.value = '';\n                }\n                if (!this.isApplyByConfirm) {\n                    this.propagateChange(this._mapSelected());\n                    this.tagsChanged.emit(this.tagsSelected);\n                }\n                return true;\n            } else {\n                return false;\n            }\n        }\n        return false;\n    }\n\n    private addMultiToTags(tagsToAdd: Array<any>): void {\n        if (tagsToAdd.length) {\n            tagsToAdd.forEach(newVal => {\n                if (!this.tagsState.some(item => ('' + item.id).toLowerCase() === newVal.trim().toLowerCase())) {\n                    // find in predefined\n                    const optionToAdd = this.options.find(option => option.id.toString().toLowerCase() === newVal.trim().toLowerCase());\n                    if (optionToAdd) {\n                        this.options[this.options.findIndex(item => item.id === optionToAdd.id)].checked = true;\n                        this.tagsState.push({id: optionToAdd.id, title: optionToAdd.title, icon: optionToAdd.icon, flag: optionToAdd.flag});\n                    } else if (this.generateOnlyCustomTags && this.shouldAddTagAfterRegExpValidation(newVal)) {\n                        this.tagsState.push({id: this.titleToId(newVal), title: newVal});\n                    }\n                }\n            });\n            this.propagateChange(this._mapSelected());\n            this.tagsChanged.emit(this.tagsSelected);\n            if (!!this.inputElement) {\n                this.inputElement.value = '';\n            }\n        }\n    }\n\n    ngOnInit() {\n        this.uid = this.uniqueIdService.getUniqueId().toString();\n        this.id = this.id || 'isTagsSelector_' + this.uid;\n\n        if (typeof this.isAddTagsAllowed === 'undefined') {\n            this.isAddTagsAllowed = true;\n        }\n\n        this.autoComplete = this.autoComplete || false;\n        this.arrowNavigation = this.autoComplete;\n\n        super.ngOnInit();\n\n        this.searchValue.valueChanges.pipe(takeUntil(this.onDestroy$)).subscribe(() => {\n            this.onSearchChange();\n        });\n\n        this.filteredDisplayedOptions$ = this.displayedOptions$\n            .asObservable()\n            .pipe(map(values => values.filter(curr => !this.isTagSelected({title: curr.title, id: curr.id}))));\n    }\n\n    clearSearch() {\n        this.searchValue.reset();\n    }\n\n    /**\n     * set focus\n     */\n    setFocusToInput(): void {\n        if (!this.isOpen$.getValue()) {\n            this.openTagsOptions();\n        }\n    }\n\n    /**\n     * do blur\n     */\n    onOutsideClick(): void {\n        if (this.isOpen$.getValue()) {\n            if (this.isApplyByConfirm) {\n                this.onCancelSelection();\n            } else {\n                this.closeTagsOptions();\n            }\n        }\n    }\n\n    onEnterNewTag(value: string): void {\n        if (this.bulkInsertion) {\n            this.bulkInsert.emit([...new Set(value.split(this.bulkInsertDelimiter).filter(this.bulkInsertValidator))]);\n        } else {\n            const valToAdd = value.trim();\n            if ((!this.autoComplete && !this.generateOnlyCustomTags) || (this.generateOnlyCustomTags && valToAdd.indexOf(',') === -1)) {\n                this.addToTags(valToAdd);\n            } else if (\n                ((this.autoComplete && this.isPredefinedTags) || this.generateOnlyCustomTags) &&\n                ((valToAdd.length > 2 && valToAdd.indexOf(',') !== -1) || valToAdd.length === 2)\n            ) {\n                if (this.searchByProperties.length === 0 || this.searchByProperties.includes('id')) {\n                    // add from predefined by _option.id if input delimited by ',' comma\n                    this.addMultiToTags(valToAdd.length === 2 ? [valToAdd] : this.inputElement.value.split(','));\n                }\n            }\n            this.searchValue.setValue('');\n        }\n    }\n\n    onTagRemove(tagToRemove: any): void {\n        const idx = this.tagsState.findIndex(tag => {\n            return !isNullOrUndefined(tagToRemove.id)\n                ? tag.id === tagToRemove.id\n                : tag.title.toLowerCase() === tagToRemove.title.toLowerCase();\n        });\n        if (idx !== -1) {\n            this.tagsState.splice(idx, 1);\n            this.setCheckedInOptions();\n\n            if (!this.isApplyByConfirm) {\n                this.propagateChange(this._mapSelected());\n                this.tagsChanged.emit(this.tagsSelected);\n            }\n        }\n    }\n\n    private setCheckedInOptions(): void {\n        if (!!this.options) {\n            this.options = this.options.map(option => {\n                let newOption;\n                const isChecked = this.tagsState.some(\n                    tag => (tag.id ? tag.id : tag).toString().toLowerCase() === option.id.toString().toLowerCase()\n                );\n                if (option.checked !== isChecked) {\n                    option.checked = isChecked;\n                    newOption = {...option};\n                } else {\n                    newOption = option;\n                }\n\n                return newOption;\n            });\n        }\n    }\n\n    onSearchChange(): void {\n        if (!this.bulkInsertion) {\n            if (this.isPredefinedTags) {\n                if (this.isAddTagsAllowed) {\n                    this.isAddCustomTag = this.isNotFoundPredefined || this.isAddCustomTagShowed(this.searchValue.value);\n                }\n                this.displayedOptions$.next(this.parseOptions(this.optionsState));\n            } else if (this.autoComplete && this.searchValue.value && this.searchValue.value.trim().length) {\n                this.options = [];\n                super.onSearchChange();\n            }\n        }\n    }\n\n    private _addCustomPredefinedTag(customTag: string): void {\n        // add to tags list\n        if (this.addToTags(customTag)) {\n            this.isAddCustomTag = false;\n            // add to options (as checked)\n            this.options.push({id: this.options.length, displayText: customTag, title: customTag, checked: true});\n            this.options.sort((a, b) => {\n                const titleA = a.title.toLowerCase();\n                const titleB = b.title.toLowerCase();\n                if (titleA < titleB) {\n                    return -1;\n                }\n                if (titleA > titleB) {\n                    return 1;\n                }\n                return 0;\n            });\n            // call to parent...\n            this.addCustomTag.emit(customTag);\n        }\n    }\n\n    addCustomPredefinedTag(event: any): void {\n        if (event) {\n            event.preventDefault();\n        }\n        this._addCustomPredefinedTag(this.searchValue.value);\n        this.searchValue.setValue('', {emitEvent: false});\n    }\n\n    @detectChangesDecorator\n    changeSelected({option, $event}: {option?: any; $event?: Event}): void {\n        if (option.title.length !== 0) {\n            if (!this.tagsState.some(tag => tag.title.toLowerCase() === option.title.toLowerCase() && tag.id === option.id)) {\n                this.options = this.options.map(item => {\n                    let newItem;\n                    if (item.id === option.id) {\n                        item.checked = true;\n                        newItem = {...item}; // trigger change detection only for clicked option\n                    } else {\n                        newItem = item;\n                    }\n\n                    return newItem;\n                });\n                this.tagsState.push({\n                    id: option.id,\n                    title: option.title,\n                    icon: option.icon,\n                    flag: option.flag,\n                    tooltip: option.tooltipText\n                });\n                if (!this.isApplyByConfirm) {\n                    this.propagateChange(this._mapSelected());\n                    this.tagsChanged.emit(this.tagsSelected);\n                }\n                if (this.clearSearchOn === TagsInputClearSearchOn.Select) {\n                    this.clearSearch();\n                }\n                this.displaySelectedTags$.next(this.tagsState);\n                this.isAddCustomTag = false;\n                this.displayedOptions$.next(this.parseOptions(this.options));\n            }\n            if ($event) {\n                $event.stopPropagation();\n            }\n        }\n    }\n\n    isNoResults() {\n        const firstCondition =\n            this.isPredefinedTags &&\n            this.isNotFoundPredefined &&\n            ((this.saveSelectedAsITagObjects && !this.loading) || !this.saveSelectedAsITagObjects);\n\n        const secondCondition = this.autoComplete && !this.loading && this.searchValue.value && this.filteredOptions.length === 0;\n        return firstCondition || secondCondition;\n    }\n\n    onClearSelectionClicked($event) {\n        if ($event) {\n            $event.preventDefault();\n            $event.stopPropagation();\n        }\n        this.tagsState = [];\n        this.setCheckedInOptions();\n        this.displaySelectedTags$.next(this.tagsState);\n        this.displayedOptions$.next(this.parseOptions(this.options));\n    }\n\n    onCancelSelection() {\n        this.options = [...this.initialTagsOptions];\n        this.tagsState = [...this.initialSelectedTags];\n        this.setCheckedInOptions();\n        this.displaySelectedTags$.next(this.tagsState);\n        this.displayedOptions$.next(this.parseOptions(this.options));\n        this.closeTagsOptions();\n    }\n\n    onApplySelection() {\n        if (this.hasChanges()) {\n            this.propagateChange(this._mapSelected());\n            this.tagsChanged.emit(this.tagsSelected);\n        }\n        this.closeTagsOptions();\n    }\n\n    private openTagsOptions() {\n        this.isOpen$.next(true);\n        if (!!this.inputElement) {\n            this.inputElement.focus();\n        }\n        if (this.isApplyByConfirm) {\n            this.initialSelectedTags = [...this.tagsState];\n            this.initialTagsOptions = [...this.options];\n        }\n        // add calculation if need open above the input\n        setTimeout(this.calcOptionHolderPosition.bind(this), 0);\n        // reset options\n        this.setCheckedInOptions();\n    }\n\n    private closeTagsOptions() {\n        this.isOpen$.next(false);\n        this.resetOptionsStyle();\n        if (this.autoComplete && !this.isPredefinedTags) {\n            this.searchValue.setValue('');\n            if (!!this.inputElement) {\n                this.inputElement.value = this.searchValue.value;\n            }\n            if (!this.isPredefinedTags) {\n                this.options = [];\n            }\n        }\n        if (this.clearSearchOn === TagsInputClearSearchOn.Close) {\n            this.clearSearch();\n        }\n        this.pagination = {...this.pagination, counter: 1, lastCounter: 0};\n        this.displayedOptions$.next(this.parseOptions(this.optionsState));\n    }\n\n    private getOptionById(value: Array<any>) {\n        return this.options.filter(item => value.some(val => item.id === (val.id ? val.id : val)));\n    }\n\n    private isTypeOfITags(value: any): boolean {\n        return value && value instanceof Array && value.length > 0 && value[0].id && value[0].title;\n    }\n\n    private shouldAddTagAfterRegExpValidation(tagName): boolean {\n        if (!this.generateTagsRegexPattern) {\n            return true;\n        }\n        const regExp = new RegExp(this.generateTagsRegexPattern);\n        return regExp.test(tagName);\n    }\n\n    private hasChanges(): boolean {\n        if (this.initialSelectedTags.length === this.tagsState.length) {\n            // same length - compare by content\n            return !this.initialSelectedTags.every(item => {\n                return this.tagsState.some(tag => tag === item);\n            });\n        }\n        return true;\n    }\n\n    // Implement ControlValueAccessor methods\n    propagateChange = (_: any) => {};\n\n    writeValue(value: string[] | Tag[]): void {\n        if (isNullOrUndefined(value)) {\n            this.tags = [];\n        } else if (this.isTypeOfITags(value)) {\n            this.tags = [...value];\n        } else if (!this.bulkInsertion) {\n            this.tags = this.getOptionById(Array.isArray(value) ? value : [value]);\n        } else {\n            this.tags = value;\n        }\n    }\n\n    registerOnChange(fn: any): void {\n        this.propagateChange = fn;\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}