diff --git a/.eslintrc b/.eslintrc index 4f0655a0efe2b12a7baeae04dd53ae1fed30c849..b3818b8140ae0cb17a94250cdc82098c286d32b2 100755 --- a/.eslintrc +++ b/.eslintrc @@ -1,5 +1,5 @@ { - "extends": "airbnb", + "extends": ["airbnb", "prettier"], "env": { "amd": true, "browser": true, @@ -14,12 +14,12 @@ "react/no-multi-comp": [0, { "ignoreStateless": 1 }], "import/extensions": ["off", "never"], "import/no-unresolved": 0, - "no-underscore-dangle" : 0, - "linebreak-style" : 0, - "no-extra-bind" : 0 + "no-underscore-dangle": 0, + "linebreak-style": 0, + "no-extra-bind": 0 }, "parser": "babel-eslint", "parserOptions": { "sourceType": "module" } -} \ No newline at end of file +} diff --git a/522256 b/522256 deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/522768 b/522768 deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/79776 b/79776 deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/80304 b/80304 deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/81348 b/81348 deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/8196 b/8196 deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/82564 b/82564 deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/assets/js/TranscriptPage.jsx b/assets/js/TranscriptPage.jsx index 5cc1337ea91ce89efdb25da65f41a0cabb3a4aae..bc6b79ce4c38452c05154ecab3003a0dc9987a30 100755 --- a/assets/js/TranscriptPage.jsx +++ b/assets/js/TranscriptPage.jsx @@ -1,38 +1,34 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; import CourseList from './components/CourseList'; import Server from './lib/Server'; -export default class TranscriptPage extends React.Component { - static propTypes = { - params: PropTypes.object.isRequired, - user: PropTypes.object.isRequired, - }; +const TranscriptPage = ({ user: { role }, params: { id } }) => { + const [text, setText] = useState('Mohon Tunggu...'); + const [data, setData] = useState(undefined); + + useEffect(() => { + const url = + role === 'student' + ? `/students/${id}/transcript/` + : `/applications/${id}/transcript/`; - constructor(props) { - super(props); - /* istanbul ignore next */ - this.state = { text: 'Mohon Tunggu..' }; - const url = this.props.user.role === 'student' - ? `/students/${this.props.params.id}/transcript/` - : `/applications/${this.props.params.id}/transcript/`; Server.get(url).then( - (response) => this.setState({ data: response }), - () => this.setState({ - text: 'Anda tidak berhak untuk melihat transkrip ini', - }), + (response) => setData(response), + () => setText('Anda tidak berhak untuk melihat transkrip ini'), ); - } + }); - render() { - return this.state.data ? ( - <CourseList data={this.state.data} /> - ) : ( - <h5 style={{ textAlign: 'center' }}> - {' '} - {this.state.text} - {' '} - </h5> - ); - } -} + return data ? ( + <CourseList data={data} /> + ) : ( + <h5 style={{ textAlign: 'center' }}>{text}</h5> + ); +}; + +TranscriptPage.propTypes = { + params: PropTypes.object.isRequired, + user: PropTypes.object.isRequired, +}; + +export default TranscriptPage; diff --git a/assets/js/VacancyPage.jsx b/assets/js/VacancyPage.jsx index cc57f59bab18af6de33e5f4439a8cdeb3855e985..76c12a7732fdefe123e4e299ea171a8116572ea4 100755 --- a/assets/js/VacancyPage.jsx +++ b/assets/js/VacancyPage.jsx @@ -9,24 +9,21 @@ import Pagination from './components/Pagination'; import Storage from './lib/Storage'; export default class VacancyPage extends React.Component { - static propTypes = { - user: PropTypes.object.isRequired, - }; - static getId(user) { - const role = user.role; + const { role, data } = user; if (role === 'student') { - return user.data.student.id; - } else if ( - role === 'company' || - (role === 'admin' && user.data.company != null) - ) { - return user.data.company.id; - } else if ( + return data.student.id; + } + + if (role === 'company' || (role === 'admin' && data.company != null)) { + return data.company.id; + } + + if ( role === 'supervisor' || - (role === 'admin' && user.data.supervisor != null) + (role === 'admin' && data.supervisor != null) ) { - return user.data.supervisor.id; + return data.supervisor.id; } return 0; @@ -36,123 +33,82 @@ export default class VacancyPage extends React.Component { super(props); /* istanbul ignore next */ this.state = { - vacancies: [], - id: VacancyPage.getId(this.props.user), + id: VacancyPage.getId(props.user), }; - console.log('vacancy'); Storage.set('menu-active-state', 'Beranda'); } generateVacancies() { - if (this.props.user.role === 'student') { + const { user } = this.props; + const { id } = this.state; + + if (user.role === 'student') { return ( <Tabs selected={0}> <Pane label="Lowongan"> <Pagination key={1} url="/vacancies/" - child={ - <VacancyList - user={this.props.user} - key={1} - userId={this.state.id} - /> - } + child={<VacancyList user={user} key={1} userId={id} />} /> </Pane> <Pane label="Lamaran Saya"> <Pagination key={2} - url={`/students/${this.state.id}/applied-vacancies/`} - child={ - <VacancyList - user={this.props.user} - key={2} - userId={this.state.id} - /> - } + url={`/students/${id}/applied-vacancies/`} + child={<VacancyList user={user} key={2} userId={id} />} /> </Pane> <Pane label="Ditandai"> <Pagination key={3} - url={`/students/${this.state.id}/bookmarked-vacancies/`} - child={ - <VacancyList - key={3} - user={this.props.user} - userId={this.state.id} - /> - } + url={`/students/${id}/bookmarked-vacancies/`} + child={<VacancyList key={3} user={user} userId={id} />} /> </Pane> <Pane label="Lowongan Tersedia"> <Pagination key={4} url="/vacancies/opened_only=1" - child={ - <VacancyList - user={this.props.user} - key={4} - userId={this.state.id} - /> - } + child={<VacancyList user={user} key={4} userId={id} />} /> </Pane> </Tabs> ); - } else if ( - (this.props.user.role === 'admin' && - this.props.user.data.company != null) || - this.props.user.role === 'company' + } + + if ( + (user.role === 'admin' && user.data.company != null) || + user.role === 'company' ) { return ( <Segment className="paginationCompany"> <Pagination key={1} - url={`/companies/${this.state.id}/vacancies/`} - child={ - <VacancyList - key={1} - user={this.props.user} - userId={this.state.id} - /> - } + url={`/companies/${id}/vacancies/`} + child={<VacancyList key={1} user={user} userId={id} />} error="Akun anda belum terverifikasi. Harap hubungi pihak administrasi" /> </Segment> ); - } else if ( - this.props.user.role === 'admin' || - this.props.user.role === 'supervisor' - ) { + } + + if (user.role === 'admin' || user.role === 'supervisor') { return ( <Tabs selected={0}> <Pane label="Lowongan Belum Terverifikasi"> <Pagination key={1} url="/vacancies/?verified=false" - child={ - <VacancyList - user={this.props.user} - key={1} - userId={this.state.id} - /> - } + child={<VacancyList user={user} key={1} userId={id} />} /> </Pane> <Pane label="Lowongan Terverifikasi"> <Pagination key={2} url="/vacancies/?verified=true" - child={ - <VacancyList - user={this.props.user} - key={2} - userId={this.state.id} - /> - } + child={<VacancyList user={user} key={2} userId={id} />} /> </Pane> </Tabs> @@ -170,11 +126,13 @@ export default class VacancyPage extends React.Component { } companyHeader() { - if ( - (this.props.user.role === 'admin' && - this.props.user.data.company != null) || - this.props.user.role === 'company' - ) { + const { + user: { + role, + data: { company }, + }, + } = this.props; + if ((role === 'admin' && company != null) || role === 'company') { return ( <div style={{ float: 'left' }}> <Button @@ -201,18 +159,19 @@ export default class VacancyPage extends React.Component { } render() { - console.log(this.props.user); + const { + user: { role }, + } = this.props; return ( <div className="applicant"> <br /> - {this.props.user.role === 'student' || ( + {role === 'student' || ( <div className="administrationButtons" style={{ display: 'inline-block' }} > {this.companyHeader()} - {(this.props.user.role === 'admin' || - this.props.user.role === 'supervisor') && ( + {(role === 'admin' || role === 'supervisor') && ( <Button as={Link} to="/rekap" @@ -229,3 +188,5 @@ export default class VacancyPage extends React.Component { ); } } + +VacancyPage.propTypes = { user: PropTypes.object.isRequired }; diff --git a/assets/js/__test__/TranscriptPage-test.jsx b/assets/js/__test__/TranscriptPage-test.jsx index 967d90827ef02252a2e30b08495cd5c9d90b7a62..259d3ee28aed41ecdfe7e3ead821c5ff9d0f8855 100755 --- a/assets/js/__test__/TranscriptPage-test.jsx +++ b/assets/js/__test__/TranscriptPage-test.jsx @@ -1,13 +1,29 @@ import React from 'react'; import ReactTestUtils from 'react-dom/test-utils'; import fetchMock from 'fetch-mock'; +import sinon from 'sinon'; import TranscriptPage from '../TranscriptPage'; +import Server from '../lib/Server'; + +class Wrapper extends React.Component { + render() { + return this.props.children; + } +} describe('TranscriptPage', () => { + let stub; + const data = { transcript: [ - { kelas: { nm_kls: 'kelas1', nm_mk_cl: { nm_mk: 'mata_kuliah' } }, nilai: 'A' }, - { kelas: { nm_kls: 'kelas2', nm_mk_cl: { nm_mk: 'mata_kuliah' } }, nilai: 'B' }, + { + kelas: { nm_kls: 'kelas1', nm_mk_cl: { nm_mk: 'mata_kuliah' } }, + nilai: 'A', + }, + { + kelas: { nm_kls: 'kelas2', nm_mk_cl: { nm_mk: 'mata_kuliah' } }, + nilai: 'B', + }, { nilai: 'B' }, ], name: 'Badak Terbang', @@ -15,12 +31,28 @@ describe('TranscriptPage', () => { fetchMock.get('*', data); + before(() => { + stub = sinon.stub(Server, 'get').resolves(data); + }); + + after(() => Server.get.restore()); + it('renders for admin without problem', () => { - const transcriptPage1 = ReactTestUtils.renderIntoDocument(<TranscriptPage params={{ id: 1 }} user={{ role: 'student' }} />); - const transcriptPage2 = ReactTestUtils.renderIntoDocument(<TranscriptPage params={{ id: 1 }} user={{ role: 'admin' }} />); - transcriptPage1.setState({ data }); - transcriptPage2.setState({ data }); - expect(transcriptPage1).to.exist; - expect(transcriptPage2).to.exist; + const transcriptPage = ReactTestUtils.renderIntoDocument( + <Wrapper> + <TranscriptPage params={{ id: 1 }} user={{ role: 'admin' }} /> + </Wrapper>, + ); + + return expect(transcriptPage).to.exist; + }); + + it('renders for student withour problem', () => { + const transcriptPage = ReactTestUtils.renderIntoDocument( + <Wrapper> + <TranscriptPage params={{ id: 1 }} user={{ role: 'student' }} /> + </Wrapper>, + ); + return expect(transcriptPage).to.exist; }); }); diff --git a/package-lock.json b/package-lock.json index b8b760a60a7077b79dd3f811e7b089262319713b..c5fbb079e8b86fff0f76ad2632fc370952ac528f 100755 --- a/package-lock.json +++ b/package-lock.json @@ -1750,7 +1750,7 @@ "@babel/plugin-proposal-do-expressions": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.6.0.tgz", - "integrity": "sha1-GSlT/thiDRPRKmH2je/Sb0EFkZM=", + "integrity": "sha512-qJDaoBDbLySwU1tG0jbAomOwz8W1PEiiiK0iLQAnHLr4PYIMVX4ltDGkj3uAKx4HDs1WJ0tozGW1zAQjuTIiWg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1770,7 +1770,7 @@ "@babel/plugin-proposal-export-default-from": { "version": "7.5.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.5.2.tgz", - "integrity": "sha1-LArC3MNuOyRD/q0sPF/HlvsbUUU=", + "integrity": "sha512-wr9Itk05L1/wyyZKVEmXWCdcsp/e185WUNl6AfYZeEKYaUPPvHXRDqO5K1VH7/UamYqGJowFRuCv30aDYZawsg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1780,7 +1780,7 @@ "@babel/plugin-proposal-export-namespace-from": { "version": "7.5.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.5.2.tgz", - "integrity": "sha1-zNXtBbBtcAaI/x2wGp3ScVXg0qA=", + "integrity": "sha512-TKUdOL07anjZEbR1iSxb5WFh810KyObdd29XLFLGo1IDsSuGrjH3ouWSbAxHNmrVKzr9X71UYl2dQ7oGGcRp0g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1801,7 +1801,7 @@ "@babel/plugin-proposal-json-strings": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha1-Vo7MRGxhSK5rJn8CVREwiR4p8xc=", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1811,7 +1811,7 @@ "@babel/plugin-proposal-logical-assignment-operators": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.2.0.tgz", - "integrity": "sha1-ilzqbEKnyHRGlZ4C//X60BLFb1c=", + "integrity": "sha512-0w797xwdPXKk0m3Js74hDi0mCTZplIu93MOSfb1ZLd/XFe3abWypx1QknVk0J+ohnsjYpvjH4Gwfo2i3RicB6Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1821,7 +1821,7 @@ "@babel/plugin-proposal-nullish-coalescing-operator": { "version": "7.4.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.4.4.tgz", - "integrity": "sha1-QcNg1ZSB2I4M46P4N98QEhp2mzk=", + "integrity": "sha512-Amph7Epui1Dh/xxUxS2+K22/MUi6+6JVTvy3P58tja3B6yKTSjwwx0/d83rF7551D6PVSSoplQb8GCwqec7HRw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1831,7 +1831,7 @@ "@babel/plugin-proposal-numeric-separator": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.2.0.tgz", - "integrity": "sha1-ZGhU2vTNIv1nM/YHYBOpNjEEQ6w=", + "integrity": "sha512-DohMOGDrZiMKS7LthjUZNNcWl8TAf5BZDwZAH4wpm55FuJTHgfqPGdibg7rZDmont/8Yg0zA03IgT6XLeP+4sg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1861,7 +1861,7 @@ "@babel/plugin-proposal-optional-chaining": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.6.0.tgz", - "integrity": "sha1-6b8fm5uhDHfAMwgtp18Gg4kEGvg=", + "integrity": "sha512-kj4gkZ6qUggkprRq3Uh5KP8XnE1MdIO0J7MhdDX8+rAbB6dJ2UrensGIS+0NPZAaaJ1Vr0PN6oLUgXMU1uMcSg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1871,7 +1871,7 @@ "@babel/plugin-proposal-pipeline-operator": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.5.0.tgz", - "integrity": "sha1-QQDsVe9PakwkkLX1pPKiLfonLAY=", + "integrity": "sha512-HFYuu/yGnkn69ligXxU0ohOVvQDsMNOUJs/c4PYLUVS6ntCYOyGmRQQaSYJARJ9rvc7/ulZKIzxd4wk91hN63A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1881,7 +1881,7 @@ "@babel/plugin-proposal-throw-expressions": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.2.0.tgz", - "integrity": "sha1-LZ5FLTcPE5AA5R22XQqF3GDGRzk=", + "integrity": "sha512-adsydM8DQF4i5DLNO4ySAU5VtHTPewOtNBV3u7F4lNMPADFF9bWQ+iDtUUe8+033cYCUz+bFlQdXQJmJOwoLpw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1928,7 +1928,7 @@ "@babel/plugin-syntax-dynamic-import": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", - "integrity": "sha1-acFZ/69JmBIhYa2OvF5tH1XfhhI=", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -1964,7 +1964,7 @@ "@babel/plugin-syntax-import-meta": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.2.0.tgz", - "integrity": "sha1-IzPvS4dVU6O80ek/jrwJ9bkhOkA=", + "integrity": "sha512-Hq6kFSZD7+PHkmBN8bCpHR6J8QEoCuEV/B38AIQscYjgMZkGlXB7cHNFzP5jR4RCh5545yP1ujHdmO7hAgKtBA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -2769,6 +2769,45 @@ } } }, + "@sinonjs/commons": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.6.0.tgz", + "integrity": "sha512-w4/WHG7C4WWFyE5geCieFJF6MZkbW4VAriol5KlmQXpAQdxvV0p26sqNZOW6Qyw6Y0l9K4g+cHvvczR2sEEpqg==", + "requires": { + "type-detect": "4.0.8" + }, + "dependencies": { + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + } + } + }, + "@sinonjs/formatio": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", + "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", + "requires": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + } + }, + "@sinonjs/samsam": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", + "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "requires": { + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==" + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -3011,7 +3050,7 @@ "ajv": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha1-086gTWsBeyiUrWkED+yLYj60vVI=", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -3139,6 +3178,11 @@ "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" + }, "array-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", @@ -3340,7 +3384,7 @@ "babel-eslint": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", - "integrity": "sha1-gaLGab4PIF4ZRi/tJILTPkaHqIo=", + "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -3401,7 +3445,7 @@ "babel-loader": { "version": "8.0.6", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha1-4zvbbzYrA/S7FBoMIauHxQG3Dfs=", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", "dev": true, "requires": { "find-cache-dir": "^2.0.0", @@ -3428,7 +3472,7 @@ "loader-utils": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc=", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -4404,7 +4448,7 @@ "compression-webpack-plugin": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/compression-webpack-plugin/-/compression-webpack-plugin-3.0.0.tgz", - "integrity": "sha1-CX0uTZXDoUy1yO0giZAJq1ubvKA=", + "integrity": "sha512-ls+oKw4eRbvaSv/hj9NmctihhBcR26j76JxV0bLRLcWhrUBdQFgd06z/Kgg7exyQvtWWP484wZxs0gIUX3NO0Q==", "requires": { "cacache": "^11.2.0", "find-cache-dir": "^3.0.0", @@ -4999,8 +5043,7 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, "diffie-hellman": { "version": "5.0.3", @@ -5526,7 +5569,7 @@ "eslint-config-airbnb": { "version": "18.0.1", "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.0.1.tgz", - "integrity": "sha1-o6dMwptGQTtglpZQJTgd+PuQhVk=", + "integrity": "sha512-hLb/ccvW4grVhvd6CT83bECacc+s4Z3/AEyWQdIT2KeTsG9dR7nx1gs7Iw4tDmGKozCNHFn4yZmRm3Tgy+XxyQ==", "dev": true, "requires": { "eslint-config-airbnb-base": "^14.0.0", @@ -5545,6 +5588,23 @@ "object.entries": "^1.1.0" } }, + "eslint-config-prettier": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz", + "integrity": "sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + }, + "dependencies": { + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + } + } + }, "eslint-import-resolver-node": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", @@ -5639,7 +5699,7 @@ "eslint-plugin-jsx-a11y": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz", - "integrity": "sha1-uHKgnV3lGvcKl9se6n3JMwQ3CKo=", + "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==", "dev": true, "requires": { "@babel/runtime": "^7.4.5", @@ -5656,7 +5716,7 @@ "eslint-plugin-react": { "version": "7.16.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.16.0.tgz", - "integrity": "sha1-mSjk8+ISLtO6altW0DA7o+QdjAk=", + "integrity": "sha512-GacBAATewhhptbK3/vTP09CbFrgUJmBSaaRcWdbQLFvUZy9yVcQxigBNHGPU/KE2AyHpzj3AWXpxoMTsIDiHug==", "dev": true, "requires": { "array-includes": "^3.0.3", @@ -5673,7 +5733,7 @@ "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -5693,7 +5753,7 @@ "eslint-plugin-react-hooks": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz", - "integrity": "sha1-YhC21aNyBfC5KFj4laToJwIKfQQ=" + "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==" }, "eslint-scope": { "version": "4.0.3", @@ -5729,7 +5789,7 @@ "eslint-watch": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/eslint-watch/-/eslint-watch-6.0.1.tgz", - "integrity": "sha1-4Jg5FlinwUjeyhcq0glQZa2gU1k=", + "integrity": "sha512-tWT6gQQWzGVn4KMs6ZAdG+nkNNQHg+c6wGdw/mwhp+jWyA7OWEOLxQnRhrP34ddJjpgDafhHOHBNtpVOtXXv4g==", "dev": true, "requires": { "chokidar": "^3.1.1", @@ -5766,7 +5826,7 @@ "debug": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "requires": { "ms": "^2.1.1" @@ -7212,9 +7272,9 @@ "dev": true }, "handlebars": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.3.tgz", - "integrity": "sha512-B0W4A2U1ww3q7VVthTKfh+epHx+q4mCt6iK+zEAzbMBpWQAwxCeKxEGpj/1oQTpzPXDNSOG7hmG14TsISH50yw==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", + "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -7293,8 +7353,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { "version": "1.0.0", @@ -8215,7 +8274,7 @@ "istanbul-instrumenter-loader": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", - "integrity": "sha1-mVe9WSUrNz+uXFK3tRiOb94qCUk=", + "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", "dev": true, "requires": { "convert-source-map": "^1.5.0", @@ -8266,7 +8325,7 @@ "loader-utils": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc=", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -8486,6 +8545,11 @@ "object.assign": "^4.1.0" } }, + "just-extend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", + "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==" + }, "karma": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/karma/-/karma-4.4.1.tgz", @@ -8541,12 +8605,42 @@ "chai-things": "^0.2.0", "sinon": "^2.1.0", "sinon-chai": "^2.8.0" + }, + "dependencies": { + "lolex": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", + "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", + "dev": true + }, + "sinon": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz", + "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==", + "dev": true, + "requires": { + "diff": "^3.1.0", + "formatio": "1.2.0", + "lolex": "^1.6.0", + "native-promise-only": "^0.8.1", + "path-to-regexp": "^1.7.0", + "samsam": "^1.1.3", + "text-encoding": "0.6.4", + "type-detect": "^4.0.0" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + } } }, "karma-chrome-launcher": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz", - "integrity": "sha1-gFpYZ5mk0F9OVPcqIEl58/MGZzg=", + "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==", "dev": true, "requires": { "which": "^1.2.1" @@ -8566,7 +8660,7 @@ "karma-coverage": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.0.1.tgz", - "integrity": "sha1-8CTxkfDxNd7iQDdjrDbMUqrCeaw=", + "integrity": "sha512-SnFkHsnLsaXfxkey51rRN9JDLAEKYW2Lb0qOEvcruukk0NkSNDkjobNDZPt9Ni3kIhLZkLtpGOz661hN7OaZvQ==", "dev": true, "requires": { "dateformat": "^1.0.6", @@ -8584,13 +8678,13 @@ "istanbul-lib-coverage": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha1-Z18KtpUD+tSx2En3NrqsqAM0T0k=", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "istanbul-lib-instrument": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha1-pfY9kfC7wMPkee9MXeAnM17G1jA=", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { "@babel/generator": "^7.4.0", @@ -8613,7 +8707,7 @@ "karma-coverage-istanbul-reporter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.1.0.tgz", - "integrity": "sha1-XxvME8XhTuHZGCHuiUaGFnT1THU=", + "integrity": "sha512-UH0mXPJFJyK5uiK7EkwGtQ8f30lCBAfqRResnZ4pzLJ04SOp4SPlYkmwbbZ6iVJ6sQFVzlDUXlntBEsLRdgZpg==", "dev": true, "requires": { "istanbul-api": "^2.1.6", @@ -8715,7 +8809,7 @@ "karma-webpack": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-4.0.2.tgz", - "integrity": "sha1-IyGb2VvdqFPjBz04dNNER8d7ztA=", + "integrity": "sha512-970/okAsdUOmiMOCY8sb17A2I8neS25Ad9uhyK3GHgmRSIFJbDcNEFE8dqqUhNe9OHiCC9k3DMrSmtd/0ymP1A==", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -8744,7 +8838,7 @@ "loader-utils": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha1-H/XcaRHJ8KBiUxpMBLYJQGEIwsc=", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -8761,7 +8855,7 @@ "source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } @@ -8988,10 +9082,9 @@ "dev": true }, "lolex": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz", - "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=", - "dev": true + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", + "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==" }, "loose-envify": { "version": "1.4.0", @@ -9829,6 +9922,18 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "nise": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.2.tgz", + "integrity": "sha512-/6RhOUlicRCbE9s+94qCUsyE+pKlVJ5AhIv+jEE7ESKwnbXqulKZ1FYU+XAtHHWE9TinYvAxDUJAb912PwPoWA==", + "requires": { + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^4.1.0", + "path-to-regexp": "^1.7.0" + } + }, "node-environment-flags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", @@ -10867,7 +10972,7 @@ "react-datepicker": { "version": "0.60.2", "resolved": "https://registry.npmjs.org/react-datepicker/-/react-datepicker-0.60.2.tgz", - "integrity": "sha1-EIPcHLn/BjK8oywDmYz4PuHOLgE=", + "integrity": "sha512-5WNtLhozO5i6iGlcgpvjP/Wu4l7RqvTC48CEE/pS1juUny/T4juYHSv53mo+Z90qO4qfyUj59jECTT8AIwAVRQ==", "requires": { "classnames": "^2.2.5", "moment": "^2.17.1", @@ -11396,7 +11501,7 @@ "semantic-ui-react": { "version": "0.79.1", "resolved": "https://registry.npmjs.org/semantic-ui-react/-/semantic-ui-react-0.79.1.tgz", - "integrity": "sha1-gL0Mz7OzwRhKGxs/YGerEiWu1fA=", + "integrity": "sha512-Z/QHE/h+l4MrZMilKe7RCBv6wPSBopcwRh5fPPZ1Cavxw4703XizJ3m+g7qcYXa5F40NnM0LKaVDuaReJ0f/3w==", "requires": { "babel-runtime": "^6.25.0", "classnames": "^2.2.5", @@ -11602,26 +11707,26 @@ "dev": true }, "sinon": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-2.4.1.tgz", - "integrity": "sha512-vFTrO9Wt0ECffDYIPSP/E5bBugt0UjcBQOfQUMh66xzkyPEnhl/vM2LRZi2ajuTdkH07sA6DzrM6KvdvGIH8xw==", - "dev": true, + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", + "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==", "requires": { - "diff": "^3.1.0", - "formatio": "1.2.0", - "lolex": "^1.6.0", - "native-promise-only": "^0.8.1", - "path-to-regexp": "^1.7.0", - "samsam": "^1.1.3", - "text-encoding": "0.6.4", - "type-detect": "^4.0.0" + "@sinonjs/commons": "^1.4.0", + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/samsam": "^3.3.3", + "diff": "^3.5.0", + "lolex": "^4.2.0", + "nise": "^1.5.2", + "supports-color": "^5.5.0" }, "dependencies": { - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -12622,20 +12727,20 @@ "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==" }, "uglify-js": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.1.tgz", - "integrity": "sha512-+dSJLJpXBb6oMHP+Yvw8hUgElz4gLTh82XuX68QiJVTXaE5ibl6buzhNkQdYhBlIhozWOC9ge16wyRmjG4TwVQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.1.tgz", + "integrity": "sha512-pnOF7jY82wdIhATVn87uUY/FHU+MDUdPLkmGFvGoclQmeu229eTkbG5gjGGBi3R7UuYYSEeYXY/TTY5j2aym2g==", "dev": true, "optional": true, "requires": { - "commander": "2.20.0", + "commander": "~2.20.3", "source-map": "~0.6.1" }, "dependencies": { "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "optional": true }, @@ -12651,7 +12756,7 @@ "uglifyjs-webpack-plugin": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz", - "integrity": "sha1-51vIDn8ZN/cllUybTFoeln6p0Nc=", + "integrity": "sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg==", "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", @@ -12672,7 +12777,7 @@ "find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "requires": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -13217,7 +13322,7 @@ "webpack-bundle-tracker": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/webpack-bundle-tracker/-/webpack-bundle-tracker-0.4.3.tgz", - "integrity": "sha1-SKPiIm3bnSTXBGQKtBaMLRIPRSY=", + "integrity": "sha512-Sl/+OsNhFAH3/c6XADupRu8jLvGojfXX0pZIIm3O5ZcJqkHHqlY4nLG+NVRcbDgM/jOeWimKDGQMVEa8FBeJ2g==", "requires": { "deep-extend": "^0.6.0", "mkdirp": "^0.5.1", diff --git a/package.json b/package.json index 547fcaab888272c66ba60013a27eed9129565c75..275e346ae63414b00d6bb3cd2dc1f7a67d7df0d4 100755 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "babel-loader": "^8.0.6", "eslint": "^6.6.0", "eslint-config-airbnb": "^18.0.1", + "eslint-config-prettier": "^6.7.0", "eslint-plugin-import": "^2.2.0", "eslint-plugin-jsx-a11y": "^6.2.3", "eslint-plugin-react": "^7.16.0", @@ -61,8 +62,6 @@ "mock-cookie": "^0.3.2", "react-hot-loader": "^3.0.0-beta.5", "react-test-utils": "0.0.1", - "webpack": "^4.41.2", - "webpack-bundle-tracker": "0.0.93", "webpack-cli": "^3.3.10", "webpack-dev-server": "^3.9.0" }, @@ -83,6 +82,7 @@ "react-dom": "^16.12.0", "react-router": "^3.2.5", "semantic-ui-react": "^0.79.1", + "sinon": "^7.5.0", "starwars": "^1.0.1", "uglifyjs-webpack-plugin": "^2.2.0", "webpack": "^4.41.2", diff --git a/sonar-project.properties b/sonar-project.properties index 7a082a2783b934a1cdb77fdc8b37fc1068c5c2bb..6b0e489a1a186cb8b04b1574b0ed768189d286af 100755 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -6,7 +6,7 @@ ## Project Configuration sonar.projectKey=id.ac.ui.cs.foss:kape sonar.sources=core,assets/js -sonar.exclusions=.devcontainer/,.gitlab/,.config.js,.tmp/,assets/admin/**/*,assets/rest_framework/**/*,assets/rest_framework_swagger/**/*,assets/silk/**/*,kape/**/*,manage.py,core/tests/**/*,assets/js/__test__/**/* +sonar.exclusions=.devcontainer/,.gitlab/,.config.js,.tmp/,assets/admin/**/*,assets/rest_framework/**/*,assets/rest_framework_swagger/**/*,assets/silk/**/*,kape/**/*,manage.py,core/tests/**/*,assets/js/__test__/**/*,core/migrations/**/* sonar.scm.provider=git sonar.projectVersion=1.0.0 sonar.python.coverage.reportPaths=test/backend/coverage.xml