From 4604f7422590258364b730263db4d4c77d1b5015 Mon Sep 17 00:00:00 2001 From: "Vladimir Pal (BeDoIt)" Date: Mon, 15 Jan 2018 13:30:26 +0200 Subject: [PATCH 01/10] chore: update atlaskit packages --- app/components/TextField/TextField.jsx | 17 +- app/containers/Header/Header.jsx | 9 +- app/containers/IssueView/IssueViewHeader.jsx | 8 - app/sagas/worklogs.js | 13 +- app/utils/stat.js | 13 + app/yarn.lock | 16 +- package.json | 30 +- yarn.lock | 408 +++++++++---------- 8 files changed, 263 insertions(+), 251 deletions(-) create mode 100644 app/utils/stat.js diff --git a/app/components/TextField/TextField.jsx b/app/components/TextField/TextField.jsx index fc6ea13cd..c49cda5be 100644 --- a/app/components/TextField/TextField.jsx +++ b/app/components/TextField/TextField.jsx @@ -1,5 +1,6 @@ import React, { PureComponent } from 'react'; -import { FieldTextStateless } from '@atlaskit/field-text'; +import Input from '@atlaskit/input'; +import { FieldBaseStateless } from '@atlaskit/field-base'; /* eslint-disable react/prop-types */ export default class extends PureComponent { @@ -28,12 +29,16 @@ export default class extends PureComponent { render() { return ( - { this.input = fieldRef; }} - /> + > + { this.input = fieldRef; }} + onChange={this.handleOnChange} + value={this.state.value} + /> + ); } } diff --git a/app/containers/Header/Header.jsx b/app/containers/Header/Header.jsx index 8d682434e..934175d9c 100644 --- a/app/containers/Header/Header.jsx +++ b/app/containers/Header/Header.jsx @@ -8,7 +8,6 @@ import { cogIcon } from 'data/svg'; import { Flex } from 'components'; import { profileActions, uiActions, settingsActions } from 'actions'; import { shell } from 'electron'; -import mixpanel from 'mixpanel-browser'; import { getUserData, getHost, @@ -16,6 +15,10 @@ import { getUpdateFetching, } from 'selectors'; +import { + trackMixpanel, +} from '../../utils/stat'; + import { HeaderContainer, Name, @@ -77,7 +80,7 @@ const Header: StatelessFunctionalComponent = ({ { - mixpanel.track('Opened Settings'); + trackMixpanel('Opened Settings'); setSettingsModalOpen(true); }} > @@ -104,7 +107,7 @@ const Header: StatelessFunctionalComponent = ({ {updateAvailable && !updateFetching && [ { - mixpanel.track('Clicked "Install Update"', { upcomingVersion: updateAvailable }); + trackMixpanel('Clicked "Install Update"', { upcomingVersion: updateAvailable }); setSettingsModalOpen(true); setSettingsModalTab('Updates'); }} diff --git a/app/containers/IssueView/IssueViewHeader.jsx b/app/containers/IssueView/IssueViewHeader.jsx index d9b9e7311..9e20c707e 100644 --- a/app/containers/IssueView/IssueViewHeader.jsx +++ b/app/containers/IssueView/IssueViewHeader.jsx @@ -116,14 +116,6 @@ const IssueViewHeader: StatelessFunctionalComponent = ({ - {/* - - - */} diff --git a/app/sagas/worklogs.js b/app/sagas/worklogs.js index 7ee753345..a7478606a 100644 --- a/app/sagas/worklogs.js +++ b/app/sagas/worklogs.js @@ -16,8 +16,11 @@ import { } from 'selectors'; import moment from 'moment'; import { jts } from 'time-util'; -import mixpanel from 'mixpanel-browser'; +import { + trackMixpanel, + incrementMixpanel, +} from '../utils/stat'; import { getFromStorage, setToStorage } from './storage'; import { throwError, notify, infoLog } from './ui'; import type { Id, Worklog, DeleteWorklogRequestAction, EditWorklogRequestAction, Issue } from '../types'; @@ -101,8 +104,8 @@ export function* uploadWorklog(options: UploadWorklogOptions): Generator<*, *, * keepedIdles, }; yield call(Api.chronosBackendUploadWorklog, backendUploadOptions); - mixpanel.track('Worklog uploaded (Automatic)', { timeSpentSeconds }); - mixpanel.people.increment('Logged time(seconds)', timeSpentSeconds); + trackMixpanel('Worklog uploaded (Automatic)', { timeSpentSeconds }); + incrementMixpanel('Logged time(seconds)', timeSpentSeconds); yield call(notify, '', 'Worklog is uploaded'); yield call( infoLog, @@ -217,8 +220,8 @@ export function* addManualWorklogFlow(): Generator<*, *, *> { const newWorklog = yield call(Api.addWorklog, jiraUploadOptions); yield put(worklogsActions.setEditWorklogFetching(false)); yield put(uiActions.setWorklogModalOpen(false)); - mixpanel.track('Worklog uploaded (Manual)', { timeSpentSeconds }); - mixpanel.people.increment('Logged time(seconds)', timeSpentSeconds); + trackMixpanel('Worklog uploaded (Manual)', { timeSpentSeconds }); + incrementMixpanel('Logged time(seconds)', timeSpentSeconds); yield call(delay, 1000); yield call(notify, '', 'Manual worklog succesfully added'); const newIssue = { diff --git a/app/utils/stat.js b/app/utils/stat.js new file mode 100644 index 000000000..519714897 --- /dev/null +++ b/app/utils/stat.js @@ -0,0 +1,13 @@ +import mixpanel from 'mixpanel-browser'; + +export const trackMixpanel = (event, data) => { + if (process.env.DISABLE_MIXPANEL !== '1' && !process.env.MIXPANEL_API_TOKEN) { + mixpanel.track(event, data); + } +}; + +export const incrementMixpanel = (event, data) => { + if (process.env.DISABLE_MIXPANEL !== '1' && !process.env.MIXPANEL_API_TOKEN) { + mixpanel.people.increment(event, data); + } +}; diff --git a/app/yarn.lock b/app/yarn.lock index e90eb6869..aac68696b 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -137,23 +137,23 @@ nan@^2.0.0: resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" node-notifier@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" dependencies: growly "^1.3.0" - semver "^5.3.0" - shellwords "^0.1.0" - which "^1.2.12" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -semver@^5.3.0, semver@^5.4.1: +semver@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" -shellwords@^0.1.0: +shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" @@ -175,7 +175,7 @@ universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" -which@^1.2.12: +which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: diff --git a/package.json b/package.json index 98674d92c..ce8d55ed4 100644 --- a/package.json +++ b/package.json @@ -135,22 +135,22 @@ "webpack-sentry-plugin": "1.14.1" }, "dependencies": { - "@atlaskit/button": "5.4.5", - "@atlaskit/calendar": "3.0.1", - "@atlaskit/checkbox": "1.1.4", - "@atlaskit/dropdown-menu": "3.10.4", - "@atlaskit/field-radio-group": "1.7.4", - "@atlaskit/field-text": "4.1.1", - "@atlaskit/field-text-area": "1.0.1", - "@atlaskit/flag": "6.1.3", - "@atlaskit/icon": "10.3.1", - "@atlaskit/inline-dialog": "5.0.4", - "@atlaskit/inline-edit": "4.5.5", + "@atlaskit/button": "6.3.0", + "@atlaskit/calendar": "3.1.0", + "@atlaskit/checkbox": "1.2.0", + "@atlaskit/dropdown-menu": "3.11.4", + "@atlaskit/field-radio-group": "1.8.0", + "@atlaskit/field-base": "8.1.6", + "@atlaskit/field-text-area": "1.1.0", + "@atlaskit/flag": "6.2.0", + "@atlaskit/icon": "10.7.0", + "@atlaskit/inline-dialog": "5.1.0", + "@atlaskit/inline-edit": "4.5.9", "@atlaskit/input": "1.6.1", - "@atlaskit/modal-dialog": "3.2.2", - "@atlaskit/single-select": "2.0.5", - "@atlaskit/spinner": "4.0.2", - "@atlaskit/tooltip": "6.2.1", + "@atlaskit/modal-dialog": "3.3.2", + "@atlaskit/single-select": "3.2.0", + "@atlaskit/spinner": "4.1.0", + "@atlaskit/tooltip": "8.1.0", "calculate-size": "1.1.1", "electron-json-storage": "3.1.0", "electron-log": "2.2.11", diff --git a/yarn.lock b/yarn.lock index 53ee2421a..9e77ec5d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,25 +26,22 @@ version "0.0.6" resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" -"@atlaskit/blanket@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@atlaskit/blanket/-/blanket-3.0.3.tgz#845729e629ea0fbcca8f96c98ccf353469f6f6f2" +"@atlaskit/blanket@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@atlaskit/blanket/-/blanket-4.0.4.tgz#427b0fce9c019b5377726f1abb52b3253a128f47" dependencies: - "@atlaskit/theme" "^2.0.0" - babel-runtime "^6.11.6" + "@atlaskit/theme" "^2.0.1" styled-components "^1.4.6" -"@atlaskit/button@5.4.5": - version "5.4.5" - resolved "https://registry.yarnpkg.com/@atlaskit/button/-/button-5.4.5.tgz#7e024364b4e175ccbae4a8c1a05fb352cadc9280" +"@atlaskit/button@6.3.0", "@atlaskit/button@^6.2.0", "@atlaskit/button@^6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@atlaskit/button/-/button-6.3.0.tgz#91eb1202665345aec91ae13a5de024eae69708d8" dependencies: - "@atlaskit/theme" "^2.0.0" - babel-runtime "^6.11.6" - classnames "^2.2.5" - prop-types "^15.5.10" + "@atlaskit/theme" "^2.3.0" + babel-runtime "^6.26.0" styled-components "^1.4.6" -"@atlaskit/button@^5.0.0", "@atlaskit/button@^5.1.1", "@atlaskit/button@^5.1.2", "@atlaskit/button@^5.4.2", "@atlaskit/button@^5.4.3": +"@atlaskit/button@^5.4.13": version "5.4.14" resolved "https://registry.yarnpkg.com/@atlaskit/button/-/button-5.4.14.tgz#600975141fd356ccbf712885a00f63a1367dd28d" dependencies: @@ -54,44 +51,47 @@ prop-types "^15.5.10" styled-components "^1.4.6" -"@atlaskit/calendar@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@atlaskit/calendar/-/calendar-3.0.1.tgz#58c284ce6a0764a701c50b76f8fe288cd40dd8ff" +"@atlaskit/calendar@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@atlaskit/calendar/-/calendar-3.1.0.tgz#4eb4ff5bc29bbc4ad66d9aff10a5eb38eb407eac" dependencies: - "@atlaskit/button" "^5.1.1" - "@atlaskit/icon" "^8.1.0" - "@atlaskit/theme" "^2.0.0" + "@atlaskit/button" "^6.3.0" + "@atlaskit/icon" "^10.7.0" + "@atlaskit/theme" "^2.3.0" calendar-base "^0.3.0" keycode "^2.1.7" prop-types "^15.5.10" styled-components "^1.4.6" + uuid "^3.1.0" -"@atlaskit/checkbox@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@atlaskit/checkbox/-/checkbox-1.1.4.tgz#178b0e72468e609231a9af38fc42084bc8407e9c" +"@atlaskit/checkbox@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@atlaskit/checkbox/-/checkbox-1.2.0.tgz#139ef4b27639bd8271d045324395da773faab5be" dependencies: - "@atlaskit/icon" "^10.1.3" - "@atlaskit/theme" "^2.0.0" - babel-runtime "^6.11.6" + "@atlaskit/button" "^6.3.0" + "@atlaskit/icon" "^10.7.0" + "@atlaskit/theme" "^2.3.0" + babel-runtime "^6.26.0" prop-types "^15.5.10" styled-components "^1.4.6" -"@atlaskit/dropdown-menu@3.10.4": - version "3.10.4" - resolved "https://registry.yarnpkg.com/@atlaskit/dropdown-menu/-/dropdown-menu-3.10.4.tgz#30e2efcfd2619737726ca400513d272fc05b9c80" +"@atlaskit/dropdown-menu@3.11.4": + version "3.11.4" + resolved "https://registry.yarnpkg.com/@atlaskit/dropdown-menu/-/dropdown-menu-3.11.4.tgz#519950eda6c902fa6c4e64c6a698cf4e0295f72a" dependencies: uid "0.0.2" - "@atlaskit/button" "^5.1.2" + "@atlaskit/button" "^5.4.13" "@atlaskit/droplist" "^4.11.0" - "@atlaskit/icon" "^8.1.0" - "@atlaskit/item" "^4.1.0" + "@atlaskit/icon" "^10.1.3" + "@atlaskit/item" "^4.2.0" "@atlaskit/util-shared-styles" "^2.10.3" array-find "^1.0.0" babel-runtime "^6.23.0" prop-types "^15.5.10" + prop-types-extra "^1.0.1" styled-components "^1.4.6" -"@atlaskit/droplist@^4.11.0", "@atlaskit/droplist@^4.9.0": +"@atlaskit/droplist@^4.11.0", "@atlaskit/droplist@^4.11.3": version "4.11.4" resolved "https://registry.yarnpkg.com/@atlaskit/droplist/-/droplist-4.11.4.tgz#ba9f342152dc647de511c66b806b8d8fa9f1411f" dependencies: @@ -107,72 +107,53 @@ prop-types "^15.5.10" styled-components "^1.4.6" -"@atlaskit/field-base@^8.0.0", "@atlaskit/field-base@^8.1.1", "@atlaskit/field-base@^8.1.5": - version "8.1.5" - resolved "https://registry.yarnpkg.com/@atlaskit/field-base/-/field-base-8.1.5.tgz#efb26e61cd1ee1626cf490fd88d7a7019b5c652e" +"@atlaskit/field-base@8.1.6", "@atlaskit/field-base@^8.1.1": + version "8.1.6" + resolved "https://registry.yarnpkg.com/@atlaskit/field-base/-/field-base-8.1.6.tgz#c20cf0e24921d404b0e0d97759572ee809b7a7f7" dependencies: - "@atlaskit/icon" "^10.1.3" - "@atlaskit/inline-dialog" "^5.0.1" + "@atlaskit/icon" "^10.3.1" + "@atlaskit/inline-dialog" "^5.0.5" "@atlaskit/spinner" "^4.0.0" "@atlaskit/theme" "^2.0.0" - babel-runtime "^6.11.6" - prop-types "^15.5.10" - styled-components "^1.4.6" - -"@atlaskit/field-radio-group@1.7.4": - version "1.7.4" - resolved "https://registry.yarnpkg.com/@atlaskit/field-radio-group/-/field-radio-group-1.7.4.tgz#8e63b2eebf9a8eb3875e32db22c56d26938bc2cc" - dependencies: - "@atlaskit/field-base" "^8.1.5" - "@atlaskit/icon" "^9.0.1" - "@atlaskit/theme" "^2.0.1" - babel-runtime "^6.11.6" - classnames "^2.2.5" - prop-types "^15.5.10" - styled-components "^1.4.6" - -"@atlaskit/field-text-area@1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@atlaskit/field-text-area/-/field-text-area-1.0.1.tgz#12ab756cc25fa14795cec92ef232924c52406228" - dependencies: - "@atlaskit/field-base" "^8.0.0" - "@atlaskit/theme" "^2.0.1" - babel-runtime "^6.11.6" - prop-types "^15.5.10" + babel-runtime "^6.26.0" styled-components "^1.4.6" -"@atlaskit/field-text@4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@atlaskit/field-text/-/field-text-4.1.1.tgz#d2eb3ed9dcfdaeaf28b55e1ef8a6787933b7ed2f" +"@atlaskit/field-radio-group@1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@atlaskit/field-radio-group/-/field-radio-group-1.8.0.tgz#264782fb2b6ba9f9a819b4cf34dca40aa0ce7dd2" dependencies: "@atlaskit/field-base" "^8.1.1" - "@atlaskit/theme" "^2.2.0" - babel-runtime "^6.11.6" - prop-types "^15.5.10" + "@atlaskit/icon" "^10.7.0" + "@atlaskit/theme" "^2.3.0" styled-components "^1.4.6" -"@atlaskit/flag@6.1.3": - version "6.1.3" - resolved "https://registry.yarnpkg.com/@atlaskit/flag/-/flag-6.1.3.tgz#5e69c8a71db5ff151a4dfdf6c766b5525d603da2" +"@atlaskit/field-text-area@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@atlaskit/field-text-area/-/field-text-area-1.1.0.tgz#65d53520cea0cc9c73a8b470235b0c82a670f281" dependencies: - "@atlaskit/button" "^5.0.0" - "@atlaskit/icon" "^10.1.0" - "@atlaskit/theme" "^2.0.0" - "@atlaskit/util-shared-styles" "^2.10.3" - babel-runtime "^6.11.6" + "@atlaskit/button" "^6.3.0" + "@atlaskit/field-base" "^8.1.1" + "@atlaskit/icon" "^10.7.0" + "@atlaskit/theme" "^2.3.0" + "@atlaskit/util-readme" "^3.6.5" + babel-runtime "^6.26.0" prop-types "^15.5.10" - react-transition-group "^1.2.0" styled-components "^1.4.6" -"@atlaskit/icon@10.3.1": - version "10.3.1" - resolved "https://registry.yarnpkg.com/@atlaskit/icon/-/icon-10.3.1.tgz#bc5cbb78334bf99fca30738445af11a414f381de" +"@atlaskit/flag@6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@atlaskit/flag/-/flag-6.2.0.tgz#daf31e82db64e212cbaab986f06c53f9d8c0f7fc" dependencies: - babel-runtime "^6.11.6" - prop-types "^15.5.10" + "@atlaskit/button" "^6.3.0" + "@atlaskit/icon" "^10.7.0" + "@atlaskit/layer-manager" "^2.6.0" + "@atlaskit/theme" "^2.3.0" + babel-runtime "^6.26.0" + react-transition-group "^2.2.1" styled-components "^1.4.6" + uuid "^3.1.0" -"@atlaskit/icon@^10.1.0", "@atlaskit/icon@^10.1.3": +"@atlaskit/icon@10.7.0", "@atlaskit/icon@^10.1.3", "@atlaskit/icon@^10.3.1", "@atlaskit/icon@^10.6.0", "@atlaskit/icon@^10.7.0": version "10.7.0" resolved "https://registry.yarnpkg.com/@atlaskit/icon/-/icon-10.7.0.tgz#737e2d4fd762dcc55af372ae2df833677be2cbca" dependencies: @@ -181,33 +162,7 @@ styled-components "^1.4.6" uuid "^3.1.0" -"@atlaskit/icon@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@atlaskit/icon/-/icon-8.1.0.tgz#1de578f138b14dc98c38591865b5b687e558b83a" - dependencies: - babel-runtime "^6.11.6" - prop-types "^15.5.10" - styled-components "^1.3.0" - -"@atlaskit/icon@^9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@atlaskit/icon/-/icon-9.0.1.tgz#8aa4226dd95b85e9ee2bc799335ee5eab9a9ee9d" - dependencies: - babel-runtime "^6.11.6" - prop-types "^15.5.10" - styled-components "^1.3.0" - -"@atlaskit/inline-dialog@5.0.4": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@atlaskit/inline-dialog/-/inline-dialog-5.0.4.tgz#439b3a7dd861790c53d627d2637a3e89f8080a8d" - dependencies: - "@atlaskit/layer" "^2.0.0" - "@atlaskit/theme" "^2.0.0" - babel-runtime "^6.11.6" - prop-types "^15.5.10" - styled-components "^1.4.6" - -"@atlaskit/inline-dialog@^5.0.1": +"@atlaskit/inline-dialog@5.1.0", "@atlaskit/inline-dialog@^5.0.5": version "5.1.0" resolved "https://registry.yarnpkg.com/@atlaskit/inline-dialog/-/inline-dialog-5.1.0.tgz#8c7f424c5b558d2658264b027fef7e73baf3d47d" dependencies: @@ -215,18 +170,16 @@ "@atlaskit/theme" "^2.3.0" styled-components "^1.4.6" -"@atlaskit/inline-edit@4.5.5": - version "4.5.5" - resolved "https://registry.yarnpkg.com/@atlaskit/inline-edit/-/inline-edit-4.5.5.tgz#daab3f056a073ec8f1378d076a90e917cdc8132e" +"@atlaskit/inline-edit@4.5.9": + version "4.5.9" + resolved "https://registry.yarnpkg.com/@atlaskit/inline-edit/-/inline-edit-4.5.9.tgz#f8a8a831bfdf8b5f08208b57d316fad5d92f0551" dependencies: - "@atlaskit/button" "^5.4.2" + "@atlaskit/button" "^6.2.0" "@atlaskit/field-base" "^8.1.1" - "@atlaskit/icon" "^10.1.0" - "@atlaskit/theme" "^2.0.0" - babel-runtime "^6.11.6" + "@atlaskit/icon" "^10.6.0" + "@atlaskit/theme" "^2.2.9" classnames "^2.2.5" - prop-types "^15.5.10" - styled-components "^1.4.5" + styled-components "^1.4.6" "@atlaskit/input@1.6.1": version "1.6.1" @@ -238,18 +191,17 @@ prop-types "^15.5.10" styled-components "^1.4.6" -"@atlaskit/item@^4.1.0": - version "4.2.5" - resolved "https://registry.yarnpkg.com/@atlaskit/item/-/item-4.2.5.tgz#84e871f34354977dc3e07158b5d9b7a9379cee7b" +"@atlaskit/item@^4.1.0", "@atlaskit/item@^4.2.0": + version "4.2.6" + resolved "https://registry.yarnpkg.com/@atlaskit/item/-/item-4.2.6.tgz#d7a3c1b4886685422cc8810da5bbae4167bb4d2d" dependencies: - uid "0.0.2" "@atlaskit/theme" "^2.1.0" - babel-runtime "^6.23.0" prop-types "^15.5.10" react-addons-text-content "^0.0.4" styled-components "^1.4.6" + uuid "^3.1.0" -"@atlaskit/layer-manager@^2.1.0", "@atlaskit/layer-manager@^2.6.0": +"@atlaskit/layer-manager@^2.6.0": version "2.7.0" resolved "https://registry.yarnpkg.com/@atlaskit/layer-manager/-/layer-manager-2.7.0.tgz#6d4ed60a68f800c06f3a766e26d4de6ab0b20698" dependencies: @@ -259,56 +211,42 @@ styled-components "^1.4.6" tabbable "^1.1.0" -"@atlaskit/layer@^2.0.0", "@atlaskit/layer@^2.5.3", "@atlaskit/layer@^2.6.0": +"@atlaskit/layer@^2.5.3", "@atlaskit/layer@^2.6.0": version "2.6.0" resolved "https://registry.yarnpkg.com/@atlaskit/layer/-/layer-2.6.0.tgz#5b46beca4a5063e10c54bacce2dc38c9f4857abc" dependencies: styled-components "^1.4.6" -"@atlaskit/modal-dialog@3.2.2": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@atlaskit/modal-dialog/-/modal-dialog-3.2.2.tgz#b1782709f511313f38cc8b97e7a34e111fb674c4" +"@atlaskit/modal-dialog@3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@atlaskit/modal-dialog/-/modal-dialog-3.3.2.tgz#146a39d687e426c734c6dc113a6b336ad03dce83" dependencies: - "@atlaskit/blanket" "^3.0.0" - "@atlaskit/button" "^5.1.1" - "@atlaskit/icon" "^10.1.3" - "@atlaskit/layer-manager" "^2.1.0" - "@atlaskit/theme" "^2.0.0" - babel-runtime "^6.25.0" + "@atlaskit/blanket" "^4.0.4" + "@atlaskit/button" "^6.3.0" + "@atlaskit/icon" "^10.7.0" + "@atlaskit/layer-manager" "^2.6.0" + "@atlaskit/theme" "^2.3.0" focusin "^2.0.0" prop-types "^15.5.10" - raf-schd "^2.0.1" - react-transition-group "^2.2.0" + raf-schd "^2.0.2" + react-transition-group "^2.2.1" styled-components "^1.4.6" - tabbable "^1.0.6" + tabbable "^1.1.0" -"@atlaskit/single-select@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@atlaskit/single-select/-/single-select-2.0.5.tgz#d7e007bad7b1904b9ad592dd66081b475c7f8e70" +"@atlaskit/single-select@3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@atlaskit/single-select/-/single-select-3.2.0.tgz#e0d3088b47e98b38f0db63b841bb4d7905f59f35" dependencies: - "@atlaskit/button" "^5.4.3" - "@atlaskit/droplist" "^4.9.0" - "@atlaskit/field-base" "^8.0.0" - "@atlaskit/icon" "^10.1.0" - "@atlaskit/spinner" "^4.0.0" - "@atlaskit/theme" "^2.0.1" - babel-runtime "^6.11.6" + "@atlaskit/button" "^6.3.0" + "@atlaskit/droplist" "^4.11.3" + "@atlaskit/field-base" "^8.1.1" + "@atlaskit/icon" "^10.7.0" + "@atlaskit/spinner" "^4.1.0" + "@atlaskit/theme" "^2.3.0" classnames "^2.2.5" - prop-types "^15.5.10" styled-components "^1.4.6" -"@atlaskit/spinner@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@atlaskit/spinner/-/spinner-4.0.2.tgz#37ec068ec99e9d056f7c476cc617002dc394a13b" - dependencies: - "@atlaskit/theme" "^2.0.0" - babel-runtime "^6.11.6" - prop-types "^15.5.10" - prop-types-extra "^1.0.1" - react-transition-group "^1.2.0" - styled-components "^1.4.6" - -"@atlaskit/spinner@^4.0.0": +"@atlaskit/spinner@4.1.0", "@atlaskit/spinner@^4.0.0", "@atlaskit/spinner@^4.1.0": version "4.1.0" resolved "https://registry.yarnpkg.com/@atlaskit/spinner/-/spinner-4.1.0.tgz#24fbe1703b87c6b59c7b6d4677ff51a0e044697f" dependencies: @@ -317,25 +255,14 @@ react-transition-group "^2.2.1" styled-components "^1.4.6" -"@atlaskit/theme@^2.0.0", "@atlaskit/theme@^2.0.1", "@atlaskit/theme@^2.1.0", "@atlaskit/theme@^2.2.0", "@atlaskit/theme@^2.3.0": +"@atlaskit/theme@^2.0.0", "@atlaskit/theme@^2.0.1", "@atlaskit/theme@^2.1.0", "@atlaskit/theme@^2.2.9", "@atlaskit/theme@^2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@atlaskit/theme/-/theme-2.3.0.tgz#099525cf3f73ed83c4d39930fd5ed1d83efafd3a" dependencies: prop-types "^15.5.10" styled-components "^1.4.6" -"@atlaskit/tooltip@6.2.1": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@atlaskit/tooltip/-/tooltip-6.2.1.tgz#d8894f75a4f3f3dbdbeaae2a18ca17e299de0d1d" - dependencies: - "@atlaskit/layer" "^2.5.3" - "@atlaskit/theme" "^2.0.0" - "@atlaskit/util-shared-styles" "^2.10.3" - babel-runtime "^6.11.6" - prop-types "^15.5.10" - styled-components "^1.4.6" - -"@atlaskit/tooltip@^8.0.1": +"@atlaskit/tooltip@8.1.0", "@atlaskit/tooltip@^8.0.1": version "8.1.0" resolved "https://registry.yarnpkg.com/@atlaskit/tooltip/-/tooltip-8.1.0.tgz#997d644a71a97a5c5fa35b31d8e09dd44dc9b001" dependencies: @@ -345,7 +272,18 @@ react-transition-group "^2.2.1" styled-components "^1.4.6" -"@atlaskit/util-shared-styles@^2.10.3", "@atlaskit/util-shared-styles@^2.10.5": +"@atlaskit/util-readme@^3.6.5": + version "3.6.5" + resolved "https://registry.yarnpkg.com/@atlaskit/util-readme/-/util-readme-3.6.5.tgz#33a8e0c90108f6589a62d89974e1f7d09e7dcee7" + dependencies: + "@atlaskit/util-shared-styles" "^2.0.1" + decamelize "^1.2.0" + prop-types "^15.5.10" + react-docgen "^2.13.0" + react-syntax-highlighter "^3.0.2" + styled-components "^1.4.6" + +"@atlaskit/util-shared-styles@^2.0.1", "@atlaskit/util-shared-styles@^2.10.3", "@atlaskit/util-shared-styles@^2.10.5": version "2.10.6" resolved "https://registry.yarnpkg.com/@atlaskit/util-shared-styles/-/util-shared-styles-2.10.6.tgz#56aa25d59cef0324f653a6e857d512a70be47c65" dependencies: @@ -730,6 +668,10 @@ ast-types-flow@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" +ast-types@0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" + async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" @@ -746,7 +688,7 @@ async@^1.4.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.0.0, async@^2.1.2, async@^2.4.1: +async@^2.0.0, async@^2.1.2, async@^2.1.4, async@^2.4.1: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: @@ -1535,7 +1477,7 @@ babel-register@6.26.0, babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@6.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.25.0, babel-runtime@^6.26.0: +babel-runtime@6.x, babel-runtime@^6.11.6, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0, babel-runtime@^6.9.2: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -1583,6 +1525,10 @@ babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" +babylon@~5.8.3: + version "5.8.38" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" + backo2@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" @@ -1849,10 +1795,10 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: electron-to-chromium "^1.2.7" browserslist@^2.1.2: - version "2.11.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.1.tgz#02fda29d9a2164b879100126e7b0d0b57e43a7bb" + version "2.11.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.2.tgz#76ad768b97a689512fcd9724a8b9d76cdffb18fd" dependencies: - caniuse-lite "^1.0.30000789" + caniuse-lite "^1.0.30000791" electron-to-chromium "^1.3.30" buffer-indexof@^1.0.0: @@ -2037,12 +1983,12 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000790" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000790.tgz#a8023e6eb9fe9c0ef3d60b4427ce104ea87d381c" + version "1.0.30000792" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000792.tgz#a7dac6dc9f5181b675fd69e5cb06fefb523157f8" -caniuse-lite@^1.0.30000789: - version "1.0.30000790" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000790.tgz#c954cca780046f34c4b433d324ef419e1db51a53" +caniuse-lite@^1.0.30000791: + version "1.0.30000792" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000792.tgz#d0cea981f8118f3961471afbb43c9a1e5bbf0332" capture-stack-trace@^1.0.0: version "1.0.0" @@ -2940,7 +2886,7 @@ debug@^3.0.0, debug@^3.0.1, debug@^3.1.0: dependencies: ms "2.0.0" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -3028,10 +2974,14 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -depd@1.1.1, depd@~1.1.1: +depd@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" +depd@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -3100,8 +3050,8 @@ dns-equal@^1.0.0: resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" dns-packet@^1.0.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.0.tgz#7e2b33bf992678a44534c7117d39196bda684d33" + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" dependencies: ip "^1.1.0" safe-buffer "^5.0.1" @@ -3723,7 +3673,7 @@ esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" -esprima@^4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" @@ -3921,8 +3871,8 @@ extglob@^0.3.1: is-extglob "^1.0.0" extglob@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.3.tgz#55e019d0c95bf873949c737b7e5172dba84ebb29" + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -4769,10 +4719,14 @@ hawk@~6.0.2: hoek "4.x.x" sntp "2.x.x" -highlight.js@^9.3.0: +highlight.js@^9.3.0, highlight.js@~9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" +highlight.js@~9.8.0: + version "9.8.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.8.0.tgz#38eeef40cd45eaddbec8c9e5238fb7a783a3b685" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -5863,6 +5817,12 @@ lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" +lowlight@^1.5.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.9.1.tgz#ed7c3dffc36f8c1f263735c0fe0c907847c11250" + dependencies: + highlight.js "~9.12.0" + lru-cache@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" @@ -6215,6 +6175,12 @@ node-abi@^2.1.1: dependencies: semver "^5.4.1" +node-dir@^0.1.10: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + dependencies: + minimatch "^3.0.2" + node-emoji@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826" @@ -6499,8 +6465,8 @@ opener@^1.4.3: resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" opn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" + version "5.2.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" dependencies: is-wsl "^1.1.0" @@ -7136,7 +7102,7 @@ pretty-bytes@^1.0.2: get-stdin "^4.0.1" meow "^3.1.0" -private@^0.1.6, private@^0.1.7: +private@^0.1.6, private@^0.1.7, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -7287,7 +7253,7 @@ rabin-bindings@~1.7.3: nan "^2.8.0" prebuild-install "^2.3.0" -raf-schd@^2.0.1: +raf-schd@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-2.1.0.tgz#64d645723380ec25cc1714e909b953ef1cf254bf" @@ -7411,6 +7377,18 @@ react-deprecate@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/react-deprecate/-/react-deprecate-0.1.0.tgz#817bdf22b8275fb767e9f49a8053f642600435c3" +react-docgen@^2.13.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-2.20.0.tgz#41a6da483a34a4aaed041a9909f5e61864d681cb" + dependencies: + async "^2.1.4" + babel-runtime "^6.9.2" + babylon "~5.8.3" + commander "^2.9.0" + doctrine "^2.0.0" + node-dir "^0.1.10" + recast "^0.12.6" + react-dom-factories@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/react-dom-factories/-/react-dom-factories-1.0.2.tgz#eb7705c4db36fb501b3aa38ff759616aa0ff96e0" @@ -7481,7 +7459,15 @@ react-select@1.0.0: prop-types "^15.5.8" react-input-autosize "^2.1.0" -react-transition-group@1.x, react-transition-group@^1.2.0: +react-syntax-highlighter@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-3.0.2.tgz#77c556385bbf71dc2e974ba96bfdd0edef5c3192" + dependencies: + babel-runtime "^6.18.0" + highlight.js "~9.8.0" + lowlight "^1.5.0" + +react-transition-group@1.x: version "1.2.1" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6" dependencies: @@ -7491,7 +7477,7 @@ react-transition-group@1.x, react-transition-group@^1.2.0: prop-types "^15.5.6" warning "^3.0.0" -react-transition-group@^2.2.0, react-transition-group@^2.2.1: +react-transition-group@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.1.tgz#e9fb677b79e6455fd391b03823afe84849df4a10" dependencies: @@ -7566,7 +7552,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.2.9, readable-stream@^2.3.3: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: @@ -7605,6 +7591,16 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" +recast@^0.12.6: + version "0.12.9" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1" + dependencies: + ast-types "0.10.1" + core-js "^2.4.1" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -8449,12 +8445,12 @@ stream-combiner@~0.0.4: duplexer "~0.1.1" stream-http@^2.3.1, stream-http@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" + version "2.8.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" - readable-stream "^2.2.6" + readable-stream "^2.3.3" to-arraybuffer "^1.0.0" xtend "^4.0.0" @@ -8544,7 +8540,7 @@ style-loader@0.19.0: loader-utils "^1.0.2" schema-utils "^0.3.0" -styled-components@^1.3.0, styled-components@^1.4.5, styled-components@^1.4.6: +styled-components@^1.4.6: version "1.4.6" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-1.4.6.tgz#58f32e8a6ab510fb1481e901e838e0477f148b06" dependencies: @@ -8612,7 +8608,7 @@ symbol-observable@^1.0.3, symbol-observable@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32" -tabbable@^1.0.6, tabbable@^1.1.0: +tabbable@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-1.1.2.tgz#b171680aea6e0a3e9281ff23532e2e5de11c0d94" @@ -8684,8 +8680,8 @@ temp-file@^2.1.1: lazy-val "^1.0.2" temp-file@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.1.0.tgz#d2b3ec52e1b7835248737f2b1815348e86cf8f8b" + version "3.1.1" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.1.1.tgz#8823649aa4e8a6e419eb71b601a2e4d472b0f24f" dependencies: async-exit-hook "^2.0.1" bluebird-lst "^1.0.5" From a1ec27b4ef04646ce3ab80af7f57ef2e6ae793de Mon Sep 17 00:00:00 2001 From: Ubayd Date: Mon, 15 Jan 2018 14:51:43 +0200 Subject: [PATCH 02/10] fix(Tracking): worklog start time is saved as if it had started when we hit the stop button. (#36) ISSUES CLOSED: #35 --- app/components/TextField/TextField.jsx | 2 ++ app/sagas/worklogs.js | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/components/TextField/TextField.jsx b/app/components/TextField/TextField.jsx index c49cda5be..572b50ccf 100644 --- a/app/components/TextField/TextField.jsx +++ b/app/components/TextField/TextField.jsx @@ -6,6 +6,8 @@ import { FieldBaseStateless } from '@atlaskit/field-base'; export default class extends PureComponent { static defaultProps = { onChange: () => {}, + onFocus: () => {}, + onBlur: () => {}, } state = { diff --git a/app/sagas/worklogs.js b/app/sagas/worklogs.js index a7478606a..7e9894d3a 100644 --- a/app/sagas/worklogs.js +++ b/app/sagas/worklogs.js @@ -64,7 +64,12 @@ export function* uploadWorklog(options: UploadWorklogOptions): Generator<*, *, * keepedIdles, }: UploadWorklogOptions = options; - const started = moment().utc().format().replace('Z', '.000+0000'); + const started = moment() + .subtract({ seconds: timeSpentSeconds }) + .utc() + .format() + .replace('Z', '.000+0000'); + // if timeSpentSeconds is less than a minute JIRA wont upload it so cancel if (timeSpentSeconds < 60) { yield call( From eb66e86f7d62deebf7397e6e573ae7f808bd62de Mon Sep 17 00:00:00 2001 From: Ubayd Date: Mon, 15 Jan 2018 15:45:06 +0200 Subject: [PATCH 03/10] fix(Issue Detail View): total logged not updated after loading worklog (#37) ISSUES CLOSED: #14 --- app/containers/IssueView/IssueReport/IssueReport.jsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/containers/IssueView/IssueReport/IssueReport.jsx b/app/containers/IssueView/IssueReport/IssueReport.jsx index 415f514db..024adf8d1 100644 --- a/app/containers/IssueView/IssueReport/IssueReport.jsx +++ b/app/containers/IssueView/IssueReport/IssueReport.jsx @@ -48,12 +48,14 @@ const IssueReport: StatelessFunctionalComponent = ({ selfKey, host, }: Props): Node => { - const loggedTotal = selectedIssue.fields.timespent || 0; + const timespent = selectedIssue.fields.timespent || 0; const remaining = selectedIssue.fields.timeestimate || 0; - const estimate = remaining - loggedTotal < 0 ? 0 : remaining - loggedTotal; + const estimate = remaining - timespent < 0 ? 0 : remaining - timespent; const { worklogs } = selectedIssue.fields.worklog; + const loggedTotal = worklogs.reduce((v, w) => v + w.timeSpentSeconds, 0); + const yourWorklogs = worklogs.filter(w => w.author.key === selfKey); const youLoggedTotal = yourWorklogs.reduce((v, w) => v + w.timeSpentSeconds, 0); From 076554f12f312063ef4059177dae863ca85391b1 Mon Sep 17 00:00:00 2001 From: Ubayd Date: Mon, 15 Jan 2018 17:16:36 +0200 Subject: [PATCH 04/10] fix(Tracking): autofocus on worklog comment input (#38) ISSUES CLOSED: #15 --- app/containers/Modals/WorklogModal/EditWorklogModal.jsx | 7 +++++++ app/containers/Modals/WorklogModal/WorklogModal.jsx | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/app/containers/Modals/WorklogModal/EditWorklogModal.jsx b/app/containers/Modals/WorklogModal/EditWorklogModal.jsx index 7f927b424..309a8f43b 100644 --- a/app/containers/Modals/WorklogModal/EditWorklogModal.jsx +++ b/app/containers/Modals/WorklogModal/EditWorklogModal.jsx @@ -57,6 +57,12 @@ class EditWorklogModal extends Component { } componentWillReceiveProps(nextProps) { + if (nextProps.isOpen && !this.props.isOpen) { + setTimeout(() => { + if (this.comment) this.comment.focus(); + }, 10); + } + if (nextProps.worklog && !nextProps.fetching) { const { started, comment, timeSpent } = nextProps.worklog; this.setState({ @@ -224,6 +230,7 @@ class EditWorklogModal extends Component { label="Worklog comment" value={comment} onChange={ev => this.setState({ comment: ev.target.value })} + ref={(c) => { this.comment = c; }} /> diff --git a/app/containers/Modals/WorklogModal/WorklogModal.jsx b/app/containers/Modals/WorklogModal/WorklogModal.jsx index d093a2e2e..c36d0d4e0 100644 --- a/app/containers/Modals/WorklogModal/WorklogModal.jsx +++ b/app/containers/Modals/WorklogModal/WorklogModal.jsx @@ -51,6 +51,14 @@ class WorklogModal extends Component { jiraTimeError: null, } + componentWillReceiveProps(nextProps) { + if (nextProps.isOpen && !this.props.isOpen) { + setTimeout(() => { + if (this.comment) this.comment.focus(); + }, 10); + } + } + handleTimeChange = label => (value) => { this.setState({ [label]: value }); } @@ -197,6 +205,7 @@ class WorklogModal extends Component { label="Worklog comment" value={comment} onChange={ev => this.setState({ comment: ev.target.value })} + ref={(c) => { this.comment = c; }} /> From 73a33c37cbd38eae01345e7918d6006d115f025b Mon Sep 17 00:00:00 2001 From: Ubayd Date: Mon, 15 Jan 2018 17:49:21 +0200 Subject: [PATCH 05/10] fix(Issue Detail View): constantly highlight selected worklog from recent worklogs (#39) ISSUES CLOSED: #27 --- .../IssueView/IssueWorklogs/IssueWorklogs.jsx | 12 ++++++++++-- .../IssueView/IssueWorklogs/WorklogItem.jsx | 4 +++- .../IssueView/IssueWorklogs/styled/index.jsx | 3 ++- app/sagas/issues.js | 5 ----- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/app/containers/IssueView/IssueWorklogs/IssueWorklogs.jsx b/app/containers/IssueView/IssueWorklogs/IssueWorklogs.jsx index 36eb07dbe..fc3a81e13 100644 --- a/app/containers/IssueView/IssueWorklogs/IssueWorklogs.jsx +++ b/app/containers/IssueView/IssueWorklogs/IssueWorklogs.jsx @@ -4,16 +4,21 @@ import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import type { StatelessFunctionalComponent, Node } from 'react'; import { Flex, AutosizableList as List } from 'components'; -import { getSelectedIssue, getWorklogListScrollIndex } from 'selectors'; import { worklogsActions } from 'actions'; import { noIssuesImage } from 'data/assets'; import { H600 } from 'styles/typography'; +import { + getSelectedIssue, + getWorklogListScrollIndex, + getSelectedWorklogId, +} from 'selectors'; import WorklogItem from './WorklogItem'; -import type { Issue, DeleteWorklogRequest, EditWorklogRequest } from '../../../types'; +import type { Id, Issue, DeleteWorklogRequest, EditWorklogRequest } from '../../../types'; type Props = { + selectedWorklogId: Id | null, selectedIssue: Issue, scrollIndex: number, deleteWorklogRequest: DeleteWorklogRequest, @@ -21,6 +26,7 @@ type Props = { }; const IssueWorklogs: StatelessFunctionalComponent = ({ + selectedWorklogId, selectedIssue, scrollIndex, deleteWorklogRequest, @@ -39,6 +45,7 @@ const IssueWorklogs: StatelessFunctionalComponent = ({ style={style} key={key} worklog={worklog} + selected={selectedWorklogId === worklog.id} issueKey={selectedIssue.key} deleteWorklogRequest={deleteWorklogRequest} editWorklogRequest={editWorklogRequest} @@ -65,6 +72,7 @@ const IssueWorklogs: StatelessFunctionalComponent = ({ function mapStateToProps(state) { return { + selectedWorklogId: getSelectedWorklogId(state), selectedIssue: getSelectedIssue(state), scrollIndex: getWorklogListScrollIndex(state), }; diff --git a/app/containers/IssueView/IssueWorklogs/WorklogItem.jsx b/app/containers/IssueView/IssueWorklogs/WorklogItem.jsx index db5a416df..bb04e179e 100644 --- a/app/containers/IssueView/IssueWorklogs/WorklogItem.jsx +++ b/app/containers/IssueView/IssueWorklogs/WorklogItem.jsx @@ -24,6 +24,7 @@ const isEdited = (worklog: Worklog) => ( type Props = { style: any, + selected: boolean, worklog: Worklog, issueKey: string, deleteWorklogRequest: DeleteWorklogRequest, @@ -32,12 +33,13 @@ type Props = { const WorklogItem: StatelessFunctionalComponent = ({ style, + selected, worklog, issueKey, deleteWorklogRequest, editWorklogRequest, }: Props): Node => ( - + {worklog.author.displayName} logged diff --git a/app/containers/IssueView/IssueWorklogs/styled/index.jsx b/app/containers/IssueView/IssueWorklogs/styled/index.jsx index f7fb2d325..1a0876066 100644 --- a/app/containers/IssueView/IssueWorklogs/styled/index.jsx +++ b/app/containers/IssueView/IssueWorklogs/styled/index.jsx @@ -107,6 +107,7 @@ export const Button = styled.div` export const WorklogContainer = styled.div` display: flex; flex-flow: column nowrap; + background-color: ${props => (props.selected ? '#f4f5f7' : 'transparent')}; &:hover { background-color: #f4f5f7 !important; }; @@ -137,6 +138,6 @@ export const WorklogActions = styled.div` export const Edited = styled.span` margin-left: 5px; span { - color: #d41919; + color: #de350b; } `; diff --git a/app/sagas/issues.js b/app/sagas/issues.js index 3e6af6d76..6c65f3009 100644 --- a/app/sagas/issues.js +++ b/app/sagas/issues.js @@ -383,11 +383,6 @@ export function* issueSelectFlow({ payload, meta }: SelectIssueAction): Generato const worklogEl = document.querySelector(`#worklog-${meta.id}`); if (worklogEl) { worklogEl.scrollIntoView({ behavior: 'smooth' }); - worklogEl.className += ' blink'; - yield call(delay, 2000); - if (worklogEl) { - worklogEl.className = worklogEl.className.slice(0, -6); - } } } } From 4ee4b5b5e47f61f99bb991c9b4f36af92dee21df Mon Sep 17 00:00:00 2001 From: Ubayd Date: Mon, 15 Jan 2018 18:17:58 +0200 Subject: [PATCH 06/10] fix(Browsing Issues): show button on Recent worklogs (#40) ISSUES CLOSED: #28 --- .../SidebarRecentItems/SidebarRecentItems.jsx | 19 ++++++++++++++++--- .../WorklogItem/WorklogItem.jsx | 14 +++++++++++++- .../WorklogItem/styled/index.jsx | 12 ++++++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/app/containers/Sidebar/SidebarRecentItems/SidebarRecentItems.jsx b/app/containers/Sidebar/SidebarRecentItems/SidebarRecentItems.jsx index 7cd8d10db..f2c09196b 100644 --- a/app/containers/Sidebar/SidebarRecentItems/SidebarRecentItems.jsx +++ b/app/containers/Sidebar/SidebarRecentItems/SidebarRecentItems.jsx @@ -4,7 +4,7 @@ import { connect } from 'react-redux'; import { bindActionCreators } from 'redux'; import type { StatelessFunctionalComponent, Node } from 'react'; import { Flex, RecentItemsPlaceholder } from 'components'; -import { issuesActions, worklogsActions } from 'actions'; +import { uiActions, issuesActions, worklogsActions } from 'actions'; import { getRecentIssuesFetching, getSidebarType, @@ -15,7 +15,13 @@ import { import TimestampItem from './SidebarTimestampItem'; import WorklogItem from './WorklogItem/WorklogItem'; -import type { IssuesMap, SelectIssue, SelectWorklog, Id } from '../../../types'; +import type { + Id, + IssuesMap, + SelectIssue, + SelectWorklog, + SetIssueViewTab, +} from '../../../types'; import { RecentItemsContainer, @@ -38,6 +44,7 @@ type Props = { sidebarType: string, selectIssue: SelectIssue, selectWorklog: SelectWorklog, + setIssueViewTab: SetIssueViewTab, } const daySorter = (a, b) => { @@ -59,6 +66,7 @@ const SidebarRecentItems: StatelessFunctionalComponent = ({ sidebarType, selectIssue, selectWorklog, + setIssueViewTab, }: Props): Node => (fetching ? : @@ -81,6 +89,7 @@ const SidebarRecentItems: StatelessFunctionalComponent = ({ selectIssue(issue, worklog); selectWorklog(worklog.id); }} + setIssueViewTab={setIssueViewTab} worklog={worklog} />)} @@ -99,7 +108,11 @@ function mapStateToProps(state) { } function mapDispatchToProps(dispatch) { - return bindActionCreators({ ...issuesActions, ...worklogsActions }, dispatch); + return bindActionCreators({ + ...uiActions, + ...issuesActions, + ...worklogsActions, + }, dispatch); } export default connect(mapStateToProps, mapDispatchToProps)(SidebarRecentItems); diff --git a/app/containers/Sidebar/SidebarRecentItems/WorklogItem/WorklogItem.jsx b/app/containers/Sidebar/SidebarRecentItems/WorklogItem/WorklogItem.jsx index 0c0cb2dd2..8ab1de663 100644 --- a/app/containers/Sidebar/SidebarRecentItems/WorklogItem/WorklogItem.jsx +++ b/app/containers/Sidebar/SidebarRecentItems/WorklogItem/WorklogItem.jsx @@ -3,6 +3,7 @@ import type { StatelessFunctionalComponent, Node } from 'react'; import Tooltip from '@atlaskit/tooltip'; import CommentIcon from '@atlaskit/icon/glyph/comment'; +import Button from '@atlaskit/button'; import { Flex } from 'components'; import { WorklogItemContainer, @@ -13,13 +14,19 @@ import { IssueType, } from './styled'; -import type { Issue, SelectIssue, Worklog } from '../../../../types'; +import type { + Issue, + SelectIssue, + Worklog, + SetIssueViewTab, +} from '../../../../types'; type Props = { issue: Issue, worklog: Worklog, active: boolean, selectIssue: SelectIssue, + setIssueViewTab: SetIssueViewTab, } const WorklogItem: StatelessFunctionalComponent = ({ @@ -27,6 +34,7 @@ const WorklogItem: StatelessFunctionalComponent = ({ issue, worklog, selectIssue, + setIssueViewTab, }: Props): Node => = ({ /> {issue.key} + {issue.key} {/* = ({ } + ; diff --git a/app/containers/Sidebar/SidebarRecentItems/WorklogItem/styled/index.jsx b/app/containers/Sidebar/SidebarRecentItems/WorklogItem/styled/index.jsx index f69b01b2a..75f5faf31 100644 --- a/app/containers/Sidebar/SidebarRecentItems/WorklogItem/styled/index.jsx +++ b/app/containers/Sidebar/SidebarRecentItems/WorklogItem/styled/index.jsx @@ -9,8 +9,20 @@ export const WorklogItemContainer = styled.div` background: white; border-bottom: 1px solid #dfe1e6; cursor: pointer; + + button { + opacity: 0; + align-self: center; + margin-left: auto; + margin-right: 10px; + } + :hover { background-color: #EBECF0; + + button { + opacity: 1; + } } ${props => props.isSelected && ` background-color: #ebf2f9; From 17dfb299240d5447dff9520f14db3d04b7e9f6bc Mon Sep 17 00:00:00 2001 From: Ubayd Date: Mon, 15 Jan 2018 18:53:59 +0200 Subject: [PATCH 07/10] fix(Tracking): clear worklog comment after log work action (#41) ISSUES CLOSED: #17 --- app/containers/Modals/WorklogModal/EditWorklogModal.jsx | 1 + app/containers/Modals/WorklogModal/WorklogModal.jsx | 1 + 2 files changed, 2 insertions(+) diff --git a/app/containers/Modals/WorklogModal/EditWorklogModal.jsx b/app/containers/Modals/WorklogModal/EditWorklogModal.jsx index 309a8f43b..9807d675f 100644 --- a/app/containers/Modals/WorklogModal/EditWorklogModal.jsx +++ b/app/containers/Modals/WorklogModal/EditWorklogModal.jsx @@ -137,6 +137,7 @@ class EditWorklogModal extends Component { timeSpentSeconds: jts(timeSpent), timeSpent, }); + this.setState({ comment: '' }); }} iconAfter={fetching ? : null} > diff --git a/app/containers/Modals/WorklogModal/WorklogModal.jsx b/app/containers/Modals/WorklogModal/WorklogModal.jsx index c36d0d4e0..57f5fc8ed 100644 --- a/app/containers/Modals/WorklogModal/WorklogModal.jsx +++ b/app/containers/Modals/WorklogModal/WorklogModal.jsx @@ -112,6 +112,7 @@ class WorklogModal extends Component { comment, date, }); + this.setState({ comment: '' }); }} iconAfter={fetching ? : null} > From 2c512fb5cfcd3982be8337246aacb7ebe735d1e9 Mon Sep 17 00:00:00 2001 From: Ubayd Date: Mon, 15 Jan 2018 19:27:10 +0200 Subject: [PATCH 08/10] fix(Browsing Issues): sort descending worklogs by date (#42) ISSUES CLOSED: #25 --- app/containers/IssueView/IssueWorklogs/IssueWorklogs.jsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/containers/IssueView/IssueWorklogs/IssueWorklogs.jsx b/app/containers/IssueView/IssueWorklogs/IssueWorklogs.jsx index fc3a81e13..755571220 100644 --- a/app/containers/IssueView/IssueWorklogs/IssueWorklogs.jsx +++ b/app/containers/IssueView/IssueWorklogs/IssueWorklogs.jsx @@ -40,7 +40,10 @@ const IssueWorklogs: StatelessFunctionalComponent = ({ rowCount: selectedIssue.fields.worklog.worklogs.length, rowHeight: 120, rowRenderer: ({ index, key, style }: { index: number, key: string, style: any }) => { - const worklog = selectedIssue.fields.worklog.worklogs[index]; + const worklog = selectedIssue.fields.worklog.worklogs.sort( + (left, right) => left.id < right.id, + )[index]; + return Date: Mon, 15 Jan 2018 19:55:48 +0200 Subject: [PATCH 09/10] refactor: auth (#43) --- app/actions/actionTypes/ui.js | 1 + app/actions/ui.js | 8 ++++++++ app/containers/App.jsx | 32 ++++++++++++++++++++++++-------- app/reducers/ui.js | 6 ++++++ app/sagas/initializeApp.js | 19 ++++++++++++++++--- app/sagas/profile.js | 4 ++++ app/styles/index.jsx | 7 +++++++ app/types/ui.js | 7 +++++++ yarn.lock | 8 ++++---- 9 files changed, 77 insertions(+), 15 deletions(-) diff --git a/app/actions/actionTypes/ui.js b/app/actions/actionTypes/ui.js index 9c5679c93..db544bc53 100644 --- a/app/actions/actionTypes/ui.js +++ b/app/actions/actionTypes/ui.js @@ -1,4 +1,5 @@ // @flow +export const SET_INITIALIZE_PROCESS: 'ui/SET_INITIALIZE_PROCESS' = 'ui/SET_INITIALIZE_PROCESS'; export const SET_AUTH_FORM_STEP: 'ui/SET_AUTH_FORM_STEP' = 'ui/SET_AUTH_FORM_STEP'; export const SET_SIDEBAR_TYPE: 'ui/SET_SIDEBAR_TYPE' = 'ui/SET_SIDEBAR_TYPE'; export const SET_SIDEBAR_FILTERS_OPEN: 'ui/SET_SIDEBAR_FILTERS_OPEN' = 'ui/SET_SIDEBAR_FILTERS_OPEN'; diff --git a/app/actions/ui.js b/app/actions/ui.js index cd5aa1431..7e4bf2bbc 100644 --- a/app/actions/ui.js +++ b/app/actions/ui.js @@ -1,5 +1,6 @@ // @flow import type { + SetInitializeState, SetInitializeStateAction, SetAuthFormStep, SetAuthFormStepAction, SetSidebarType, SetSidebarTypeAction, SetIssueViewTab, SetIssueViewTabAction, @@ -25,6 +26,13 @@ import type { import * as types from './actionTypes'; +export const setInitializeState: SetInitializeState = ( + payload: boolean, +): SetInitializeStateAction => ({ + type: types.SET_INITIALIZE_PROCESS, + payload, +}); + export const setAuthFormStep: SetAuthFormStep = ( payload: AuthFormStep, ): SetAuthFormStepAction => ({ diff --git a/app/containers/App.jsx b/app/containers/App.jsx index 3f0f994f2..ca9a39a1a 100644 --- a/app/containers/App.jsx +++ b/app/containers/App.jsx @@ -1,25 +1,40 @@ // @flow - import React from 'react'; import { connect } from 'react-redux'; import { getAuthorized } from 'selectors'; -import type { Node, StatelessFunctionalComponent } from 'react'; +import Spinner from '@atlaskit/spinner'; + +import type { + Node, + StatelessFunctionalComponent, +} from 'react'; -import { AppWrapper } from 'styles'; +import { + AppWrapper, + FullPageSpinner, +} from 'styles'; import AuthForm from './AuthForm'; import Main from './Main'; import type { State } from '../types'; type Props = { - isAuthorized: boolean + isAuthorized: boolean, + initializeInProcess: boolean, }; const App: StatelessFunctionalComponent = (props: Props): Node => ( - {props.isAuthorized - ?
- : + {props.initializeInProcess ? + + + : +
+ {props.isAuthorized ? +
: + + } +
} ); @@ -27,7 +42,8 @@ const App: StatelessFunctionalComponent = (props: Props): Node => ( function mapStateToProps(state: State): Props { return { isAuthorized: getAuthorized(state), + initializeInProcess: state.ui.initializeInProcess, }; } -export default connect(mapStateToProps, () => ({}))(App); +export default connect(mapStateToProps)(App); diff --git a/app/reducers/ui.js b/app/reducers/ui.js index 7a30a47b0..dcf9e355d 100644 --- a/app/reducers/ui.js +++ b/app/reducers/ui.js @@ -6,6 +6,7 @@ const initialState: UiState = { authFormStep: 1, sidebarType: 'all', issueViewTab: 'Details', + initializeInProcess: false, updateCheckRunning: false, updateAvailable: null, updateFetching: false, @@ -23,6 +24,11 @@ const initialState: UiState = { export default function ui(state: UiState = initialState, action: Action) { switch (action.type) { + case types.SET_INITIALIZE_PROCESS: + return { + ...state, + initializeInProcess: action.payload, + }; case types.SET_AUTH_FORM_STEP: return { ...state, diff --git a/app/sagas/initializeApp.js b/app/sagas/initializeApp.js index 3b824157a..7e243f227 100644 --- a/app/sagas/initializeApp.js +++ b/app/sagas/initializeApp.js @@ -1,11 +1,21 @@ -import { call, put } from 'redux-saga/effects'; -import { ipcRenderer } from 'electron'; -import { uiActions, profileActions } from 'actions'; +// @flow +import { + call, + put, +} from 'redux-saga/effects'; +import { + ipcRenderer, +} from 'electron'; +import { + uiActions, + profileActions, +} from 'actions'; import { initialize } from 'redux-form'; import { getFromStorage } from './storage'; export default function* initializeApp(): Generator<*, void, *> { + yield put(uiActions.setInitializeState(true)); const credentials = yield call(getFromStorage, 'jira_credentials'); if (credentials) { const { host, username } = credentials; @@ -24,6 +34,9 @@ export default function* initializeApp(): Generator<*, void, *> { } else if (host) { yield put(initialize('auth', { host })); yield put(uiActions.setAuthFormStep(2)); + yield put(uiActions.setInitializeState(false)); } + } else { + yield put(uiActions.setInitializeState(false)); } } diff --git a/app/sagas/profile.js b/app/sagas/profile.js index ef76e378e..262e6dac6 100644 --- a/app/sagas/profile.js +++ b/app/sagas/profile.js @@ -192,7 +192,9 @@ export function* loginFlow(): Generator<*, void, *> { } } yield put(profileActions.setLoginFetching(false)); + yield put(uiActions.setInitializeState(false)); } catch (err) { + yield put(uiActions.setInitializeState(false)); yield put(profileActions.setLoginFetching(false)); yield call(throwError, err); const humanReadableError = new Error('Can not authenticate user. Please try again'); @@ -271,9 +273,11 @@ export function* loginOAuthFlow(): Generator<*, void, *> { yield put(profileActions.fillUserData(userData)); + yield put(uiActions.setInitializeState(false)); yield call(afterLogin); } catch (err) { yield put(profileActions.setLoginFetching(false)); + yield put(uiActions.setInitializeState(false)); yield call(throwError, err); const humanReadableError = new Error('OAuth failed for unknown reason.'); yield call(loginError, humanReadableError); diff --git a/app/styles/index.jsx b/app/styles/index.jsx index 8bcca08b9..027bf6831 100644 --- a/app/styles/index.jsx +++ b/app/styles/index.jsx @@ -5,3 +5,10 @@ export const AppWrapper = styled.div` height: 100%; overflow: hidden; `; + +export const FullPageSpinner = styled.div` + display: flex; + justify-content: center; + align-items: center; + height: 100%; +`; diff --git a/app/types/ui.js b/app/types/ui.js index 966cd5aef..57113029a 100644 --- a/app/types/ui.js +++ b/app/types/ui.js @@ -53,6 +53,13 @@ export type UiState = {| +screenshotsAllowed: boolean, |}; +// +export type SetInitializeStateAction = + {| type: typeof types.SET_INITIALIZE_PROCESS, +payload: boolean |}; + +export type SetInitializeState = { + (payload: boolean): SetInitializeStateAction +}; // export type SetAuthFormStepAction = {| type: typeof types.SET_AUTH_FORM_STEP, +payload: AuthFormStep |}; diff --git a/yarn.lock b/yarn.lock index 9e77ec5d6..fa0ac3980 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1795,10 +1795,10 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: electron-to-chromium "^1.2.7" browserslist@^2.1.2: - version "2.11.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.2.tgz#76ad768b97a689512fcd9724a8b9d76cdffb18fd" + version "2.11.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" dependencies: - caniuse-lite "^1.0.30000791" + caniuse-lite "^1.0.30000792" electron-to-chromium "^1.3.30" buffer-indexof@^1.0.0: @@ -1986,7 +1986,7 @@ caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: version "1.0.30000792" resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000792.tgz#a7dac6dc9f5181b675fd69e5cb06fefb523157f8" -caniuse-lite@^1.0.30000791: +caniuse-lite@^1.0.30000792: version "1.0.30000792" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000792.tgz#d0cea981f8118f3961471afbb43c9a1e5bbf0332" From c8d11ad48fda20e007d78bf8d87ba43deec56460 Mon Sep 17 00:00:00 2001 From: "Vladimir Pal (BeDoIt)" Date: Mon, 15 Jan 2018 20:06:15 +0200 Subject: [PATCH 10/10] docs: 2.4.3 changelog --- CHANGELOG.md | 16 ++++++++++++++++ app/package.json | 2 +- package.json | 3 +-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e00f4ce8b..ec732dfa7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ + +## [2.4.3](https://github.com/web-pal/chronos-timetracker/compare/v2.4.2...v2.4.3) (2018-01-15) + + +### Bug Fixes + +* **Browsing Issues:** show button on Recent worklogs ([#40](https://github.com/web-pal/chronos-timetracker/issues/40)) ([4ee4b5b](https://github.com/web-pal/chronos-timetracker/commit/4ee4b5b)), closes [#28](https://github.com/web-pal/chronos-timetracker/issues/28) +* **Browsing Issues:** sort descending worklogs by date ([#42](https://github.com/web-pal/chronos-timetracker/issues/42)) ([2c512fb](https://github.com/web-pal/chronos-timetracker/commit/2c512fb)), closes [#25](https://github.com/web-pal/chronos-timetracker/issues/25) +* **Issue Detail View:** constantly highlight selected worklog from recent worklogs ([#39](https://github.com/web-pal/chronos-timetracker/issues/39)) ([73a33c3](https://github.com/web-pal/chronos-timetracker/commit/73a33c3)), closes [#27](https://github.com/web-pal/chronos-timetracker/issues/27) +* **Issue Detail View:** total logged not updated after loading worklog ([#37](https://github.com/web-pal/chronos-timetracker/issues/37)) ([eb66e86](https://github.com/web-pal/chronos-timetracker/commit/eb66e86)), closes [#14](https://github.com/web-pal/chronos-timetracker/issues/14) +* **Tracking:** autofocus on worklog comment input ([#38](https://github.com/web-pal/chronos-timetracker/issues/38)) ([076554f](https://github.com/web-pal/chronos-timetracker/commit/076554f)), closes [#15](https://github.com/web-pal/chronos-timetracker/issues/15) +* **Tracking:** clear worklog comment after log work action ([#41](https://github.com/web-pal/chronos-timetracker/issues/41)) ([17dfb29](https://github.com/web-pal/chronos-timetracker/commit/17dfb29)), closes [#17](https://github.com/web-pal/chronos-timetracker/issues/17) +* **Tracking:** worklog start time is saved as if it had started when we hit the stop button. ([#36](https://github.com/web-pal/chronos-timetracker/issues/36)) ([a1ec27b](https://github.com/web-pal/chronos-timetracker/commit/a1ec27b)), closes [#35](https://github.com/web-pal/chronos-timetracker/issues/35) + + + # [2.4.0](https://github.com/web-pal/chronos-app-jira/compare/2.3.4...2.4.0) (2017-11-29) diff --git a/app/package.json b/app/package.json index 58d49b8fb..efdc5c437 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "Chronos", "productName": "Chronos", - "version": "2.4.2", + "version": "2.4.3", "description": "Native app for time-tracking fully integrated with JIRA", "main": "./main.prod.js", "scripts": { diff --git a/package.json b/package.json index ce8d55ed4..e2db4afdf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Chronos", - "version": "2.4.2", + "version": "2.4.3", "description": "Full functionality time tracking software with direct JIRA integration", "scripts": { "build": "concurrently \"yarn build-main\" \"yarn build-renderer\"", @@ -29,7 +29,6 @@ }, "author": { "name": "Webpal", - "email": "ilya@lopukhin.ru", "url": "https://github.com/web-pal" }, "license": "ISC",