diff --git a/src/js/components/App.js b/src/js/components/App.js index defae02..aa20907 100644 --- a/src/js/components/App.js +++ b/src/js/components/App.js @@ -10,6 +10,7 @@ import { ERROR_UNKNOWN, ERROR_UNAUTHORIZED, ERROR_UPGRADE_REQUIRED, + extractAndSetTag, findProjectByValue, findProjectByIdentifier, findTask, @@ -80,13 +81,11 @@ class App extends Component { seconds: this.changeset.hours && new TimeInputParser(this.changeset.hours).parseSeconds(), - description: service?.description + description: service?.description, + tag: "" } - return { - ...defaults, - ...this.changeset - } + return { ...defaults, ...this.changeset } } componentDidMount() { @@ -124,7 +123,7 @@ class App extends Component { chrome.runtime.sendMessage({ type: "createActivity", payload: { - activity: this.changesetWithDefaults, + activity: extractAndSetTag(this.changesetWithDefaults), service } }) diff --git a/src/js/utils/index.js b/src/js/utils/index.js index 3cb7e3e..b2523ce 100644 --- a/src/js/utils/index.js +++ b/src/js/utils/index.js @@ -86,3 +86,16 @@ export const formatDate = date => format(date, "YYYY-MM-DD") export const extensionSettingsUrl = () => `chrome://extensions/?id=${chrome.runtime.id}` + +export const extractAndSetTag = changeset => { + let { description } = changeset + const match = description.match(/^#(\S+)/) + if (!match) { + return changeset + } + return { + ...changeset, + description: description.replace(/^#\S+\s/, ""), + tag: match[1] + } +} diff --git a/test/utils/index.test.js b/test/utils/index.test.js index 936918c..19ff70c 100644 --- a/test/utils/index.test.js +++ b/test/utils/index.test.js @@ -3,7 +3,8 @@ import { findProjectByValue, findProjectByIdentifier, findTask, - groupedProjectOptions + groupedProjectOptions, + extractAndSetTag } from "../../src/js/utils" import { map } from "lodash/fp" @@ -86,4 +87,36 @@ describe("utils", () => { ]) }) }) + + describe("extractAndSetTag", () => { + it("sets the correct tag and updates description", () => { + const changeset = { + description: "#meeting Lorem ipsum", + tag: "" + } + + expect(extractAndSetTag(changeset)).toEqual({ + description: "Lorem ipsum", + tag: "meeting" + }) + }) + + it("only matches tag at the beginning", () => { + const changeset = { + description: "Lorem #meeting ipsum", + tag: "" + } + + expect(extractAndSetTag(changeset)).toEqual(changeset) + }) + + it("returns the changeset if not tag is set", () => { + const changeset = { + description: "Without tag", + tag: "" + } + + expect(extractAndSetTag(changeset)).toEqual(changeset) + }) + }) })