Skip to content
This repository was archived by the owner on Jan 20, 2024. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,6 @@
"url": "https://github.com/ForceDotComLabs/react.force.data/issues"
},
"homepage": "https://github.com/ForceDotComLabs/react.force.data#readme",
"peerDependencies": {
"react-native": ">=0.20.0",
"react.force": "git+ssh://git@github.com/ForceDotComLabs/react.force.git"
},
"dependencies": {
"lodash.findindex": "^4.4.0",
"lodash.keys": "^4.0.7",
Expand Down
13 changes: 13 additions & 0 deletions src/addToBtLogoQueue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import btLogoQueue from './btLogoQueue';

module.exports = (opts) => {
return new Promise (
(resolve, reject) => {
if(!opts.cachedBtLogoData || opts.nocache){
btLogoQueue.add(opts.id);
} else {
console.log('skipping: already cached');
}
resolve(opts);
})
}
13 changes: 13 additions & 0 deletions src/addToChatterQueue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import chatterQueue from './chatterQueue';

module.exports = (opts) => {
return new Promise (
(resolve, reject) => {
if(!opts.cachedChatterData || opts.nocache){
chatterQueue.add(opts.id);
} else {
console.log('skipping: already cached');
}
resolve(opts);
})
}
2 changes: 1 addition & 1 deletion src/addToQueue.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,4 @@ module.exports = (opts) => {
resolve(opts);
}
);
};
};
53 changes: 53 additions & 0 deletions src/btLogoQuery.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import {btClient} from 'react.force';
import union from 'lodash.union';
import remove from 'lodash.remove';
import trim from 'lodash.trim';

let queryCount = 0;

const listeners = [];

const broadcast = (records) => {
const ids = records.map((record)=>{
return record.id;
});
listeners.forEach((listener)=>{
listener(ids, records);
});
}

module.exports = (opts) => {
return new Promise(
(resolve, reject) => {
if(!opts.noCache && opts.cachedBtLogoData ){
opts.btLogoData = opts.cachedBtLogoData;
resolve(opts);
return;
}

queryCount++;
btClient.btLogoBatchRequest(opts.ids, (response)=>{
if(!response.hasErrors && response.companyLogoResponseItems.length){
const records = response.companyLogoResponseItems.map((r, index) => {
let result = r;
result.id = opts.ids[index];
return result;
});
broadcast(records);
}
resolve(opts);
},
(error)=>{
reject('Error: bluetail query');
})
}
);
};

module.exports.addListener = (listener) => {
listeners.push(listener);
};

module.exports.getQueryCount = () => {
return queryCount;
};
26 changes: 26 additions & 0 deletions src/btLogoQueue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
let btLogoQueue = [];
import keys from 'lodash.keys';
import btLogoQuery from './btLogoQuery';

const get = () => {
return btLogoQueue.splice(0, btLogoQueue.length);
}
const add = (id) => {
if(!id){
return;
}
if(btLogoQueue.indexOf(id) < 0){
btLogoQueue.push(id);
}
setTimeout(()=>{
if(btLogoQueue && btLogoQueue.length !== 0){
const ids = get();
return btLogoQuery({ids:ids});
}
},300);
};

module.exports = {
add:add,
get:get
};
24 changes: 24 additions & 0 deletions src/cacheBtLogoData.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import query from './btLogoQuery';

const notify = (companyName,blueTailBlobs) => {
blueTailBlobs.forEach((blueTailBlob)=>{
set(blueTailBlob, companyName);
});
};

query.addListener(notify);

let cache = {};

const get = (companyName)=>{
return cache[companyName];
};

const set = (blueTailBlob, companyName)=>{
cache[companyName] = blueTailBlob;
};

module.exports = {
get:get,
set:set
};
24 changes: 24 additions & 0 deletions src/cacheChatterData.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import query from './chatterQuery';

const notify = (ids,chatterObjs) => {
chatterObjs.forEach((chatterObj)=>{
set(chatterObj);
});
};

query.addListener(notify);

let cache = {};

const get = (id)=>{
return cache[id];
};

const set = (chatterObj)=>{
cache[chatterObj.id] = chatterObj;
};

module.exports = {
get:get,
set:set
};
24 changes: 24 additions & 0 deletions src/cacheReportData.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// import reportQuery
import query from './reportQuery';

const notify = (id,sobj) => {
set(sobj);
};

query.addListener(notify);

let cache = {};

const get = (id)=>{
return cache[id];
};

