@testqueryparkui/qp-es-ui
Version:
Query Park UI Components for React
213 lines (194 loc) • 7.92 kB
JavaScript
/*
parse the source data to create json array
create header for the excel file
*/
import forEach from "lodash.foreach";
import { object } from "prop-types";
const keyify = (obj, prefix = '') =>
Object.keys(obj).reduce((res, el) => {
if( Array.isArray(obj[el]) ) {
for(var i=0; i<obj[el].length;i++){
res = [...res, ...keyify(obj[el][i], prefix + el+'.'+i + '.')]
}
return res;
} else if( typeof obj[el] === 'object' && obj[el] !== null ) {
return [...res, ...keyify(obj[el], prefix + el + '.')];
}
return [...res, prefix + el];
}, []);
/* const parse = async(source) => {
let keys = []
let welldata = []
let headerKeys = {'uuid' : 'uuid','WellId' : 'WellId','UWI / API' : 'UWI / API','FieldName' : 'FieldName'}
if(source.length > 1){
for(let k in source[0].wellData){
if(Array.isArray(k)){
for()
for(let n in k){
keys.push(n)
}
Object.assign(headerKeys,{[n] : n})
}
else( k != 'Uuid' && k != 'UWI' && k != 'Prev' && k != 'Next'){
keys.push(k)
Object.assign(headerKeys,{[k] : k})
}
}
for(var i=0; i<source.length; i++){
delete source[i].wellData['Uuid']
delete source[i].wellData['UWI']
delete source[i].wellData['Prev']
delete source[i].wellData['Next']
let well = {}
well['uuid'] = source[i].uuid
well['WellId'] = source[i].govId['value'] ? source[i].govId['value'] : null
well['UWI / API'] = source[i].subheader['value'] ? source[i].subheader['value'] : null
well['FieldName'] = source[i].primaryHeader['value'] ? source[i].primaryHeader['value'] : null
if(keys.length > 0){
keys.forEach((key) => {
well[key] = source[i].wellData[key]
} )
}
welldata.push(well)
}
welldata.unshift(headerKeys)
console.log(welldata[0])
return welldata
}
else{
for(let k in source.wellData){
if( k != 'Uuid' && k != 'UWI' && k != 'Prev' && k != 'Next'){
keys.push(k)
Object.assign(headerKeys,{[k] : k})
}
}
delete source.wellData['Uuid']
delete source.wellData['UWI']
delete source.wellData['Prev']
delete source.wellData['Next']
let well = {}
well['uuid'] = source.uuid
well['WellId'] = source.govId['value'] ? source.govId['value'] : null
well['UWI / API'] = source.subheader['value'] ? source.subheader['value'] : null
well['FieldName'] = source.primaryHeader['value'] ? source.primaryHeader['value'] : null
if(keys.length > 0){
keys.forEach((key) => {
well[key] = source.wellData[key]
} )
}
welldata.push(well)
welldata.unshift(headerKeys)
console.log(welldata[0])
return welldata
}
}
*/
const filterObject = (obj, arr) => {
Object.keys(obj).forEach((key) => {
if(arr == key){
console.log(obj[key])
return obj[key];
};
});
};
function filter(object, ...keys) {
return keys.reduce((result, key) => ({ ...result, [key]: object[key] }), {});
}
const leaf = (obj, path) => (path.split('.').reduce((value,el) => value && value[el], obj))
const sorted = (obj) => Object.keys(obj)
.sort()
.reduce((acc, key) => ({
...acc, [key]: obj[key]
}), {})
const parse = async(source) => {
if(source.length > 1){
let keys = keyify(source[0])
let wellData = []
let headerKeys = {}
keys.forEach((k) =>{
if(k.includes('label')){
// keys.push(leaf(source[0],k))
if(!(leaf(source[0],k) in headerKeys))
headerKeys[leaf(source[0],k)] = leaf(source[0],k)
}
else if(!k.includes('value') && !k.includes('label')){
k = k.replace('attributes.' ,'')
k = k.replace('wellData.' ,'')
if(!(k in headerKeys))
headerKeys[k] = k
}
})
console.log(sorted(headerKeys))
for(var i=0; i<source.length; i++){
let well = {}
keys.forEach((k) => {
if(k.includes('label')){
let value = k.replace('label','value')
if(!(leaf(source[i],k) in well))
well[leaf(source[i],k)] = leaf(source[i],value)
}
else if(!k.includes('value') && !k.includes('label')){
// console.log(k + '-'+ leaf(source[i],k))
let modified = k.replace('attributes.','')
modified = modified.replace('wellData.','')
if(!(modified in well))
well[modified] = leaf(source[i],k)
}
})
// console.log(sorted(well))
wellData.push(sorted(well))
}
wellData.unshift(sorted(headerKeys))
console.log(wellData[1])
return wellData
}
else{
let keys = keyify(source)
let wellData = []
let headerKeys = {}
keys.forEach((k) =>{
if(k.includes('label')){
// keys.push(leaf(source[0],k))
if(!(leaf(source,k) in headerKeys))
headerKeys[leaf(source,k)] = leaf(source,k)
}
else if(!k.includes('value') && !k.includes('label')){
k = k.replace('attributes.' ,'')
k = k.replace('wellData.' ,'')
if(!(k in headerKeys))
headerKeys[k] = k
}
})
console.log(Object.keys(headerKeys).length)
let well = {}
keys.forEach((k) => {
if(k.includes('label')){
let value = k.replace('label','value')
if(!(leaf(source,k) in well))
well[leaf(source,k)] = leaf(source,value)
}
else if(k.includes('wellData') && source['wellData.Region'] === 'SK'){
let modified = k.replace('wellData.','')
//console.log(source['wellData'][modified])
// let k1='wellData'+modified
if(!(k in well))
well[modified] = source['wellData'][modified]
}
else if(k.includes('attributes')){
let modified = k.replace('attributes.','')
if(!(k in well))
well[modified] = leaf(source,k)
}
else if(!(k.includes('value'))){
if(!(k in well))
well[k] = leaf(source,k)
}
})
console.log(Object.keys(well).length)
wellData.push(sorted(well))
wellData.unshift(sorted(headerKeys))
console.log(wellData[1])
return wellData
}
}
export default parse