I’m looking to have a to-do list PowerApp created which has the following functionality. I think this could be pretty widely useful, so feel free to utilize it as you see fit afterward.
Reasons for a PowerApp: while still intended for personal use (no broad deployment), it still needs to to function on both desktop and mobile devices within a work environment that exclusively uses the Microsoft suite. While a VBA macro enabled Excel file could achieve much of this functionality for desktop use, the macros would not be compatible with the iOS version of Excel.
**Main Function**
* The main screen of the PowerApp should display a Microsoft list which contains to-do items.
* The user should be able to decide which columns of the list are displayed.
* I’m thinking this would be a combo box which is pre-populated with all column names from one particular ‘view’ of the Microsoft list.
* The default selections of the combo box would be all columns names from a different ‘view’ of the same Microsoft list, but the user can change them from that default to whatever they’d like
* The user should be able to filter by any of the displayed columns, as well as sort ascending or descending by any of the displayed columns
* A desired key functionality of this list is the ability to manually sort items. I envision this happening in the following manner.
* If the user selects 5 items on the list, then clicks a down arrow button next to a 6th item, those 5 items drop to a position immediately below the 6th item, in the order they were clicked.
* If a user selects 3 items on the list, then clicks an up arrow button next to a 4th item, those 3 items raise to a position immediately above the 4th item, in the order they were clicked.
* If the user clicks the up arrow button next to an item without any other items selected, that item raises one position.
* If the user clicks the down arrow button next to an item without any other items selected, that item lowers one position.
* If the user selects 6 items in order, then unselects one of the items (5 selected items remaining), the order of selection for the first 5 is maintained, waiting for a user action.
* Whenever no items are selected, the relative selection order gets cleared out.
* Perhaps when the items are selected, there is some visual to show the user which order they have been selected in.
* One of the columns in the to-do list will be “tags”
* It should be easy for the user to select multiple items on the list, and add or remove specific tags to the item(s)
* It should be easy for the user to mark an item ‘complete’, which would automatically enter the date/time of completion in a column
* Marking complete should also add a Complete tag in the tags column, to easily filter out completed items when selecting which tags to display
* Users should be able to add items to the to-do list in two main ways
1. single item entry, where a dialog pops up, and the user can enter the title, as well as specify values for the other columns (priority value 1-5, due date, tags, etc).
* These other values could either be ones the user currently has displayed as columns, or, perhaps a list of columns set elsewhere in a settings type screen, or, a list of columns from a different list ‘View’
* 2) Multi line entry, where a box pops up, and the user can quickly enter multiple lines. One list item per line in a multi-line text box. These get added as multiple new items to the list, one per line in the text box, with no other columns edited (besides date/time added, which should be captured by default). It’s important for the user to be able to get multiple different tasks out of their head and into the list without having to go through a dialog box and lots of options for each. They can always come back and add more details later (such as tags, due date, etc.).
* This also allows for pasting in a list from elsewhere, and quickly adding multiple items that way
* Items should be able to be ‘snoozed’. This involves selecting one or multiple items, hitting snooze, which prompts the user to either enter a date in which the items will reappear, OR, enter a number of days until the items re-appear. During this timeframe, they will gain a “snoozed” tag, which will be filtered out of the list if they don’t manually add that “snoozed” flag back in to their view.
* If the user has the “Notes” column displayed, they should be able to add notes to an item fairly easily (desktop or on mobile)
**Stretch Goals:**
* The relative propriety of some items can be locked. For example, if Task 154 must be completed before task 162 (i.e. it’s just not possible to do one before the other), this can be captured somehow, and regardless of other relative motion of tasks, Task 154 will always be shown ahead of task 162.
* If any circular references get formed here, such as a user saying task A must come before task B, task B must come before task C, and task C must come before task A, a warning is displayed.
* It might make sense to allow a flag for this on the ‘multi line entry’ if the items being added should have their relative order locked.
* A ‘lava lamp’ sort function. Sorting in this function slowly rotates to do list items in the following way. After items are added, they slowly sink lower in the to-do list. Once they hit the bottom, they slowly rise back to the top. The rate they are falling and are rising is dependent on the priority value set by the user. Higher priority items will fall slower, and rise faster, ensuring they spend more time near the top of the list. Lower priority items will fall faster, and rise slower. Lower priority items still eventually bubble back up to the top, but will spend less time near the top. This functionality allows some lower priority items to bubble back up to the surface, which may have been forgotten otherwise.
* In this mode, the relative order lock should still be maintained so items that must be completed in some order don’t get out of order
* A backup function which locks in a given sort order
* Perhaps this happens by adding a new column to the list, named with a Date/Time string (i.e. 20241103\_1324 for Nov 3rd, 1:24 pm). Users can recover the sort order by sorting by this column. All new items added after will just be at the top of the list, as they would have no value in this column (assuming the list is sorting in ascending order)
* When a new item is created, the user can predict the date it will be completed. Over time, the user will accumulate these predictions of completion dates, and also see the actual completion date of items. This will give them an idea of how far off their estimates are. Plotting these as a function of completion date, will give the user an idea if they are (in general) getting better at predicting completion dates.
* Items can be “pinned” to the top of the list. Regardless of any other sorting, pinned items will stay on top
* Among the pinned items, their relative order lock would be maintained (say, if 3 items were pinned and they had a relative order to them).
* Upon creation, the list could have a “Pin date” column. A date entered here would mean that once that date hits, the item would automatically get pinned up top of the list so it is not forgotten about as a due date approaches for example.
* A screen that allows the user to plot the number of items competed as a function of date (for example, number completed each day, or number completed each week, or number completed each month). This plot should be able to be filtered by tag. For example, show all items that DONT have a given tag, or, all items that have ANY of these specific tags.
* A similar plot as above, but showing open items, which would show work piling up in a given category (based on tag)
* A similar plot as above, but showing when items first appeared (regardless of completion status). This will show the accumulation of items of a particular tag, to show ebbs and flows over time of particular work scopes (i.e. see that in 2nd quarter 2023, a lot of work was coming in from Project A)
**Other Thoughts:**
* I imagine all the manual sorting will look at the current sort order of the target item (the item that the manual sort is about to put items above or below), and look to see what its value is, and how many decimal places it has (4.02 for example). It will then give the items being sorted a value of 4.02X, where the new sort position adjusts the value of X (in the order the items were selected).
* When the manual sort order gets saved or backed up, all items in the list could get an assigned value based on their current row in the list. This prevents the number of decimal places involved from getting too unruly.
For the bullet points to retain their formatting (somewhat), see:
[login to view URL]