11import { TogglGateway , TogglService } from "./toggl.js" ;
22
3+ const withErrorMessage = async function ( t , fnc ) {
4+ try {
5+ await fnc ( t ) ;
6+ } catch ( error ) {
7+ t . alert ( { message : error . message } ) ;
8+ throw error ;
9+ }
10+ } ;
11+
312const stripStoryPointsAndTaskToken = function ( name ) {
413 return name
514 . replace ( / ^ ( \s * \( \d + \) ) ? \s * / , "" ) // story points, e.g. (3)
615 . replace ( / \s * # \w + \s * $ / , "" ) ; // task token, e.g. #orga_5417
716} ;
817
9- const track = async function ( t ) {
10- const token = await t . loadSecret ( "togglToken" ) ;
11- if ( token === null ) {
12- throw new Error ( "Toggl API Token not configured" ) ;
13- }
14-
15- const togglGateway = new TogglGateway ( token ) ;
16- const togglService = new TogglService ( togglGateway ) ;
17-
18+ const extractTrackingData = async function ( t ) {
1819 const card = await t . card ( "name" , "labels" , "idShort" , "shortLink" ) ;
1920
2021 const projectLabels = card . labels
@@ -28,24 +29,52 @@ const track = async function (t) {
2829 }
2930 const project = projectLabels [ 0 ] ;
3031
31- const tracking = {
32+ return {
3233 project,
3334 task : `${ project } _${ card . idShort } _${ card . shortLink } ` ,
35+ description : stripStoryPointsAndTaskToken ( card . name ) ,
3436 } ;
37+ } ;
3538
36- await togglService . track ( tracking , stripStoryPointsAndTaskToken ( card . name ) ) ;
39+ const setTrackingData = async function ( t , tracking ) {
40+ await t . set ( "card" , "shared" , "tracking" , tracking ) ;
41+ } ;
3742
38- t . set ( "card" , "shared" , "tracking" , tracking ) ;
39- t . alert ( { message : `Started trekking #${ tracking . task } ` } ) ;
43+ const track = async function ( t ) {
44+ const token = await t . loadSecret ( "togglToken" ) ;
45+ if ( token === null ) {
46+ throw new Error ( "Toggl API Token not configured" ) ;
47+ }
48+ const togglService = new TogglService ( new TogglGateway ( token ) ) ;
49+
50+ const tracking = await extractTrackingData ( t ) ;
51+
52+ await togglService . track ( tracking ) ;
53+ await setTrackingData ( t , tracking ) ;
54+ t . alert ( { message : `Started trekking #${ tracking . task } ` } ) ;
55+ } ;
56+
57+ const updateTracking = async function ( t ) {
58+ const tracking = await extractTrackingData ( t ) ;
59+ await setTrackingData ( t , tracking ) ;
60+
61+ t . alert ( { message : `Updated trekking #${ tracking . task } ` } ) ;
62+ } ;
63+
64+ const deleteTracking = async function ( t ) {
65+ t . remove ( "card" , "shared" , "tracking" ) ;
66+
67+ t . alert ( { message : "Deleted trekking" } ) ;
4068} ;
4169
4270export default {
4371 track : async function ( t ) {
44- try {
45- await track ( t ) ;
46- } catch ( error ) {
47- t . alert ( { message : error . message } ) ;
48- throw error ;
49- }
72+ await withErrorMessage ( t , track ) ;
73+ } ,
74+ updateTracking : async function ( t ) {
75+ await withErrorMessage ( t , updateTracking ) ;
76+ } ,
77+ deleteTracking : async function ( t ) {
78+ await withErrorMessage ( t , deleteTracking ) ;
5079 } ,
5180} ;
0 commit comments