Goal: Allow the user to delete a record by dragging a row from an
AdvancedDataGrid, dropping it onto a trash-can icon and verify the
user meant to do that via a popup alert with "OK" and "Cancel" buttons.

What is working:
    * Dragging/Dropping a row onto the trash icon.
    * If the user clicks the "OK" button, the record is deleted.
    * If the user clicks the "Cancel" button, the operation is canceled.

Problem: After the user clicks the "Cancel" button and the popup alert
closes, no rows in the ADG can be dragged. I've discovered that after
sorting the ADG, by clicking on a column header, the user can begin
dragging rows again.

Code Flow:
   1. Drag/drop ADG row onto trash icon.
   2. Display confirmation Alert box.
   3. If user clicked "Cancel" button, redisplay the ADG.

Code:
<mx:Image source="{trashImage}" buttonMode="true" 
toolTip="drag a participant here to delete them from the project"
dragDrop="deleteParticipantDrop(event)"
dragEnter="deleteParticipantEnter(event)" 
dragExit="deleteParticipantDragExit(event)" top="4" right="122"
id="image2" />  

// trashImage Event Handlers:
private function deleteParticipantEnter(event:DragEvent):void
{
        var component:IUIComponent = IUIComponent(event.currentTarget);
        dragComponent = component;
        DragManager.acceptDragDrop(component);
        DragManager.showFeedback(DragManager.MOVE);
        deleteParticipantDragEvent = event;
}

private function deleteParticipantDrop(event:DragEvent):void
{
        var selectedKitNum:String = memberRpt.selectedItem.KitNum;
        var selectedName:String = memberRpt.selectedItem.ParticipantName;
        var component:IUIComponent = IUIComponent(event.currentTarget);
        dragComponent = component;
        DragManager.acceptDragDrop(component);
        isEditingParticipantInfo = false;
        isDeletingParticipant = true;
        deleteParticipantDropEvent = event;
        event.stopImmediatePropagation(); // Added as per mrm
        alert.confirm("Are you sure you want to delete this
participant, Kit #" + memberRpt.selectedItem.KitNum + " ("  + 
                memberRpt.selectedItem.ParticipantName + ") from the
project?  This cannot be reversed!!  An email will be " +
                "sent to notify this participant and you will receive
a copy of it for your records.", confirmRemoveParticipant);
}

private function deleteParticipantDragExit(event:DragEvent):void
{
        var component:IUIComponent = IUIComponent(event.currentTarget);
        dragComponent = component;
        DragManager.acceptDragDrop(component);
        DragManager.showFeedback(DragManager.NONE);
}

private function confirmRemoveParticipant(event:CloseEvent):void
{
        if (event.detail == Alert.YES)
        {
                deleteReason =
DeleteParticipantTitleWindow(PopUpManager.createPopUp( this,
DeleteParticipantTitleWindow , true));
                dispatchEvent(deleteParticipantDropEvent); // Added as
per mrm
                PopUpManager.centerPopUp(deleteReason);
                deleteReason.showCloseButton = true;
                deleteReason.title = "Reason for removal from project";
                deleteReason.addEventListener("close",
cleanupRemoveParticipant);
                deleteReason["cancelButton"].addEventListener("click",
cleanupRemoveParticipant);
                deleteReason["okButton"].addEventListener("click",
finalizeDeleteParticipant);
                isDeletingParticipant = false; 
        }
        else
        {
                cleanupRemoveParticipant();
        }
}

private function cleanupRemoveParticipant(event:Event = null):void
{
        memberRpt.invalidateDisplayList();
        memberRpt.executeBindings();
        if (deleteReason != null)
        {
                PopUpManager.removePopUp(deleteReason);
                deleteReason = null;
        }
}

public function finalizeDeleteParticipant(event:Event):void
{
        if (deleteReason.reason.text != null)
        {
                selectedReportItem = memberRpt.selectedItem;
                selectedReportItemIndex = memberRpt.selectedIndex;
                memberReportData.removeItemAt(selectedReportItemIndex);
        }
        else
        {
                alert.info("You must provide a reason for removing a
participant from your project!!");
        }

        cleanupRemoveParticipant();
}

Reply via email to