@fto-consult/common
Version:
Un ensemble de bibliothèques et d'utilistaires communs pour le développement d'applications javascript
40 lines (34 loc) • 1.38 kB
JavaScript
// Copyright 2022 @fto-consult/Boris Fouomene. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
import isValid from "./isValidDataFile";
import getDB from "./getDB";
import fetch from "./fetch";
import APP from "$capp/instance";
import {isObj,isNonNullString} from "$cutils";
const upsert = (dF,diffFunc)=>{
if(isNonNullString(dF)){
dF = {code:dF};
}
const hasDiff = typeof diffFunc ==='function';
if(!hasDiff &&!isValid(dF)){
return Promise.reject({message:'Invalid data file, could not insert it ',dataFile : dF});
} else if(!isObj(dF) || !isNonNullString(dF.code)){
return Promise.reject({message:`Invalid data file to upsert`,dataFile:dF});
}
return new Promise((resolve,reject)=>{
return getDB().then(({db})=>{
return db.upsert(dF.code,(newDoc)=>{
const ret = {...newDoc,...dF};
if(typeof diffFunc =='function') return diffFunc(ret);
return ret;
}).then((nD)=>{
return fetch().finally(()=>{
resolve(nD);
APP.trigger(APP.EVENTS.UPSERT_POUCHDB_DATA_FILE,nD.newDoc);
})
});
}).catch(reject);
})
};
export default upsert;