Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Query-builder conditions Drag&Drop functionality (take 2 - no chip gaps) #15122

Merged
Changes from 1 commit
Commits
Show all changes
144 commits
Select commit Hold shift + click to select a range
4131e24
feat(query-builder): add initial drag and drop functionality
ivanvpetrov Nov 22, 2024
b37a8c1
feat(query-builder): add drag and drop functionality 2
ivanvpetrov Nov 22, 2024
273fb12
feat(query-builder): add code clean up
ivanvpetrov Nov 22, 2024
b791a81
feat(query-builder): edit code clean
ivanvpetrov Nov 22, 2024
01b8615
feat(query-builder): fix big improvement in drag and drop
ivanvpetrov Nov 22, 2024
39be52e
feat(query-builder): add drop at north of a chip functionality added
ivanvpetrov Nov 25, 2024
7009f7f
feat(query-builder): add drop at addCondition button
ivanvpetrov Nov 26, 2024
e924129
feat(query-builder): fix drop ghost behavior on addCondition
ivanvpetrov Nov 26, 2024
a123d7b
feat(query-builder): edit switch gap for padding
ivanvpetrov Nov 26, 2024
0945919
feat(query-builder): edit switch gap for padding 2
ivanvpetrov Nov 26, 2024
ee80747
feat(query-builder): refactor drag and drop with no gap
ivanvpetrov Nov 27, 2024
5d2d4e0
feat(query-builder): refactor almost done
ivanvpetrov Nov 27, 2024
7b63988
feat(query-builder): fix move to addCondition. code cleanup
ivanvpetrov Nov 27, 2024
c5c3074
feat(query-builder): fix chip move bug and other bugs
ivanvpetrov Nov 28, 2024
2e11edf
feat(query-builder): add cursor change
ivanvpetrov Dec 3, 2024
28b6076
feat(query-builder): fix more css. padding replaced with margin
ivanvpetrov Dec 3, 2024
fd478da
feat(query-builder): add make edited condition a dropzone too
ivanvpetrov Dec 3, 2024
fdc8837
feat(query-builder): add chips can be dragged only when in edin mode
ivanvpetrov Dec 3, 2024
7982502
feat(query-builder): fix more css margin
ivanvpetrov Dec 3, 2024
8caa97e
feat(query-builder): add mousemove listener for ghost removal
ivanvpetrov Dec 3, 2024
e11116b
feat(query-builder): fix more css gaps
ivanvpetrov Dec 5, 2024
1ccfa71
feat(query-builder): fix bug where movestart is fired, though draggab…
ivanvpetrov Dec 5, 2024
502185d
feat(query-builder): add ghost adjacency calced by it's chip rather n…
ivanvpetrov Dec 5, 2024
346a6a5
feat(query-builder): fix removed duplicated reference
ivanvpetrov Dec 5, 2024
12b1172
feat(query-builder): add group opearator word
ivanvpetrov Dec 5, 2024
4db0605
feat(query-builder): add keyboard drag&drop working
ivanvpetrov Dec 6, 2024
438657f
refactor(query-builder): remove QB chip selection (#15142)
teodosiah Dec 11, 2024
1719c65
feat(query-builder): chore code cleanup
ivanvpetrov Dec 12, 2024
617f343
feat(query-builder): fix few bugs with keyboard drag&drop
ivanvpetrov Dec 12, 2024
38ce0a8
fix(query-builder): remove add buttons on inner group level
teodosiah Dec 12, 2024
09c7bcc
feat(query-builder): add keyboard drop over edited condition
ivanvpetrov Dec 12, 2024
388e3bc
feat(query-builder): fix bug where chip drops on wrong place in edge …
ivanvpetrov Dec 12, 2024
1027d9f
feat(query-builder): add keyboard drop over +Condition button
ivanvpetrov Dec 12, 2024
510a61e
feat(query-builder): add drag icon in condition chip
ivanvpetrov Dec 20, 2024
b0dd4f8
fix(query-builder): comment unused context menu close btn
teodosiah Jan 8, 2025
4b64c96
refactor(query-builder): update base chip is collapsed when drag is i…
ivanvpetrov Jan 10, 2025
12648f4
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
ivanvpetrov Jan 10, 2025
5624e83
refactor(query-builder): update whole row is a drop area now
ivanvpetrov Jan 10, 2025
cedf384
fix(query-builder): keyboard event listener now prevents default beha…
ivanvpetrov Jan 13, 2025
1d35a2d
fix(query-builder): drop gost now has fixed text for mouse drag
ivanvpetrov Jan 13, 2025
74971c4
Merge branch 'dmdimitrov/query-builder-improvements' into ipetrov/que…
ivanvpetrov Jan 14, 2025
405b1dc
test(query-builder): initial tests refactoring - remove selection (#1…
teodosiah Jan 14, 2025
994ae4a
fix(query-builder): several bugs with drag&drop
ivanvpetrov Jan 14, 2025
7b8c3d9
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
ivanvpetrov Jan 14, 2025
df39928
fix(query-builder): drag indicator selector improvement
ivanvpetrov Jan 14, 2025
72d0407
test(query-builder): add describe for drag and drop tests
ivanvpetrov Jan 14, 2025
d6f47e3
fix(query-builder): focus out related bugs now fixed
ivanvpetrov Jan 15, 2025
11fb4a4
test(query-builder): drag test added
ivanvpetrov Jan 16, 2025
7561bf7
feat(query-builder): drag&drop group root is now drop zone
ivanvpetrov Jan 16, 2025
d5d014f
feat(query-builder): drag zone AND/OR group root added
ivanvpetrov Jan 17, 2025
ce125ad
feat(query-builder): add context menu drop down for group change
igdmdimitrov Jan 17, 2025
9c781b9
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
igdmdimitrov Jan 17, 2025
e43289c
Query Builder initially empty state (#15237)
teodosiah Jan 20, 2025
5e55d31
feat(query-builder): add group context menu tests
igdmdimitrov Jan 21, 2025
e7b8e47
fix(query-builder): exit edit mode on chip/add button click (#15207)
teodosiah Jan 22, 2025
9137955
test(*): Adding initial drag & drop tests
gedinakova Jan 22, 2025
b2ef3df
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
gedinakova Jan 22, 2025
984cb9c
test(query-builder): fix failing tests
teodosiah Jan 23, 2025
3ddb070
test(query-builder): remove fdescribe in QB spec file
teodosiah Jan 23, 2025
cadc62c
test(*): Adding more drag & drop tests
gedinakova Jan 23, 2025
ace3565
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
gedinakova Jan 23, 2025
12d5b3c
feat(query-builder): fix group context menu navigation
igdmdimitrov Jan 23, 2025
7e3812d
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
igdmdimitrov Jan 23, 2025
5bdf8c4
refactor(query-builder): change add button drop-down start poit to left
teodosiah Jan 24, 2025
b8eb84b
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
teodosiah Jan 24, 2025
081e627
fix(query-builder): clear group context menu selection
igdmdimitrov Jan 24, 2025
e546d77
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
igdmdimitrov Jan 24, 2025
a9ed4ec
test(*): Polished drag & drop tests
gedinakova Jan 24, 2025
4649667
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
gedinakova Jan 24, 2025
5175672
feat(query-builder): tests adjustments
igdmdimitrov Jan 24, 2025
f54f65f
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
igdmdimitrov Jan 24, 2025
e5b4fe1
fix(query-builder): fixed main tree selector
ivanvpetrov Jan 27, 2025
d571e48
refactor(query-builder): header legend removed
ivanvpetrov Jan 27, 2025
7d4665d
refactor(query-builder): label moved as placeholder for filter select
ivanvpetrov Jan 27, 2025
738ee81
fix(query-builder): catch block typo
ivanvpetrov Jan 27, 2025
af501fa
refactor(query-builder): revert prevent exit edit of inner query
teodosiah Jan 27, 2025
c30873a
fix(query-builder): use expressionTree operator if contextualGroup is…
igdmdimitrov Jan 27, 2025
50dafe8
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
igdmdimitrov Jan 27, 2025
49e06ee
fix(query-builder): removed tests and related chore for QB legend
ivanvpetrov Jan 27, 2025
ff28edb
refactor(query-builder): initial styling commit
desig9stein Jan 27, 2025
9b2fa6d
refactor(query-builder): exit edit mode on chip drop instead of move …
teodosiah Jan 28, 2025
69277f0
test(query-builder): refactor classes in tests after styling changes
teodosiah Jan 28, 2025
9285013
fix(query-builder): test fixed mouse drag test
ivanvpetrov Jan 28, 2025
948851f
fix(advanced-filtering): store operator on empty state
igdmdimitrov Jan 28, 2025
5754c19
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
igdmdimitrov Jan 28, 2025
ba7affe
fix(query-builder): drag adjusted to new igx-filter-tree__subquery class
ivanvpetrov Jan 28, 2025
d6d9470
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
ivanvpetrov Jan 28, 2025
c0a48d0
test(query-builder): add for keyboard drag&drop
ivanvpetrov Jan 28, 2025
1532dae
feat(query-builder): hide add condition and group when hasEditedExpre…
igdmdimitrov Jan 29, 2025
107599d
refactor(query-builder): fox bootstrap spacing and bring back the cla…
desig9stein Jan 28, 2025
7c0cba6
refactor(query-builder): prepare the styles for other themes
desig9stein Jan 29, 2025
6e87fa2
refactor(query-builder): make the add group button flat
desig9stein Jan 29, 2025
3449331
feat(query-builder): use getOperator
igdmdimitrov Jan 29, 2025
eb3eac3
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
igdmdimitrov Jan 29, 2025
6069cfd
refactor(query-builder): commit inner queries through parent correctly
teodosiah Jan 29, 2025
dd61a8a
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
teodosiah Jan 29, 2025
f6a071c
fix(query-builder): drop ghost now positioned correctly over edited chip
ivanvpetrov Jan 29, 2025
8801510
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
ivanvpetrov Jan 29, 2025
2067649
fix(query-builder): test fixed two tests
ivanvpetrov Jan 29, 2025
b18fe5e
fix(query-builder): test timing issue
ivanvpetrov Jan 29, 2025
b097c9a
build(igniteui-theming): bump to latest beta
desig9stein Jan 29, 2025
781eb0a
refactor(filtering): update styles
desig9stein Jan 29, 2025
83c0719
fix(query-builder): test simplified test
ivanvpetrov Jan 29, 2025
889f10d
refactor(query-builder): fix ghost colors
desig9stein Jan 29, 2025
66a00b9
fix(query-builder): test fixed drag over button test
ivanvpetrov Jan 29, 2025
a79de55
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
ivanvpetrov Jan 29, 2025
4765be4
Adding `disableEntityChange` property (#15301)
gedinakova Jan 29, 2025
f6851ef
fix(query-builder): fix chip draggable expression changed
igdmdimitrov Jan 29, 2025
b8692c3
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
igdmdimitrov Jan 29, 2025
2e57659
refactor(query-builder): change the size of indigo input from 1 to 2
desig9stein Jan 30, 2025
fbf4953
fix(query-builder): drop on new group working again
ivanvpetrov Jan 30, 2025
a793b09
fix(query-builder): drop ghost for group root now in proper place
ivanvpetrov Jan 30, 2025
cc4b799
fix(query-builder): drop ghost for add button now in proper place
ivanvpetrov Jan 30, 2025
6005e76
fix(query-builder): Make sure that date and time picker a stretched, …
desig9stein Jan 30, 2025
aa419f6
fix(query-builder): update theming version in all package.json files
teodosiah Jan 30, 2025
a13df48
fix(query-builder): remove 'where' span from grid AF
teodosiah Jan 30, 2025
c25ec0b
fix(query-builder): add group in nested query
teodosiah Jan 30, 2025
9733474
fix(query-builder): drop ghost for group root now in proper place for…
ivanvpetrov Jan 30, 2025
b531469
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
ivanvpetrov Jan 30, 2025
c99ff17
fix(query-builder): drop next and previuos chip logic
ivanvpetrov Jan 30, 2025
e33df44
fix(query-builder): drop proper targetExpression in nested groups
ivanvpetrov Jan 30, 2025
aa0721f
refactor(query-builder): dragdrop logic for keyboard drag
ivanvpetrov Jan 31, 2025
e604963
fix(query-builder): fix for comments
desig9stein Jan 31, 2025
7d2249a
build(igniteui-theming): bump to latest beta
desig9stein Jan 31, 2025
00b67ff
feat(query-builder): focus last edited expression chip (#15303)
teodosiah Jan 31, 2025
1c3a913
fix(query-builder): bug where new conditions don't have parent
ivanvpetrov Jan 31, 2025
79c05c5
fix(query-builder): fix for comments
desig9stein Jan 31, 2025
a0078f0
fix(*): Bumped theming beta to 2.
gedinakova Jan 31, 2025
87ece07
fix(query-builder): test all drag&drop test passing now
ivanvpetrov Feb 3, 2025
dbe59c1
feat(query-builder): select default condition on field selection
igdmdimitrov Feb 3, 2025
96251cd
Merge branch 'ipetrov/query-builder-drag-and-drop-nogap' of https://g…
igdmdimitrov Feb 3, 2025
79dc9d7
fix(query-builder): fix for comments
desig9stein Feb 3, 2025
8668b6b
refactor(query-builder): include qb inside a igx-dialog in the sample
desig9stein Feb 3, 2025
1f2eb95
refactor(query-builder): add the ability to close the dialog on outsi…
desig9stein Feb 3, 2025
ae13ef4
build(igniteui-theming): bump to latest beta
desig9stein Feb 4, 2025
a5a0c91
feat(query-builder): change nested query value placeholder & refactor…
teodosiah Feb 4, 2025
6ab28fb
test(query-builder): fix edit inputs states checks
teodosiah Feb 4, 2025
4c0089c
test(query-builder): fix children classes checks
teodosiah Feb 4, 2025
bde4780
refactor(query-builder): service for drag&drop introduced
ivanvpetrov Feb 4, 2025
cddb4c3
Merge branch 'dmdimitrov/query-builder-improvements' into ipetrov/que…
igdmdimitrov Feb 5, 2025
1729ede
test(query-builder): tree root group buttons visibility checks
teodosiah Feb 5, 2025
ccf65a2
chore(*): update angular to 19.1.3
igdmdimitrov Feb 5, 2025
71f43be
Merge pull request #15336 from IgniteUI/dmdimitrov/query-builder-merge
igdmdimitrov Feb 5, 2025
18e8e12
Merge branch 'dmdimitrov/query-builder-improvements' into ipetrov/que…
igdmdimitrov Feb 5, 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
Prev Previous commit
Next Next commit
feat(query-builder): add ghost adjacency calced by it's chip rather n…
…ot mouse
ivanvpetrov committed Dec 5, 2024
commit 502185dfc428b5852a4dd3f67391339ee0b0faa8
Original file line number Diff line number Diff line change
@@ -948,14 +948,13 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
public dropUnder: boolean;
public ghostChip: Node;
private ghostChipMousemoveSubscription: Subscription;
//hysteresis used when dragging towards and away from chip, to prevent drop area chip flickering
private vicinityHysteresis = {
enterRight: 1.2,
leaveLeft: 1.5,
leaveRight: 0.8,
leaveUp: 0.8,
leaveDown: 1.2,
entering: 30,
leaving: 100,
}

//Chip can be dragged if it's tree is in edit mode and there is no inner query that's been edited
public canBeDragged(): boolean {
return this.isInEditMode && (!this.innerQueries || this.innerQueries.length == 0 || !this.innerQueries?.some(q => q.isInEditMode()))
}
@@ -986,7 +985,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
//On entering a drop area of another chip
public onDivEnter(event: IDropBaseEventArgs, targetDragElement: HTMLElement, targetExpressionItem: ExpressionItem) {
//If entering the div, at least close to the contained chip, behave like the chip was entered
if ((targetDragElement.children[0].getBoundingClientRect().right * this.vicinityHysteresis.enterRight) > event.pageX) {
if (this.chipsAreNearBy(targetDragElement.children[0] as HTMLElement, this.ghostChipElement, this.vicinityHysteresis.entering)) {
this.onChipEnter(event, targetDragElement, targetExpressionItem, true)
}
else if (this.targetElement) {
@@ -1009,15 +1008,17 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
this.targetExpressionItem = targetExpressionItem;

//Determine the middle point of the chip. (fromDiv - get the div's chip)
const appendUnder = fromDiv ? this.mouseInLowerPart(event, targetDragElement.children[0] as HTMLElement) : this.mouseInLowerPart(event, targetDragElement);
const appendUnder = fromDiv ? this.ghostInLowerPart(event, targetDragElement.children[0] as HTMLElement) : this.ghostInLowerPart(event, targetDragElement);

this.createDropGhostChip(targetDragElement, appendUnder);
}

//On moving the dragged chip in a drop area
public onDivOver(event: IDropBaseEventArgs, targetDragElement: HTMLElement, targetExpressionItem: ExpressionItem) {
//If over the div, at least close to the contained chip, behave like chipOver. If not behave like chipLeave
if ((targetDragElement.children[0].getBoundingClientRect().right * this.vicinityHysteresis.enterRight) > event.pageX) {
if (this.chipsAreNearBy(targetDragElement.children[0] as HTMLElement,
this.ghostChipElement,
(this.targetExpressionItem ? this.vicinityHysteresis.leaving : this.vicinityHysteresis.entering))) {
if (this.targetExpressionItem) {
this.onChipOver(event, targetDragElement, true)
}
@@ -1034,7 +1035,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
if (!this.sourceElement || !this.sourceExpressionItem) return;

//Determine the middle point of the chip. (fromDiv - get the div's chip)
const appendUnder = fromDiv ? this.mouseInLowerPart(event, targetDragElement.children[0] as HTMLElement) : this.mouseInLowerPart(event, targetDragElement);
const appendUnder = fromDiv ? this.ghostInLowerPart(event, targetDragElement.children[0] as HTMLElement) : this.ghostInLowerPart(event, targetDragElement);

this.createDropGhostChip(targetDragElement, appendUnder);
}
@@ -1052,10 +1053,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {

//if there is ghost chip and the mouse is still close enough to it don't trigger leave
if (ghostCoordinates &&
mouseCoordinates.pageX >= ghostCoordinates.left * this.vicinityHysteresis.leaveRight &&
mouseCoordinates.pageX <= ghostCoordinates.right * this.vicinityHysteresis.leaveLeft &&
mouseCoordinates.pageY >= ghostCoordinates.top * this.vicinityHysteresis.leaveUp &&
mouseCoordinates.pageY <= ghostCoordinates.bottom * this.vicinityHysteresis.leaveDown) {
this.chipsAreNearBy(this.ghostChip?.firstChild as HTMLElement, this.ghostChipElement, this.vicinityHysteresis.leaving)) {
return;
}

@@ -1112,8 +1110,23 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
}
}

private mouseInLowerPart(event: IDropBaseEventArgs | IChipEnterDragAreaEventArgs, ofElement: HTMLElement) {
return ((event.originalEvent as any).pageY >= (ofElement.getBoundingClientRect().top + ofElement.getBoundingClientRect().bottom) / 2)
//Check if one element is overlapping or close to another one
private chipsAreNearBy(chip1: HTMLElement, chip2: HTMLElement, maxDistance: number) {
const chip1Bounds = chip1.getBoundingClientRect();
const chip2Bounds = chip2.getBoundingClientRect();

return !(chip1Bounds.right < chip2Bounds.left - maxDistance ||
chip1Bounds.left > chip2Bounds.right + maxDistance ||
chip1Bounds.bottom < chip2Bounds.top - maxDistance ||
chip1Bounds.top > chip2Bounds.bottom + maxDistance);
}

//Checks if the dragged ghost is north or south of a target element's center
private ghostInLowerPart(event: IDropBaseEventArgs | IChipEnterDragAreaEventArgs, ofElement: HTMLElement) {
const ghostBounds = this.ghostChipElement.getBoundingClientRect();
const targetBounds = ofElement.getBoundingClientRect();

return ((ghostBounds.top + ghostBounds.bottom) / 2) >= ((targetBounds.top + targetBounds.bottom) / 2);
}

//Make a copy of the drag chip and place it in the DOM north or south of the drop chip
@@ -1164,16 +1177,19 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
this.setDragCursor('grab');
}

//Get the dragged ghost as a HTMLElement
private get ghostChipElement(): HTMLElement {
return (document.querySelector('.igx-chip__ghost[ghostclass="igx-chip__ghost"]') as HTMLElement);
}

//Set the cursor when dragging a ghost
private setDragCursor(cursor: string) {
if (this.ghostChipElement) {
this.ghostChipElement.style.cursor = cursor;
}
}

//Execute the drop
private moveDraggedChipToNewLocation(appendToExpressionItem: ExpressionItem, fromAddConditionBtn?: boolean) {
//Copy dragged chip
let dragCopy = { ...this.sourceExpressionItem };
@@ -1187,6 +1203,7 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
this.deleteItem(this.sourceExpressionItem);
}

//Reset Drag&Drop vars. Optionally the drag source vars too
private resetDragAndDrop(clearDragged: boolean) {
this.targetExpressionItem = null;
this.targetElement = null;