mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-18 19:40:55 +01:00
Converted the pinned applications selector to a typeahead.
Summary: Fixes T11513. Previously the selector was just a giant dropdown which was just... just too much. Now there's a handy typeahead. Test Plan: Happy Path: Go to `Settings -> Home Page -> Pin Application`, start typing in the form then select one of the options. Click on "Pin Application". The application should now be in the list. Other paths: - Type nothing into the box and submit, nothing should happen. - Choose an application that is already pinned. The list should stay the same. - Type nonsense into the box and submit, nothing should happen. Reviewers: epriestley, #blessed_reviewers Reviewed By: epriestley, #blessed_reviewers Subscribers: chad, Korvin, epriestley, yelirekim Maniphest Tasks: T11513 Differential Revision: https://secure.phabricator.com/D16459
This commit is contained in:
parent
90294713e8
commit
067d12d716
2 changed files with 20 additions and 6 deletions
|
@ -38,7 +38,9 @@ final class PhabricatorApplicationDatasource
|
|||
->setDisplayType($application->getShortDescription())
|
||||
->setImageuRI($application->getIconURI())
|
||||
->setPriorityType('apps')
|
||||
->setImageSprite('phabricator-search-icon '.$img);
|
||||
->setImageSprite('phabricator-search-icon '.$img)
|
||||
->setIcon($application->getIcon())
|
||||
->addAttribute($application->getShortDescription());
|
||||
}
|
||||
|
||||
return $this->filterResultsAgainstTokens($results);
|
||||
|
|
|
@ -67,7 +67,19 @@ final class PhabricatorHomePreferencesSettingsPanel
|
|||
unset($options['PhabricatorApplicationsApplication']);
|
||||
|
||||
if ($request->isFormPost()) {
|
||||
$pin = $request->getStr('pin');
|
||||
$pins = $request->getArr('pin');
|
||||
$phid = head($pins);
|
||||
$app = id(new PhabricatorApplicationQuery())
|
||||
->setViewer($viewer)
|
||||
->withPHIDs(array($phid))
|
||||
->executeOne();
|
||||
if ($app) {
|
||||
$pin = get_class($app);
|
||||
} else {
|
||||
// This likely means the user submitted an empty form
|
||||
// which will cause nothing to happen.
|
||||
$pin = '';
|
||||
}
|
||||
if (isset($options[$pin]) && !in_array($pin, $pinned)) {
|
||||
$pinned[] = $pin;
|
||||
|
||||
|
@ -78,18 +90,18 @@ final class PhabricatorHomePreferencesSettingsPanel
|
|||
}
|
||||
}
|
||||
|
||||
$options_control = id(new AphrontFormSelectControl())
|
||||
$options_control = id(new AphrontFormTokenizerControl())
|
||||
->setName('pin')
|
||||
->setLabel(pht('Application'))
|
||||
->setOptions($options)
|
||||
->setDisabledOptions(array_keys($app_list));
|
||||
->setDatasource(new PhabricatorApplicationDatasource())
|
||||
->setLimit(1);
|
||||
|
||||
$form = id(new AphrontFormView())
|
||||
->setViewer($viewer)
|
||||
->addHiddenInput('add', 'true')
|
||||
->appendRemarkupInstructions(
|
||||
pht('Choose an application to pin to your home page.'))
|
||||
->appendChild($options_control);
|
||||
->appendControl($options_control);
|
||||
|
||||
return $this->newDialog()
|
||||
->setWidth(AphrontDialogView::WIDTH_FORM)
|
||||
|
|
Loading…
Reference in a new issue