MOBILE-1332 notes: Delete notes
This commit is contained in:
		
							parent
							
								
									fb84053da1
								
							
						
					
					
						commit
						58b2e33156
					
				| @ -898,7 +898,9 @@ | ||||
|   "addon.mod_workshop_assessment_rubric.mustchooseone": "workshopform_rubric", | ||||
|   "addon.notes.addnewnote": "notes", | ||||
|   "addon.notes.coursenotes": "notes", | ||||
|   "addon.notes.deleteconfirm": "notes", | ||||
|   "addon.notes.eventnotecreated": "notes", | ||||
|   "addon.notes.eventnotedeleted": "notes", | ||||
|   "addon.notes.nonotes": "notes", | ||||
|   "addon.notes.note": "notes", | ||||
|   "addon.notes.notes": "notes", | ||||
|  | ||||
| @ -1,4 +1,7 @@ | ||||
| <core-navbar-buttons end> | ||||
|      <button *ngIf="canDeleteNotes" item-end ion-button icon-only clear (click)="toggleDelete($event)" [attr.aria-label]="'core.delete' | translate"> | ||||
|         <ion-icon name="create" ios="md-create"></ion-icon> | ||||
|     </button> | ||||
|     <core-context-menu> | ||||
|         <core-context-menu-item [hidden]="!(notesLoaded && !hasOffline)" [priority]="100" [content]="'core.refresh' | translate" (action)="refreshNotes(false)" [iconAction]="refreshIcon" [closeOnClick]="true"></core-context-menu-item> | ||||
|         <core-context-menu-item [hidden]="!(notesLoaded && hasOffline)" [priority]="100" [content]="'core.settings.synchronizenow' | translate" (action)="refreshNotes(true)" [iconAction]="syncIcon" [closeOnClick]="false"></core-context-menu-item> | ||||
| @ -37,6 +40,9 @@ | ||||
|                     <h2 *ngIf="!userId">{{note.userfullname}}</h2> | ||||
|                     <p *ngIf="!note.offline" item-end>{{note.lastmodified | coreDateDayOrTime}}</p> | ||||
|                     <p *ngIf="note.offline" item-end><ion-icon name="time"></ion-icon> {{ 'core.notsent' | translate }}</p> | ||||
|                     <button *ngIf="showDelete && (type != 'personal' || note.usermodified == currentUserId)" item-end ion-button icon-only clear [@coreSlideInOut]="'fromRight'" color="danger" (click)="deleteNote($event, note)" [attr.aria-label]="'core.delete' | translate"> | ||||
|                         <ion-icon name="trash"></ion-icon> | ||||
|                     </button> | ||||
|                 </ion-item> | ||||
|                 <ion-item text-wrap> | ||||
|                     <core-format-text [clean]="true" [text]="note.content"></core-format-text> | ||||
|  | ||||
| @ -14,11 +14,13 @@ | ||||
| 
 | ||||
| import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core'; | ||||
| import { Content, ModalController } from 'ionic-angular'; | ||||
| import { TranslateService } from '@ngx-translate/core'; | ||||
| import { CoreDomUtilsProvider } from '@providers/utils/dom'; | ||||
| import { CoreEventsProvider } from '@providers/events'; | ||||
| import { CoreSitesProvider } from '@providers/sites'; | ||||
| import { CoreTextUtilsProvider } from '@providers/utils/text'; | ||||
| import { CoreUserProvider } from '@core/user/providers/user'; | ||||
| import { coreSlideInOut } from '@classes/animations'; | ||||
| import { AddonNotesProvider } from '../../providers/notes'; | ||||
| import { AddonNotesSyncProvider } from '../../providers/notes-sync'; | ||||
| 
 | ||||
