Sieve: use Optional chaining operator

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining
This commit is contained in:
the-djmaze 2022-05-21 23:58:46 +02:00
parent 3a1046f215
commit e1426b484e
6 changed files with 12 additions and 13 deletions

View file

@ -46,14 +46,13 @@ export class AbstractModel {
onDestroy() { onDestroy() {
/** dispose ko subscribables */ /** dispose ko subscribables */
this.disposables.forEach(disposable => { this.disposables.forEach(disposable => {
disposable && typeof disposable.dispose === 'function' && disposable.dispose(); typeof disposable?.dispose === 'function' && disposable.dispose();
}); });
/** clear object entries */ /** clear object entries */
// forEachObjectEntry(this, (key, value) => { // forEachObjectEntry(this, (key, value) => {
forEachObjectValue(this, value => { forEachObjectValue(this, value => {
/** clear CollectionModel */ /** clear CollectionModel */
let arr = ko.isObservableArray(value) ? value() : value; (ko.isObservableArray(value) ? value() : value)?.onDestroy?.();
arr && arr.onDestroy && arr.onDestroy();
/** destroy ko.observable/ko.computed? */ /** destroy ko.observable/ko.computed? */
// dispose(value); // dispose(value);
/** clear object value */ /** clear object value */
@ -78,7 +77,7 @@ export class AbstractModel {
*/ */
static reviveFromJson(json) { static reviveFromJson(json) {
let obj = this.validJson(json) ? new this() : null; let obj = this.validJson(json) ? new this() : null;
obj && obj.revivePropertiesFromJson(json); obj?.revivePropertiesFromJson(json);
return obj; return obj;
} }

View file

@ -65,7 +65,7 @@ export class FilterModel extends AbstractModel {
const fGetRealFolderName = folderFullName => { const fGetRealFolderName = folderFullName => {
// const folder = getFolderFromCacheList(folderFullName); // const folder = getFolderFromCacheList(folderFullName);
// return folder ? folder.fullName.replace('.' === folder.delimiter ? /\./ : /[\\/]+/, ' / ') : folderFullName; // return folder?.fullName.replace('.' === folder.delimiter ? /\./ : /[\\/]+/, ' / ') : folderFullName;
return folderFullName; return folderFullName;
}; };
@ -222,9 +222,9 @@ export class FilterModel extends AbstractModel {
static reviveFromJson(json) { static reviveFromJson(json) {
const filter = super.reviveFromJson(json); const filter = super.reviveFromJson(json);
if (filter) { if (filter) {
filter.id = filter.id ? '' + filter.id : ''; filter.id = '' + (filter.id || '');
filter.conditions( filter.conditions(
json.Conditions ? json.Conditions.map(aData => FilterConditionModel.reviveFromJson(aData)).filter(v => v) : [] (json.Conditions || []).map(aData => FilterConditionModel.reviveFromJson(aData)).filter(v => v)
); );
filter.actionKeep(0 != json.Keep); filter.actionKeep(0 != json.Keep);
filter.actionNoStop(0 == json.Stop); filter.actionNoStop(0 == json.Stop);

View file

@ -12,7 +12,7 @@ export const
data = ko.observableArray(data); data = ko.observableArray(data);
data.subscribe(changes => data.subscribe(changes =>
changes.forEach(item => changes.forEach(item =>
'deleted' === item.status && null == item.moved && item.value.onDestroy && item.value.onDestroy() 'deleted' === item.status && null == item.moved && item.value.onDestroy?.()
) )
, data, 'arrayChange'); , data, 'arrayChange');
return data; return data;
@ -22,7 +22,7 @@ export const
koComputable = fn => ko.computed(fn, {'pure':true}), koComputable = fn => ko.computed(fn, {'pure':true}),
arrayToString = (arr, separator) => arrayToString = (arr, separator) =>
arr.map(item => item.toString ? item.toString() : item).join(separator), arr.map(item => item.toString?.() || item).join(separator),
/* /*
getNotificationMessage = code => { getNotificationMessage = code => {
let key = getKeyByValue(Notification, code); let key = getKeyByValue(Notification, code);

View file

@ -87,7 +87,7 @@ export class FilterPopupView extends rl.pluginPopupView {
folderListOptionsBuilder( folderListOptionsBuilder(
[rl.settings.get('SieveAllowFileintoInbox') ? '' : 'INBOX'], [rl.settings.get('SieveAllowFileintoInbox') ? '' : 'INBOX'],
[['', '']], [['', '']],
item => item ? item.localName() : '' item => item?.localName() || ''
) )
); );

View file

@ -80,7 +80,7 @@ export class SieveScriptPopupView extends rl.pluginPopupView {
if (iError) { if (iError) {
self.saveError(true); self.saveError(true);
self.errorText((data && data.ErrorMessageAdditional) || getNotification(iError)); self.errorText(data?.ErrorMessageAdditional || getNotification(iError));
} else { } else {
script.exists() || scripts.push(script); script.exists() || scripts.push(script);
script.exists(true); script.exists(true);

View file

@ -58,7 +58,7 @@ window.Sieve = {
Remote.request('FiltersScriptDelete', Remote.request('FiltersScriptDelete',
(iError, data) => { (iError, data) => {
if (iError) { if (iError) {
setError((data && data.ErrorMessageAdditional) || getNotification(iError)); setError(data?.ErrorMessageAdditional || getNotification(iError));
} else { } else {
scripts.remove(script); scripts.remove(script);
} }
@ -73,7 +73,7 @@ window.Sieve = {
Remote.request('FiltersScriptActivate', Remote.request('FiltersScriptActivate',
(iError, data) => { (iError, data) => {
if (iError) { if (iError) {
setError((data && data.ErrorMessageAdditional) || iError) setError(data?.ErrorMessageAdditional || iError)
} else { } else {
scripts.forEach(script => script.active(script.name() === name)); scripts.forEach(script => script.active(script.name() === name));
} }