Skip to content

Commit

Permalink
fixup! CHE-7040: Add 500 ms. delay in Navigate to file dialog
Browse files Browse the repository at this point in the history
  • Loading branch information
Igor Vinokur committed Jan 5, 2018
1 parent 3b18aaf commit 21e4f80
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
package org.eclipse.che.ide.navigation;

import static java.util.Collections.emptyList;
import static java.util.Collections.sort;
import static org.eclipse.che.ide.api.jsonrpc.Constants.WS_AGENT_JSON_RPC_ENDPOINT_ID;
import static org.eclipse.che.ide.util.NameUtils.getFileExtension;

Expand Down Expand Up @@ -40,6 +39,8 @@
@Singleton
public class NavigateToFilePresenter implements NavigateToFileView.ActionDelegate {

private static final int TYPING_PERIOD_DELAY_MS = 400;

private final EditorAgent editorAgent;
private final RequestTransmitter requestTransmitter;
private final DtoFactory dtoFactory;
Expand All @@ -62,12 +63,6 @@ public NavigateToFilePresenter(
this.dtoFactory = dtoFactory;

this.view.setDelegate(this);

timer =
new Timer() {
@Override
public void run() {}
};
}

/** Show dialog with view for navigation. */
Expand All @@ -91,7 +86,7 @@ public void onFileSelected(Path path) {
}

@Override
public void onFileNameChanged(String fileName) {
public void onFileNameChanged(final String fileName) {
if (fileName.isEmpty()) {
view.showItems(emptyList());
return;
Expand All @@ -102,7 +97,7 @@ public void onFileNameChanged(String fileName) {
.createDto(ProjectSearchRequestDto.class)
.withPath("")
.withName(URL.encodePathSegment(fileName + "*"));
if (timer.isRunning()) {
if (timer != null) {
timer.cancel();
}

Expand All @@ -116,19 +111,25 @@ public void run() {
.methodName("project/search")
.paramsAsDto(requestParams)
.sendAndReceiveResultAsDto(ProjectSearchResponseDto.class, 20_000)
.onSuccess(response -> prepareResults(response))
.onSuccess(
response -> {
// Check that the file name from request corresponds to the actual file name
// from the view.
if (fileName.equals(view.getFileName())) {
prepareResults(response);
}
})
.onFailure(error -> Log.error(getClass(), error.getMessage()))
.onTimeout(
() -> Log.error(getClass(), "Project search request failed due timeout"));
}
};
timer.schedule(500);
timer.schedule(TYPING_PERIOD_DELAY_MS);
}

private void prepareResults(ProjectSearchResponseDto response) {
List<SearchResultDto> results = response.getItemReferences();
sort(
results,
results.sort(
(o1, o2) -> {
String ext1 = getFileExtension(o1.getItemReference().getName());
String ext2 = getFileExtension(o2.getItemReference().getName());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,7 @@ interface ActionDelegate {
* @param items items of suggestions
*/
void showItems(List<SearchResultDto> items);

/** Returns entered file name. */
String getFileName();
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,16 @@
*/
package org.eclipse.che.ide.navigation;

import static com.google.gwt.event.dom.client.KeyCodes.KEY_BACKSPACE;
import static com.google.gwt.event.dom.client.KeyCodes.KEY_DELETE;
import static com.google.gwt.event.dom.client.KeyCodes.KEY_DOWN;
import static com.google.gwt.event.dom.client.KeyCodes.KEY_ENTER;
import static com.google.gwt.event.dom.client.KeyCodes.KEY_ESCAPE;
import static com.google.gwt.event.dom.client.KeyCodes.KEY_PAGEDOWN;
import static com.google.gwt.event.dom.client.KeyCodes.KEY_PAGEUP;
import static com.google.gwt.event.dom.client.KeyCodes.KEY_UP;

import com.google.gwt.dom.client.Style;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.resources.client.CssResource;
Expand Down Expand Up @@ -220,6 +228,11 @@ public void showItems(List<SearchResultDto> items) {
updatePositionAndSize();
}

@Override
public String getFileName() {
return fileName.getText();
}

private void updatePositionAndSize() {
// Update position
setPopupPosition(
Expand Down Expand Up @@ -270,40 +283,41 @@ public void onListItemDoubleClicked(Element listItemBase, SearchResultDto itemDa

@UiHandler("fileName")
void handleKeyDown(KeyDownEvent event) {
switch (event.getNativeKeyCode()) {
case KeyCodes.KEY_UP:
int nativeKeyCode = event.getNativeKeyCode();
switch (nativeKeyCode) {
case KEY_UP:
event.stopPropagation();
event.preventDefault();
if (list != null) {
list.getSelectionModel().selectPrevious();
}
break;

case KeyCodes.KEY_DOWN:
case KEY_DOWN:
event.stopPropagation();
event.preventDefault();
if (list != null) {
list.getSelectionModel().selectNext();
}
break;

case KeyCodes.KEY_PAGEUP:
case KEY_PAGEUP:
event.stopPropagation();
event.preventDefault();
if (list != null) {
list.getSelectionModel().selectPreviousPage();
}
break;

case KeyCodes.KEY_PAGEDOWN:
case KEY_PAGEDOWN:
event.stopPropagation();
event.preventDefault();
if (list != null) {
list.getSelectionModel().selectNextPage();
}
break;

case KeyCodes.KEY_ENTER:
case KEY_ENTER:
event.stopPropagation();
event.preventDefault();
SearchResultDto selectedItem = list.getSelectionModel().getSelectedItem();
Expand All @@ -312,7 +326,7 @@ void handleKeyDown(KeyDownEvent event) {
}
break;

case KeyCodes.KEY_ESCAPE:
case KEY_ESCAPE:
event.stopPropagation();
event.preventDefault();
hidePopup();
Expand All @@ -323,7 +337,15 @@ void handleKeyDown(KeyDownEvent event) {
new Timer() {
@Override
public void run() {
delegate.onFileNameChanged(fileName.getText());
String fileName = NavigateToFileViewImpl.this.fileName.getText();
// Skip handling non letter characters.
if (nativeKeyCode == KEY_BACKSPACE
|| nativeKeyCode == KEY_DELETE
|| fileName
.toLowerCase()
.contains(String.valueOf((char) nativeKeyCode).toLowerCase())) {
delegate.onFileNameChanged(fileName);
}
}
}.schedule(300);
break;
Expand Down

0 comments on commit 21e4f80

Please sign in to comment.