docbrown/app/views/admin/users/index/_controls.html.erb
Ridhwana aff29406ac
First version of exporting the Users to a CSV (#17217)
* feat: add the export route

* feat: base export csv

* refactor: move the svg into its own file

* feat: add the export partial

* feat: export teh correct fields etc. for the csv

* user status helper

* feat: ensure that we format the time

* feat: add a spec for the CSV

* remove space

* remove puts

* chore: remove blank space

* feat: update traits

* Update app/views/admin/users/export.csv.erb

Co-authored-by: Jamie Gaskins <jgaskins@hey.com>

* Update spec/requests/admin/users/users_export_spec.rb

Co-authored-by: Jamie Gaskins <jgaskins@hey.com>

* Update spec/requests/admin/users/users_export_spec.rb

Co-authored-by: Jamie Gaskins <jgaskins@hey.com>

* fix: export should not error for unregistered users

Co-authored-by: Jamie Gaskins <jgaskins@hey.com>
2022-04-12 15:24:32 +02:00

67 lines
3.8 KiB
Text

<%= javascript_packs_with_chunks_tag "admin/users/controls", defer: true %>
<% if FeatureFlag.enabled?(:member_index_view) %>
<% if params[:controller] == "admin/users" %>
<!-- Small screen layout -->
<%= form_with url: admin_users_path, method: :get, local: true, class: "m:hidden" do |f| %>
<div class="flex justify-between my-3">
<div>
<button type="button" id="expand-search-btn" class="relative c-btn c-btn--icon-alone indicator-btn" aria-label="Expand search" aria-expanded="false" aria-controls="search-users">
<%= crayons_icon_tag("search", aria_hidden: true) %>
<span class="search-indicator absolute top-1 right-1 c-indicator c-indicator--info <%= params[:search].blank? ? "hidden" : "" %>"></span>
</button>
<button type="button" id="expand-filter-btn" class="c-btn c-btn--icon-alone indicator-btn" aria-label="Expand filter" aria-expanded="false" aria-controls="filter-users">
<%= crayons_icon_tag("filter", aria_hidden: true) %>
<span class="search-indicator absolute top-1 right-1 c-indicator c-indicator--info <%= params[:role].blank? ? "hidden" : "" %>"></span>
</button>
</div>
<%= paginate @users, theme: "admin", scope: @users, label: "Paginate users" %>
</div>
<div>
<div id="search-users" class="hidden">
<%= render "admin/users/index/search_field", f: f, placeholder: "Search member...", aria_label: "Search member by name, username, email, or Twitter/GitHub usernames" %>
</div>
<div id="filter-users" class="hidden crayons-field flex-row items-center gap-2">
<%= render "admin/users/index/filter_role_field", f: f %>
</div>
<div>
<%= render "admin/users/index/controls/export", f: f %>
</div>
</div>
<% end %>
<!-- Larger screen layout -->
<div class="hidden m:flex justify-between">
<%= form_with url: admin_users_path, method: :get, local: true, class: "flex flex-col m:flex-row gap-3 m:items-center py-3" do |f| %>
<div class="crayons-field flex-1 flex-row items-center gap-2">
<%= render "admin/users/index/search_field", f: f, placeholder: "Search member...", aria_label: "Search member by name, username, email, or Twitter/GitHub usernames" %>
</div>
<div class="crayons-field flex-row items-center gap-2">
<%= render "admin/users/index/filter_role_field", f: f %>
</div>
<div>
<%= render "admin/users/index/controls/export", f: f %>
</div>
<% end %>
<%= paginate @users, theme: "admin", scope: @users, label: "Paginate users" %>
</div>
<% end %>
<% else %>
<% if params[:controller] == "admin/users" %>
<%= form_with url: admin_users_path, method: :get, local: true, class: "flex flex-col m:flex-row gap-3 m:items-center p-3" do |f| %>
<div class="crayons-field flex-1 flex-row items-center gap-2">
<%= f.label :search, class: "crayons-field__label whitespace-nowrap" %>
<%= f.text_field :search, value: params[:search], class: "crayons-textfield mt-0", placeholder: "Name, username, email, or Twitter/GitHub usernames", aria: { label: "Filter by name, username, email, or Twitter/GitHub usernames" } %>
</div>
<div class="crayons-field flex-row items-center gap-2">
<%= f.label :role, "Filter by Role", class: "crayons-field__label whitespace-nowrap" %>
<%= f.select :role, options_for_select(Role::ROLES, params[:role]), { include_blank: "All roles" }, class: "crayons-select mt-0" %>
</div>
<%= f.submit "Filter", class: "c-btn c-btn--secondary" %>
<% end %>
<% end %>
<% if params[:controller] == "admin/invitations" %>
<%= link_to "New", new_admin_invitation_path, class: "c-cta self-end" %>
<% end %>
<% end %>