const set = (sobj)=>{
let reportId = sobj.attributes.reportId;
cache[reportId] = sobj;
};

module.exports = {
get:get,
set:set
};
55 changes: 55 additions & 0 deletions src/chatterQuery.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import {forceClient} from 'react.force';
import union from 'lodash.union';
import remove from 'lodash.remove';
import trim from 'lodash.trim';

let queryCount = 0;

const listeners = [];

const broadcast = (records) => {
const ids = records.map((record)=>{
return record.id;
});
listeners.forEach((listener)=>{
listener(ids, records);
});
}

module.exports = (opts) => {
return new Promise(
(resolve, reject) => {
if(!opts.noCache && opts.cachedChatterData ){
opts.chatterData = opts.cachedChatterData;
resolve(opts);
return;
}

queryCount++;
forceClient.bulkChatterUserPics(opts.ids,
(response)=>{
if(!response.hasErrors && response.results.length){
const records = response.results.map((r, index) => {
let result = r.result;
result.id = opts.ids[index];
return result;
});
broadcast(records);
}
resolve(opts);
},
(error) => {
reject('Error: chatter query');
}
);
}
);
};

module.exports.addListener = (listener) => {
listeners.push(listener);
};

module.exports.getQueryCount = () => {
return queryCount;
};
27 changes: 27 additions & 0 deletions src/chatterQueue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
let chatterQueue = [];
import keys from 'lodash.keys';
import chatterQuery from './chatterQuery';

const get = () => {
return chatterQueue.splice(0, chatterQueue.length);
}
const add = (id) => {
if(!id){
return;
}
if(chatterQueue.indexOf(id) < 0){
chatterQueue.push(id);
}
setTimeout(()=>{
if(chatterQueue && chatterQueue.length !== 0){
console.log('TRIGGER QUERY !!!');
const ids = get();
return chatterQuery({ids:ids});
}
},300);
};

module.exports = {
add:add,
get:get
};
34 changes: 34 additions & 0 deletions src/dashboard/getDashboardData.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import {forceClient} from 'react.force';

const listeners = [];

const broadcast = (records) => {
const ids = records.map((record)=>{
return record.id;
});
listeners.forEach((listener)=>{
listener(ids, records);
});
}

module.exports = (opts) => {
return new Promise(
(resolve, reject) => {
forceClient.dashboardData(opts.id, (response)=>{
if(response){
response.id = response.attributes.dashboardId;
broadcast([response]);
}
resolve(opts);
},
(error)=>{
reject('Error: dashboard response was not received');
})
}
);
};

module.exports.addListener = (listener) => {
listeners.push(listener);
};

40 changes: 40 additions & 0 deletions src/dashboard/refreshDashboard.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import {forceClient} from 'react.force';
import Interval from '../utils/interval';
import waitForDashboardRefresh from './waitForDashboardRefresh';

let _dbRefreshLoop;

module.exports = (opts) => {
return new Promise(
(resolve, reject)=> {
if(!opts.autoRefresh){
resolve(opts);
return;
}
_dbRefreshLoop = new Interval(function(time){
console.log('dbrefreshed@'+time);
forceClient.dashboardRefresh(opts.id,
(response)=>{
if(response && response.statusUrl){
resolve(opts);
waitForDashboardRefresh(opts);
return;
} else {
reject('Error: dashboard did not refresh properly');
}
},
(error)=>{
reject('Error: dashboard refresh did not receive data');
}
);
}
,opts.refreshInterval);

_dbRefreshLoop.start();
}
);
}

module.exports.stop = ()=>{
_dbRefreshLoop && _dbRefreshLoop.stop();
}
31 changes: 31 additions & 0 deletions src/dashboard/waitForDashboardRefresh.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import {forceClient} from 'react.force';
import Interval from '../utils/interval';
import getDashboardData from './getDashboardData';

let _dbStatusLoop;

module.exports = (opts)=>{
_dbStatusLoop = new Interval(function(time){
console.log('dbstatuscheck@'+time);
forceClient.dashboardStatus(opts.id,
(response)=>{
let isDbRefreshed = response.componentStatus.every((component)=>{
return component.refreshStatus == 'IDLE';
})
if(isDbRefreshed){
_dbStatusLoop.stop();
getDashboardData(opts);
}
},
(error)=>{
reject('Error: there was an error in the dashboard refresh');
}
)
},30000);

_dbStatusLoop.start();
}

module.exports.stop = ()=>{
_dbStatusLoop && _dbStatusLoop.stop();
}
Loading