@sixbell-telco/sdk
Version:
A collection of reusable components designed for use in Sixbell Telco Angular projects
1 lines • 18.6 kB
Source Map (JSON)
{"version":3,"file":"sixbell-telco-sdk-components-forms-combobox.mjs","sources":["../../../projects/sdk/components/forms/combobox/src/combobox.component.ts","../../../projects/sdk/components/forms/combobox/src/combobox.component.html","../../../projects/sdk/components/forms/combobox/sixbell-telco-sdk-components-forms-combobox.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ChangeDetectionStrategy, Component, computed, input, model, output } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { NgSelectModule } from '@ng-select/ng-select';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { InputComponent } from '@sixbell-telco/sdk/components/forms/input';\nimport { TypographyDirective } from '@sixbell-telco/sdk/directives/typography';\nimport { cn } from '@sixbell-telco/sdk/utils/cn';\nimport { cva } from 'class-variance-authority';\n\nconst comboboxComponent = cva(['*:w-full', 'font-body', 'custom-ng-select'], {\n\tvariants: {\n\t\tvariant: {\n\t\t\tprimary: ['combobox-primary first:'],\n\t\t\tsecondary: ['combobox-secondary'],\n\t\t\tsuccess: ['combobox-success'],\n\t\t\terror: ['combobox-error'],\n\t\t\twarning: ['combobox-warning'],\n\t\t},\n\t\tshape: {\n\t\t\t'round-none': ['*:rounded-[0px_!important]'],\n\t\t\t'round-sm': ['*:rounded-[var(--rounded-btn-sm)_!important]'],\n\t\t\t'round-md': ['*:rounded-[var(--rounded-btn-md)_!important]'],\n\t\t\t'round-lg': ['*:rounded-[var(--rounded-btn-lg)_!important]'],\n\t\t},\n\t\tsize: {\n\t\t\tsm: ['[&>*:first-child]:px-2!', '[&>*:first-child]:py-1!', '[&>*:first-child]:h-auto!', '[&>*:first-child]:min-h-[auto]!'],\n\t\t\tmd: ['[&>*:first-child]:px-3!', '[&>*:first-child]:py-2!', '[&>*:first-child]:h-auto!', '[&>*:first-child]:min-h-[auto]!'],\n\t\t\tlg: ['[&>*:first-child]:px-4!', '[&>*:first-child]:py-3!', '[&>*:first-child]:h-auto!', '[&>*:first-child]:min-h-[auto]!'],\n\t\t},\n\t},\n\tcompoundVariants: [],\n\tdefaultVariants: {\n\t\tvariant: 'secondary',\n\t\tshape: 'round-sm',\n\t\tsize: 'md',\n\t},\n});\n\nexport type ComboboxVariantProps = 'primary' | 'secondary' | 'success' | 'error' | 'warning' | null | undefined;\nexport type ComboboxShapeProps = 'round-none' | 'round-sm' | 'round-md' | 'round-lg' | null | undefined;\nexport type ComboboxSizeProps = 'sm' | 'md' | 'lg' | null | undefined;\n\nexport type ComboboxProps = {\n\tvariant?: ComboboxVariantProps;\n\tshape?: ComboboxShapeProps;\n\tsize?: ComboboxSizeProps;\n};\n\n/**\n * Search input component\n * A search input component that allows the user to search for an option from a list of options\n * This component was implemented using the ng-select library\n * Docs: https://github.com/ng-select/ng-select\n */\n@Component({\n\tselector: 'st-combobox',\n\timports: [NgSelectModule, FormsModule, InputComponent, TypographyDirective, ReactiveFormsModule, TranslatePipe],\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: ComboboxComponent,\n\t\t\tmulti: true,\n\t\t},\n\t],\n\ttemplateUrl: './combobox.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ComboboxComponent implements ControlValueAccessor {\n\t// Basic input properties\n\tvariant = input<ComboboxVariantProps>('secondary');\n\tshape = input<ComboboxShapeProps>('round-sm');\n\tsize = input<ComboboxSizeProps>('md');\n\tclasses = input<string>('');\n\tname = input<string | null>(null);\n\tlabel = input<string>('');\n\n\tvalue = model();\n\toptions = input<any[]>([]);\n\temptyOptionText = input<string>();\n\tloading = input<boolean>(false);\n\tsearch = '';\n\n\t// Options properties\n\ttrackBy = input<string>('id');\n\tkey = input<string>('name');\n\n\t// Form control properties\n\tparentForm = input<FormGroup | null>(null);\n\tformControlName = input<string>('');\n\n\tget formField(): FormControl | null {\n\t\tif (!this.parentForm()) return null;\n\t\treturn this.parentForm()?.get(this.formControlName()) as FormControl;\n\t}\n\n\t// ControlValueAccessor attributes\n\tprivate onControlChange: any = () => {};\n\tprivate onControlTouch: any = () => {};\n\tdisabled = model<boolean>(false);\n\n\t// ControlValueAccessor methods\n\twriteValue(obj: any): void {\n\t\tthis.value.set(obj);\n\t}\n\n\tregisterOnChange(fn: any): void {\n\t\tthis.onControlChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any): void {\n\t\tthis.onControlTouch = fn;\n\t}\n\n\tsetDisabledState?(isDisabled: boolean): void {\n\t\tthis.disabled.set(isDisabled);\n\t}\n\n\t// Select handler\n\tvalueUpdated = output<any>();\n\thandleSelect() {\n\t\tthis.valueUpdated.emit(this.value());\n\t\tthis.onControlChange(this.value());\n\t\tthis.handleSearch('');\n\t}\n\n\t// Search handler\n\tsearchQuery = output<string>();\n\thandleSearch(search: string) {\n\t\tthis.searchQuery.emit(search);\n\t\tthis.search = search;\n\t}\n\n\t// Blur handler\n\thandleBlur() {\n\t\tthis.onControlTouch();\n\t}\n\n\t// Checks if options are primitives or not\n\tsimpleOption = computed(() => {\n\t\treturn this.options().every((option) => typeof option !== 'object');\n\t});\n\n\tget componentClass() {\n\t\treturn cn(\n\t\t\tcomboboxComponent({\n\t\t\t\tvariant: this.variant(),\n\t\t\t\tshape: this.shape(),\n\t\t\t\tsize: this.size(),\n\t\t\t\tclass: this.classes(),\n\t\t\t}),\n\t\t);\n\t}\n\n\tget errorClass() {\n\t\treturn cn(\n\t\t\tcomboboxComponent({\n\t\t\t\tvariant: 'error',\n\t\t\t\tshape: this.shape(),\n\t\t\t\tsize: this.size(),\n\t\t\t\tclass: this.classes(),\n\t\t\t}),\n\t\t);\n\t}\n\n\tget successClass() {\n\t\treturn cn(\n\t\t\tcomboboxComponent({\n\t\t\t\tvariant: 'success',\n\t\t\t\tshape: this.shape(),\n\t\t\t\tsize: this.size(),\n\t\t\t\tclass: this.classes(),\n\t\t\t}),\n\t\t);\n\t}\n\n\tget validationClass() {\n\t\tif (!this.formField) return this.componentClass;\n\n\t\tif (this.formField.dirty || this.formField.touched) {\n\t\t\tif (this.formField.invalid) {\n\t\t\t\treturn this.errorClass;\n\t\t\t} else if (this.formField.valid) {\n\t\t\t\treturn this.successClass;\n\t\t\t}\n\t\t}\n\n\t\treturn this.componentClass;\n\t}\n\n\tget isValidTrackAndKey(): boolean {\n\t\tconst opts = this.options();\n\t\tif (!opts || opts.length === 0) {\n\t\t\t// Nothing to validate – treat as valid.\n\t\t\treturn true;\n\t\t}\n\t\tconst trackProp = this.trackBy(); // e.g. 'id'\n\t\tconst keyProp = this.key(); // e.g. 'name'\n\n\t\t// Validate that each option has a non-empty value for both properties.\n\t\tconst allHaveValues = opts.every((o) => o && o[trackProp] != null && o[trackProp] !== '' && o[keyProp] != null && o[keyProp] !== '');\n\t\tif (!allHaveValues) {\n\t\t\tconsole.warn(\n\t\t\t\t'[st-combobox] Provided trackBy (\"' +\n\t\t\t\t\tthis.trackBy() +\n\t\t\t\t\t'\") and/or key (\"' +\n\t\t\t\t\tthis.key() +\n\t\t\t\t\t'\") property is missing or not unique in the options. ' +\n\t\t\t\t\t'Falling back to tracking by identity. For better performance, please ensure each option has a unique property for tracking and a valid property for display.',\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\t// Check that the tracking property values are unique.\n\t\tconst trackValues = opts.map((o) => o[trackProp]);\n\t\treturn trackValues.length === new Set(trackValues).size;\n\t}\n}\n","<div class=\"flex flex-col gap-1\">\n\t@if (label()) {\n\t\t<label [for]=\"this.name()\" class=\"block\"\n\t\t\t><span typography [tyVariant]=\"'body'\" [tyColor]=\"'base'\" [tyFontWeight]=\"'normal'\">{{ label() }}</span></label\n\t\t>\n\t}\n\t<ng-select\n\t\t#select\n\t\t[notFoundText]=\"'sdk.combobox.noResultsFound' | translate\"\n\t\t[loadingText]=\"'sdk.combobox.loading' | translate\"\n\t\t[searchable]=\"false\"\n\t\t[clearable]=\"false\"\n\t\t[(ngModel)]=\"value\"\n\t\t[bindLabel]=\"key()\"\n\t\t[disabled]=\"disabled()\"\n\t\t(change)=\"handleSelect()\"\n\t\t(blur)=\"handleBlur()\"\n\t\t[class]=\"validationClass\"\n\t>\n\t\t@if (emptyOptionText() && !search) {\n\t\t\t<ng-option value=\"\">\n\t\t\t\t<span typography [tyVariant]=\"'body-sm'\" [tyColor]=\"'base'\" [tyFontWeight]=\"'normal'\">{{ emptyOptionText() }}</span></ng-option\n\t\t\t>\n\t\t}\n\t\t@if (simpleOption()) {\n\t\t\t@for (option of options(); track option) {\n\t\t\t\t<ng-option [value]=\"option\">\n\t\t\t\t\t<span typography [tyVariant]=\"'body-sm'\" [tyColor]=\"'base'\" [tyFontWeight]=\"'normal'\">{{ option }}</span>\n\t\t\t\t</ng-option>\n\t\t\t}\n\t\t} @else {\n\t\t\t@if (isValidTrackAndKey) {\n\t\t\t\t@for (option of options(); track option[trackBy()]) {\n\t\t\t\t\t<ng-option [value]=\"option\">\n\t\t\t\t\t\t<span typography [tyVariant]=\"'body-sm'\" [tyColor]=\"'base'\" [tyFontWeight]=\"'normal'\">{{ option[key()] }}</span>\n\t\t\t\t\t</ng-option>\n\t\t\t\t}\n\t\t\t} @else {\n\t\t\t\t@for (option of options(); track option) {\n\t\t\t\t\t<ng-option [value]=\"option\">\n\t\t\t\t\t\t<span typography [tyVariant]=\"'body-sm'\" [tyColor]=\"'base'\" [tyFontWeight]=\"'normal'\">{{ option }}</span>\n\t\t\t\t\t</ng-option>\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t<ng-template ng-header-tmp>\n\t\t\t<st-input placeholder=\"Buscar...\" (valueDebounced)=\"handleSearch($event)\" variant=\"secondary\" [ghost]=\"true\" />\n\t\t\t<!-- TODO: loader -->\n\t\t</ng-template>\n\t</ng-select>\n\t<ng-content></ng-content>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}