Skip to content

Commit b68a0fe

Browse files
committed
Add new slot for showing customized loading indicator
1 parent 3e667a3 commit b68a0fe

2 files changed

Lines changed: 19 additions & 7 deletions

File tree

app/components/primer/open_project/filterable_tree_view.html.erb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,16 @@
2727
<% tree.with_leaf(**@no_results_node_arguments) %>
2828
<% end %>
2929
<% end %>
30-
<div class="FilterableTreeViewLoadingSkeleton" aria-hidden="true">
31-
<% [0, 8, 8, 16, 8, 0, 8, 8].each do |indent| %>
32-
<span class="TreeViewSkeletonItemContainerStyle" style="padding-left: <%= indent %>px">
33-
<%= render(Primer::Alpha::SkeletonBox.new(width: "16px")) %>
34-
<%= render(Primer::Alpha::SkeletonBox.new(classes: "TreeItemSkeletonTextStyles")) %>
35-
</span>
30+
<div class="FilterableTreeViewLoadingIndicator FilterableTreeViewLoadingSkeleton" aria-hidden="true">
31+
<% if loading_indicator? %>
32+
<%= loading_indicator %>
33+
<% else %>
34+
<% [0, 8, 8, 16, 8, 0, 8, 8].each do |indent| %>
35+
<span class="TreeViewSkeletonItemContainerStyle" style="padding-left: <%= indent %>px">
36+
<%= render(Primer::Alpha::SkeletonBox.new(width: "16px")) %>
37+
<%= render(Primer::Alpha::SkeletonBox.new(classes: "TreeItemSkeletonTextStyles")) %>
38+
</span>
39+
<% end %>
3640
<% end %>
3741
</div>
3842
<%= render(@tree_view) %>

app/components/primer/open_project/filterable_tree_view.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,19 @@ module OpenProject
133133
# ```erb
134134
# <%= render(Primer::OpenProject::FilterableTreeView.new(
135135
# src: my_path
136-
# )) %>
136+
# )) do |tree_view| %>
137+
# <% tree_view.with_loading_indicator do %>
138+
# <%= render(Primer::Beta::Spinner.new) %>
139+
# <% end %>
140+
# <% end %>
137141
# ```
138142
class FilterableTreeView < Primer::Component
139143
delegate :with_leaf, :with_sub_tree, to: :@tree_view
140144

145+
# An optional loading indicator shown while an async filter request is in progress. When omitted, a skeleton
146+
# loader is rendered. This slot is only used when `src` is set.
147+
renders_one :loading_indicator
148+
141149
SUPPORTED_SELECT_VARIANTS = %i[multiple single none].freeze
142150

143151
DEFAULT_FILTER_INPUT_ARGUMENTS = {

0 commit comments

Comments
 (0)