| @ -28,6 +30,7 @@ import { AddonNotesSyncProvider } from '../../providers/notes-sync'; | ||||
| @Component({ | ||||
|     selector: 'addon-notes-list', | ||||
|     templateUrl: 'addon-notes-list.html', | ||||
|     animations: [coreSlideInOut] | ||||
| }) | ||||
| export class AddonNotesListComponent implements OnInit, OnDestroy { | ||||
|     @Input() courseId: number; | ||||
| @ -44,11 +47,14 @@ export class AddonNotesListComponent implements OnInit, OnDestroy { | ||||
|     hasOffline = false; | ||||
|     notesLoaded = false; | ||||
|     user: any; | ||||
|     showDelete = false; | ||||
|     canDeleteNotes = false; | ||||
|     currentUserId: number; | ||||
| 
 | ||||
|     constructor(private domUtils: CoreDomUtilsProvider, private textUtils: CoreTextUtilsProvider, | ||||
|             sitesProvider: CoreSitesProvider, eventsProvider: CoreEventsProvider, private modalCtrl: ModalController, | ||||
|             private notesProvider: AddonNotesProvider, private notesSync: AddonNotesSyncProvider, | ||||
|             private userProvider: CoreUserProvider) { | ||||
|             private userProvider: CoreUserProvider, private translate: TranslateService) { | ||||
|         // Refresh data if notes are synchronized automatically.
 | ||||
|         this.syncObserver = eventsProvider.on(AddonNotesSyncProvider.AUTO_SYNCED, (data) => { | ||||
|             if (data.courseId == this.courseId) { | ||||
| @ -64,6 +70,8 @@ export class AddonNotesListComponent implements OnInit, OnDestroy { | ||||
|                 this.fetchNotes(false); | ||||
|             } | ||||
|         }, sitesProvider.getCurrentSiteId()); | ||||
| 
 | ||||
|         this.currentUserId = sitesProvider.getCurrentSiteUserId(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -111,6 +119,14 @@ export class AddonNotesListComponent implements OnInit, OnDestroy { | ||||
|         }).catch((message) => { | ||||
|             this.domUtils.showErrorModal(message); | ||||
|         }).finally(() => { | ||||
|             let canDelete = this.notes && this.notes.length > 0; | ||||
|             if (canDelete && this.type == 'personal') { | ||||
|                 canDelete = this.notes.find((note) =>  { | ||||
|                     return note.usermodified == this.currentUserId; | ||||
|                 }); | ||||
|             } | ||||
|             this.canDeleteNotes = canDelete; | ||||
| 
 | ||||
|             this.notesLoaded = true; | ||||
|             this.refreshIcon = 'refresh'; | ||||
|             this.syncIcon = 'sync'; | ||||
| @ -151,6 +167,7 @@ export class AddonNotesListComponent implements OnInit, OnDestroy { | ||||
| 
 | ||||
|     /** | ||||
|      * Add a new Note to user and course. | ||||
|      * | ||||
|      * @param {Event} e Event. | ||||
|      */ | ||||
|     addNote(e: Event): void { | ||||
| @ -173,6 +190,38 @@ export class AddonNotesListComponent implements OnInit, OnDestroy { | ||||
|         modal.present(); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Delete a note. | ||||
|      * | ||||
|      * @param {Event} e Click event. | ||||
|      * @param {any} note Note to delete. | ||||
|      */ | ||||
|     deleteNote(e: Event, note: any): void { | ||||
|         e.preventDefault(); | ||||
|         e.stopPropagation(); | ||||
| 
 | ||||
|         this.domUtils.showConfirm(this.translate.instant('addon.notes.deleteconfirm')).then(() => { | ||||
|             this.notesProvider.deleteNote(note).then(() => { | ||||
|                 this.showDelete = false; | ||||
| 
 | ||||
|                 this.refreshNotes(true); | ||||
| 
 | ||||
|                 this.domUtils.showToast('addon.notes.eventnotedeleted', true, 3000); | ||||
|             }).catch((error) => { | ||||
|                 this.domUtils.showErrorModalDefault(error, 'Delete note failed.'); | ||||
|             }); | ||||
|         }).catch(() => { | ||||
|             // User cancelled, nothing to do.
 | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Toggle delete. | ||||
|      */ | ||||
|     toggleDelete(): void { | ||||
|         this.showDelete = !this.showDelete; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Tries to synchronize course notes. | ||||
|      * | ||||
|  | ||||
| @ -1,7 +1,9 @@ | ||||
| { | ||||
|     "addnewnote": "Add a new note", | ||||
|     "coursenotes": "Course notes", | ||||
|     "deleteconfirm": "Delete this note?", | ||||
|     "eventnotecreated": "Note created", | ||||
|     "eventnotedeleted": "Note deleted", | ||||
|     "nonotes": "There are no notes of this type yet", | ||||
|     "note": "Note", | ||||
|     "notes": "Notes", | ||||
|  | ||||
| @ -133,6 +133,27 @@ export class AddonNotesProvider { | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Delete a note. | ||||
|      * | ||||
|      * @param  {any} note            Note object to delete. | ||||
|      * @param  {string} [siteId]     Site ID. If not defined, current site. | ||||
|      * @return {Promise<void>}       Promise resolved when done. | ||||
|      */ | ||||
|     deleteNote(note: any, siteId?: string): Promise<void> { | ||||
|         return this.sitesProvider.getSite(siteId).then((site) => { | ||||
|             if (typeof note.offline != 'undefined' && note.offline) { | ||||
|                 return this.notesOffline.deleteNote(note.userid, note.content, note.created, site.id); | ||||
|             } | ||||
| 
 | ||||
|             const data = { | ||||
|                 notes: [note.id] | ||||
|             }; | ||||
| 
 | ||||
|             return site.write('core_notes_delete_notes', data); | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Returns whether or not the notes plugin is enabled for a certain site. | ||||
|      * | ||||
|  | ||||
| @ -898,7 +898,9 @@ | ||||
|     "addon.mod_workshop_assessment_rubric.mustchooseone": "You have to select one of these items", | ||||
|     "addon.notes.addnewnote": "Add a new note", | ||||
|     "addon.notes.coursenotes": "Course notes", | ||||
|     "addon.notes.deleteconfirm": "Delete this note?", | ||||
|     "addon.notes.eventnotecreated": "Note created", | ||||
|     "addon.notes.eventnotedeleted": "Note deleted", | ||||
|     "addon.notes.nonotes": "There are no notes of this type yet", | ||||
|     "addon.notes.note": "Note", | ||||
|     "addon.notes.notes": "Notes", | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user