From e0d771950dbfadef4eed6cea5fcee0d310db92cb Mon Sep 17 00:00:00 2001 From: Zurab Developer <75216044+ZurabDev@users.noreply.github.com> Date: Thu, 14 Dec 2023 14:30:26 +0300 Subject: [PATCH 1/3] fix(components): added empty initializer for all query list --- .../src/lib/components/accordion/accordion.component.ts | 3 ++- .../lib/components/breadcrumbs/breadcrumbs.component.ts | 7 +++++-- .../components/src/lib/components/grid/grid.component.ts | 9 +++++++-- .../prizm-navigation-menu-items.component.ts | 5 +++-- .../prizm-navigation-menu.component.ts | 3 ++- .../src/lib/components/slider/slider.component.ts | 3 ++- .../src/lib/components/splitter/splitter.component.ts | 6 ++++-- .../lib/components/stepper/stepper-selector.component.ts | 3 ++- .../src/lib/components/stepper/stepper.component.ts | 3 ++- .../lib/components/table/directives/sort-by.directive.ts | 5 ++--- .../src/lib/components/table/tbody/tbody.component.ts | 3 ++- .../lib/components/table/th-group/th-group.component.ts | 8 +++----- .../src/lib/components/table/tr/tr.component.ts | 3 ++- .../components/src/lib/components/tabs/tabs.component.ts | 7 +++++-- 14 files changed, 43 insertions(+), 25 deletions(-) diff --git a/libs/components/src/lib/components/accordion/accordion.component.ts b/libs/components/src/lib/components/accordion/accordion.component.ts index 9df182efdd..637a3140a4 100644 --- a/libs/components/src/lib/components/accordion/accordion.component.ts +++ b/libs/components/src/lib/components/accordion/accordion.component.ts @@ -11,6 +11,7 @@ import { merge } from 'rxjs'; import { mapTo, takeUntil } from 'rxjs/operators'; import { PrizmDestroyService } from '@prizm-ui/helpers'; import { PrizmAbstractTestId } from '../../abstract/interactive'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-accordion', @@ -23,7 +24,7 @@ import { PrizmAbstractTestId } from '../../abstract/interactive'; export class PrizmAccordionComponent extends PrizmAbstractTestId implements AfterContentInit { @Input() public onlyOneExpanded = false; @ContentChildren(PrizmAccordionItemComponent, { descendants: false }) - accordionItems!: QueryList; + accordionItems: QueryList = EMPTY_QUERY; override readonly testId_ = 'ui_accordion'; diff --git a/libs/components/src/lib/components/breadcrumbs/breadcrumbs.component.ts b/libs/components/src/lib/components/breadcrumbs/breadcrumbs.component.ts index 829297f4c1..1237d769fc 100644 --- a/libs/components/src/lib/components/breadcrumbs/breadcrumbs.component.ts +++ b/libs/components/src/lib/components/breadcrumbs/breadcrumbs.component.ts @@ -23,6 +23,7 @@ import { PrizmBreadcrumbDirective } from './breadcrumbs.directive'; import { CommonModule } from '@angular/common'; import { PrizmIconModule } from '../icon'; import { PrizmDropdownHostModule } from '../dropdowns/dropdown-host'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-breadcrumbs', @@ -55,8 +56,10 @@ export class PrizmBreadcrumbsComponent @Output() public breadcrumbChange: EventEmitter = new EventEmitter(); @ViewChild('container', { static: true }) public containerRef!: ElementRef; @ViewChild('breadcrumbsFake', { static: true }) public fakeBreadcrumbContainer!: ElementRef; - @ViewChildren('breadcrumb', { read: ElementRef }) public breadcrumbsList!: QueryList; - @ContentChildren(PrizmBreadcrumbDirective) public breadcrumbsItem!: QueryList; + @ViewChildren('breadcrumb', { read: ElementRef }) public breadcrumbsList: QueryList = + EMPTY_QUERY; + @ContentChildren(PrizmBreadcrumbDirective) public breadcrumbsItem: QueryList = + EMPTY_QUERY; public breadcrumbs$: BehaviorSubject = new BehaviorSubject([]); public breadcrumbsToShow$: BehaviorSubject = new BehaviorSubject([]); diff --git a/libs/components/src/lib/components/grid/grid.component.ts b/libs/components/src/lib/components/grid/grid.component.ts index b7965ad07e..2afc41e162 100644 --- a/libs/components/src/lib/components/grid/grid.component.ts +++ b/libs/components/src/lib/components/grid/grid.component.ts @@ -12,6 +12,7 @@ import { import { PrizmGridItemComponent } from './components/grid-item/grid-item.component'; import { PrizmAbstractTestId } from '../../abstract/interactive'; import { CommonModule } from '@angular/common'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-grid', @@ -26,8 +27,12 @@ export class PrizmGridComponent extends PrizmAbstractTestId implements AfterCont @Input() public rows = '10'; @ViewChild('container', { static: true }) container!: ElementRef; - @ContentChildren(PrizmGridItemComponent, { read: ElementRef }) public gridItems!: QueryList; - @ContentChildren(PrizmGridItemComponent) public gridItemsData!: QueryList; + + @ContentChildren(PrizmGridItemComponent, { read: ElementRef }) + public gridItems: QueryList = EMPTY_QUERY; + + @ContentChildren(PrizmGridItemComponent) + public gridItemsData: QueryList = EMPTY_QUERY; override readonly testId_ = 'ui-area--grid'; diff --git a/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu-items/prizm-navigation-menu-items.component.ts b/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu-items/prizm-navigation-menu-items.component.ts index da3411c75e..c878ef8f6e 100644 --- a/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu-items/prizm-navigation-menu-items.component.ts +++ b/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu-items/prizm-navigation-menu-items.component.ts @@ -17,6 +17,7 @@ import { PRIZM_NAVIGATION_MENU_CHILDREN_HANDLER, PrizmNavigationMenuChildrenHand import { PrizmAbstractTestId } from '@prizm-ui/core'; import { PrizmTreeControllerDirective, PrizmTreeModule } from '../../../tree'; import { NgFor } from '@angular/common'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-navigation-menu-items', @@ -29,9 +30,9 @@ import { NgFor } from '@angular/common'; export class PrizmNavigationMenuItemsComponent< T extends { children?: unknown[] } > extends PrizmAbstractTestId { - @ViewChildren(PrizmNavigationMenuItemComponent) private menuItemsList!: QueryList< + @ViewChildren(PrizmNavigationMenuItemComponent) private menuItemsList: QueryList< PrizmNavigationMenuItemComponent - >; + > = EMPTY_QUERY; @Output() itemExpandedChanged = new EventEmitter<{ item: InternalPrizmNavigationMenuItem; diff --git a/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu/prizm-navigation-menu.component.ts b/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu/prizm-navigation-menu.component.ts index 096083e510..5eb95dee8b 100644 --- a/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu/prizm-navigation-menu.component.ts +++ b/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu/prizm-navigation-menu.component.ts @@ -35,6 +35,7 @@ import { PrizmButtonModule } from '../../../button'; import { PolymorphOutletDirective, PrizmHoveredModule } from '../../../../directives'; import { PrizmAccordionComponent } from '../../../accordion'; import { PrizmNavigationMenuToolbarComponent } from '../prizm-navigation-menu-toolbar/prizm-navigation-menu-toolbar.component'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-navigation-menu', @@ -60,7 +61,7 @@ export class PrizmNavigationMenuComponent< UserItem extends Omit & { children?: UserItem[] } > extends PrizmAbstractTestId { @ContentChildren(PrizmNavigationMenuGroupComponent) - menuGroups!: QueryList>; + menuGroups: QueryList> = EMPTY_QUERY; @Output() homeClicked = new EventEmitter(); @Output() activeItemChanged = new EventEmitter(); diff --git a/libs/components/src/lib/components/slider/slider.component.ts b/libs/components/src/lib/components/slider/slider.component.ts index 0d6b474351..3dd2582855 100644 --- a/libs/components/src/lib/components/slider/slider.component.ts +++ b/libs/components/src/lib/components/slider/slider.component.ts @@ -22,6 +22,7 @@ import { distinctUntilChanged, map, startWith, switchMap, takeUntil, tap } from import { PrizmSliderCnobComponent } from './slider-cnob.component'; import { PrizmSliderCnobValuePosition, PrizmSliderOrientation, PrizmSliderValue } from './types'; import { PrizmAbstractTestId } from '@prizm-ui/core'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-slider', @@ -57,7 +58,7 @@ export class PrizmSliderComponent @ViewChild('track') scrollbar!: ElementRef; - @ViewChildren(PrizmSliderCnobComponent) private _cnobs!: QueryList; + @ViewChildren(PrizmSliderCnobComponent) private _cnobs: QueryList = EMPTY_QUERY; private get cnobs(): Observable> { return this._cnobs.changes.pipe(startWith(this._cnobs)); diff --git a/libs/components/src/lib/components/splitter/splitter.component.ts b/libs/components/src/lib/components/splitter/splitter.component.ts index 4a893af852..c246836b91 100644 --- a/libs/components/src/lib/components/splitter/splitter.component.ts +++ b/libs/components/src/lib/components/splitter/splitter.component.ts @@ -29,6 +29,7 @@ import { PrizmSplitterCustomGutterDirective } from './custom-gutter.directive'; import { PrizmAbstractTestId } from '@prizm-ui/core'; import { CommonModule } from '@angular/common'; import { ResizeObserverModule } from '@ng-web-apis/resize-observer'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; type AreaRealSize = { area: PrizmSplitterAreaComponent; realSize: number; realMinSize: number }; type GutterData = { areaBefore: number; areaAfter: number; order: number }; @@ -55,10 +56,11 @@ export class PrizmSplitterComponent extends PrizmAbstractTestId implements After @ViewChild('container', { static: true }) private containerElement!: ElementRef; @ContentChild(PrizmSplitterCustomGutterDirective) customGutter!: PrizmSplitterCustomGutterDirective; - @ContentChildren(PrizmSplitterAreaComponent) splitterAreaQueryList!: QueryList; + @ContentChildren(PrizmSplitterAreaComponent) splitterAreaQueryList: QueryList = + EMPTY_QUERY; @ViewChildren(PrizmSplitterGutterComponent) - splitterGutterQueryList!: QueryList; + splitterGutterQueryList: QueryList = EMPTY_QUERY; override readonly testId_ = 'ui_splitter'; get gutterElementSize(): number { diff --git a/libs/components/src/lib/components/stepper/stepper-selector.component.ts b/libs/components/src/lib/components/stepper/stepper-selector.component.ts index 2388e9cf54..eb01169a22 100644 --- a/libs/components/src/lib/components/stepper/stepper-selector.component.ts +++ b/libs/components/src/lib/components/stepper/stepper-selector.component.ts @@ -5,6 +5,7 @@ import { PrizmStepperStepDirective } from './stepper-step.directive'; import { PrizmAbstractTestId } from '@prizm-ui/core'; import { CommonModule } from '@angular/common'; import { PrizmIconComponent } from '../icon/icon.component'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-stepper-selector', @@ -28,7 +29,7 @@ export class PrizmStepperSelectorComponent extends PrizmAbstractTestId { @Output() selectStep = new EventEmitter(); @ViewChildren(PrizmStepperSelectorItemDirective) - selectorItems!: QueryList; + selectorItems: QueryList = EMPTY_QUERY; override readonly testId_ = 'ui_stepper--selector'; public clickOnStep(index: number): void { diff --git a/libs/components/src/lib/components/stepper/stepper.component.ts b/libs/components/src/lib/components/stepper/stepper.component.ts index 5d59fb2363..0929a11bcf 100644 --- a/libs/components/src/lib/components/stepper/stepper.component.ts +++ b/libs/components/src/lib/components/stepper/stepper.component.ts @@ -15,6 +15,7 @@ import { PrizmStepperStepDirective } from './stepper-step.directive'; import { PrizmAbstractTestId } from '@prizm-ui/core'; import { CommonModule } from '@angular/common'; import { PrizmStepperSelectorComponent } from './stepper-selector.component'; +import { EMPTY_QUERY } from '@taiga-ui/cdk'; @Component({ selector: 'prizm-stepper', @@ -40,7 +41,7 @@ export class PrizmStepperComponent extends PrizmAbstractTestId implements AfterC @Output() selectStep = new EventEmitter(); @ContentChildren(PrizmStepperStepDirective) - prizmStepperStepDirectiveQL!: QueryList; + prizmStepperStepDirectiveQL: QueryList = EMPTY_QUERY; steps$!: Observable; override readonly testId_ = 'ui_stepper'; diff --git a/libs/components/src/lib/components/table/directives/sort-by.directive.ts b/libs/components/src/lib/components/table/directives/sort-by.directive.ts index 93dfb36c71..b6a7b90859 100644 --- a/libs/components/src/lib/components/table/directives/sort-by.directive.ts +++ b/libs/components/src/lib/components/table/directives/sort-by.directive.ts @@ -5,15 +5,14 @@ import { PrizmSortableDirective } from './sortable.directive'; import { PrizmTableDirective } from './table.directive'; import { PrizmComparator } from '../table.types'; import { prizmDefaultProp } from '@prizm-ui/core'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Directive({ selector: `table[prizmTable][prizmSortBy]`, }) export class PrizmSortByDirective>> { @ContentChildren(PrizmSortableDirective, { descendants: true }) - private readonly sortables: QueryList> = new QueryList< - PrizmSortableDirective - >(); + private readonly sortables: QueryList> = EMPTY_QUERY; @Input() @prizmDefaultProp() diff --git a/libs/components/src/lib/components/table/tbody/tbody.component.ts b/libs/components/src/lib/components/table/tbody/tbody.component.ts index a1e239dbf5..c30b3df972 100644 --- a/libs/components/src/lib/components/table/tbody/tbody.component.ts +++ b/libs/components/src/lib/components/table/tbody/tbody.component.ts @@ -31,6 +31,7 @@ import { PrizmTableSorterService } from '../service'; import { PrizmTableTreeService } from '../service/tree.service'; import { PrizmTableDataSourceInput } from '../table.types'; import { PrizmTrComponent } from '../tr/tr.component'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ // eslint-disable-next-line @angular-eslint/component-selector @@ -134,7 +135,7 @@ export class PrizmTbodyComponent>> readonly row?: PrizmRowDirective; @ContentChildren(forwardRef(() => PrizmTrComponent)) - readonly rows: QueryList> = new QueryList>(); + readonly rows: QueryList> = EMPTY_QUERY; columnsCount = 0; /** diff --git a/libs/components/src/lib/components/table/th-group/th-group.component.ts b/libs/components/src/lib/components/table/th-group/th-group.component.ts index 81b0c8d35b..a44d9c96cf 100644 --- a/libs/components/src/lib/components/table/th-group/th-group.component.ts +++ b/libs/components/src/lib/components/table/th-group/th-group.component.ts @@ -22,6 +22,7 @@ import { PrizmThComponent } from '../th/th.component'; import { moveInEventLoopIteration } from '@prizm-ui/helpers'; import { PrizmTableService } from '../table.service'; import { PrizmThGroupService } from './th-group.service'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ // eslint-disable-next-line @angular-eslint/component-selector @@ -49,14 +50,11 @@ export class PrizmThGroupComponent>> ); } - // @ContentChild(forwardRef(() => PrizmThComponent)) - // readonly th!: PrizmThComponent; - @ContentChildren(forwardRef(() => PrizmThComponent), { descendants: true }) - readonly th!: QueryList>; + readonly th: QueryList> = EMPTY_QUERY; @ContentChildren(forwardRef(() => PrizmHeadDirective)) - readonly heads: QueryList> = new QueryList>(); + readonly heads: QueryList> = EMPTY_QUERY; heads$: Observable[]> | null = null; diff --git a/libs/components/src/lib/components/table/tr/tr.component.ts b/libs/components/src/lib/components/table/tr/tr.component.ts index c6c7fed12d..8e9fe4f9ec 100644 --- a/libs/components/src/lib/components/table/tr/tr.component.ts +++ b/libs/components/src/lib/components/table/tr/tr.component.ts @@ -22,6 +22,7 @@ import { PrizmDestroyService } from '@prizm-ui/helpers'; import { PrizmTableTreeService } from '../service/tree.service'; import { PrizmCellService } from '../directives/cell.service'; import { PrizmTdService } from '../td/td.service'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ // eslint-disable-next-line @angular-eslint/component-selector @@ -52,7 +53,7 @@ export class PrizmTrComponent>> { } @ContentChildren(forwardRef(() => PrizmCellDirective)) - readonly cells: QueryList = new QueryList(); + readonly cells: QueryList = EMPTY_QUERY; readonly cells$ = merge( this.cells.changes, diff --git a/libs/components/src/lib/components/tabs/tabs.component.ts b/libs/components/src/lib/components/tabs/tabs.component.ts index 0082d15f4e..daa096287d 100644 --- a/libs/components/src/lib/components/tabs/tabs.component.ts +++ b/libs/components/src/lib/components/tabs/tabs.component.ts @@ -38,6 +38,7 @@ import { PrizmCounterComponent } from '../counter'; import { PrizmIconModule } from '../icon'; import { PrizmIconTabsPipe } from './pipes/icon-tabs.pipe'; import { prizmIsTextOverflow$ } from '../../util'; +import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-tabs', @@ -84,10 +85,12 @@ export class PrizmTabsComponent extends PrizmAbstractTestId implements OnInit, O @ViewChild('tabsContainer', { static: true }) public tabsContainer!: ElementRef; @ViewChild('tabsDropdown', { static: true }) public tabsDropdown!: PrizmDropdownHostComponent; public tabsMoreDropdown!: PrizmDropdownHostComponent; + @ContentChildren(PrizmTabComponent, { descendants: true }) - public tabElements!: QueryList; + public tabElements: QueryList = EMPTY_QUERY; + @ContentChildren(PrizmTabMenuItemDirective, { read: TemplateRef, descendants: true }) - public menuElements!: QueryList>; + public menuElements: QueryList> = EMPTY_QUERY; override readonly testId_ = 'ui_tabs'; From 0b18db0fc40bad4f58ebc7068c9080b8c053d335 Mon Sep 17 00:00:00 2001 From: Zurab Developer <75216044+ZurabDev@users.noreply.github.com> Date: Thu, 14 Dec 2023 15:21:13 +0300 Subject: [PATCH 2/3] feat(helpers): added empty query getter --- .../components/accordion/accordion.component.ts | 5 ++--- .../breadcrumbs/breadcrumbs.component.ts | 7 +++---- .../src/lib/components/grid/grid.component.ts | 14 +++++++------- .../prizm-navigation-menu-items.component.ts | 4 ++-- .../prizm-navigation-menu.component.ts | 5 ++--- .../src/lib/components/slider/slider.component.ts | 6 +++--- .../lib/components/splitter/splitter.component.ts | 7 +++---- .../stepper/stepper-selector.component.ts | 4 ++-- .../lib/components/stepper/stepper.component.ts | 4 ++-- .../table/directives/sort-by.directive.ts | 4 ++-- .../lib/components/table/tbody/tbody.component.ts | 5 ++--- .../table/th-group/th-group.component.ts | 7 +++---- .../src/lib/components/table/tr/tr.component.ts | 5 ++--- .../src/lib/components/tabs/tabs.component.ts | 12 ++++++++---- .../documentation/documentation.component.ts | 7 ++++--- .../base/src/lib/components/page/page.component.ts | 4 ++-- libs/helpers/src/lib/util/common.ts | 6 ++++++ 17 files changed, 55 insertions(+), 51 deletions(-) diff --git a/libs/components/src/lib/components/accordion/accordion.component.ts b/libs/components/src/lib/components/accordion/accordion.component.ts index 637a3140a4..393180d1db 100644 --- a/libs/components/src/lib/components/accordion/accordion.component.ts +++ b/libs/components/src/lib/components/accordion/accordion.component.ts @@ -9,9 +9,8 @@ import { import { PrizmAccordionItemComponent } from './components/accordion-item/accordion-item.component'; import { merge } from 'rxjs'; import { mapTo, takeUntil } from 'rxjs/operators'; -import { PrizmDestroyService } from '@prizm-ui/helpers'; +import { PrizmDestroyService, prizmEmptyQueryList } from '@prizm-ui/helpers'; import { PrizmAbstractTestId } from '../../abstract/interactive'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-accordion', @@ -24,7 +23,7 @@ import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; export class PrizmAccordionComponent extends PrizmAbstractTestId implements AfterContentInit { @Input() public onlyOneExpanded = false; @ContentChildren(PrizmAccordionItemComponent, { descendants: false }) - accordionItems: QueryList = EMPTY_QUERY; + accordionItems: QueryList = prizmEmptyQueryList(); override readonly testId_ = 'ui_accordion'; diff --git a/libs/components/src/lib/components/breadcrumbs/breadcrumbs.component.ts b/libs/components/src/lib/components/breadcrumbs/breadcrumbs.component.ts index 1237d769fc..e46533a8ef 100644 --- a/libs/components/src/lib/components/breadcrumbs/breadcrumbs.component.ts +++ b/libs/components/src/lib/components/breadcrumbs/breadcrumbs.component.ts @@ -16,14 +16,13 @@ import { } from '@angular/core'; import { IBreadcrumb } from './breadcrumb.interface'; import { animationFrameScheduler, BehaviorSubject, merge, Subject } from 'rxjs'; -import { PrizmDestroyService } from '@prizm-ui/helpers'; +import { PrizmDestroyService, prizmEmptyQueryList } from '@prizm-ui/helpers'; import { debounceTime, observeOn, takeUntil, tap } from 'rxjs/operators'; import { PrizmAbstractTestId } from '../../abstract/interactive'; import { PrizmBreadcrumbDirective } from './breadcrumbs.directive'; import { CommonModule } from '@angular/common'; import { PrizmIconModule } from '../icon'; import { PrizmDropdownHostModule } from '../dropdowns/dropdown-host'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-breadcrumbs', @@ -57,9 +56,9 @@ export class PrizmBreadcrumbsComponent @ViewChild('container', { static: true }) public containerRef!: ElementRef; @ViewChild('breadcrumbsFake', { static: true }) public fakeBreadcrumbContainer!: ElementRef; @ViewChildren('breadcrumb', { read: ElementRef }) public breadcrumbsList: QueryList = - EMPTY_QUERY; + prizmEmptyQueryList(); @ContentChildren(PrizmBreadcrumbDirective) public breadcrumbsItem: QueryList = - EMPTY_QUERY; + prizmEmptyQueryList(); public breadcrumbs$: BehaviorSubject = new BehaviorSubject([]); public breadcrumbsToShow$: BehaviorSubject = new BehaviorSubject([]); diff --git a/libs/components/src/lib/components/grid/grid.component.ts b/libs/components/src/lib/components/grid/grid.component.ts index 2afc41e162..9c6ddecbad 100644 --- a/libs/components/src/lib/components/grid/grid.component.ts +++ b/libs/components/src/lib/components/grid/grid.component.ts @@ -1,18 +1,18 @@ import { - Component, - ChangeDetectionStrategy, - Input, AfterContentInit, + ChangeDetectionStrategy, + Component, ContentChildren, ElementRef, + HostBinding, + Input, QueryList, ViewChild, - HostBinding, } from '@angular/core'; import { PrizmGridItemComponent } from './components/grid-item/grid-item.component'; import { PrizmAbstractTestId } from '../../abstract/interactive'; import { CommonModule } from '@angular/common'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; +import { prizmEmptyQueryList } from '@prizm-ui/helpers'; @Component({ selector: 'prizm-grid', @@ -29,10 +29,10 @@ export class PrizmGridComponent extends PrizmAbstractTestId implements AfterCont @ViewChild('container', { static: true }) container!: ElementRef; @ContentChildren(PrizmGridItemComponent, { read: ElementRef }) - public gridItems: QueryList = EMPTY_QUERY; + public gridItems: QueryList = prizmEmptyQueryList(); @ContentChildren(PrizmGridItemComponent) - public gridItemsData: QueryList = EMPTY_QUERY; + public gridItemsData: QueryList = prizmEmptyQueryList(); override readonly testId_ = 'ui-area--grid'; diff --git a/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu-items/prizm-navigation-menu-items.component.ts b/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu-items/prizm-navigation-menu-items.component.ts index c878ef8f6e..cdfab37933 100644 --- a/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu-items/prizm-navigation-menu-items.component.ts +++ b/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu-items/prizm-navigation-menu-items.component.ts @@ -17,7 +17,7 @@ import { PRIZM_NAVIGATION_MENU_CHILDREN_HANDLER, PrizmNavigationMenuChildrenHand import { PrizmAbstractTestId } from '@prizm-ui/core'; import { PrizmTreeControllerDirective, PrizmTreeModule } from '../../../tree'; import { NgFor } from '@angular/common'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; +import { prizmEmptyQueryList } from '@prizm-ui/helpers'; @Component({ selector: 'prizm-navigation-menu-items', @@ -32,7 +32,7 @@ export class PrizmNavigationMenuItemsComponent< > extends PrizmAbstractTestId { @ViewChildren(PrizmNavigationMenuItemComponent) private menuItemsList: QueryList< PrizmNavigationMenuItemComponent - > = EMPTY_QUERY; + > = prizmEmptyQueryList(); @Output() itemExpandedChanged = new EventEmitter<{ item: InternalPrizmNavigationMenuItem; diff --git a/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu/prizm-navigation-menu.component.ts b/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu/prizm-navigation-menu.component.ts index 5eb95dee8b..fac14c9ce2 100644 --- a/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu/prizm-navigation-menu.component.ts +++ b/libs/components/src/lib/components/navigation-menu/components/prizm-navigation-menu/prizm-navigation-menu.component.ts @@ -15,7 +15,7 @@ import { PrizmNavigationMenuToolbarService } from '../../services/prizm-navigati import { PrizmNavigationMenuService } from '../../services/prizm-navigation-menu.service'; import { Observable } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; -import { PrizmDestroyService } from '@prizm-ui/helpers'; +import { PrizmDestroyService, prizmEmptyQueryList } from '@prizm-ui/helpers'; import { GroupExpandedChangedEvent, ItemExpandedChangedEvent, @@ -35,7 +35,6 @@ import { PrizmButtonModule } from '../../../button'; import { PolymorphOutletDirective, PrizmHoveredModule } from '../../../../directives'; import { PrizmAccordionComponent } from '../../../accordion'; import { PrizmNavigationMenuToolbarComponent } from '../prizm-navigation-menu-toolbar/prizm-navigation-menu-toolbar.component'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-navigation-menu', @@ -61,7 +60,7 @@ export class PrizmNavigationMenuComponent< UserItem extends Omit & { children?: UserItem[] } > extends PrizmAbstractTestId { @ContentChildren(PrizmNavigationMenuGroupComponent) - menuGroups: QueryList> = EMPTY_QUERY; + menuGroups: QueryList> = prizmEmptyQueryList(); @Output() homeClicked = new EventEmitter(); @Output() activeItemChanged = new EventEmitter(); diff --git a/libs/components/src/lib/components/slider/slider.component.ts b/libs/components/src/lib/components/slider/slider.component.ts index 3dd2582855..debd4b7a43 100644 --- a/libs/components/src/lib/components/slider/slider.component.ts +++ b/libs/components/src/lib/components/slider/slider.component.ts @@ -15,14 +15,13 @@ import { ViewChildren, } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; -import { PrizmDestroyService } from '@prizm-ui/helpers'; +import { PrizmDestroyService, prizmEmptyQueryList } from '@prizm-ui/helpers'; import { fromEvent, merge, Observable } from 'rxjs'; import { distinctUntilChanged, map, startWith, switchMap, takeUntil, tap } from 'rxjs/operators'; import { PrizmSliderCnobComponent } from './slider-cnob.component'; import { PrizmSliderCnobValuePosition, PrizmSliderOrientation, PrizmSliderValue } from './types'; import { PrizmAbstractTestId } from '@prizm-ui/core'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-slider', @@ -58,7 +57,8 @@ export class PrizmSliderComponent @ViewChild('track') scrollbar!: ElementRef; - @ViewChildren(PrizmSliderCnobComponent) private _cnobs: QueryList = EMPTY_QUERY; + @ViewChildren(PrizmSliderCnobComponent) private _cnobs: QueryList = + prizmEmptyQueryList(); private get cnobs(): Observable> { return this._cnobs.changes.pipe(startWith(this._cnobs)); diff --git a/libs/components/src/lib/components/splitter/splitter.component.ts b/libs/components/src/lib/components/splitter/splitter.component.ts index c246836b91..081990d199 100644 --- a/libs/components/src/lib/components/splitter/splitter.component.ts +++ b/libs/components/src/lib/components/splitter/splitter.component.ts @@ -19,7 +19,7 @@ import { PrizmSplitterOrientation } from './types'; import { asyncScheduler, BehaviorSubject, fromEvent, merge, Observable } from 'rxjs'; import { map, observeOn, startWith, switchMap, takeUntil, tap, withLatestFrom } from 'rxjs/operators'; -import { PrizmDestroyService } from '@prizm-ui/helpers'; +import { PrizmDestroyService, prizmEmptyQueryList } from '@prizm-ui/helpers'; import { PrizmSplitterGutterComponent } from './gutter/gutter.component'; import { PrizmSplitterAreaComponent } from './area/area.component'; @@ -29,7 +29,6 @@ import { PrizmSplitterCustomGutterDirective } from './custom-gutter.directive'; import { PrizmAbstractTestId } from '@prizm-ui/core'; import { CommonModule } from '@angular/common'; import { ResizeObserverModule } from '@ng-web-apis/resize-observer'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; type AreaRealSize = { area: PrizmSplitterAreaComponent; realSize: number; realMinSize: number }; type GutterData = { areaBefore: number; areaAfter: number; order: number }; @@ -57,10 +56,10 @@ export class PrizmSplitterComponent extends PrizmAbstractTestId implements After @ContentChild(PrizmSplitterCustomGutterDirective) customGutter!: PrizmSplitterCustomGutterDirective; @ContentChildren(PrizmSplitterAreaComponent) splitterAreaQueryList: QueryList = - EMPTY_QUERY; + prizmEmptyQueryList(); @ViewChildren(PrizmSplitterGutterComponent) - splitterGutterQueryList: QueryList = EMPTY_QUERY; + splitterGutterQueryList: QueryList = prizmEmptyQueryList(); override readonly testId_ = 'ui_splitter'; get gutterElementSize(): number { diff --git a/libs/components/src/lib/components/stepper/stepper-selector.component.ts b/libs/components/src/lib/components/stepper/stepper-selector.component.ts index eb01169a22..3af17dd422 100644 --- a/libs/components/src/lib/components/stepper/stepper-selector.component.ts +++ b/libs/components/src/lib/components/stepper/stepper-selector.component.ts @@ -5,7 +5,7 @@ import { PrizmStepperStepDirective } from './stepper-step.directive'; import { PrizmAbstractTestId } from '@prizm-ui/core'; import { CommonModule } from '@angular/common'; import { PrizmIconComponent } from '../icon/icon.component'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; +import { prizmEmptyQueryList } from '@prizm-ui/helpers'; @Component({ selector: 'prizm-stepper-selector', @@ -29,7 +29,7 @@ export class PrizmStepperSelectorComponent extends PrizmAbstractTestId { @Output() selectStep = new EventEmitter(); @ViewChildren(PrizmStepperSelectorItemDirective) - selectorItems: QueryList = EMPTY_QUERY; + selectorItems: QueryList = prizmEmptyQueryList(); override readonly testId_ = 'ui_stepper--selector'; public clickOnStep(index: number): void { diff --git a/libs/components/src/lib/components/stepper/stepper.component.ts b/libs/components/src/lib/components/stepper/stepper.component.ts index 0929a11bcf..8a5b7efee3 100644 --- a/libs/components/src/lib/components/stepper/stepper.component.ts +++ b/libs/components/src/lib/components/stepper/stepper.component.ts @@ -15,7 +15,7 @@ import { PrizmStepperStepDirective } from './stepper-step.directive'; import { PrizmAbstractTestId } from '@prizm-ui/core'; import { CommonModule } from '@angular/common'; import { PrizmStepperSelectorComponent } from './stepper-selector.component'; -import { EMPTY_QUERY } from '@taiga-ui/cdk'; +import { prizmEmptyQueryList } from '@prizm-ui/helpers'; @Component({ selector: 'prizm-stepper', @@ -41,7 +41,7 @@ export class PrizmStepperComponent extends PrizmAbstractTestId implements AfterC @Output() selectStep = new EventEmitter(); @ContentChildren(PrizmStepperStepDirective) - prizmStepperStepDirectiveQL: QueryList = EMPTY_QUERY; + prizmStepperStepDirectiveQL: QueryList = prizmEmptyQueryList(); steps$!: Observable; override readonly testId_ = 'ui_stepper'; diff --git a/libs/components/src/lib/components/table/directives/sort-by.directive.ts b/libs/components/src/lib/components/table/directives/sort-by.directive.ts index b6a7b90859..8f7c6617a9 100644 --- a/libs/components/src/lib/components/table/directives/sort-by.directive.ts +++ b/libs/components/src/lib/components/table/directives/sort-by.directive.ts @@ -5,14 +5,14 @@ import { PrizmSortableDirective } from './sortable.directive'; import { PrizmTableDirective } from './table.directive'; import { PrizmComparator } from '../table.types'; import { prizmDefaultProp } from '@prizm-ui/core'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; +import { prizmEmptyQueryList } from '@prizm-ui/helpers'; @Directive({ selector: `table[prizmTable][prizmSortBy]`, }) export class PrizmSortByDirective>> { @ContentChildren(PrizmSortableDirective, { descendants: true }) - private readonly sortables: QueryList> = EMPTY_QUERY; + private readonly sortables: QueryList> = prizmEmptyQueryList(); @Input() @prizmDefaultProp() diff --git a/libs/components/src/lib/components/table/tbody/tbody.component.ts b/libs/components/src/lib/components/table/tbody/tbody.component.ts index c30b3df972..0a1528080a 100644 --- a/libs/components/src/lib/components/table/tbody/tbody.component.ts +++ b/libs/components/src/lib/components/table/tbody/tbody.component.ts @@ -17,7 +17,7 @@ import { import { CollectionViewer, isDataSource, ListRange } from '@angular/cdk/collections'; import { prizmDefaultProp } from '@prizm-ui/core'; -import { PrizmDestroyService } from '@prizm-ui/helpers'; +import { PrizmDestroyService, prizmEmptyQueryList } from '@prizm-ui/helpers'; import { BehaviorSubject, isObservable, Observable } from 'rxjs'; import { switchMap, takeUntil, tap } from 'rxjs/operators'; import { PolymorphContent } from '../../../directives'; @@ -31,7 +31,6 @@ import { PrizmTableSorterService } from '../service'; import { PrizmTableTreeService } from '../service/tree.service'; import { PrizmTableDataSourceInput } from '../table.types'; import { PrizmTrComponent } from '../tr/tr.component'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ // eslint-disable-next-line @angular-eslint/component-selector @@ -135,7 +134,7 @@ export class PrizmTbodyComponent>> readonly row?: PrizmRowDirective; @ContentChildren(forwardRef(() => PrizmTrComponent)) - readonly rows: QueryList> = EMPTY_QUERY; + readonly rows: QueryList> = prizmEmptyQueryList(); columnsCount = 0; /** diff --git a/libs/components/src/lib/components/table/th-group/th-group.component.ts b/libs/components/src/lib/components/table/th-group/th-group.component.ts index a44d9c96cf..974a1948b0 100644 --- a/libs/components/src/lib/components/table/th-group/th-group.component.ts +++ b/libs/components/src/lib/components/table/th-group/th-group.component.ts @@ -19,10 +19,9 @@ import { PrizmHeadDirective } from '../directives/head.directive'; import { PrizmTableDirective } from '../directives/table.directive'; import { PRIZM_TABLE_PROVIDER } from '../providers/table.provider'; import { PrizmThComponent } from '../th/th.component'; -import { moveInEventLoopIteration } from '@prizm-ui/helpers'; +import { moveInEventLoopIteration, prizmEmptyQueryList } from '@prizm-ui/helpers'; import { PrizmTableService } from '../table.service'; import { PrizmThGroupService } from './th-group.service'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ // eslint-disable-next-line @angular-eslint/component-selector @@ -51,10 +50,10 @@ export class PrizmThGroupComponent>> } @ContentChildren(forwardRef(() => PrizmThComponent), { descendants: true }) - readonly th: QueryList> = EMPTY_QUERY; + readonly th: QueryList> = prizmEmptyQueryList(); @ContentChildren(forwardRef(() => PrizmHeadDirective)) - readonly heads: QueryList> = EMPTY_QUERY; + readonly heads: QueryList> = prizmEmptyQueryList(); heads$: Observable[]> | null = null; diff --git a/libs/components/src/lib/components/table/tr/tr.component.ts b/libs/components/src/lib/components/table/tr/tr.component.ts index 8e9fe4f9ec..f7886ece59 100644 --- a/libs/components/src/lib/components/table/tr/tr.component.ts +++ b/libs/components/src/lib/components/table/tr/tr.component.ts @@ -18,11 +18,10 @@ import { PrizmTableDirective } from '../directives/table.directive'; import { PRIZM_TABLE_PROVIDER } from '../providers/table.provider'; import { PrizmTbodyComponent } from '../tbody/tbody.component'; import { PrizmTableCellStatus } from '../table.types'; -import { PrizmDestroyService } from '@prizm-ui/helpers'; +import { PrizmDestroyService, prizmEmptyQueryList } from '@prizm-ui/helpers'; import { PrizmTableTreeService } from '../service/tree.service'; import { PrizmCellService } from '../directives/cell.service'; import { PrizmTdService } from '../td/td.service'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ // eslint-disable-next-line @angular-eslint/component-selector @@ -53,7 +52,7 @@ export class PrizmTrComponent>> { } @ContentChildren(forwardRef(() => PrizmCellDirective)) - readonly cells: QueryList = EMPTY_QUERY; + readonly cells: QueryList = prizmEmptyQueryList(); readonly cells$ = merge( this.cells.changes, diff --git a/libs/components/src/lib/components/tabs/tabs.component.ts b/libs/components/src/lib/components/tabs/tabs.component.ts index daa096287d..ae4e3db26e 100644 --- a/libs/components/src/lib/components/tabs/tabs.component.ts +++ b/libs/components/src/lib/components/tabs/tabs.component.ts @@ -21,7 +21,12 @@ import { PrizmTabsService } from './tabs.service'; import { PrizmTabComponent } from './components/tab.component'; import { PrizmTabMenuItemDirective } from './tab-menu-item.directive'; import { PrizmDropdownHostComponent } from '../dropdowns/dropdown-host'; -import { PrizmCallFuncPipe, PrizmDestroyService, PrizmLetDirective } from '@prizm-ui/helpers'; +import { + PrizmCallFuncPipe, + PrizmDestroyService, + prizmEmptyQueryList, + PrizmLetDirective, +} from '@prizm-ui/helpers'; import { PrizmTabCanOpen } from './tabs.model'; import { PrizmAbstractTestId } from '../../abstract/interactive'; import { CommonModule } from '@angular/common'; @@ -38,7 +43,6 @@ import { PrizmCounterComponent } from '../counter'; import { PrizmIconModule } from '../icon'; import { PrizmIconTabsPipe } from './pipes/icon-tabs.pipe'; import { prizmIsTextOverflow$ } from '../../util'; -import { EMPTY_QUERY } from '@taiga-ui/cdk/constants/empty'; @Component({ selector: 'prizm-tabs', @@ -87,10 +91,10 @@ export class PrizmTabsComponent extends PrizmAbstractTestId implements OnInit, O public tabsMoreDropdown!: PrizmDropdownHostComponent; @ContentChildren(PrizmTabComponent, { descendants: true }) - public tabElements: QueryList = EMPTY_QUERY; + public tabElements: QueryList = prizmEmptyQueryList(); @ContentChildren(PrizmTabMenuItemDirective, { read: TemplateRef, descendants: true }) - public menuElements: QueryList> = EMPTY_QUERY; + public menuElements: QueryList> = prizmEmptyQueryList(); override readonly testId_ = 'ui_tabs'; diff --git a/libs/doc/base/src/lib/components/documentation/documentation.component.ts b/libs/doc/base/src/lib/components/documentation/documentation.component.ts index ddaa53c83c..0b99be6af6 100644 --- a/libs/doc/base/src/lib/components/documentation/documentation.component.ts +++ b/libs/doc/base/src/lib/components/documentation/documentation.component.ts @@ -12,7 +12,6 @@ import { ViewChildren, } from '@angular/core'; import { - EMPTY_QUERY, tuiHexToRgb, tuiIsNumber, tuiIsString, @@ -89,10 +88,12 @@ export class PrizmDocDocumentationComponent implements AfterContentInit { isAPI = false; @ContentChildren(PrizmDocDocumentationPropertyConnectorDirective) - propertiesConnectors: QueryList> = EMPTY_QUERY; + propertiesConnectors: QueryList> = + prizmEmptyQueryList(); @ViewChildren(PrizmDocDocumentationPropertyConnectorDirective) - propertiesInnerConnectors: QueryList> = EMPTY_QUERY; + propertiesInnerConnectors: QueryList> = + prizmEmptyQueryList(); activeItemIndex = 0; testIdPostfix = ''; diff --git a/libs/doc/base/src/lib/components/page/page.component.ts b/libs/doc/base/src/lib/components/page/page.component.ts index 9bc1224d02..190f3ed83c 100644 --- a/libs/doc/base/src/lib/components/page/page.component.ts +++ b/libs/doc/base/src/lib/components/page/page.component.ts @@ -9,12 +9,12 @@ import { QueryList, SimpleChanges, } from '@angular/core'; -import { EMPTY_QUERY } from '@taiga-ui/cdk'; import { PRIZM_DOC_DEFAULT_TABS } from '../../tokens/default-tabs'; import { PAGE_PROVIDERS, PAGE_SEE_ALSO } from './page.providers'; import { PrizmDocPageTabConnectorDirective } from './page-tab.directive'; import { PrizmPageService } from './page.service'; +import { prizmEmptyQueryList } from '@prizm-ui/helpers'; @Component({ selector: `prizm-doc-page`, @@ -37,7 +37,7 @@ export class PrizmDocPageComponent implements OnChanges { path = ``; @ContentChildren(PrizmDocPageTabConnectorDirective) - readonly tabConnectors: QueryList = EMPTY_QUERY; + readonly tabConnectors: QueryList = prizmEmptyQueryList(); activeItemIndex = NaN; diff --git a/libs/helpers/src/lib/util/common.ts b/libs/helpers/src/lib/util/common.ts index 39be3bdc98..e070959287 100644 --- a/libs/helpers/src/lib/util/common.ts +++ b/libs/helpers/src/lib/util/common.ts @@ -1,3 +1,5 @@ +import { QueryList } from '@angular/core'; + /** * sort number, string, date by asc or desc * */ @@ -23,3 +25,7 @@ export function prizmSort(x: T, y: T, asc = true): number { return result; } + +export function prizmEmptyQueryList() { + return new QueryList(); +} From ba82dbfec6b1124467b0042da14a27f979424e55 Mon Sep 17 00:00:00 2001 From: Zurab Developer <75216044+ZurabDev@users.noreply.github.com> Date: Thu, 14 Dec 2023 15:21:45 +0300 Subject: [PATCH 3/3] feat(helpers): added empty query getter --- .../src/lib/components/documentation/documentation.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/doc/base/src/lib/components/documentation/documentation.component.ts b/libs/doc/base/src/lib/components/documentation/documentation.component.ts index 0b99be6af6..f1e18e16b5 100644 --- a/libs/doc/base/src/lib/components/documentation/documentation.component.ts +++ b/libs/doc/base/src/lib/components/documentation/documentation.component.ts @@ -30,7 +30,7 @@ import { PrizmDocHostElementListenerService } from '../host'; import orderBy from 'lodash-es/orderBy'; import { PrizmDocumentationPropertyType } from '../../types/pages'; import { UntypedFormControl, Validators } from '@angular/forms'; -import { PrizmFormControlHelpers } from '@prizm-ui/helpers'; +import { prizmEmptyQueryList, PrizmFormControlHelpers } from '@prizm-ui/helpers'; // @bad TODO subscribe propertiesConnectors changes // @bad TODO refactor to make more flexible @Component({