Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
7cc0845
fix(column): Update row island summaries when disabledSummaries changes
georgianastasov Mar 5, 2025
e9088b9
test(grid): fix failing test
georgianastasov Mar 5, 2025
0be13d9
Update codeql-analysis.yml
Mar 5, 2025
fbf1b5f
Merge branch '19.1.x' into ganastasov/fix-15424-19.1.x
georgianastasov Mar 5, 2025
1746f32
refactor(query-builder): drag and drop without DOM manipulations
ivanvpetrov Mar 6, 2025
75c9dc1
test(query-builder): fix failing keyboard test
ivanvpetrov Mar 6, 2025
5190bc1
fix(esf): check for untyped non-string columns when filtering grid th…
teodosiah Mar 7, 2025
7d5f618
fix(query-builder): test improved drag ghost siblings
ivanvpetrov Mar 7, 2025
b641658
fix(query-builder): test mouse drag test
ivanvpetrov Mar 7, 2025
b3d2efc
fix(query-builder): test all passing now
ivanvpetrov Mar 7, 2025
2779468
fix(query-builder): circular reference
ivanvpetrov Mar 7, 2025
217604e
fix(simple-combo): remove text selection trigger and add test (#15468)
Hristo313 Mar 7, 2025
bd84a0c
fix(carousel): mark for check when active slide change
RivaIvanova Mar 7, 2025
c6e564d
fix(query-builder): test mosue drag now passing
ivanvpetrov Mar 10, 2025
e7255a0
fix(calendar): fix week number problems on zoom (#15463)
desig9stein Mar 10, 2025
c5996f9
chore(filter-operands): restore findValueInSet as protected
damyanpetev Mar 4, 2025
f61035b
refactor(grids): move navigation overrides to existing ctor props
damyanpetev Mar 4, 2025
73a9387
fix(elements): export overlay settings enums
damyanpetev Mar 10, 2025
041ff52
docs(filtering): mark operand as internal for now
damyanpetev Mar 10, 2025
9898d98
Merge pull request #15451 from IgniteUI/dpetev/api-analyzer-adjustmen…
damyanpetev Mar 10, 2025
5df2da4
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
97ee8e4
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
dfcbe55
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
cbc5d89
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
62fc540
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
35a5c42
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
c3f73a0
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
9f4005c
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
4dd7da4
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
89101c4
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
522acba
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
57814b8
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
ac55f29
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
cf99cb1
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
4bb68b2
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
78e22e6
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
bf1fa3e
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
f377ca0
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
440c280
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
526413d
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
049a1bd
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
bc8240a
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
9c0a920
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 11, 2025
220d05b
chore(query-builder): constant no longer in use
ivanvpetrov Mar 11, 2025
74e4eb7
refactor(query-builder): class for mouse drag placeholder class
ivanvpetrov Mar 12, 2025
2174a24
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 12, 2025
eeb2402
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 12, 2025
01c4716
Merge branch '19.1.x' into ipetrov/query-builder-drag-and-drop-refactor
ivanvpetrov Mar 12, 2025
e4419df
Merge branch '19.1.x' into rivanova/fix-15469-19.1.x
RivaIvanova Mar 13, 2025
3000304
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 13, 2025
5ec1d0e
fix(query-builder): drag&drop dropped chip highlight bug fixed
ivanvpetrov Mar 13, 2025
a14da94
test(query-builder): exclude disconnecting test
ivanvpetrov Mar 13, 2025
acca8fe
Merge branch '19.1.x' into ganastasov/fix-15424-19.1.x
RivaIvanova Mar 13, 2025
9b10757
fix(query-builder): fix drop placeholder and keyboard ghost element s…
desig9stein Mar 13, 2025
1a0d413
refactor(query-builder): change how drag service is provided
teodosiah Mar 13, 2025
fb827df
fix(query-builder): keyboard ghost element styles shadow based on theme
desig9stein Mar 13, 2025
99f71de
Merge pull request #15456 from IgniteUI/ganastasov/fix-15424-19.1.x
kacheshmarova Mar 14, 2025
dfdbfa1
Merge branch '19.1.x' into rivanova/fix-15469-19.1.x
RivaIvanova Mar 14, 2025
fecf2d6
chore(query-builder): apply code suggestion
ivanvpetrov Mar 14, 2025
2b715fd
fix(query-builder): test style name fix
ivanvpetrov Mar 14, 2025
1941d1f
fix(query-builder): color of the keyboard drop ghost set
ivanvpetrov Mar 14, 2025
ca2df30
fix(query-builder): Use the shadow variable for the chip
desig9stein Mar 14, 2025
d058289
Merge branch '19.1.x' into ipetrov/query-builder-drag-and-drop-refactor
gedinakova Mar 17, 2025
246da2e
Merge pull request #15471 from IgniteUI/rivanova/fix-15469-19.1.x
kacheshmarova Mar 17, 2025
bb84606
fix(AdvancedFiltering): Fixed advanced filtering count #15136 (#15475)
Mar 17, 2025
4f5da5d
Merge branch 'ipetrov/query-builder-drag-and-drop-refactor' into ipet…
ivanvpetrov Mar 18, 2025
fdf5cce
Merge branch 'ipetrov/query-builder-drag-and-drop-refactor-remake' in…
ivanvpetrov Mar 18, 2025
2c57466
test(query-builder): add keyboard drag commit and cancel tests
ivanvpetrov Mar 18, 2025
a1f899e
fix(query-builder): remove fix and fdescribe
ivanvpetrov Mar 18, 2025
e94b76a
chore(query-builder): removed todo comment
ivanvpetrov Mar 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -107,12 +107,12 @@
@extend %filter-tree__expression-item !optional;
}

@include e(expression-item-ghost) {
@include e(expression-item-drop-ghost) {
@extend %filter-tree__expression-item-ghost !optional;
}

@include e(expression-item-drop-ghost) {
@extend %filter-tree__expression-drop-item-ghost !optional;
@include e(expression-item-keyboard-ghost) {
@extend %filter-tree__expression-item-keyboard-ghost !optional;
}

@include e(expression-column) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -480,18 +480,25 @@


%filter-tree__expression-item-ghost {
&.igx-chip__item {
.igx-chip__item {
@include type-style('body-2');

--ig-body-2-text-transform: unset;

padding-inline: rem(32px);

color: color($color: 'gray', $variant: if($theme-variant == 'light', 600, 900));
border: rem(1px) dashed color($color: 'gray', $variant: if($theme-variant == 'light', 600, 300));
background: transparent;
}

color: color($color: 'gray', $variant: if($theme-variant == 'light', 600, 900));
border: rem(1px) dashed color($color: 'gray', $variant: if($theme-variant == 'light', 600, 300));
background: transparent;
}

%filter-tree__expression-item-keyboard-ghost {
.igx-chip__item {
box-shadow: var(--ghost-shadow);
background: var(--ghost-background);
}
}

%filter-tree__expression-column {
padding: 0 rem(8px);
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -865,7 +865,7 @@ export class QueryBuilderFunctions {
}

public static getChipContent(chip: Element): string {
if (chip.checkVisibility()) {
if (chip && chip.checkVisibility()) {
let text: string = '';

Array.from(chip.querySelectorAll('span')).forEach(element => {
Expand All @@ -883,7 +883,8 @@ export class QueryBuilderFunctions {

public static getDropGhost(fixture: ComponentFixture<any>): Element {
var expressionsContainer = QueryBuilderFunctions.getQueryBuilderExpressionsContainer(fixture);
return expressionsContainer.querySelector(`div.${QueryBuilderSelectors.FILTER_TREE_EXPRESSION_ITEM_DROP_GHOST}`);
return expressionsContainer.querySelector(`div.${QueryBuilderSelectors.FILTER_TREE_EXPRESSION_ITEM_DROP_GHOST}`) ??
expressionsContainer.querySelector(`div.${QueryBuilderSelectors.FILTER_TREE_EXPRESSION_ITEM_KEYBOARD_GHOST}`);
}

public static getDropGhostBounds(fixture: ComponentFixture<any>): DOMRect {
Expand All @@ -910,4 +911,27 @@ export class QueryBuilderFunctions {
dragDirective.onPointerUp({ pointerId: 1, pageX: X, pageY: Y });
}
}

public static getDropGhostAndItsSiblings(fixture: ComponentFixture<any>): [Element, string, string, string[]] {
const dropGhost = this.getDropGhost(fixture);
const newChipContents = QueryBuilderFunctions.GetChipsContentAsArray(fixture);
let prevElement: string, nextElement: string;

if (dropGhost) {
if (dropGhost.previousElementSibling?.className &&
dropGhost.previousElementSibling?.className?.indexOf(QueryBuilderSelectors.FILTER_TREE_SUBQUERY) !== -1) {
prevElement = QueryBuilderFunctions.getChipContent(dropGhost.previousElementSibling.previousElementSibling);
} else if (dropGhost.previousElementSibling?.previousElementSibling) {
prevElement = QueryBuilderFunctions.getChipContent(dropGhost.previousElementSibling);
}

nextElement = QueryBuilderFunctions.getChipContent(dropGhost.nextElementSibling?.nextElementSibling);
nextElement ??= QueryBuilderFunctions.getChipContent(dropGhost.nextElementSibling?.nextElementSibling?.nextElementSibling?.nextElementSibling);
}

prevElement ??= null;
nextElement ??= null;

return [dropGhost, prevElement, nextElement, newChipContents];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -125,14 +125,24 @@

<ng-template #operandTemplate let-expressionItem>
@if (!expressionItem.inEditMode) {
@if(dragService.dropGhostExpression && expressionItem === dragService.dropGhostExpression && dragService.isKeyboardDrag === false){
<div class="igx-filter-tree__expression-item igx-filter-tree__expression-item-drop-ghost">
<igx-chip [data]="expressionItem">
{{this.resourceStrings.igx_query_builder_drop_ghost_text}}
</igx-chip>
</div>
} @else {
<div
#dragRef
igxDrop
(enter)="dragService.onChipEnter(dragRef, expressionItem)"
(over)="dragService.onDivOver(dragRef, expressionItem)"
(leave)="dragService.onChipLeave()"
(dropped)="dragService.onDivDropped(expressionItem)"
class="igx-filter-tree__expression-item"
[ngClass]="{
'igx-filter-tree__expression-item': true,
'igx-filter-tree__expression-item-keyboard-ghost': expressionItem === dragService.dropGhostExpression
}"
(mouseenter)="expressionItem.hovered = true"
(mouseleave)="expressionItem.hovered = false"
(focusin)="onExpressionFocus(expressionItem)"
Expand Down Expand Up @@ -263,6 +273,7 @@
}
</div>
}
}
<div #editingInputsContainer class="igx-filter-tree__subquery" >
@if (expressionItem.inEditMode) {
<div
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,40 +68,53 @@ const DEFAULT_CHIP_FOCUS_DELAY = 50;
templateUrl: './query-builder-tree.component.html',
host: { 'class': 'igx-query-builder-tree' },
imports: [
DatePipe,
FormsModule,
IgxButtonDirective,
IgxCheckboxComponent,
IgxChipComponent,
IgxComboComponent,
IgxComboHeaderDirective,
IgxDatePickerComponent,
IgxDateTimeEditorDirective,
IgxDialogComponent,
IgxDragIgnoreDirective,
IgxDropDirective,
IgxDropDownComponent,
IgxDropDownItemComponent,
IgxDropDownItemNavigationDirective,
IgxFieldFormatterPipe,
IgxIconButtonDirective,
IgxIconComponent,
IgxInputDirective,
IgxInputGroupComponent,
IgxOverlayOutletDirective,
IgxPickerClearComponent,
IgxPickerToggleComponent,
IgxPrefixDirective,
IgxSelectComponent,
IgxSelectItemComponent,
IgxTimePickerComponent,
IgxTooltipDirective,
IgxTooltipTargetDirective,
NgClass,
NgTemplateOutlet
]
DatePipe,
FormsModule,
IgxButtonDirective,
IgxCheckboxComponent,
IgxChipComponent,
IgxComboComponent,
IgxComboHeaderDirective,
IgxDatePickerComponent,
IgxDateTimeEditorDirective,
IgxDialogComponent,
IgxDragIgnoreDirective,
IgxDropDirective,
IgxDropDownComponent,
IgxDropDownItemComponent,
IgxDropDownItemNavigationDirective,
IgxFieldFormatterPipe,
IgxIconButtonDirective,
IgxIconComponent,
IgxInputDirective,
IgxInputGroupComponent,
IgxOverlayOutletDirective,
IgxPickerClearComponent,
IgxPickerToggleComponent,
IgxPrefixDirective,
IgxSelectComponent,
IgxSelectItemComponent,
IgxTimePickerComponent,
IgxTooltipDirective,
IgxTooltipTargetDirective,
NgClass,
NgTemplateOutlet
],
providers: [
IgxQueryBuilderDragService
],
})
export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
/**
* @hidden @internal
*/
public _expressionTree: IExpressionTree;

/**
* @hidden @internal
*/
public _expressionTreeCopy: IExpressionTree;

/**
* @hidden @internal
*/
Expand Down Expand Up @@ -285,8 +298,11 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
@ViewChild('groupContextMenuDropDown', { read: IgxDropDownComponent })
private groupContextMenuDropDown: IgxDropDownComponent;

/**
* @hidden @internal
*/
@ViewChildren(IgxChipComponent, { read: IgxChipComponent })
private expressionsChips: QueryList<IgxChipComponent>;
public expressionsChips: QueryList<IgxChipComponent>;

@ViewChild('editingInputsContainer', { read: ElementRef })
protected set editingInputsContainer(value: ElementRef) {
Expand Down Expand Up @@ -456,7 +472,6 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
private _prevFocusedContainer: ElementRef;
private _expandedExpressions: IFilteringExpression[] = [];
private _fields: FieldType[];
private _expressionTree: IExpressionTree;
private _locale;
private _entityNewValue: EntityType;
private _resourceStrings = getCurrentResourceStrings(QueryBuilderResourceStringsEN);
Expand All @@ -472,7 +487,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
/**
* Returns if the fields combo at the root level is disabled.
*/
public get disableReturnFieldsChange(): boolean {
public get disableReturnFieldsChange(): boolean {

return !this.selectedEntity || this.queryBuilder.disableReturnFieldsChange;
}
Expand Down Expand Up @@ -519,11 +534,12 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
}

constructor(public cdr: ChangeDetectorRef,
public dragService: IgxQueryBuilderDragService,
protected platform: PlatformUtil,
protected el: ElementRef,
private elRef: ElementRef,
@Inject(LOCALE_ID) protected _localeId: string) {
this.locale = this.locale || this._localeId;
this.dragService.register(this, elRef);
}

/**
Expand Down Expand Up @@ -842,7 +858,10 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
}
}

private deleteItem = (expressionItem: ExpressionItem, skipEmit: boolean = false) => {
/**
* @hidden @internal
*/
public deleteItem = (expressionItem: ExpressionItem, skipEmit: boolean = false) => {
if (!expressionItem.parent) {
this.rootGroup = null;
this.currentGroup = null;
Expand Down Expand Up @@ -1025,16 +1044,13 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
this.deleteItem(expressionItem);
}

private focusChipAfterDrag = (index: number) => {
this._lastFocusedChipIndex = index;
this.focusEditedExpressionChip();
}

/**
* @hidden @internal
*/
public dragService: IgxQueryBuilderDragService = new IgxQueryBuilderDragService(this, this.el, this.deleteItem, this.focusChipAfterDrag);

public focusChipAfterDrag = (index: number) => {
this._lastFocusedChipIndex = index;
this.focusEditedExpressionChip();
}
/**
* @hidden @internal
*/
Expand Down Expand Up @@ -1136,8 +1152,8 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
expressionItem.expression.condition.name :
null;
this.searchValue.value = expressionItem.expression.searchVal instanceof Set ?
Array.from(expressionItem.expression.searchVal) :
expressionItem.expression.searchVal;
Array.from(expressionItem.expression.searchVal) :
expressionItem.expression.searchVal;

expressionItem.inEditMode = true;
this._editedExpression = expressionItem;
Expand Down Expand Up @@ -1172,7 +1188,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
input?.focus();
}

(this.editingInputs?.nativeElement.parentElement as HTMLElement)?.scrollIntoView({block: "nearest", inline: "nearest"});
(this.editingInputs?.nativeElement.parentElement as HTMLElement)?.scrollIntoView({ block: "nearest", inline: "nearest" });
}

/**
Expand Down Expand Up @@ -1312,7 +1328,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
* @hidden @internal
*/
public invokeClick(eventArgs: KeyboardEvent) {
if (!this.dragService.dropGhostChipNode && this.platform.isActivationKey(eventArgs)) {
if (!this.dragService.dropGhostExpression && this.platform.isActivationKey(eventArgs)) {
eventArgs.preventDefault();
(eventArgs.currentTarget as HTMLElement).click();
}
Expand Down Expand Up @@ -1544,7 +1560,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
return groupItem;
}

for (let i = 0 ; i < expressionTree.filteringOperands.length; i++) {
for (let i = 0; i < expressionTree.filteringOperands.length; i++) {
const expr = expressionTree.filteringOperands[i];

if (isTree(expr)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ export const QueryBuilderSelectors = {
FILTER_TREE_EXPRESSION_CONTEXT_MENU: IGX_FILTER_TREE + '__expression-context-menu',
FILTER_TREE_EXPRESSION_ITEM: IGX_FILTER_TREE + '__expression-item',
FILTER_TREE_EXPRESSION_ITEM_DROP_GHOST: IGX_FILTER_TREE + '__expression-item-drop-ghost',
FILTER_TREE_EXPRESSION_ITEM_KEYBOARD_GHOST: IGX_FILTER_TREE + '__expression-item-keyboard-ghost',
FILTER_TREE_EXPRESSION_ITEM_GHOST: IGX_FILTER_TREE + '__expression-item-ghost',
FILTER_TREE_EXPRESSION_SECTION: IGX_FILTER_TREE + '__expression-section',

Expand All @@ -80,10 +81,4 @@ export const QueryBuilderSelectors = {
QUERY_BUILDER_BODY: IGX_QUERY_BUILDER + '__main',
QUERY_BUILDER_HEADER: IGX_QUERY_BUILDER + '__header',
QUERY_BUILDER_TREE: IGX_QUERY_BUILDER + '-tree',

VIABLE_DROP_AREA:
`.${IGX_FILTER_TREE}__expression-item[igxDrop]:not(.${IGX_FILTER_TREE + '__expression-item-drop-ghost'}),` + /*Condition chip*/
`.${IGX_FILTER_TREE}__subquery:has([igxDrop]),` + /*Chip in edit*/
`.${IGX_FILTER_TREE}__buttons > .igx-button[igxDrop]:first-of-type,` + /*Add Condition Button*/
`.${IGX_FILTER_TREE}__expression-context-menu[igxDrop]` /*AND/OR group root*/
}
Loading
Loading