1212// See the License for the specific language governing permissions and
1313// limitations under the License.
1414
15- import { Component , OnInit , OnDestroy } from '@angular/core' ;
15+ import { Component , OnInit , OnDestroy , ViewChild , ElementRef } from '@angular/core' ;
1616import { IonicPage , NavController , NavParams } from 'ionic-angular' ;
1717import { TranslateService } from '@ngx-translate/core' ;
1818import { CoreEventsProvider } from '@providers/events' ;
@@ -34,6 +34,9 @@ import { AddonModAssignHelperProvider } from '../../providers/helper';
3434 templateUrl : 'edit.html' ,
3535} )
3636export class AddonModAssignEditPage implements OnInit , OnDestroy {
37+
38+ @ViewChild ( 'editSubmissionForm' ) formElement : ElementRef ;
39+
3740 title : string ; // Title to display.
3841 assign : AddonModAssignAssign ; // Assignment.
3942 courseId : number ; // Course ID the assignment belongs to.
@@ -265,69 +268,77 @@ export class AddonModAssignEditPage implements OnInit, OnDestroy {
265268 *
266269 * @return Promise resolved when done.
267270 */
268- protected saveSubmission ( ) : Promise < any > {
271+ protected async saveSubmission ( ) : Promise < void > {
269272 const inputData = this . getInputData ( ) ;
270273
271274 if ( this . submissionStatement && ( ! inputData . submissionstatement || inputData . submissionstatement === 'false' ) ) {
272- return Promise . reject ( this . translate . instant ( 'addon.mod_assign.acceptsubmissionstatement' ) ) ;
275+ throw this . translate . instant ( 'addon.mod_assign.acceptsubmissionstatement' ) ;
273276 }
274277
275278 let modal = this . domUtils . showModalLoading ( ) ;
279+ let size ;
276280
277281 // Get size to ask for confirmation.
278- return this . assignHelper . getSubmissionSizeForEdit ( this . assign , this . userSubmission , inputData ) . catch ( ( ) => {
282+ try {
283+ size = await this . assignHelper . getSubmissionSizeForEdit ( this . assign , this . userSubmission , inputData ) ;
284+ } catch ( error ) {
279285 // Error calculating size, return -1.
280- return - 1 ;
281- } ) . then ( ( size ) => {
282- modal . dismiss ( ) ;
286+ size = - 1 ;
287+ }
288+
289+ modal . dismiss ( ) ;
283290
291+ try {
284292 // Confirm action.
285- return this . fileUploaderHelper . confirmUploadFile ( size , true , this . allowOffline ) ;
286- } ) . then ( ( ) => {
293+ await this . fileUploaderHelper . confirmUploadFile ( size , true , this . allowOffline ) ;
294+
287295 modal = this . domUtils . showModalLoading ( 'core.sending' , true ) ;
288296
289- return this . prepareSubmissionData ( inputData ) . then ( ( pluginData ) => {
290- if ( ! Object . keys ( pluginData ) . length ) {
291- // Nothing to save.
292- return ;
293- }
297+ const pluginData = await this . prepareSubmissionData ( inputData ) ;
298+ if ( ! Object . keys ( pluginData ) . length ) {
299+ // Nothing to save.
300+ return ;
301+ }
294302
295- let promise ;
303+ let sent : boolean ;
296304
297- if ( this . saveOffline ) {
298- // Save submission in offline.
299- promise = this . assignOfflineProvider . saveSubmission ( this . assign . id , this . courseId , pluginData ,
300- this . userSubmission . timemodified , ! this . assign . submissiondrafts , this . userId ) ;
301- } else {
302- // Try to send it to server.
303- promise = this . assignProvider . saveSubmission ( this . assign . id , this . courseId , pluginData , this . allowOffline ,
304- this . userSubmission . timemodified , ! ! this . assign . submissiondrafts , this . userId ) ;
305- }
305+ if ( this . saveOffline ) {
306+ // Save submission in offline.
307+ sent = false ;
308+ await this . assignOfflineProvider . saveSubmission ( this . assign . id , this . courseId , pluginData ,
309+ this . userSubmission . timemodified , ! this . assign . submissiondrafts , this . userId ) ;
310+ } else {
311+ // Try to send it to server.
312+ sent = await this . assignProvider . saveSubmission ( this . assign . id , this . courseId , pluginData , this . allowOffline ,
313+ this . userSubmission . timemodified , ! ! this . assign . submissiondrafts , this . userId ) ;
314+ }
306315
307- return promise . then ( ( ) => {
308- // Clear temporary data from plugins.
309- return this . assignHelper . clearSubmissionPluginTmpData ( this . assign , this . userSubmission , inputData ) ;
310- } ) . then ( ( ) => {
311- // Submission saved, trigger event.
312- const params = {
313- assignmentId : this . assign . id ,
314- submissionId : this . userSubmission . id ,
315- userId : this . userId ,
316- } ;
317-
318- this . eventsProvider . trigger ( AddonModAssignProvider . SUBMISSION_SAVED_EVENT , params ,
319- this . sitesProvider . getCurrentSiteId ( ) ) ;
320-
321- if ( ! this . assign . submissiondrafts ) {
322- // No drafts allowed, so it was submitted. Trigger event.
323- this . eventsProvider . trigger ( AddonModAssignProvider . SUBMITTED_FOR_GRADING_EVENT , params ,
324- this . sitesProvider . getCurrentSiteId ( ) ) ;
325- }
326- } ) ;
327- } ) ;
328- } ) . finally ( ( ) => {
316+ // Clear temporary data from plugins.
317+ await this . assignHelper . clearSubmissionPluginTmpData ( this . assign , this . userSubmission , inputData ) ;
318+
319+ // Submission saved, trigger events.
320+ this . eventsProvider . trigger ( CoreEventsProvider . FORM_SUBMITTED , {
321+ form : this . formElement . nativeElement ,
322+ online : sent ,
323+ } , this . sitesProvider . getCurrentSiteId ( ) ) ;
324+
325+ const params = {
326+ assignmentId : this . assign . id ,
327+ submissionId : this . userSubmission . id ,
328+ userId : this . userId ,
329+ } ;
330+
331+ this . eventsProvider . trigger ( AddonModAssignProvider . SUBMISSION_SAVED_EVENT , params ,
332+ this . sitesProvider . getCurrentSiteId ( ) ) ;
333+
334+ if ( ! this . assign . submissiondrafts ) {
335+ // No drafts allowed, so it was submitted. Trigger event.
336+ this . eventsProvider . trigger ( AddonModAssignProvider . SUBMITTED_FOR_GRADING_EVENT , params ,
337+ this . sitesProvider . getCurrentSiteId ( ) ) ;
338+ }
339+ } finally {
329340 modal . dismiss ( ) ;
330- } ) ;
341+ }
331342 }
332343
333344 /**
0 commit comments