Closed
Description
When changing settings, we debounce edits, then rerender the whole tree when the edit actually happens, really just to get the "Modified" label to show up. We try to maintain focus on the control because the user may still be editing it.
This leads to a couple problems which aren't blocking anyone right now, but it isn't quite right.
- If you edit a setting then quickly select a different setting, it will render the old value until the configuration service comes back with the new value. This will usually be quick but could be slow if saving settings.json is slow
- When refreshing the list while the user is typing, the cursor position may not be restored correctly. e.g. with (decreasing the debounce to make it easier to repro):
We need to
- Not render the setting row that the user is currently editing, but show the "Modified" label when they start changing the value
- The tree only lets us rerender a row from scratch, so we probably have to resort to hacks for this
- Keep a local copy of the configuration that reflects the latest edits and resolves them with the slightly out of date config service
- If user sends edit A and B, then config service notifies us that edit A happened, we need to know not to render the out of date edit A