11
22import Component from '@ember/component' ;
33import { action , computed } from '@ember/object' ;
4+ import { tracked } from '@glimmer/tracking' ;
45import { inject as service } from '@ember/service' ;
56import classic from 'ember-classic-decorator' ;
67import FormMixin from 'open-event-frontend/mixins/form' ;
78import moment from 'moment' ;
89import { sortBy } from 'lodash-es' ;
10+ import { all } from 'rsvp' ;
911
1012@classic
1113export default class GroupEventsForm extends Component . extend ( FormMixin ) {
1214
1315 @service errorHandler ;
1416
17+ @tracked eventToBeUpdate = [ ] ;
18+ @tracked unsavedEvents = [ ] ;
19+ @tracked savedEvents = [ ] ;
20+
1521 @action
1622 addEvent ( event ) {
23+ const eventIds = this . eventToBeUpdate . map ( evnt => evnt . identifier ) ;
24+ if ( this . savedEvents . includes ( event . id ) && eventIds . includes ( event . id ) ) {
25+ event . isAnnounced = true ;
26+ this . eventToBeUpdate = this . eventToBeUpdate . filter ( event => event . identifier === event . id ) ;
27+ } else {
28+ event . isAnnounced = false ;
29+ this . eventToBeUpdate . push ( event ) ;
30+ }
1731 this . group . events . pushObject ( event ) ;
1832 }
1933
2034 @action
2135 removeEvent ( event ) {
36+ if ( event . isAnnounced ) {
37+ event . isAnnounced = false ;
38+ this . eventToBeUpdate . push ( event ) ;
39+ }
2240 this . group . events . removeObject ( event ) ;
2341 }
2442
43+ @action
44+ async announceEvent ( event ) {
45+ this . set ( 'isLoading' , true ) ;
46+ try {
47+ const heading = this . l10n . t ( 'Do you want to announce the event' ) + ' "' + event . name + '" ' + this . l10n . t ( 'to all group members now' ) + '?' ;
48+ const options = {
49+ denyText : 'Cancel' ,
50+ denyColor : 'red' ,
51+ approveText : 'Yes' ,
52+ approveColor : 'green'
53+ } ;
54+ await this . confirm . prompt ( heading , options ) ;
55+ } catch {
56+ this . set ( 'isLoading' , false ) ;
57+ return ;
58+ }
59+ this . loader . load ( `/groups/${ this . group . id } /events/${ event . identifier } /announce` )
60+ . then ( ( ) => {
61+ event . isAnnounced = true ;
62+ this . notify . success ( this . l10n . t ( 'Event has been announced.' ) , {
63+ id : 'event_announce'
64+ } ) ;
65+ } )
66+ . catch ( ( ) => {
67+ this . notify . error ( this . l10n . t ( 'Oops something went wrong. Please try again.' ) , {
68+ id : 'event_announce'
69+ } ) ;
70+ } )
71+ . finally ( ( ) => {
72+ this . set ( 'isLoading' , false ) ;
73+ } ) ;
74+ }
75+
2576 @computed ( 'events.[]' , 'group.events.[]' )
2677 get remainingEvents ( ) {
2778 return sortBy ( this . events . toArray ( ) . filter ( event => ! this . group . events . toArray ( ) . includes ( event ) ) , [ 'startsAt' ] ) . reverse ( ) ;
2879 }
2980
3081 @computed ( 'events.[]' , 'group.events.[]' )
3182 get pastEvents ( ) {
32- return sortBy ( this . events . toArray ( ) . filter ( event => { return moment ( event . endsAt ) < moment ( ) } ) , [ 'startsAt' ] ) . reverse ( ) ;
83+ return sortBy ( this . remainingEvents . toArray ( ) . filter ( event => { return moment ( event . endsAt ) < moment ( ) } ) , [ 'startsAt' ] ) . reverse ( ) ;
3384 }
3485
3586 @computed ( 'events.[]' , 'group.events.[]' )
3687 get upcomingEvents ( ) {
37- return sortBy ( this . events . toArray ( ) . filter ( event => { return moment ( event . endsAt ) > moment ( ) } ) , [ 'startsAt' ] ) . reverse ( ) ;
88+ return sortBy ( this . remainingEvents . toArray ( ) . filter ( event => { return moment ( event . endsAt ) > moment ( ) } ) , [ 'startsAt' ] ) . reverse ( ) ;
3889 }
3990
4091 @action
@@ -48,13 +99,17 @@ export default class GroupEventsForm extends Component.extend(FormMixin) {
4899 event . preventDefault ( ) ;
49100 this . onValid ( async ( ) => {
50101 try {
51- this . loading = true ;
102+ this . set ( 'isLoading' , true ) ;
52103 /* For the first save throws an error -> field may not be null, as social links are added in group-settings-form
53104 Hence, passing an empty array. */
54105 if ( ! this . group . socialLinks ) {
55106 this . group . socialLinks = [ ] ;
56107 }
57108 await this . group . save ( ) ;
109+ const updatedEvents = this . eventToBeUpdate . map ( event => {
110+ return event . save ( ) ;
111+ } ) ;
112+ await all ( [ ...updatedEvents ] ) ;
58113 this . notify . success ( this . l10n . t ( 'Your group has been saved' ) ,
59114 {
60115 id : 'group_save'
@@ -64,8 +119,12 @@ export default class GroupEventsForm extends Component.extend(FormMixin) {
64119 console . error ( 'Error while saving group' , e ) ;
65120 this . errorHandler . handle ( e ) ;
66121 } finally {
67- this . loading = false ;
122+ this . set ( 'isLoading' , false ) ;
68123 }
69124 } ) ;
70125 }
126+
127+ didInsertElement ( ) {
128+ this . set ( 'savedEvents' , [ ...this . groupEvents . toArray ( ) . map ( event => event . identifier ) ] ) ;
129+ }
71130}
0 commit comments