Skip to content

Commit 13a5519

Browse files
fix(usm): prevent component updates from continuing unabated (#2095)
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent 7fba52d commit 13a5519

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed

src/features/unified-share-modal/SharedLinkSection.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class SharedLinkSection extends React.Component<Props, State> {
113113
onCopyInit = () => {},
114114
} = this.props;
115115

116-
const { isAutoCreatingSharedLink } = this.state;
116+
const { isAutoCreatingSharedLink, isCopySuccessful } = this.state;
117117

118118
if (
119119
autoCreateSharedLink &&
@@ -130,7 +130,13 @@ class SharedLinkSection extends React.Component<Props, State> {
130130
this.setState({ isAutoCreatingSharedLink: false });
131131
}
132132

133-
if (Browser.canWriteToClipboard() && triggerCopyOnLoad && !isAutoCreatingSharedLink && sharedLink.url) {
133+
if (
134+
Browser.canWriteToClipboard() &&
135+
triggerCopyOnLoad &&
136+
!isAutoCreatingSharedLink &&
137+
sharedLink.url &&
138+
isCopySuccessful === null
139+
) {
134140
onCopyInit();
135141
navigator.clipboard
136142
.writeText(sharedLink.url)

src/features/unified-share-modal/__tests__/SharedLinkSection.test.js

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ describe('features/unified-share-modal/SharedLinkSection', () => {
283283
});
284284

285285
test('should handle attempt to copy when the clipboard API is available and request is successful', async () => {
286-
expect.assertions(4);
286+
expect.assertions(6);
287287
const sharedLink = { url: '', isNewSharedLink: false };
288288
const addSharedLink = jest.fn();
289289
const onCopyInitMock = jest.fn();
@@ -308,14 +308,14 @@ describe('features/unified-share-modal/SharedLinkSection', () => {
308308
wrapper.setProps({ submitting: false });
309309
wrapper.setProps({ sharedLink: { url: 'http://example.com/', isNewSharedLink: true } });
310310

311+
await new Promise(r => setTimeout(r, 0));
312+
311313
expect(onCopyInitMock).toBeCalledTimes(1);
312-
try {
313-
await expect(writeTextSuccessMock).toBeCalledTimes(1);
314-
expect(onCopySuccessMock).toBeCalledTimes(1);
315-
expect(wrapper.find('TextInputWithCopyButton').prop('triggerCopyOnLoad')).toBe(true);
316-
} catch (err) {
317-
expect(onCopyErrorMock).toBeCalledTimes(0);
318-
}
314+
expect(writeTextSuccessMock).toBeCalledTimes(1);
315+
expect(onCopySuccessMock).toBeCalledTimes(1);
316+
expect(wrapper.find('TextInputWithCopyButton').prop('triggerCopyOnLoad')).toBe(true);
317+
expect(wrapper.state('isCopySuccessful')).toEqual(true);
318+
expect(onCopyErrorMock).toBeCalledTimes(0);
319319
});
320320

321321
test('should only initiate copy when we specifically request a copy to be triggered', () => {
@@ -351,15 +351,15 @@ describe('features/unified-share-modal/SharedLinkSection', () => {
351351
});
352352

353353
test('should handle attempt to copy when the clipboard request fails', async () => {
354-
expect.assertions(3);
354+
expect.assertions(6);
355355
const sharedLink = { url: '', isNewSharedLink: false };
356356
const addSharedLink = jest.fn();
357357
const onCopyInitMock = jest.fn();
358358
const onCopySuccessMock = jest.fn();
359359
const onCopyErrorMock = jest.fn();
360-
const writeTextSuccessMock = jest.fn(() => Promise.reject());
360+
const writeTextRejectMock = jest.fn(() => Promise.reject());
361361
navigator.clipboard = {
362-
writeText: writeTextSuccessMock,
362+
writeText: writeTextRejectMock,
363363
};
364364

365365
const wrapper = getWrapper({
@@ -376,14 +376,14 @@ describe('features/unified-share-modal/SharedLinkSection', () => {
376376
wrapper.setProps({ submitting: false });
377377
wrapper.setProps({ sharedLink: { url: 'http://example.com/', isNewSharedLink: true } });
378378

379+
await new Promise(r => setTimeout(r, 0));
380+
379381
expect(onCopyInitMock).toBeCalledTimes(1);
380-
try {
381-
await expect(writeTextSuccessMock).toBeCalledTimes(1);
382-
expect(onCopySuccessMock).toBeCalledTimes(0);
383-
} catch (err) {
384-
expect(onCopyErrorMock).toBeCalledTimes(1);
385-
expect(wrapper.find('TextInputWithCopyButton').prop('triggerCopyOnLoad')).toBe(false);
386-
}
382+
expect(writeTextRejectMock).toBeCalledTimes(1);
383+
expect(onCopySuccessMock).toBeCalledTimes(0);
384+
expect(onCopyErrorMock).toBeCalledTimes(1);
385+
expect(wrapper.find('TextInputWithCopyButton').prop('triggerCopyOnLoad')).toBe(false);
386+
expect(wrapper.state('isCopySuccessful')).toEqual(false);
387387
});
388388
});
389389
});

0 commit comments

Comments
 (0)