-
Notifications
You must be signed in to change notification settings - Fork 372
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
fix: Undo / redo behavior on LG resources #1813
Conversation
@cwhitten @a-b-r-o-w-n this one looks good to me now. The root cause of LG undo\redo behavior not reflected in Form is that form use local data which only init once when first render, after first render the data flow is single-direction (local => global). So, when a global redo/undo updated the store, the local data is not synced. The reason we choose a single-direction data flow is for consistency and efficiency, which is good. So the fix here @lei9444 did is to track the state is updated by other data source other than Form (so far it's only undo/redo, if i understand correctly), then Form will decide to re-init local data once it knows this piece of data is updated |
@a-b-r-o-w-n @boydc2014 @zhixzhan I have added a key to force update the extension if the update is from the shell. Maybe we can add the status to the props in the future, and editors can get the status and judge for themself. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm still not sure about this approach.
What if we attempted to sync the shell and extension data? I haven't given much thought to this but I'm curious if something like this would work?
// in form
const sync = debounce((shellData, localData) => {
if (!isEqual(shellData, localData)) {
setLocalData(shellData)
}
}, 750);
useEffect(() => {
const sync = debounce((shellData, localData) => {
if (!isEqual(shellData, localData)) {
setLocalData(shellData)
}
}, 750);
sync(shellData, localData);
return () => {
sync.cancel(); // not sure what this api is
}
}, [shellData]);
This way, the shellData remains the single source of truth, but we allow changes from the extension to propagate through the shell before attempting to sync. I'm not sure if this will work, but it feels a little better than force re-rendering. I could also see this living in the extension container as well which has more knowledge about the shell operations.
Composer/packages/client/src/extension-container/ExtensionContainer.tsx
Outdated
Show resolved
Hide resolved
Composer/packages/client/src/extension-container/ExtensionContainer.tsx
Outdated
Show resolved
Hide resolved
@a-b-r-o-w-n @boydc2014 @zhixzhan. I have tried the approach @a-b-r-o-w-n gave and It works well. |
### 01-27-2020 #### Added - feat: enrich prebuilt memory paths and add user defined memory paths ([#1868](#1868)) ([@lei9444](https://github.com/lei9444)) - feat: Language-Understanding LSP ([#1711](#1711)) ([@cosmicshuai](https://github.com/cosmicshuai)) - feat: lu shell api ([#1810](#1810)) ([@zhixzhan](https://github.com/zhixzhan)) - feat: Start Botproject runtime in bot folder ([#1672](#1672)) ([@VanyLaw](https://github.com/VanyLaw)) - feat: Schema-driven visual editor - migrates 15 simple types ([#1811](#1811)) ([@yeze322](https://github.com/yeze322)) - feat: Update OnConversationUpdate actions ([#1794](#1794)) ([@luhan2017](https://github.com/luhan2017)) - feat: Update LG and built in expression functions in LSP ([#1790](#1790)) ([@Danieladu](https://github.com/Danieladu)) - feat: Add dynamic choices to Choice Prompt ([#1777](#1777)) ([@tdurnford](https://github.com/tdurnford)) - feat: update ui for new schema ([#1775](#1775)) ([@alanlong9278](https://github.com/alanlong9278)) - feat: lu all up view ux enhancement ([#1879](#1879)) ([@zhixzhan](https://github.com/zhixzhan)) - feat: add autoClosingPairs for lg editor ([#1789](#1789)) ([@cosmicshuai](https://github.com/cosmicshuai)) #### Fixed - fix: update the lg content to store when editor editing ([#1884](#1884)) ([@lei9444](https://github.com/lei9444)) - fix: Aligned elements in prompt settings ([#1893](#1893)) ([@tdurnford](https://github.com/tdurnford)) - fix: remove label from validations ([#1891](#1891)) ([@tdurnford](https://github.com/tdurnford)) - fix: Undo / redo behavior on LG resources ([#1813](#1813)) ([@lei9444](https://github.com/lei9444)) - fix: botproject build script powershell version limit ([#1857](#1857)) ([@VanyLaw](https://github.com/VanyLaw)) - fix: Add support of auto suggestion memory variable ([#1819](#1819)) ([@cosmicshuai](https://github.com/cosmicshuai)) - fix: Fixed Multiple Choice Type undo/redo functionality ([#1844](#1844)) ([@tdurnford](https://github.com/tdurnford)) - fix: RepeatDialog not shown ([#1835](#1835)) ([@yeze322](https://github.com/yeze322)) - fix: do not preset name when creating a dialog ([#1805](#1805)) ([@liweitian](https://github.com/liweitian)) - fix: luis authoringRegion not update in popup form ([#1818](#1818)) ([@VanyLaw](https://github.com/VanyLaw)) - fix: Check all expressions in dialog ([#1798](#1798)) ([@lei9444](https://github.com/lei9444)) - fix: TextWidget hover ([#1825](#1825)) ([@tdurnford](https://github.com/tdurnford)) - fix: Create bot from scratch may create a non-empty bot ([#1796](#1796)) ([@liweitian](https://github.com/liweitian)) - fix: Updated release version on about page ([#1788](#1788)) ([@tdurnford](https://github.com/tdurnford)) - fix: Remove the unused lufiles in notifications ([#1760](#1760)) ([@lei9444](https://github.com/lei9444)) - fix: update form correctly when undo or redo changes ([#1808](#1808)) ([@lei9444](https://github.com/lei9444)) - fix: handle multiple ctrl+z in lg editor ([#1804](#1804)) ([@zhixzhan](https://github.com/zhixzhan)) #### Changed - refactor: re-provide `getLgTemplates` api ([#1746](#1746)) ([@yeze322](https://github.com/yeze322)) - style: updated delete icon ([#1892](#1892)) ([@tdurnford](https://github.com/tdurnford)) - refactor: let ElementWrapper control the focus state ([#1880](#1880)) ([@yeze322](https://github.com/yeze322)) - refactor: render Elements with composition strategy (ElementRenderer -> ElementWrapper) ([#1873](#1873)) ([@yeze322](https://github.com/yeze322)) #### Other - chore: migrate IfCondition, SwitchCondition, Foreach(Page) to uischema ([#1899](#1899)) ([@yeze322](https://github.com/yeze322)) - chore: migrate TextInput and all other \*Input types to uischema ([#1874](#1874)) ([@yeze322](https://github.com/yeze322)) - chore: migrate SendActivity, BeginDialog, ReplaceDialog to uischema ([#1840](#1840)) ([@yeze322](https://github.com/yeze322)) - chore: retire 'DefaultRenderer' in visual editor ([#1836](#1836)) ([@yeze322](https://github.com/yeze322)) - chore: update lu/lg all up view ([#1806](#1806)) ([@liweitian](https://github.com/liweitian)) - chore: share server's resource to lsp server ([#1793](#1793)) ([@zhixzhan](https://github.com/zhixzhan)) - chore: refactor lg page route & url ([#1756](#1756)) ([@zhixzhan](https://github.com/zhixzhan)) - chore: convert ludown to bf-lu ([#1608](#1608)) ([@lei9444](https://github.com/lei9444)) - chore: proxy lsp ws request in dev ([#1754](#1754)) ([@zhixzhan](https://github.com/zhixzhan)) - docs: fix a typo ([#1901](#1901)) ([@HiltonGiesenow](https://github.com/HiltonGiesenow)) - docs: use correct link in events and triggers documentation ([#1832](#1832)) ([@arafattehsin](https://github.com/arafattehsin)) - docs: fix memory documentation link and typo ([#1833](#1833)) ([@arafattehsin](https://github.com/arafattehsin)) - docs: fix the links to intents and advanced definitions ([#1854](#1854)) ([@arafattehsin](https://github.com/arafattehsin)) - chore: bump immer to 5.2.0 ([#1846](#1846)) ([@cwhitten](https://github.com/cwhitten)) - chore: update botproject packages ([#1809](#1809)) ([@luhan2017](https://github.com/luhan2017)) - chore: update github templates ([@a-b-r-o-w-n](https://github.com/a-b-r-o-w-n)) - chore: update schema and samples ([@luhan2017](https://github.com/luhan2017))
Description
wrap the updatelg function as undoable
Task Item
closes #1212
Type of change
Please delete options that are not relevant.
Checklist
Screenshots