cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
ericonline
Community Champion
Community Champion

Add / Remove items from a Collection based on Visible Property

I'd like to build a progress bar based on how many questions a user has completed thus far in a 40-50 field form. Every field is required. I've set the asterisks of each card to visible=false when a user enters data. 

 

My thought is that I'll base the progress bar on the # of asterisks that are visible. I can't figure out how to accomplish this. I think the solution is something like: 

 

When screen loads: 

ClearCollect(colProgress, 

    {field: name, vis: If( name_star.visible, 0,1)},

    {field: date, vis: If( date_star.visible, 0,1)},

    {field: size, vis: If( size_star.visible, 0,1)},

    {field: pattern, vis: If( pattern_star.visible, 0,1})

 )

 

The Textbox/Shape for the progres bar is:

 

Sum(colProgress.vis,vis)

 

This all works great, however:

 

My problem:

  • How do I update the collection when a field is completed by user and the asterisk disappears? 
    • I don't want to ClearCollect each time a field is completed, this I think will affect performance. 

Any ideas? 

1 ACCEPTED SOLUTION

Accepted Solutions
ericonline
Community Champion
Community Champion

Hi @dinusc. Thank you very much for the response. I did indeed end up using various combinations of Update in the OnChange Property. 

 

For Person Lookup fields: 

If(
    IsBlank(name.Selected.DisplayName),   
        Update(
            colProgressBar,
                First(
                    Filter(
                        colProgressBar,
                        field = "name")),
                {field: "name", vis: 0}),
        Update(
            colProgressBar,
                First(
                    Filter(
                        colProgressBar,
                        field = "name")),
                {field: "name", vis: 1})
)

For DateTime dropdowns, I put the following code in all 3 fields (datepicker, hour, minute dropdowns):

If(
    Or(
        IsBlank(date_datepicker),
        hour.Selected.Value = " ",
        minute.Selected.Value = " "),
        Update(
            colProgressBar,
                First(
                    Filter(
                        colProgressBar,
                        field = "date")),
                {field: "date", vis: 0}),
        Update(
            colProgressBar,
                First(
                    Filter(
                        colProgressBar,
                        field = "date")),
                {field: "date", vis: 1})
)

 

 

View solution in original post

2 REPLIES 2
dinusc
Microsoft
Microsoft

Hello Eric,I will start by saying that I don't think running ClearCollect on 50 rows will be a performance issue even on an oldest mobile device that supports PowerApps.

If you still want to update a collection, have you considered "Update" function? Something like:

Update(colProgress, LookUp(colProgress, field=date), {field: date, vis: If( date_star.visible, 0,1)})

 

ericonline
Community Champion
Community Champion

Hi @dinusc. Thank you very much for the response. I did indeed end up using various combinations of Update in the OnChange Property. 

 

For Person Lookup fields: 

If(
    IsBlank(name.Selected.DisplayName),   
        Update(
            colProgressBar,
                First(
                    Filter(
                        colProgressBar,
                        field = "name")),
                {field: "name", vis: 0}),
        Update(
            colProgressBar,
                First(
                    Filter(
                        colProgressBar,
                        field = "name")),
                {field: "name", vis: 1})
)

For DateTime dropdowns, I put the following code in all 3 fields (datepicker, hour, minute dropdowns):

If(
    Or(
        IsBlank(date_datepicker),
        hour.Selected.Value = " ",
        minute.Selected.Value = " "),
        Update(
            colProgressBar,
                First(
                    Filter(
                        colProgressBar,
                        field = "date")),
                {field: "date", vis: 0}),
        Update(
            colProgressBar,
                First(
                    Filter(
                        colProgressBar,
                        field = "date")),
                {field: "date", vis: 1})
)

 

 

View solution in original post

Helpful resources

Announcements
PA_User Group Leader_768x460.jpg

Manage your user group events

Check out the News & Announcements to learn more.

Power Query PA Forum 768x460.png

Check it out!

Did you know that you can visit the Power Query Forum in Power BI and now Power Apps

Carousel 2021 Release Wave 2 Plan 768x460.jpg

2021 Release Wave 2 Plan

Power Platform release plan for the 2021 release wave 2 describes all new features releasing from October 2021 through March 2022.

PowerPlatform 768x460.png

Microsoft Learn

Check out our new Discover Your Career Path blog post series and get all the details.

Users online (1,385)