Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal: Content Placeholder UI #614

Open
janareis opened this issue Apr 24, 2019 · 15 comments
Open

Proposal: Content Placeholder UI #614

janareis opened this issue Apr 24, 2019 · 15 comments
Labels
area-ItemsRepeater area-Lists ListView, GridView, ListBox, etc feature proposal New feature proposal team-Controls Issue for the Controls team

Comments

@janareis
Copy link

janareis commented Apr 24, 2019

Proposal: Content Placeholder UI

Summary

A placeholder UI shows the skeleton of the UI by using gray boxes that mimic the actual UI but it is there temporarily until the UI gets loaded. This is most commonly seen in a list, but need not be exclusive to list items.

Facebook, for example, uses a fancy shimmer effect (link).

Another of the many examples where this is seen is Office's Delve app.
image

Rationale

Currently, we don't a control shows that a specific part of the UI is loading. We use the spinner when the whole page is processing. The placeholder UI is a more modern pattern apps are currently using as a way to show a specific part of the UI loading in an engaging way.

Important Notes

Open Questions

  • Is there an experience outside of a collection/list where the content placeholder pattern would be valuable for your app?
  • Is the UI shown for the placeholder content something you'd need/expect to customize?
@janareis janareis added the feature proposal New feature proposal label Apr 24, 2019
@msft-github-bot msft-github-bot added this to Freezer in Feature tracking Apr 24, 2019
@msft-github-bot msft-github-bot added this to Needs triage in Controls Triage Apr 24, 2019
@jevansaks
Copy link
Member

@micahl / @janareis can you add some more context here? (you can edit the description to provide it)

@jevansaks jevansaks moved this from Needs triage to Approved - Assigned in Controls Triage Apr 25, 2019
@janareis
Copy link
Author

Scenario: A user comes to Company Portal desktop app to download the company apps the IT of her organization assigned to her so she can be productive at work. Once she launches the app, she would land on the homepage and see the apps and devices that are currently managed and available to her. She would click on the apps menu item, to find all 10 apps that should be using at work. The page doesn't load immediately, it shows a temporary placeholder screen while the apps are been retrieved. After 3 seconds of this animation transitioning from placeholder UI and actual apps, she can see all list of apps available to her.

Problem: We have app categories (featured, recently published, productivity, etc) that by its nature requires a different amount of work from the server so they all load with different time frames. Instead of using an empty page with spinner for the whole page going on and on, we can show a placeholder screen that gives a sense of the UI pieces users are going to see. The same things apply to the "All apps" page where app tiles load in a different time frame.

Goal: The goal of this feature is to provide users with a UI pattern that can decrease the sense of long load time, and has the potential to add delight to the user experience.

Succes criteria: This feature should work as a temporary state, so it is ideal for this feature to take 4 seconds total while the actual screen UI loads. The animation shows the transition between the placeholder UI and the actual app screen tiles. For the mockup animation, I'm using – Dissolve transition, delay:200ms, easy out:200ms.

@micahl micahl changed the title Proposal: Skeleton/placeholder UI for app tiles Proposal: Content Placeholder UI Apr 30, 2019
@michael-hawker
Copy link
Collaborator

Would this be a separate control that can be configured to show different placeholders?

OR

Is it a property/effect that can be applied on top of an existing XAML structure to mimic the existing content that will be filled in when loaded with the placeholder loading content?

@mdtauk
Copy link
Contributor

mdtauk commented Apr 30, 2019

Rather than being a control, could this not be something attached to existing panels and views. When the children is Empty or Null - then it displays the content from this control.

It's only purpose would be to display it's XAML content or not be loaded at all.

Now if this is used in the empty panel, it would display when no items are found - like Inbox Zero or No Search Items found etc. But when used on a data or list item template, it will use a Foreground and Background property to colour its path/shape contents - with perhaps a brush animation - and will unload when the contents get loaded from datasource.

@micahl
Copy link
Contributor

micahl commented Apr 30, 2019

Good questions/comments on things that would need to be considered and for which I don't have answers yet. :) I added some open questions to the proposal for discussion that I think might help inform a design.

@jevansaks jevansaks moved this from Approved - Assigned to Approved in Controls Triage May 7, 2019
@micahl micahl added area-ItemsRepeater area-Lists ListView, GridView, ListBox, etc labels Aug 12, 2019
@micahl micahl removed their assignment Aug 12, 2019
@gascardi
Copy link

gascardi commented Sep 5, 2019

@micahl Testing app lifecycle events when debugging an app (this example: Company Portal), it appears that some form of this already exists. (@janareis FYI)

When I am debugging and suspend the app:
image

Lists transform to the following:

Resumed:
image
Suspended:
image

Resumed:
image
Suspended:
image

But other elements (like text) just don't appear to have a placeholder.

@mdtauk
Copy link
Contributor

mdtauk commented Sep 5, 2019

Ideally instead of this being its own control in the visual tree, there would be a "placeholder" Xaml tag placed on elements, which would display whilst the full items are prepared and inserted into the Tree.

This means there is no need to make separate templates for the placeholder items, as well as for the actual item template.

A property for displaying the loading shimmer, and transitions for when the content has loaded, like fade ins for text and images.

Could this control/behaviour also support Empty content scenarios, like No Search Results Found, or Yay!, No Unread Emails ?

This should probably not affect the Headers for a DataGrid or Tabular layout.

As well as loading content, could this also be useful for refreshing lists?

Fabric Web has an equivalent control called Shimmer
Office's Fabric Web - Shimmer

@jevansaks jevansaks added the team-Controls Issue for the Controls team label Nov 7, 2019
@matthew4850
Copy link

This would be really useful, I hope this gets done soon!

@michael-hawker
Copy link
Collaborator

While it's slightly different (no animation), we do have the ImageEx control in the Toolkit which does some placeholder behavior. It's also just for images though. Would be curious if there are things to transfer though or to handle multiple types of scenarios with this type of component?

@mdtauk
Copy link
Contributor

mdtauk commented May 21, 2021

While it's slightly different (no animation), we do have the ImageEx control in the Toolkit which does some placeholder behavior. It's also just for images though. Would be curious if there are things to transfer though or to handle multiple types of scenarios with this type of component?

Any solution could be at the rendering level. Boxes and Lines in place of text, images, etc. The renderer displays the placeholder until the content loads.

Instead of adding and removing items from the visual tree.

@xperiandri
Copy link

As I see in the recent update Windows Store app does that

@xperiandri
Copy link

How is that implemented?

@xperiandri
Copy link

image
image

@Jay-o-Way
Copy link
Contributor

Jay-o-Way commented Aug 7, 2023

@niels9001 x-ref CommunityToolkit/Labs-Windows#390
Two (Microsoft) parties doing the exact same work... 🥳

@Jay-o-Way
Copy link
Contributor

Few good questions in the comments. Any update?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-ItemsRepeater area-Lists ListView, GridView, ListBox, etc feature proposal New feature proposal team-Controls Issue for the Controls team
Projects
Development

No branches or pull requests

9 participants