gitea/web_src/js/features/repo-issue-sidebar.md
wxiaoguang a928739456
Refactor sidebar assignee&milestone&project selectors (#32465)
Follow #32460

Now the code could be much clearer than before and easier to maintain. A
lot of legacy code is removed.

Manually tested.

This PR is large enough, that fine tunes could be deferred to the future if
there is no bug found or design problem.

Screenshots:

<details>

![image](https://github.com/user-attachments/assets/35f4ab7b-1bc0-4bad-a73c-a4569328303c)

</details>
2024-11-11 04:07:54 +08:00

1.1 KiB

A sidebar combo (dropdown+list) is like this:

<div class="issue-sidebar-combo" data-selection-mode="..." data-update-url="...">
  <input class="combo-value" name="..." type="hidden" value="...">
  <div class="ui dropdown">
    <div class="menu">
      <div class="item clear-selection">clear</div>
      <div class="item" data-value="..." data-scope="...">
        <span class="item-check-mark">...</span>
        ...
      </div>
    </div>
  </div>
  <div class="ui list">
    <span class="item empty-list">no item</span>
    <span class="item">...</span>
  </div>
</div>

When the selected items change, the combo-value input will be updated.
If there is data-update-url, it also calls backend to attach/detach the changed items.

Also, the changed items will be syncronized to the ui list items.

The items with the same data-scope only allow one selected at a time.

The dropdown selection could work in 2 modes:

  • single: only one item could be selected, it updates immediately when the item is selected.
  • multiple: multiple items could be selected, it defers the update until the dropdown is hidden.