messages for dict, smarter update and corner case fixes, sorted entries
This commit is contained in:
parent
d1974cdde0
commit
7c348c31ad
@ -10,6 +10,7 @@ import { reference } from '../../../utils/functions';
|
||||
import { debounce } from '../../../utils/debounce';
|
||||
import { NotificationService, NotificationType } from '../../../notification/notification.service';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { Observable } from 'rxjs';
|
||||
|
||||
declare var ace;
|
||||
|
||||
@ -64,7 +65,7 @@ export class DictionaryOverviewScreenComponent {
|
||||
|
||||
private _initialize() {
|
||||
this._dictionaryControllerService.getDictionaryForType(this.dictionary.type).subscribe((data) => {
|
||||
this.initialDictionaryEntries = data.entries;
|
||||
this.initialDictionaryEntries = data.entries.sort((str1, str2) => str1.localeCompare(str2, undefined, { sensitivity: 'accent' }));
|
||||
this.revert();
|
||||
});
|
||||
}
|
||||
@ -155,36 +156,43 @@ export class DictionaryOverviewScreenComponent {
|
||||
}
|
||||
|
||||
get hasChanges() {
|
||||
return this.changedLines.length > 0 || this.currentDictionaryEntries.length !== this.initialDictionaryEntries.length;
|
||||
return this.activeEditMarkers.length > 0 || this.currentDictionaryEntries.length < this.initialDictionaryEntries.length;
|
||||
}
|
||||
|
||||
async saveEntries() {
|
||||
let entriesToAdd = [];
|
||||
const entriesToDelete = [];
|
||||
this.currentDictionaryEntries.forEach((currentEntry) => {
|
||||
if (this.initialDictionaryEntries.indexOf(currentEntry) < 0) {
|
||||
entriesToAdd.push(currentEntry);
|
||||
}
|
||||
entriesToAdd.push(currentEntry);
|
||||
});
|
||||
this.initialDictionaryEntries.forEach((initialEntry) => {
|
||||
if (this.currentDictionaryEntries.indexOf(initialEntry) < 0) {
|
||||
entriesToDelete.push(initialEntry);
|
||||
}
|
||||
});
|
||||
|
||||
// remove empty lines
|
||||
entriesToAdd = entriesToAdd.filter((e) => e && e.trim().length > 0).map((e) => e.trim());
|
||||
|
||||
const invalidRowsExist = entriesToAdd.filter((e) => e.length < DictionaryOverviewScreenComponent.MIN_WORD_LENGTH);
|
||||
|
||||
if (invalidRowsExist.length === 0) {
|
||||
// can add at least 1
|
||||
let obs: Observable<any>;
|
||||
if (entriesToAdd.length > 0) {
|
||||
await this._dictionaryControllerService.addEntry(entriesToAdd, this.dictionary.type).toPromise();
|
||||
obs = this._dictionaryControllerService.addEntry(entriesToAdd, this.dictionary.type, true);
|
||||
} else {
|
||||
obs = this._dictionaryControllerService.deleteEntries(this.initialDictionaryEntries, this.dictionary.type);
|
||||
}
|
||||
if (entriesToDelete.length > 0) {
|
||||
await this._dictionaryControllerService.deleteEntries(entriesToDelete, this.dictionary.type).toPromise();
|
||||
}
|
||||
this._initialize();
|
||||
|
||||
obs.subscribe(
|
||||
() => {
|
||||
this._initialize();
|
||||
this._notificationService.showToastNotification(
|
||||
this._translateService.instant('dictionary-overview.success.generic'),
|
||||
null,
|
||||
NotificationType.SUCCESS
|
||||
);
|
||||
},
|
||||
() => {
|
||||
this._notificationService.showToastNotification(
|
||||
this._translateService.instant('dictionary-overview.error.generic'),
|
||||
null,
|
||||
NotificationType.ERROR
|
||||
);
|
||||
}
|
||||
);
|
||||
} else {
|
||||
this._notificationService.showToastNotification(
|
||||
this._translateService.instant('dictionary-overview.error.entries-to-short'),
|
||||
|
||||
@ -500,7 +500,11 @@
|
||||
},
|
||||
"dictionary-overview": {
|
||||
"error": {
|
||||
"entries-to-short": "Some entries of the dictionary are below the minimum length of 2. These are highlighted with red!"
|
||||
"entries-to-short": "Some entries of the dictionary are below the minimum length of 2. These are highlighted with red!",
|
||||
"generic": "Something went wrong... Dictionary update failed!"
|
||||
},
|
||||
"success": {
|
||||
"generic": "Dictionary updated!"
|
||||
},
|
||||
"search": "Search...",
|
||||
"save-changes": "Save Changes",
|
||||
|
||||
@ -60,13 +60,14 @@ export class DictionaryControllerService {
|
||||
* None
|
||||
* @param body entries
|
||||
* @param type type
|
||||
* @param removeCurrent removeCurrent
|
||||
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
||||
* @param reportProgress flag to report request and response progress.
|
||||
*/
|
||||
public addEntry(body: Array<string>, type: string, observe?: 'body', reportProgress?: boolean): Observable<any>;
|
||||
public addEntry(body: Array<string>, type: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<any>>;
|
||||
public addEntry(body: Array<string>, type: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<any>>;
|
||||
public addEntry(body: Array<string>, type: string, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
|
||||
public addEntry(body: Array<string>, type: string, removeCurrent?: boolean, observe?: 'body', reportProgress?: boolean): Observable<any>;
|
||||
public addEntry(body: Array<string>, type: string, removeCurrent?: boolean, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<any>>;
|
||||
public addEntry(body: Array<string>, type: string, removeCurrent?: boolean, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<any>>;
|
||||
public addEntry(body: Array<string>, type: string, removeCurrent?: boolean, observe: any = 'body', reportProgress: boolean = false): Observable<any> {
|
||||
if (body === null || body === undefined) {
|
||||
throw new Error('Required parameter body was null or undefined when calling addEntry.');
|
||||
}
|
||||
@ -75,6 +76,11 @@ export class DictionaryControllerService {
|
||||
throw new Error('Required parameter type was null or undefined when calling addEntry.');
|
||||
}
|
||||
|
||||
let queryParameters = new HttpParams({ encoder: new CustomHttpUrlEncodingCodec() });
|
||||
if (removeCurrent !== undefined && removeCurrent !== null) {
|
||||
queryParameters = queryParameters.set('removeCurrent', <any>removeCurrent);
|
||||
}
|
||||
|
||||
let headers = this.defaultHeaders;
|
||||
|
||||
// authentication (RED-OAUTH) required
|
||||
@ -99,6 +105,7 @@ export class DictionaryControllerService {
|
||||
|
||||
return this.httpClient.request<any>('post', `${this.basePath}/dictionary/${encodeURIComponent(String(type))}`, {
|
||||
body: body,
|
||||
params: queryParameters,
|
||||
withCredentials: this.configuration.withCredentials,
|
||||
headers: headers,
|
||||
observe: observe,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user