@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Make column reordering after edits on workboards more general

Summary:
Ref T5476. Currently, the task edit code assumes it knows what the UI looks like and sends back where on the column an item should be inserted.

This is buggy after adding filters, and relatively complex. Instead, send down the ordering on the whole column and sort it in the UI. This is a bit simpler overall and more general. It makes it easier to further generalize this code for T5476.

Test Plan:
- Edited a task on a board, changing priority. Saw it reorder properly.
- Edited a task on a board in a field of other tasks at the same top-level priority. Saw it refresh without reordering.

Reviewers: chad

Reviewed By: chad

Subscribers: epriestley

Maniphest Tasks: T5476

Differential Revision: https://secure.phabricator.com/D9832

+60 -46
+11 -11
resources/celerity/map.php
··· 411 411 'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '92918fcb', 412 412 'rsrc/js/application/ponder/behavior-votebox.js' => '4e9b766b', 413 413 'rsrc/js/application/projects/behavior-boards-dropdown.js' => '0ec56e1d', 414 - 'rsrc/js/application/projects/behavior-project-boards.js' => '1cb113dc', 414 + 'rsrc/js/application/projects/behavior-project-boards.js' => 'c6b95cbd', 415 415 'rsrc/js/application/projects/behavior-project-create.js' => '065227cc', 416 416 'rsrc/js/application/releeph/releeph-preview-branch.js' => 'b2b4fbaf', 417 417 'rsrc/js/application/releeph/releeph-request-state-change.js' => 'ab836011', ··· 637 637 'javelin-behavior-policy-control' => 'f3fef818', 638 638 'javelin-behavior-policy-rule-editor' => '92918fcb', 639 639 'javelin-behavior-ponder-votebox' => '4e9b766b', 640 - 'javelin-behavior-project-boards' => '1cb113dc', 640 + 'javelin-behavior-project-boards' => 'c6b95cbd', 641 641 'javelin-behavior-project-create' => '065227cc', 642 642 'javelin-behavior-refresh-csrf' => '7814b593', 643 643 'javelin-behavior-releeph-preview-branch' => 'b2b4fbaf', ··· 966 966 0 => 'javelin-install', 967 967 1 => 'javelin-util', 968 968 2 => 'phabricator-keyboard-shortcut-manager', 969 - ), 970 - '1cb113dc' => 971 - array( 972 - 0 => 'javelin-behavior', 973 - 1 => 'javelin-dom', 974 - 2 => 'javelin-util', 975 - 3 => 'javelin-stratcom', 976 - 4 => 'javelin-workflow', 977 - 5 => 'phabricator-draggable-list', 978 969 ), 979 970 '1d8ad5c3' => 980 971 array( ··· 1848 1839 1 => 'javelin-install', 1849 1840 2 => 'javelin-uri', 1850 1841 3 => 'javelin-util', 1842 + ), 1843 + 'c6b95cbd' => 1844 + array( 1845 + 0 => 'javelin-behavior', 1846 + 1 => 'javelin-dom', 1847 + 2 => 'javelin-util', 1848 + 3 => 'javelin-stratcom', 1849 + 4 => 'javelin-workflow', 1850 + 5 => 'phabricator-draggable-list', 1851 1851 ), 1852 1852 'ca3f91eb' => 1853 1853 array(
+8 -14
src/applications/maniphest/controller/ManiphestTaskEditController.php
··· 365 365 $potential_col_tasks = id(new ManiphestTaskQuery()) 366 366 ->setViewer($user) 367 367 ->withAllProjects(array($column->getProjectPHID())) 368 - ->withStatuses(ManiphestTaskStatus::getOpenStatusConstants()) 369 - ->setOrderBy(ManiphestTaskQuery::ORDER_PRIORITY) 370 368 ->execute(); 371 369 $potential_col_tasks = mpull( 372 370 $potential_col_tasks, ··· 395 393 $column_tasks = id(new ManiphestTaskQuery()) 396 394 ->setViewer($user) 397 395 ->withPHIDs($column_task_phids) 398 - ->withStatuses(ManiphestTaskStatus::getOpenStatusConstants()) 399 - ->setOrderBy(ManiphestTaskQuery::ORDER_PRIORITY) 400 396 ->execute(); 401 397 } 402 - $column_task_phids = mpull($column_tasks, 'getPHID'); 403 - $task_phid = $task->getPHID(); 404 - $after_phid = null; 405 - foreach ($column_task_phids as $phid) { 406 - if ($phid == $task_phid) { 407 - break; 408 - } 409 - $after_phid = $phid; 410 - } 398 + 399 + $sort_map = mpull( 400 + $column_tasks, 401 + 'getPrioritySortVector', 402 + 'getPHID'); 403 + 411 404 $data = array( 412 - 'insertAfterPHID' => $after_phid); 405 + 'sortMap' => $sort_map, 406 + ); 413 407 break; 414 408 case 'task': 415 409 default:
+7
src/applications/maniphest/storage/ManiphestTask.php
··· 161 161 return ManiphestTaskStatus::isClosedStatus($this->getStatus()); 162 162 } 163 163 164 + public function getPrioritySortVector() { 165 + return array( 166 + $this->getPriority(), 167 + -$this->getSubpriority(), 168 + ); 169 + } 170 + 164 171 165 172 /* -( Markup Interface )--------------------------------------------------- */ 166 173
+34 -21
webroot/rsrc/js/application/projects/behavior-project-boards.js
··· 24 24 JX.DOM.replace(item, JX.$H(response.task)); 25 25 } 26 26 27 + function colsort(u, v) { 28 + var ud = JX.Stratcom.getData(u).sort || []; 29 + var vd = JX.Stratcom.getData(v).sort || []; 30 + 31 + for (var ii = 0; ii < ud.length; ii++) { 32 + if (ud[ii] < vd[ii]) { 33 + return 1; 34 + } 35 + if (ud[ii] > vd[ii]) { 36 + return -1; 37 + } 38 + } 39 + 40 + return 0; 41 + } 42 + 27 43 function ondrop(list, item, after) { 28 44 list.lock(); 29 45 JX.DOM.alterClass(item, 'drag-sending', true); ··· 93 109 } 94 110 95 111 var onedit = function(card, column, r) { 96 - var new_card = JX.$H(r.tasks); 112 + var new_card = JX.$H(r.tasks).getNode(); 113 + var new_data = JX.Stratcom.getData(new_card); 97 114 var items = finditems(column); 98 - var insert_after = r.data.insertAfterPHID; 99 - if (!insert_after) { 100 - JX.DOM.prependContent(column, new_card); 101 - if (card) { 102 - JX.DOM.remove(card); 115 + 116 + for (var ii = 0; ii < items.length; ii++) { 117 + var item = items[ii]; 118 + 119 + var data = JX.Stratcom.getData(item); 120 + var phid = data.objectPHID; 121 + 122 + if (phid == new_data.objectPHID) { 123 + items[ii] = new_card; 124 + data = new_data; 103 125 } 104 - return; 126 + 127 + data.sort = r.data.sortMap[data.objectPHID] || data.sort; 105 128 } 106 - var ii; 107 - var item; 108 - var item_phid; 109 - for (ii = 0; ii< items.length; ii++) { 110 - item = items[ii]; 111 - item_phid = JX.Stratcom.getData(item).objectPHID; 112 - if (item_phid == insert_after) { 113 - JX.DOM.replace(item, [item, new_card]); 114 - if (card) { 115 - JX.DOM.remove(card); 116 - } 117 - return; 118 - } 119 - } 129 + 130 + items.sort(colsort); 131 + 132 + JX.DOM.setContent(column, items); 120 133 }; 121 134 122 135 JX.Stratcom.listen(