Browse Source

Merge pull request #669 from yerzhant/add-remote-function

Add remote function
master
Dushusir 4 years ago
committed by GitHub
parent
commit
fbd9d752a2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      src/controllers/luckysheetConfigsetting.js
  2. 3
      src/core.js
  3. 37
      src/function/functionImplementation.js
  4. 22
      src/locale/en.js

7
src/controllers/luckysheetConfigsetting.js

@ -22,12 +22,13 @@ const luckysheetConfigsetting = {
enableAddBackTop: true,
enablePage: true,
pageInfo: null,
editMode: false,
beforeCreateDom: null,
workbookCreateBefore: null,
workbookCreateAfter: null,
remoteFunction: null,
fireMousedown: null,
plugins:[],
forceCalculation:false,//强制刷新公式,公式较多会有性能问题,慎用
@ -39,4 +40,4 @@ const luckysheetConfigsetting = {
defaultCellColor: '#fff',
}
export default luckysheetConfigsetting;
export default luckysheetConfigsetting;

3
src/core.js

@ -122,6 +122,7 @@ luckysheet.create = function (setting) {
luckysheetConfigsetting.beforeCreateDom = extendsetting.beforeCreateDom;
luckysheetConfigsetting.workbookCreateBefore = extendsetting.workbookCreateBefore;
luckysheetConfigsetting.workbookCreateAfter = extendsetting.workbookCreateAfter;
luckysheetConfigsetting.remoteFunction = extendsetting.remoteFunction;
luckysheetConfigsetting.fireMousedown = extendsetting.fireMousedown;
luckysheetConfigsetting.forceCalculation = extendsetting.forceCalculation;
@ -147,7 +148,7 @@ luckysheet.create = function (setting) {
// Store the currently used plugins for monitoring asynchronous loading
Store.asyncLoad.push(...luckysheetConfigsetting.plugins);
// Register plugins
initPlugins(extendsetting.plugins , extendsetting.data);

37
src/function/functionImplementation.js

@ -1,3 +1,4 @@
import luckysheetConfigsetting from '../controllers/luckysheetConfigsetting';
import { luckysheet_getcelldata, luckysheet_parseData, luckysheet_getValue } from './func';
import { inverse } from './matrix_methods';
import { getSheetIndex, getluckysheetfile,getRangetxt } from '../methods/get';
@ -3336,7 +3337,7 @@ const functionImplementation = {
}
else{
if (typeof value !== 'string') {
if (new Function("return " + value + criter)()) {
if (new Function("return " + value + criter)()) {
matches++;
}
}
@ -27587,6 +27588,40 @@ const functionImplementation = {
return [formula.error.v, err];
}
},
"REMOTE": function() {
if (arguments.length < this.m[0] || arguments.length > this.m[1]) {
return formula.error.na;
}
try {
const cellRow = window.luckysheetCurrentRow;
const cellColumn = window.luckysheetCurrentColumn;
const cellFunction = window.luckysheetCurrentFunction;
const remoteFunction = func_methods.getFirstValue(arguments[0]);
if(valueIsError(remoteFunction)){
return remoteFunction;
}
luckysheetConfigsetting.remoteFunction(remoteFunction, data => {
const flowData = editor.deepCopyFlowData(Store.flowdata);
formula.execFunctionGroup(cellRow, cellColumn, data);
flowData[cellRow][cellColumn] = {
"v": data,
"f": cellFunction
};
jfrefreshgrid(flowData, [{"row": [cellRow, cellRow], "column": [cellColumn, cellColumn]}]);
});
return "Loading...";
}
catch (e) {
console.log(e);
var err = e;
err = formula.errorInfo(err);
return [formula.error.v, err];
}
},
};
export default functionImplementation;

22
src/locale/en.js

@ -8827,6 +8827,21 @@ export default {
"type": "rangeall"
}]
},
{
"n": "REMOTE",
"t": "5",
"d": "Calls a function on a remote server",
"a": "Calls a function on a remote back end server/API.",
"m": [1, 1],
"p": [{
"name": "remote_expression",
"example": 'SUM(A1:A10000000)',
"detail": "Formula",
"require": "m",
"repeat": "n",
"type": "string"
}]
},
],
toolbar: {
undo: 'Undo',
@ -9391,7 +9406,7 @@ export default {
byRow: 'By row',
byCol: 'By column',
generateNewMatrix: 'Generate new matrix',
},
comment:{
"insert":"Insert",
@ -9449,7 +9464,7 @@ export default {
"semicolon":"semicolon",
"comma":"comma",
"space":"space",
},
findAndReplace:{
find:"Find",
@ -9509,7 +9524,7 @@ export default {
locationTiplessTwoRow:"Please select at least two rows",
locationTiplessTwoColumn:"Please select at least two columns",
locationTipNotFindCell:"Cell not found"
},
sheetconfig: {
delete: 'Delete',
@ -10032,4 +10047,3 @@ export default {
support: 'The current browser does not support WebSocket',
}
};
Loading…
Cancel
Save