Skip to content

Commit ead66fc

Browse files
[Drag&Drop] Add stopPropagation to DropZone (#4045)
* Add stopPropagation to allow for nested DropZones (#3925) * Use parameter to set stopPropagation * Add test for StopPropagation parameter --------- Co-authored-by: Denis Voituron <[email protected]>
1 parent 19cfe96 commit ead66fc

File tree

5 files changed

+73
-0
lines changed

5 files changed

+73
-0
lines changed

examples/Demo/Shared/Microsoft.FluentUI.AspNetCore.Components.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4535,6 +4535,11 @@
45354535
This event is fired when an element is dropped on a valid drop target.
45364536
</summary>
45374537
</member>
4538+
<member name="P:Microsoft.FluentUI.AspNetCore.Components.FluentDropZone`1.StopPropagation">
4539+
<summary>
4540+
Gets or sets a way to prevent further propagation of the current event in the capturing and bubbling phases.
4541+
</summary>
4542+
</member>
45384543
<member name="P:Microsoft.FluentUI.AspNetCore.Components.FluentDropZone`1.IsOver">
45394544
<summary />
45404545
</member>

src/Core/Components/Drag/FluentDropZone.razor

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
class=@ClassValue
88
style=@StyleValue
99
dragged-over=@IsOver
10+
@ondrop:stopPropagation="@StopPropagation"
11+
@ondragenter:stopPropagation="@StopPropagation"
12+
@ondragend:stopPropagation="@StopPropagation"
13+
@ondragover:stopPropagation="@StopPropagation"
14+
@ondragleave:stopPropagation="@StopPropagation"
15+
@ondragstart:stopPropagation="@StopPropagation"
1016
@ondragstart=@OnDragStartHandler
1117
@ondragover=@OnDragOverHandler
1218
@ondragover:preventDefault="@Droppable"

src/Core/Components/Drag/FluentDropZone.razor.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,12 @@ public partial class FluentDropZone<TItem> : FluentComponentBase
8282
[Parameter]
8383
public Action<FluentDragEventArgs<TItem>>? OnDropEnd { get; set; }
8484

85+
/// <summary>
86+
/// Gets or sets a way to prevent further propagation of the current event in the capturing and bubbling phases.
87+
/// </summary>
88+
[Parameter]
89+
public bool StopPropagation { get; set; }
90+
8591
/// <summary />
8692
private bool IsOver { get; set; } = false;
8793

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
<div>
3+
<div draggable="true" blazor:ondrop:stoppropagation="" blazor:ondragenter:stoppropagation="" blazor:ondragend:stoppropagation="" blazor:ondragover:stoppropagation="" blazor:ondragleave:stoppropagation="" blazor:ondragstart:stoppropagation="" blazor:ondragstart="1" blazor:ondragover="2" blazor:ondragenter="3" blazor:ondragleave="4" blazor:ondragend="5" blazor:ondrop="6" blazor:ondrop:preventdefault="" b-qxma62j335="">Item 1</div>
4+
<div blazor:ondrop:stoppropagation="" blazor:ondragenter:stoppropagation="" blazor:ondragend:stoppropagation="" blazor:ondragover:stoppropagation="" blazor:ondragleave:stoppropagation="" blazor:ondragstart:stoppropagation="" blazor:ondragstart="7" blazor:ondragover="8" blazor:ondragover:preventdefault="" blazor:ondragenter="9" blazor:ondragenter:preventdefault="" blazor:ondragleave="10" blazor:ondragleave:preventdefault="" blazor:ondragend="11" blazor:ondrop="12" blazor:ondrop:preventdefault="" b-qxma62j335="">Item 2</div>
5+
</div>

tests/Core/Drag/FluentDragTests.cs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,55 @@ public void FluentDrag_SimpleTest()
5757
// Assert
5858
cut.Verify();
5959
}
60+
61+
[Fact]
62+
public void FluentDrag_StopPropagationTest()
63+
{
64+
// Arrange
65+
using var ctx = new TestContext();
66+
67+
// Act
68+
var cut = ctx.RenderComponent<FluentDragContainer<int>>(parameters =>
69+
{
70+
parameters.Add(p => p.OnDragStart, (e) => { });
71+
parameters.Add(p => p.OnDragEnd, (e) => { });
72+
parameters.Add(p => p.OnDragEnter, (e) => { });
73+
parameters.Add(p => p.OnDragOver, (e) => { });
74+
parameters.Add(p => p.OnDragLeave, (e) => { });
75+
parameters.Add(p => p.OnDropEnd, (e) => { });
76+
77+
parameters.AddChildContent<FluentDropZone<int>>(zone =>
78+
{
79+
zone.Add(p => p.Draggable, true);
80+
zone.Add(p => p.Item, 1);
81+
zone.AddChildContent("Item 1");
82+
83+
zone.Add(p => p.OnDragStart, (e) => { });
84+
zone.Add(p => p.OnDragEnd, (e) => { });
85+
zone.Add(p => p.OnDragEnter, (e) => { });
86+
zone.Add(p => p.OnDragOver, (e) => { });
87+
zone.Add(p => p.OnDragLeave, (e) => { });
88+
zone.Add(p => p.OnDropEnd, (e) => { });
89+
zone.Add(p => p.StopPropagation, true);
90+
});
91+
92+
parameters.AddChildContent<FluentDropZone<int>>(zone =>
93+
{
94+
zone.Add(p => p.Droppable, true);
95+
zone.Add(p => p.Item, 2);
96+
zone.AddChildContent("Item 2");
97+
98+
zone.Add(p => p.OnDragStart, (e) => { });
99+
zone.Add(p => p.OnDragEnd, (e) => { });
100+
zone.Add(p => p.OnDragEnter, (e) => { });
101+
zone.Add(p => p.OnDragOver, (e) => { });
102+
zone.Add(p => p.OnDragLeave, (e) => { });
103+
zone.Add(p => p.OnDropEnd, (e) => { });
104+
zone.Add(p => p.StopPropagation, true);
105+
});
106+
});
107+
108+
// Assert
109+
cut.Verify();
110+
}
60111
}

0 commit comments

Comments
 (0)