From c72e2f35f3dba4638f31bccd5a96a07916394825 Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 12 Jun 2014 13:22:12 -0700 Subject: [PATCH] Edit dashboard panels in a dialog instead of on a separate page Summary: When you "Edit Panel" on a dashboard, pop a dialog instead of redirecting to a different page. Test Plan: Edited a panel from a dashboard; edited a panel from the panel workflow. Reviewers: chad Reviewed By: chad Subscribers: epriestley Differential Revision: https://secure.phabricator.com/D9499 --- ...habricatorDashboardPanelEditController.php | 23 +++++++++++++----- ...abricatorDashboardPanelRenderingEngine.php | 1 + .../PhabricatorDashboardRenderingEngine.php | 1 + src/view/AphrontDialogView.php | 24 ++++++++++++++++--- 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/applications/dashboard/controller/PhabricatorDashboardPanelEditController.php b/src/applications/dashboard/controller/PhabricatorDashboardPanelEditController.php index c8d42f6629..2c949564ef 100644 --- a/src/applications/dashboard/controller/PhabricatorDashboardPanelEditController.php +++ b/src/applications/dashboard/controller/PhabricatorDashboardPanelEditController.php @@ -121,6 +121,7 @@ final class PhabricatorDashboardPanelEditController $form = id(new AphrontFormView()) ->setUser($viewer) + ->addHiddenInput('dashboardID', $request->getInt('dashboardID')) ->appendChild( id(new AphrontFormTextControl()) ->setLabel(pht('Name')) @@ -142,12 +143,6 @@ final class PhabricatorDashboardPanelEditController $field_list->appendFieldsToForm($form); - $form - ->appendChild( - id(new AphrontFormSubmitControl()) - ->setValue($button) - ->addCancelButton($cancel_uri)); - $crumbs = $this->buildApplicationCrumbs(); $crumbs->addTextCrumb( pht('Panels'), @@ -162,6 +157,22 @@ final class PhabricatorDashboardPanelEditController $crumbs->addTextCrumb(pht('Edit')); } + if ($request->isAjax()) { + return $this->newDialog() + ->setTitle($header) + ->setWidth(AphrontDialogView::WIDTH_FORM) + ->setValidationException($validation_exception) + ->appendChild($form->buildLayoutView()) + ->addCancelButton($cancel_uri) + ->addSubmitButton($button); + } else { + $form + ->appendChild( + id(new AphrontFormSubmitControl()) + ->setValue($button) + ->addCancelButton($cancel_uri)); + } + $box = id(new PHUIObjectBoxView()) ->setHeaderText($header) ->setValidationException($validation_exception) diff --git a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php index 91771cb05a..35023570a1 100644 --- a/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php +++ b/src/applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php @@ -236,6 +236,7 @@ final class PhabricatorDashboardPanelRenderingEngine extends Phobject { } $action_edit = id(new PHUIIconView()) ->setIconFont('fa-pencil') + ->setWorkflow(true) ->setHref((string) $edit_uri); $header->addAction($action_edit); diff --git a/src/applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php b/src/applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php index c64d8f0489..8c37e78a0b 100644 --- a/src/applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php +++ b/src/applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php @@ -40,6 +40,7 @@ final class PhabricatorDashboardRenderingEngine extends Phobject { } else { $h_mode = PhabricatorDashboardPanelRenderingEngine::HEADER_MODE_NORMAL; } + foreach ($panel_grid_locations as $column => $panel_column_locations) { $panel_phids = $panel_column_locations; $column_panels = array_select_keys($panels, $panel_phids); diff --git a/src/view/AphrontDialogView.php b/src/view/AphrontDialogView.php index 9a71350136..ba8b2556ce 100644 --- a/src/view/AphrontDialogView.php +++ b/src/view/AphrontDialogView.php @@ -19,8 +19,10 @@ final class AphrontDialogView extends AphrontView { private $disableWorkflowOnSubmit; private $disableWorkflowOnCancel; private $width = 'default'; - private $errors; + private $errors = array(); private $flush; + private $validationException; + const WIDTH_DEFAULT = 'default'; const WIDTH_FORM = 'form'; @@ -162,6 +164,12 @@ final class AphrontDialogView extends AphrontView { return $this->disableWorkflowOnCancel; } + public function setValidationException( + PhabricatorApplicationTransactionValidationException $ex = null) { + $this->validationException = $ex; + return $this; + } + final public function render() { require_celerity_resource('aphront-dialog-view-css'); @@ -267,9 +275,19 @@ final class AphrontDialogView extends AphrontView { $children = $this->renderChildren(); - if ($this->errors) { + $errors = $this->errors; + + $ex = $this->validationException; + $exception_errors = null; + if ($ex) { + foreach ($ex->getErrors() as $error) { + $errors[] = $error->getMessage(); + } + } + + if ($errors) { $children = array( - id(new AphrontErrorView())->setErrors($this->errors), + id(new AphrontErrorView())->setErrors($errors), $children); }