From 71fbbd30faf9a84ad6a3752edfe7f84201ae7ef7 Mon Sep 17 00:00:00 2001 From: manubo Date: Thu, 19 Sep 2019 17:37:56 +0200 Subject: [PATCH] Pass timed activity to App --- src/js/components/App.js | 64 +++++++++++++++++++++------------ src/js/components/Form.js | 12 +++++-- src/js/components/Popup.js | 4 +-- src/js/popup.js | 4 +-- src/js/utils/messageHandlers.js | 19 ++++++---- 5 files changed, 66 insertions(+), 37 deletions(-) diff --git a/src/js/components/App.js b/src/js/components/App.js index 88564a6..8a0b193 100644 --- a/src/js/components/App.js +++ b/src/js/components/App.js @@ -22,9 +22,19 @@ import InvalidConfigurationError from "components/Errors/InvalidConfigurationErr import UpgradeRequiredError from "components/Errors/UpgradeRequiredError" import UnknownError from "components/Errors/UnknownError" import Header from "./shared/Header" -import { head } from "lodash" +import { head, isNil } from "lodash" import TimeInputParser from "utils/TimeInputParser" +const findTimedActivity = (activities, service) => { + if (!service) { + return null + } + + return activities.find( + activity => activity.remote_id === service.id && !isNil(activity.timer_started_at), + ) +} + @observer class App extends Component { static propTypes = { @@ -41,9 +51,15 @@ class App extends Component { activities: PropTypes.array, schedules: PropTypes.array, projects: PropTypes.array, + timedActivity: PropTypes.shape({ + customer_name: PropTypes.string.isRequired, + assignment_name: PropTypes.string.isRequired, + task_name: PropTypes.string.isRequired, + timer_started_at: PropTypes.string.isRequired, + seconds: PropTypes.number.isRequired, + }), lastProjectId: PropTypes.number, lastTaskId: PropTypes.number, - roundTimeEntries: PropTypes.bool, fromDate: PropTypes.string, toDate: PropTypes.string, errorType: PropTypes.string, @@ -54,7 +70,6 @@ class App extends Component { activities: [], schedules: [], projects: [], - roundTimeEntries: false, } @observable changeset = {} @@ -161,10 +176,12 @@ class App extends Component { loading, subdomain, projects, + timedActivity, activities, schedules, fromDate, toDate, + service, errorType, errorMessage, } = this.props @@ -191,25 +208,28 @@ class App extends Component {
- {() => ( - <> - -
- - )} + {() => + timedActivity ? null : ( + <> + + + + ) + } )} diff --git a/src/js/components/Form.js b/src/js/components/Form.js index 27365a5..8bd851b 100644 --- a/src/js/components/Form.js +++ b/src/js/components/Form.js @@ -6,8 +6,14 @@ import cn from "classnames" class Form extends Component { static propTypes = { changeset: PropTypes.shape({ - project: PropTypes.object, - task: PropTypes.object, + assignment_id: PropTypes.number.isRequired, + billable: PropTypes.bool.isRequired, + date: PropTypes.string.isRequired, + task_id: PropTypes.number.isRequired, + remote_id: PropTypes.string, + remote_service: PropTypes.string, + remote_url: PropTypes.string, + seconds: PropTypes.number, hours: PropTypes.string, }).isRequired, errors: PropTypes.object, @@ -35,7 +41,7 @@ class Form extends Component { } render() { - const { projects, changeset, errors, onChange, onSubmit } = this.props + const { projects, changeset, timedActivity, errors, onChange, onSubmit } = this.props const project = Select.findOptionByValue(projects, changeset.assignment_id) return ( diff --git a/src/js/components/Popup.js b/src/js/components/Popup.js index 7173648..b42296c 100644 --- a/src/js/components/Popup.js +++ b/src/js/components/Popup.js @@ -48,12 +48,10 @@ class Popup extends Component { "loading", "service", "subdomain", - "lastProjectId", - "lastTaskId", - "roundTimeEntries", "projects", "activities", "schedules", + "timedActivity", "lastProjectId", "lastTaskId", "fromDate", diff --git a/src/js/popup.js b/src/js/popup.js index a65dd02..d308e9c 100644 --- a/src/js/popup.js +++ b/src/js/popup.js @@ -12,9 +12,7 @@ const parsedProps = parseProps([ "projects", "activities", "schedules", - "lastProjectId", - "lastTaskId", - "roundTimeEntries", + "timedActivity", "lastProjectId", "lastTaskId", "fromDate", diff --git a/src/js/utils/messageHandlers.js b/src/js/utils/messageHandlers.js index 538c03e..9ffc85d 100644 --- a/src/js/utils/messageHandlers.js +++ b/src/js/utils/messageHandlers.js @@ -83,19 +83,26 @@ async function openPopup(tab, { service, messenger }) { const toDate = getEndOfWeek() const settings = await getSettings() const apiClient = new ApiClient(settings) + const responses = [] try { - const responses = await Promise.all([ - apiClient.login(service), - apiClient.projects(), - apiClient.activities(fromDate, toDate), - apiClient.schedules(fromDate, toDate), - ]) + responses.push(await apiClient.login(service)) + // we can forgo the following calls if a timed activity exists + if (!responses[0].data.timed_activity) { + responses.push( + ...(await Promise.all([ + apiClient.projects(), + apiClient.activities(fromDate, toDate), + apiClient.schedules(fromDate, toDate), + ])), + ) + } const action = { type: "openPopup", payload: { service, subdomain: settings.subdomain, + timedActivity: get("[0].data.timed_activity", responses), lastProjectId: get("[0].data.last_project_id", responses), lastTaskId: get("[0].data.last_task_id", responses), roundTimeEntries: get("[0].data.round_time_entries", responses),