Merge pull request #4875 from LLK/develop

Merge develop into release
This commit is contained in:
picklesrus 2021-01-20 07:22:47 -05:00 committed by GitHub
commit 8b1b8de6dd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 73 additions and 81 deletions

130
package-lock.json generated
View file

@ -62,9 +62,9 @@
}
},
"chokidar": {
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.0.tgz",
"integrity": "sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q==",
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
"integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
"dev": true,
"optional": true,
"requires": {
@ -4609,9 +4609,9 @@
"dev": true
},
"caniuse-lite": {
"version": "1.0.30001174",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001174.tgz",
"integrity": "sha512-tqClL/4ThQq6cfFXH3oJL4rifFBeM6gTkphjao5kgwMaW9yn0tKgQLAEfKzDwj6HQWCB/aWo8kTFlSvIN8geEA==",
"version": "1.0.30001178",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001178.tgz",
"integrity": "sha512-VtdZLC0vsXykKni8Uztx45xynytOi71Ufx9T8kHptSw9AL4dpqailUJJHavttuzUe1KYuBYtChiWv+BAb7mPmQ==",
"dev": true
},
"canvas-fit": {
@ -15557,9 +15557,9 @@
}
},
"node-releases": {
"version": "1.1.69",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.69.tgz",
"integrity": "sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA==",
"version": "1.1.70",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.70.tgz",
"integrity": "sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw==",
"dev": true
},
"node-sass": {
@ -20527,9 +20527,9 @@
}
},
"scratch-blocks": {
"version": "0.1.0-prerelease.20210111135916",
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20210111135916.tgz",
"integrity": "sha512-1SY1WKmwz9ExWMkIYDnKpOfNLdhVWf4twM/BP0gzIUA2mLLgmBv3YoV/m8bTLeCeuglgREDciXN1YMphFwZ4gg==",
"version": "0.1.0-prerelease.20210119033720",
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20210119033720.tgz",
"integrity": "sha512-ICSbSnMMrQ/FtGyn5smy4rFskOW34FjK1WKOv+JiGawmgzw3VlsljukeFVNDr5v2zDGIYAF+lwf7WbkVIyhCWQ==",
"dev": true,
"requires": {
"exports-loader": "0.6.3",
@ -20537,9 +20537,9 @@
}
},
"scratch-gui": {
"version": "0.1.0-prerelease.20210112040114",
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20210112040114.tgz",
"integrity": "sha512-xXfw2804GZFo88eF6LbIdar0U2MuUVqWrREphGQTMIDgQS3CjwrVJ+T8XqkBzek0t26ZgQkL2K2aXjbAKb3hmw==",
"version": "0.1.0-prerelease.20210119122627",
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20210119122627.tgz",
"integrity": "sha512-TfwsWtdTxlitOaHWgL0E0baCCUTqUPoq0H1NxabdibzDkK2FS2yI3AcR2xEFbCVMZE42qpdH1T+IBTDdohnROQ==",
"dev": true,
"requires": {
"arraybuffer-loader": "^1.0.6",
@ -20590,13 +20590,13 @@
"redux": "3.7.2",
"redux-throttle": "0.1.1",
"scratch-audio": "0.1.0-prerelease.20200528195344",
"scratch-blocks": "0.1.0-prerelease.20210111135916",
"scratch-l10n": "3.10.20210112031449",
"scratch-paint": "0.2.0-prerelease.20201020103914",
"scratch-render": "0.1.0-prerelease.20201113223804",
"scratch-blocks": "0.1.0-prerelease.20210119033720",
"scratch-l10n": "3.10.20210119031507",
"scratch-paint": "0.2.0-prerelease.20210119034357",
"scratch-render": "0.1.0-prerelease.20210115005247",
"scratch-storage": "1.3.3",
"scratch-svg-renderer": "0.2.0-prerelease.20210107222546",
"scratch-vm": "0.2.0-prerelease.20201125065300",
"scratch-svg-renderer": "0.2.0-prerelease.20210114214521",
"scratch-vm": "0.2.0-prerelease.20210119120008",
"startaudiocontext": "1.2.1",
"style-loader": "^0.23.0",
"text-encoding": "0.7.0",
@ -20775,9 +20775,9 @@
"dev": true
},
"electron-to-chromium": {
"version": "1.3.636",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.636.tgz",
"integrity": "sha512-Adcvng33sd3gTjNIDNXGD1G4H6qCImIy2euUJAQHtLNplEKU5WEz5KRJxupRNIIT8sD5oFZLTKBWAf12Bsz24A==",
"version": "1.3.642",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.642.tgz",
"integrity": "sha512-cev+jOrz/Zm1i+Yh334Hed6lQVOkkemk2wRozfMF4MtTR7pxf3r3L5Rbd7uX1zMcEqVJ7alJBnJL7+JffkC6FQ==",
"dev": true
},
"file-loader": {
@ -21013,6 +21013,18 @@
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
"dev": true
},
"scratch-l10n": {
"version": "3.10.20210119031507",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.10.20210119031507.tgz",
"integrity": "sha512-NDIEtslj4OhSOVGMUAeZBs20dfw+fvaiaBHetZea4oHyUUlV0LB7VTu/2CK49ET/hqe9b3W2uC494FHlzjtqcQ==",
"dev": true,
"requires": {
"@babel/cli": "^7.1.2",
"@babel/core": "^7.1.2",
"babel-plugin-react-intl": "^3.0.1",
"transifex": "1.6.6"
}
},
"scratch-storage": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-1.3.3.tgz",
@ -21080,9 +21092,9 @@
}
},
"scratch-l10n": {
"version": "3.10.20210112031449",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.10.20210112031449.tgz",
"integrity": "sha512-eVJmpbBWv4RIOgCUk/fPOt73USbpllTPINhnWI/GLGJH+jW8cDsYLx9bdwUpqB1WVNXI0hTmPcm88h8pCJFrxw==",
"version": "3.10.20210120031458",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.10.20210120031458.tgz",
"integrity": "sha512-8SwGnT2BnlS7zNhB1cXl/EcyoncLZog71OECs4/VSF3NxnljbbutEHXYEAdBNBp4TYUb09QA4Ge8eCiEL9oqeg==",
"dev": true,
"requires": {
"@babel/cli": "^7.1.2",
@ -21092,9 +21104,9 @@
}
},
"scratch-paint": {
"version": "0.2.0-prerelease.20201020103914",
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20201020103914.tgz",
"integrity": "sha512-P8khVZzrT43Bv1WYh2fFF792qyHMp56df+8/q4LWHPtFDvIzL04VhSwKsgTQdroh7q+hMyImSPuxhLtBOE65FA==",
"version": "0.2.0-prerelease.20210119034357",
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20210119034357.tgz",
"integrity": "sha512-BqoRBifiw6BZLewYhQLon7+OL1F6FkJM79MMc03ssz4wGpIgZBGTHEvkfwvmg2GgU1vC+451KhXv8qlaEHI2FQ==",
"dev": true,
"requires": {
"@scratch/paper": "0.11.20200728195508",
@ -21105,7 +21117,7 @@
"minilog": "3.1.0",
"parse-color": "1.0.0",
"prop-types": "^15.5.10",
"scratch-svg-renderer": "0.2.0-prerelease.20201019174008"
"scratch-render-fonts": "^1.0.0-prerelease.20200507182347"
},
"dependencies": {
"lodash.omit": {
@ -21128,20 +21140,6 @@
"requires": {
"microee": "0.0.6"
}
},
"scratch-svg-renderer": {
"version": "0.2.0-prerelease.20201019174008",
"resolved": "https://registry.npmjs.org/scratch-svg-renderer/-/scratch-svg-renderer-0.2.0-prerelease.20201019174008.tgz",
"integrity": "sha512-RF3Zx09Nl+uLTrPD7K4tR6Sqq/JqRTsLVRugohEJ8pGHXshvBh/A4zWx7XmMZHOdEDHunPxpCDHkW2LoMCFioQ==",
"dev": true,
"requires": {
"base64-js": "1.2.1",
"base64-loader": "1.0.0",
"dompurify": "2.1.1",
"minilog": "3.1.0",
"scratch-render-fonts": "1.0.0-prerelease.20200507182347",
"transformation-matrix": "1.15.0"
}
}
}
},
@ -21168,9 +21166,9 @@
}
},
"scratch-render": {
"version": "0.1.0-prerelease.20201113223804",
"resolved": "https://registry.npmjs.org/scratch-render/-/scratch-render-0.1.0-prerelease.20201113223804.tgz",
"integrity": "sha512-Qb7wpwVNmLkoJ+3HN50DBohMsYsALJu2lLfSmIrtNQ+DcFXK+rgCvRpVvEtQWKQeSFIbjC0XgyMJHcov5vH3RQ==",
"version": "0.1.0-prerelease.20210115005247",
"resolved": "https://registry.npmjs.org/scratch-render/-/scratch-render-0.1.0-prerelease.20210115005247.tgz",
"integrity": "sha512-G6ftVqBy6j2AwyTynEQQfwA4XWgVlWM5OmEO6qAmC55RNNrmUcSBnICl4FfcC6pIpNu+th4GLiOasfrKYoNkjg==",
"dev": true,
"requires": {
"grapheme-breaker": "0.3.2",
@ -21180,7 +21178,7 @@
"minilog": "3.1.0",
"raw-loader": "^0.5.1",
"scratch-storage": "^1.0.0",
"scratch-svg-renderer": "0.2.0-prerelease.20201019174008",
"scratch-svg-renderer": "0.2.0-prerelease.20210114214521",
"twgl.js": "4.4.0"
},
"dependencies": {
@ -21226,28 +21224,6 @@
"worker-loader": "^2.0.0"
}
},
"scratch-svg-renderer": {
"version": "0.2.0-prerelease.20201019174008",
"resolved": "https://registry.npmjs.org/scratch-svg-renderer/-/scratch-svg-renderer-0.2.0-prerelease.20201019174008.tgz",
"integrity": "sha512-RF3Zx09Nl+uLTrPD7K4tR6Sqq/JqRTsLVRugohEJ8pGHXshvBh/A4zWx7XmMZHOdEDHunPxpCDHkW2LoMCFioQ==",
"dev": true,
"requires": {
"base64-js": "1.2.1",
"base64-loader": "1.0.0",
"dompurify": "2.1.1",
"minilog": "3.1.0",
"scratch-render-fonts": "1.0.0-prerelease.20200507182347",
"transformation-matrix": "1.15.0"
},
"dependencies": {
"base64-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz",
"integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==",
"dev": true
}
}
},
"text-encoding": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz",
@ -21319,9 +21295,9 @@
}
},
"scratch-svg-renderer": {
"version": "0.2.0-prerelease.20210107222546",
"resolved": "https://registry.npmjs.org/scratch-svg-renderer/-/scratch-svg-renderer-0.2.0-prerelease.20210107222546.tgz",
"integrity": "sha512-1cf+QlOIMblQ9z/yVZhrWkgmkOHwcl3BgqB6+aAV8IS6E7yWa2H0Cxundak089pDH47mbSf6PGs/aljjT/bpew==",
"version": "0.2.0-prerelease.20210114214521",
"resolved": "https://registry.npmjs.org/scratch-svg-renderer/-/scratch-svg-renderer-0.2.0-prerelease.20210114214521.tgz",
"integrity": "sha512-zfHrVm2EyHOmQQBcSDlX8v3+2054NyGcYHJt30hKELaMrflh5Cc+sbEihizPVqfPnEDv8STC4J84cTxfVLGowg==",
"dev": true,
"requires": {
"base64-js": "1.2.1",
@ -21356,9 +21332,9 @@
"dev": true
},
"scratch-vm": {
"version": "0.2.0-prerelease.20201125065300",
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20201125065300.tgz",
"integrity": "sha512-1kU4L6kdlkoIEIMKPyccVSDu1oPLDVbBkmqq5yk9tjLS0wT5Y/PU/P8q3Ey0ZumvNnLPWbw4QzQQl8g/2J/fcw==",
"version": "0.2.0-prerelease.20210119120008",
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20210119120008.tgz",
"integrity": "sha512-/KECsVtr417P1HqCvX4cmELpMb6ASDOkIQAFpGZuOprY/Q/riLjsMmK8+0VQvYlEW9dKgusYMoLBmo1+1SE1GQ==",
"dev": true,
"requires": {
"@vernier/godirect": "1.5.0",

View file

@ -129,7 +129,7 @@
"redux-mock-store": "^1.2.3",
"redux-thunk": "2.0.1",
"sass-loader": "6.0.6",
"scratch-gui": "0.1.0-prerelease.20210112040114",
"scratch-gui": "0.1.0-prerelease.20210119122627",
"scratch-l10n": "latest",
"selenium-webdriver": "3.6.0",
"slick-carousel": "1.6.0",

View file

@ -40,19 +40,31 @@ class ComposeComment extends React.Component {
'handleInput',
'handleMuteClose',
'handleMuteOpen',
'isMuted'
'isMuted',
'setupMuteExpirationTimeout'
]);
const muteExpiresAtMs = this.props.muteStatus.muteExpiresAt ?
this.props.muteStatus.muteExpiresAt * 1000 : 0; // convert to ms
this.state = {
message: '',
status: ComposeStatus.EDITING,
error: null,
appealId: null,
muteOpen: false,
muteExpiresAtMs: this.props.muteStatus.muteExpiresAt ?
this.props.muteStatus.muteExpiresAt * 1000 : 0, // convert to ms
muteExpiresAtMs: muteExpiresAtMs,
muteType: this.props.muteStatus.currentMessageType,
showWarning: this.props.muteStatus.showWarning ? this.props.muteStatus.showWarning : false
};
if (this.isMuted()) {
this.setupMuteExpirationTimeout(muteExpiresAtMs);
}
}
setupMuteExpirationTimeout (muteExpiresAtMs) {
// Change state when the mute expiration fires if the user is still on the page.
setTimeout(() => {
this.setState(
{message: '', muteExpiresAtMs: 0, muteOpen: false, status: ComposeStatus.EDITING, error: null});
}, muteExpiresAtMs - Date.now());
}
handleInput (event) {
this.setState({
@ -93,6 +105,7 @@ class ComposeComment extends React.Component {
}
showWarning = body.status.mute_status.showWarning;
muteType = body.status.mute_status.muteType;
this.setupMuteExpirationTimeout(muteExpiresAtMs);
}
// Note: does not reset the message state
this.setState({

View file

@ -95,6 +95,7 @@ describe('Compose Comment test', () => {
});
test('Comment Status initialized properly when muted', () => {
jest.useFakeTimers();
const realDateNow = Date.now.bind(global.Date);
global.Date.now = () => 0;
const mutedStore = mockStore({
@ -115,6 +116,8 @@ describe('Compose Comment test', () => {
const commentInstance = component.instance();
// Check conversion to ms from seconds is done at init time.
expect(commentInstance.state.muteExpiresAtMs).toEqual(5 * 1000);
// Check we setup a timeout to expire the widget when timeout reached.
expect(setTimeout).toHaveBeenLastCalledWith(expect.any(Function), 5 * 1000);
expect(commentInstance.state.showWarning).toBe(true);
// Compose box should be hidden if muted unless they got muted due to a comment they just posted.
expect(component.find('FlexRow.compose-comment').exists()).toEqual(false);