Improve application query UI/UX

Summary:
Ref T2625. @chad, you might have some feedback here. The behaviors this implements are:

  - When the user selects "Advanced Search", we show the full search UI and no results (for performance and clarity).
  - When the user submits a search which //is not// a named search, we show the full search UI and the "Save Custom Query..." button.
  - When the user submits a search which //is// a named search, we show "Results for search X." with an "Edit Query..." button. The button expands the search form.
  - When the user selects a builtin query (like "All Pastes"), we don't show any search UI, but I'm probably going to make this behave more like named searches.

Test Plan:
{F44346}

{F44347}

Reviewers: chad, btrahan, blc

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2625

Differential Revision: https://secure.phabricator.com/D6063
This commit is contained in:
epriestley
2013-05-29 14:00:52 -07:00
parent d0b9b6c908
commit 545dbabbca
6 changed files with 261 additions and 112 deletions

View File

@@ -32,7 +32,7 @@ abstract class PhabricatorPasteController extends PhabricatorController {
$nav->addFilter('savedqueries', pht('Edit Queries...'));
$nav->addLabel(pht('Search'));
$nav->addFilter('filter/advanced', pht('Advanced Search'));
$nav->addFilter('query/advanced', pht('Advanced Search'));
$nav->selectFilter(null);

View File

@@ -27,59 +27,95 @@ final class PhabricatorPasteListController extends PhabricatorPasteController {
$nav = $this->buildSideNavView();
if ($engine->isBuiltinQuery($this->queryKey)) {
$saved_query = $engine->buildSavedQueryFromBuiltin($this->queryKey);
} else {
$named_query = null;
$run_query = true;
$query_key = $this->queryKey;
if ($this->queryKey == 'advanced') {
$run_query = false;
$query_key = $request->getStr('query');
}
if ($engine->isBuiltinQuery($query_key)) {
$saved_query = $engine->buildSavedQueryFromBuiltin($query_key);
$named_query = $engine->getBuiltinQuery($query_key);
} else if ($query_key) {
$saved_query = id(new PhabricatorSavedQueryQuery())
->setViewer($user)
->withQueryKeys(array($this->queryKey))
->withQueryKeys(array($query_key))
->executeOne();
if (!$saved_query) {
return new Aphront404Response();
}
}
$query = id(new PhabricatorPasteSearchEngine())
->buildQueryFromSavedQuery($saved_query);
$named_query = id(new PhabricatorNamedQueryQuery())
->setViewer($user)
->withQueryKeys(array($saved_query->getQueryKey()))
->withEngineClassNames(array(get_class($engine)))
->withUserPHIDs(array($user->getPHID()))
->executeOne();
} else {
$saved_query = $engine->buildSavedQueryFromRequest($request);
}
$filter = $nav->selectFilter(
'query/'.$saved_query->getQueryKey(),
'filter/advanced');
'query/advanced');
$pager = new AphrontCursorPagerView();
$pager->readFromRequest($request);
$pastes = $query->setViewer($request->getUser())
->needContent(true)
->executeWithCursorPager($pager);
$form = id(new AphrontFormView())
->setNoShading(true)
->setUser($user);
$list = $this->buildPasteList($pastes);
$list->setPager($pager);
$list->setNoDataString(pht("No results found for this query."));
$engine->buildSearchForm($form, $saved_query);
if ($this->queryKey !== null || $filter == "filter/advanced") {
$form = id(new AphrontFormView())
->setNoShading(true)
->setUser($user);
$submit = id(new AphrontFormSubmitControl())
->setValue(pht('Execute Query'));
$engine->buildSearchForm($form, $saved_query);
$submit = id(new AphrontFormSubmitControl())
->setValue(pht('Execute Query'));
if ($filter == 'filter/advanced') {
$submit->addCancelButton(
'/search/edit/'.$saved_query->getQueryKey().'/',
pht('Save Custom Query...'));
}
$form->appendChild($submit);
$filter_view = id(new AphrontListFilterView())->appendChild($form);
$nav->appendChild($filter_view);
if ($run_query && !$named_query) {
$submit->addCancelButton(
'/search/edit/'.$saved_query->getQueryKey().'/',
pht('Save Custom Query...'));
}
$nav->appendChild($list);
$form->appendChild($submit);
$filter_view = id(new AphrontListFilterView())->appendChild($form);
if ($run_query && $named_query) {
if ($named_query->getIsBuiltin()) {
$description = pht(
'Showing results for query "%s".',
$named_query->getQueryName());
} else {
$description = pht(
'Showing results for saved query "%s".',
$named_query->getQueryName());
}
$filter_view->setCollapsed(
pht('Edit Query...'),
pht('Hide Query'),
$description,
$this->getApplicationURI('query/advanced/?query='.$query_key));
}
$nav->appendChild($filter_view);
if ($run_query) {
$query = id(new PhabricatorPasteSearchEngine())
->buildQueryFromSavedQuery($saved_query);
$pager = new AphrontCursorPagerView();
$pager->readFromRequest($request);
$pastes = $query->setViewer($request->getUser())
->needContent(true)
->executeWithCursorPager($pager);
$list = $this->buildPasteList($pastes);
$list->setPager($pager);
$list->setNoDataString(pht("No results found for this query."));
$nav->appendChild($list);
}
$crumbs = $this
->buildApplicationCrumbs($nav)