From 317bc757cfa67d8aebb28dead2652d3b00bc8510 Mon Sep 17 00:00:00 2001 From: Jillian Date: Sat, 24 May 2025 04:33:57 +0930 Subject: [PATCH] fix: refresh xblock inline after accepting/rejecting library sync (#2022) (#2028) Instead of reloading the entire Unit after syncing changes from the library, just reload the xblock that was changed. (cherry picked from commit ac5574d2c41654a44201d389a92c7f8ae3b3141e) --- src/course-unit/preview-changes/index.test.tsx | 11 ++++++++--- src/course-unit/preview-changes/index.tsx | 4 +++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/course-unit/preview-changes/index.test.tsx b/src/course-unit/preview-changes/index.test.tsx index f88b436c7..a9775ab83 100644 --- a/src/course-unit/preview-changes/index.test.tsx +++ b/src/course-unit/preview-changes/index.test.tsx @@ -85,7 +85,10 @@ describe('', () => { const acceptBtn = await screen.findByRole('button', { name: 'Accept changes' }); userEvent.click(acceptBtn); await waitFor(() => { - expect(mockSendMessageToIframe).toHaveBeenCalledWith(messageTypes.refreshXBlock, null); + expect(mockSendMessageToIframe).toHaveBeenCalledWith( + messageTypes.completeXBlockEditing, + { locator: usageKey }, + ); expect(axiosMock.history.post.length).toEqual(1); expect(axiosMock.history.post[0].url).toEqual(libraryBlockChangesUrl(usageKey)); }); @@ -100,7 +103,6 @@ describe('', () => { const acceptBtn = await screen.findByRole('button', { name: 'Accept changes' }); userEvent.click(acceptBtn); await waitFor(() => { - expect(mockSendMessageToIframe).not.toHaveBeenCalledWith(messageTypes.refreshXBlock, null); expect(axiosMock.history.post.length).toEqual(1); expect(axiosMock.history.post[0].url).toEqual(libraryBlockChangesUrl(usageKey)); }); @@ -118,7 +120,10 @@ describe('', () => { const ignoreConfirmBtn = await screen.findByRole('button', { name: 'Ignore' }); userEvent.click(ignoreConfirmBtn); await waitFor(() => { - expect(mockSendMessageToIframe).toHaveBeenCalledWith(messageTypes.refreshXBlock, null); + expect(mockSendMessageToIframe).toHaveBeenCalledWith( + messageTypes.completeXBlockEditing, + { locator: usageKey }, + ); expect(axiosMock.history.delete.length).toEqual(1); expect(axiosMock.history.delete[0].url).toEqual(libraryBlockChangesUrl(usageKey)); }); diff --git a/src/course-unit/preview-changes/index.tsx b/src/course-unit/preview-changes/index.tsx index c038adf08..ea3ba6dac 100644 --- a/src/course-unit/preview-changes/index.tsx +++ b/src/course-unit/preview-changes/index.tsx @@ -180,12 +180,14 @@ const IframePreviewLibraryXBlockChanges = () => { return null; } + const blockPayload = { locator: blockData.downstreamBlockId }; + return ( sendMessageToIframe(messageTypes.refreshXBlock, null)} + postChange={() => sendMessageToIframe(messageTypes.completeXBlockEditing, blockPayload)} /> ); };