11import { LocalSettings } from "cdm/SettingsModel" ;
22import { DEFAULT_SETTINGS , InputType , ROLLUP_ACTIONS } from "helpers/Constants" ;
33import { Link , Literal , SMarkdownPage } from "obsidian-dataview" ;
4+ import { DbAutomationService } from "services/AutomationService" ;
45import { DataviewService } from "services/DataviewService" ;
56import { LOGGER } from "services/Logger" ;
67import { ParseService } from "services/ParseService" ;
78
89class Rollup {
910 private pages : Record < string , Literal > [ ] ;
1011
12+ /**
13+ * Obtains the metadata associated to a list of links
14+ * @param relation
15+ * @returns
16+ */
1117 static generatePages ( relation : Link [ ] ) : Record < string , Literal > [ ] {
1218 return relation . map ( ( link ) =>
1319 DataviewService . getDataviewAPI ( ) . page ( link . path )
@@ -27,27 +33,27 @@ class Rollup {
2733 let result = "" ;
2834 switch ( action ) {
2935 case ROLLUP_ACTIONS . SUM :
30- result = this . sum ( key ) ;
36+ result = this . sum ( key ) . toString ( ) ;
3137 break ;
3238
3339 case ROLLUP_ACTIONS . COUNT_ALL :
34- result = this . countAll ( key ) ;
40+ result = this . countAll ( key ) . toString ( ) ;
3541 break ;
3642
3743 case ROLLUP_ACTIONS . COUNT_UNIQUE :
38- result = this . countUnique ( key ) ;
44+ result = this . countUnique ( key ) . toString ( ) ;
3945 break ;
4046
4147 case ROLLUP_ACTIONS . ORIGINAL_VALUE :
4248 result = this . originalValue ( key ) ;
4349 break ;
4450
4551 case ROLLUP_ACTIONS . TRUTHY_COUNT :
46- result = this . truthyCount ( key ) ;
52+ result = this . truthyCount ( key ) . toString ( ) ;
4753 break ;
4854
4955 case ROLLUP_ACTIONS . FALSY_COUNT :
50- result = this . falsyCount ( key ) ;
56+ result = this . falsyCount ( key ) . toString ( ) ;
5157 break ;
5258
5359 case ROLLUP_ACTIONS . PERCENT_EMPTY :
@@ -59,15 +65,15 @@ class Rollup {
5965 break ;
6066
6167 case ROLLUP_ACTIONS . ALL_TASKS :
62- result = this . allTasks ( ) ;
68+ result = this . allTasks ( ) . toString ( ) ;
6369 break ;
6470
6571 case ROLLUP_ACTIONS . TASK_COMPLETED :
66- result = this . taskCompleted ( ) ;
72+ result = this . taskCompleted ( ) . toString ( ) ;
6773 break ;
6874
6975 case ROLLUP_ACTIONS . TASK_TODO :
70- result = this . taskTodo ( ) ;
76+ result = this . taskTodo ( ) . toString ( ) ;
7177 break ;
7278
7379 default :
@@ -85,44 +91,35 @@ class Rollup {
8591 * Iters over the pages and sums the values of the key
8692 * @returns
8793 */
88- public sum ( key : string ) : string {
94+ public sum ( key : string ) : number {
8995 // Check if key is not truthy, return empty string
9096 if ( ! key ) {
91- return "" ;
97+ return NaN ;
9298 }
93- let sum = 0 ;
94- this . pages . forEach ( ( page ) => {
95- if ( page [ key ] ) {
96- sum += Number ( page [ key ] ) ;
97- }
98- } ) ;
99- return sum . toString ( ) ;
99+ const rawValues = this . rawValues ( key ) ;
100+ return DbAutomationService . coreFns . numbers . sum ( rawValues )
100101 }
101102
102103 /**
103104 * Obtains the number of pages of the relation with the key informed
104105 * @returns
105106 */
106- public countAll ( key : string ) : string {
107+ public countAll ( key : string ) : number {
107108 // Check if key is not truthy, return empty string
108109 if ( ! key ) {
109- return "" ;
110+ return 0 ;
110111 }
111- return this . pages . filter ( ( page ) => page [ key ] !== undefined ) . length . toString ( ) ;
112+ return this . rawValues ( key ) . length ;
112113 }
113114
114- public countUnique ( key : string ) : string {
115+ public countUnique ( key : string ) : number {
115116 // Check if key is not truthy, return empty string
116117 if ( ! key ) {
117- return "" ;
118+ return 0 ;
118119 }
119120 const uniqueValues = new Set ( ) ;
120- this . pages
121- . filter ( ( page ) => page [ key ] !== undefined )
122- . forEach ( ( page ) => {
123- uniqueValues . add ( page [ key ] ) ;
124- } ) ;
125- return uniqueValues . size . toString ( ) ;
121+ this . rawValues ( key ) . forEach ( ( value ) => uniqueValues . add ( value ) ) ;
122+ return uniqueValues . size ;
126123 }
127124
128125 /**
@@ -135,25 +132,28 @@ class Rollup {
135132 return "" ;
136133 }
137134 const settings = config || DEFAULT_SETTINGS . local_settings ;
138- return this . pages
139- . filter ( ( page ) => page [ key ] )
140- . map ( ( page ) => ParseService . parseLiteral ( page [ key ] , InputType . MARKDOWN , settings ) ) . join ( ", " ) ;
135+ return this . rawValues ( key )
136+ . map ( ( value ) => ParseService . parseLiteral (
137+ value ,
138+ InputType . MARKDOWN ,
139+ settings ) )
140+ . join ( ", " ) ;
141141 }
142142
143- public falsyCount ( key : string ) : string {
143+ public falsyCount ( key : string ) : number {
144144 // Check if key is not truthy, return empty string
145145 if ( ! key ) {
146- return "" ;
146+ return 0 ;
147147 }
148- return this . pages . filter ( ( page ) => page [ key ] !== undefined && ! page [ key ] ) . length . toString ( ) ;
148+ return this . pages . filter ( ( page ) => page [ key ] !== undefined && ! page [ key ] ) . length ;
149149 }
150150
151- public truthyCount ( key : string ) : string {
151+ public truthyCount ( key : string ) : number {
152152 // Check if key is not truthy, return empty string
153153 if ( ! key ) {
154- return "" ;
154+ return 0 ;
155155 }
156- return this . pages . filter ( ( page ) => page [ key ] !== undefined && page [ key ] ) . length . toString ( ) ;
156+ return this . pages . filter ( ( page ) => page [ key ] !== undefined && page [ key ] ) . length ;
157157 }
158158
159159 public percentEmpty ( key : string ) : string {
@@ -176,25 +176,29 @@ class Rollup {
176176 return `${ ( ( filled / total ) * 100 ) . toFixed ( 2 ) } %` ;
177177 }
178178
179- public allTasks ( ) : string {
179+ public allTasks ( ) : number {
180180 return this . pages . map ( ( page : SMarkdownPage ) => {
181181 const file_tasks = page . file . tasks ;
182182 return file_tasks . length
183- } ) . reduce ( ( a , b ) => a + b , 0 ) . toString ( ) ;
183+ } ) . reduce ( ( a , b ) => a + b , 0 ) ;
184184 }
185185
186- public taskCompleted ( ) : string {
186+ public taskCompleted ( ) : number {
187187 return this . pages . map ( ( page : SMarkdownPage ) => {
188188 const file_tasks = page . file . tasks ;
189189 return file_tasks . filter ( task => task . checked ) . length
190- } ) . reduce ( ( a , b ) => a + b , 0 ) . toString ( ) ;
190+ } ) . reduce ( ( a , b ) => a + b , 0 ) ;
191191 }
192192
193- public taskTodo ( ) : string {
193+ public taskTodo ( ) : number {
194194 return this . pages . map ( ( page : SMarkdownPage ) => {
195195 const file_tasks = page . file . tasks ;
196196 return file_tasks . filter ( task => ! task . checked ) . length
197- } ) . reduce ( ( a , b ) => a + b , 0 ) . toString ( ) ;
197+ } ) . reduce ( ( a , b ) => a + b , 0 ) ;
198+ }
199+
200+ private rawValues ( key : string ) : Literal [ ] {
201+ return this . pages . filter ( ( page ) => page [ key ] !== undefined ) . map ( ( page ) => page [ key ] ) ;
198202 }
199203}
200204
0 commit comments