summaryrefslogtreecommitdiff
path: root/app/views/shared/issuable/_search_bar.html.haml
blob: 37a79a50fb12308a21318a243d7da41e23cb3575 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
- type = local_assigns.fetch(:type)
- board = local_assigns.fetch(:board, nil)
- show_sorting_dropdown = local_assigns.fetch(:show_sorting_dropdown, true)
- disable_target_branch = local_assigns.fetch(:disable_target_branch, false)
- placeholder = local_assigns[:placeholder] || _('Search or filter results...')
- block_css_class = type != :productivity_analytics ? 'row-content-block second-block' : ''
- is_epic_board = board&.to_type == "EpicBoard"

- if is_epic_board
  - user_can_admin_list = can?(current_user, :admin_epic_board_list, board.resource_parent)
- elsif board
  - user_can_admin_list = can?(current_user, :admin_issue_board_list, board.resource_parent)

.issues-filters
  .issues-details-filters.filtered-search-block.d-flex.flex-column.flex-lg-row{ class: block_css_class }
    .d-flex.flex-column.flex-md-row.flex-grow-1.mb-lg-0.mb-md-2.mb-sm-0.w-100
      - if type == :boards
        = render "shared/boards/switcher", board: board
        .js-new-board{ data: { multiple_issue_boards_available: parent.multiple_issue_boards_available?.to_s, can_admin_board: can?(current_user, :admin_issue_board, parent).to_s, } }
      = form_tag page_filter_path, method: :get, class: 'filter-form js-filter-form w-100' do
        - if params[:search].present?
          = hidden_field_tag :search, params[:search]
        - if @can_bulk_update
          .check-all-holder.gl-display-none.gl-sm-display-block.hidden.gl-float-left.gl-mr-5.gl-line-height-36
            - checkbox_id = 'check-all-issues'
            %label.gl-sr-only{ for: checkbox_id }= _('Select all')
            = check_box_tag checkbox_id, nil, false, class: "check-all-issues left"
        - if is_epic_board
          #js-board-filtered-search{ data: { full_path: @group&.full_path } }
        - elsif board
          #js-issue-board-filtered-search
        - else
          .issues-other-filters.filtered-search-wrapper.d-flex.flex-column.flex-md-row
            .filtered-search-box
              - if type != :boards
                - text = tag.span(sprite_icon('history'), class: "d-md-none") + tag.span(_('Recent searches'), class: "d-none d-md-inline")
                = dropdown_tag(text,
                  options: { wrapper_class: "filtered-search-history-dropdown-wrapper",
                  toggle_class: "gl-button btn btn-default filtered-search-history-dropdown-toggle-button",
                  dropdown_class: "filtered-search-history-dropdown",
                  content_class: "filtered-search-history-dropdown-content" }) do
                  .js-filtered-search-history-dropdown{ data: { full_path: search_history_storage_prefix } }
              .filtered-search-box-input-container.droplab-dropdown
                .scroll-container
                  %ul.tokens-container.list-unstyled
                    %li.input-token
                      %input.form-control.filtered-search{ search_filter_input_options(type, placeholder) }
                #js-dropdown-hint.filtered-search-input-dropdown-menu.dropdown-menu.hint-dropdown
                  %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                    %li.filter-dropdown-item{ data: {hint: "#{'{{hint}}'}", tag: "#{'{{tag}}'}", action: "#{'{{hint === \'search\' ? \'submit\' : \'\' }}'}" } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        -# Encapsulate static class name `{{icon}}` inside #{} to bypass
                        -# haml lint's ClassAttributeWithStaticValue
                        %svg
                          %use{ 'xlink:href': "#{'{{icon}}'}" }
                        %span.js-filter-hint
                          {{formattedKey}}
                #js-dropdown-operator.filtered-search-input-dropdown-menu.dropdown-menu
                  %ul.filter-dropdown{ data: { dropdown: true, dynamic: true } }
                    %li.filter-dropdown-item{ data: { value: "{{ title }}" } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        {{ title }}
                        %span.btn-helptext
                          {{ help }}
                #js-dropdown-author.filtered-search-input-dropdown-menu.dropdown-menu
                  - if current_user
                    %ul{ data: { dropdown: true } }
                      = render 'shared/issuable/user_dropdown_item',
                        user: current_user
                  %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                    = render 'shared/issuable/user_dropdown_item',
                      user: User.new(username: '{{username}}', name: '{{name}}'),
                      avatar: { lazy: true, url: '{{avatar_url}}' }
                #js-dropdown-assignee.filtered-search-input-dropdown-menu.dropdown-menu
                  %ul{ data: { dropdown: true } }
                    %li.filter-dropdown-item{ data: { value: 'None' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('None')
                    %li.filter-dropdown-item{ data: { value: 'Any' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('Any')
                    %li.divider.droplab-item-ignore
                    - if current_user
                      = render 'shared/issuable/user_dropdown_item',
                        user: current_user
                  %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                    = render 'shared/issuable/user_dropdown_item',
                      user: User.new(username: '{{username}}', name: '{{name}}'),
                      avatar: { lazy: true, url: '{{avatar_url}}' }
                #js-dropdown-reviewer.filtered-search-input-dropdown-menu.dropdown-menu
                  %ul{ data: { dropdown: true } }
                    %li.filter-dropdown-item{ data: { value: 'None' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('None')
                    %li.filter-dropdown-item{ data: { value: 'Any' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('Any')
                    %li.divider.droplab-item-ignore
                    - if current_user
                      = render 'shared/issuable/user_dropdown_item',
                        user: current_user
                  %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                    = render 'shared/issuable/user_dropdown_item',
                      user: User.new(username: '{{username}}', name: '{{name}}'),
                      avatar: { lazy: true, url: '{{avatar_url}}' }
                - if Feature.enabled?(:mr_attention_requests, default_enabled: :yaml)
                  #js-dropdown-attention-requested.filtered-search-input-dropdown-menu.dropdown-menu
                    - if current_user
                      %ul{ data: { dropdown: true } }
                        = render 'shared/issuable/user_dropdown_item',
                          user: current_user
                    %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                      = render 'shared/issuable/user_dropdown_item',
                        user: User.new(username: '{{username}}', name: '{{name}}'),
                        avatar: { lazy: true, url: '{{avatar_url}}' }
                = render_if_exists 'shared/issuable/approver_dropdown'
                = render_if_exists 'shared/issuable/approved_by_dropdown'
                #js-dropdown-milestone.filtered-search-input-dropdown-menu.dropdown-menu
                  %ul{ data: { dropdown: true } }
                    %li.filter-dropdown-item{ data: { value: 'None' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('None')
                    %li.filter-dropdown-item{ data: { value: 'Any' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('Any')
                    %li.filter-dropdown-item{ data: { value: 'Upcoming' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('Upcoming')
                    %li.filter-dropdown-item{ data: { value: 'Started' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('Started')
                    %li.divider.droplab-item-ignore
                  %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                    %li.filter-dropdown-item
                      %button.gl-button.btn.btn-link.js-data-value{ type: 'button' }
                        {{title}}
                = render_if_exists 'shared/issuable/filter_iteration', type: type
                #js-dropdown-release.filtered-search-input-dropdown-menu.dropdown-menu
                  %ul{ data: { dropdown: true } }
                    %li.filter-dropdown-item{ data: { value: 'None' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('None')
                    %li.filter-dropdown-item{ data: { value: 'Any' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('Any')
                    %li.divider.droplab-item-ignore
                  %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                    %li.filter-dropdown-item
                      %button.gl-button.btn.btn-link.js-data-value{ type: 'button' }
                        {{title}}
                #js-dropdown-label.filtered-search-input-dropdown-menu.dropdown-menu
                  %ul{ data: { dropdown: true } }
                    %li.filter-dropdown-item{ data: { value: 'None' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('None')
                    %li.filter-dropdown-item{ data: { value: 'Any' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('Any')
                    %li.divider.droplab-item-ignore
                  %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                    %li.filter-dropdown-item
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        %span.dropdown-label-box{ style: 'background: {{color}}' }
                        %span.label-title.js-data-value
                          {{title}}
                #js-dropdown-my-reaction.filtered-search-input-dropdown-menu.dropdown-menu
                  %ul{ data: { dropdown: true } }
                    %li.filter-dropdown-item{ data: { value: 'None' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('None')
                    %li.filter-dropdown-item{ data: { value: 'Any' } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('Any')
                    %li.divider.droplab-item-ignore
                  %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                    %li.filter-dropdown-item
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        %gl-emoji
                        %span.js-data-value.gl-ml-3
                          {{name}}
                #js-dropdown-wip.filtered-search-input-dropdown-menu.dropdown-menu
                  %ul.filter-dropdown{ data: { dropdown: true } }
                    %li.filter-dropdown-item{ data: { value: 'yes', capitalize: true } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('Yes')
                    %li.filter-dropdown-item{ data: { value: 'no', capitalize: true } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('No')
                #js-dropdown-confidential.filtered-search-input-dropdown-menu.dropdown-menu
                  %ul.filter-dropdown{ data: { dropdown: true } }
                    %li.filter-dropdown-item{ data: { value: 'yes', capitalize: true } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('Yes')
                    %li.filter-dropdown-item{ data: { value: 'no', capitalize: true } }
                      %button.gl-button.btn.btn-link{ type: 'button' }
                        = _('No')
                - unless disable_target_branch
                  #js-dropdown-target-branch.filtered-search-input-dropdown-menu.dropdown-menu
                    %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                      %li.filter-dropdown-item
                        %button.gl-button.btn.btn-link.js-data-value.monospace
                          {{title}}
                #js-dropdown-environment.filtered-search-input-dropdown-menu.dropdown-menu
                  %ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
                    %li.filter-dropdown-item
                      %button.gl-button.btn.btn-link.js-data-value{ type: 'button' }
                        {{title}}

                = render_if_exists 'shared/issuable/filter_weight', type: type

                = render_if_exists 'shared/issuable/filter_epic', type: type

              %button.clear-search.hidden{ type: 'button' }
                = sprite_icon('close', size: 16, css_class: 'clear-search-icon')
    .filter-dropdown-container.gl-display-flex.gl-flex-direction-column.gl-md-flex-direction-row.gl-align-items-flex-start
      - if type == :boards
        #js-board-labels-toggle
        - if current_user
          #js-board-epics-swimlanes-toggle
        .js-board-config{ data: { can_admin_list: user_can_admin_list.to_s, has_scope: board.scoped?.to_s } }
        - if user_can_admin_list
          .js-create-column-trigger{ data: board_list_data }
        #js-toggle-focus-btn
      - elsif type != :productivity_analytics && show_sorting_dropdown
        = render 'shared/issuable/sort_dropdown'