1
1
import { observable } from 'mobx' ;
2
+ import { toggle } from 'mobx-restful' ;
2
3
import { Base , Searchable , SearchableFilter , StrapiListModel } from 'mobx-strapi' ;
3
- import { changeMonth , countBy , formatDate , groupBy } from 'web-utility' ;
4
+ import { countBy , groupBy } from 'web-utility' ;
4
5
5
6
import { Organization } from '@open-source-bazaar/china-ngo-database' ;
6
7
import { strapiClient } from './Base' ;
@@ -19,35 +20,33 @@ export class OrganizationModel extends Searchable<Organization & Base>(StrapiLis
19
20
baseURI = 'organizations' ;
20
21
client = strapiClient ;
21
22
23
+ sort = { establishedDate : 'asc' } as const ;
24
+
25
+ dateKeys = [ 'establishedDate' ] as const ;
26
+
22
27
searchKeys = [ 'name' , 'description' , 'coverageArea' ] as const ;
23
28
24
29
@observable
25
30
accessor statistic = { } as OrganizationStatistic ;
26
31
27
32
@observable
28
- accessor categoryMap : Record < string , Organization [ ] > = { } ;
29
-
30
- makeFilter (
31
- pageIndex : number ,
32
- pageSize : number ,
33
- { keywords, ...filter } : SearchableFilter < Organization & Base > ,
34
- ) {
35
- if ( keywords ) return super . makeFilter ( pageIndex , pageSize , { keywords, ...filter } ) ;
36
-
37
- const meta = super . makeFilter ( pageIndex , pageSize , filter ) ;
38
-
39
- const { establishedDate } = filter ;
40
-
41
- const timeRangeFilter =
42
- establishedDate ?. length === 4
43
- ? { $gte : `${ establishedDate } -01-01` , $lt : `${ + establishedDate + 1 } -01-01` }
44
- : establishedDate ?. length === 7
45
- ? {
46
- $gte : `${ establishedDate } -01` ,
47
- $lte : `${ formatDate ( changeMonth ( establishedDate , 1 ) , 'YYYY-MM' ) } -01` ,
48
- }
49
- : { } ;
50
- return { ...meta , filters : { ...meta . filters , establishedDate : timeRangeFilter } } ;
33
+ accessor typeMap : Record < string , Organization [ ] > = { } ;
34
+
35
+ @toggle ( 'downloading' )
36
+ async getYearRange ( ) {
37
+ const now = Date . now ( ) ,
38
+ organizationStore = new OrganizationModel ( ) ;
39
+
40
+ const [ { establishedDate : start } = { } ] = await organizationStore . getList ( { } , 1 , 1 ) ;
41
+
42
+ Object . assign ( organizationStore , { sort : { establishedDate : 'desc' } } ) ;
43
+
44
+ const [ { establishedDate : end } = { } ] = await organizationStore . getList ( { } , 1 , 1 ) ;
45
+
46
+ const startYear = new Date ( start || now ) . getFullYear ( ) ,
47
+ endYear = new Date ( end || now ) . getFullYear ( ) ;
48
+
49
+ return [ startYear , endYear ] as const ;
51
50
}
52
51
53
52
async getStatistic ( filter ?: SearchableFilter < Organization & Base > ) {
@@ -67,14 +66,10 @@ export class OrganizationModel extends Searchable<Organization & Base>(StrapiLis
67
66
return ( this . statistic = { ...statistic , serviceCategory } as OrganizationStatistic ) ;
68
67
}
69
68
70
- async groupAllByTags ( filter ?: SearchableFilter < Organization & Base > ) {
69
+ async groupAllByType ( filter ?: SearchableFilter < Organization & Base > ) {
71
70
const allData = await this . getAll ( filter ) ;
72
71
73
- return ( this . categoryMap = groupBy (
74
- allData ,
75
- ( { services } ) =>
76
- services ?. map ( ( { serviceCategory } ) => serviceCategory ! ) . filter ( Boolean ) || [ ] ,
77
- ) ) ;
72
+ return ( this . typeMap = groupBy ( allData , 'entityType' ) ) ;
78
73
}
79
74
}
80
75
export default new OrganizationModel ( ) ;
0 commit comments