Browse Source

fix(hook function): cellupdate

1.Hook function cellUpdate change to cellUpdateBefore 2.Add hook function cellUpdated
master
mengshukeji 5 years ago
parent
commit
5e8f71f32e
  1. 44
      docs/guide/config.md
  2. 18
      docs/zh/guide/config.md
  3. 2
      src/controllers/select.js
  4. 17
      src/global/formula.js
  5. 11
      src/index.html

44
docs/guide/config.md

@ -536,48 +536,44 @@ The hook functions are uniformly configured under ʻoptions.hook`, and configura
- {Object} [v]: Cell object
------------
### cellEditBefore
(TODO)
- Type: Function
- Default: null
- Usage: Triggered after double-clicking the cell, that is, when double-clicking the cell to edit the content, this method is triggered first
- Parameter:
### cellUpdateBefore
- TypeFunction
- Defaultnull
- Usage:Triggered before updating this cell
- Parameter
- {Number} [r]: Row number of cell
- {Number} [c]: Column number of cell
- {Object} [v]: Cell object
- {Object | String | Number} [value]: Cell content to be modified
- {Boolean} [isRefresh]: Whether to refresh the entire table
------------
### cellExitEditBefore
(TODO)
- Type: Function
- Default: null
- Usage: Exit the cell editing state, which is triggered before saving the cell value
- Parameter:
### cellUpdated
- TypeFunction
- Defaultnull
- Usage:Triggered after updating this cell
- Parameter
- {Number} [r]: Row number of cell
- {Number} [c]: Column number of cell
- {Object} [oldV]: Cell object before Modified
- {Object} [newV]: Cell object after Modified
- {Object} [oldValue]: Cell object before modification
- {Object} [newValue]: Cell object after modification
- {Boolean} [isRefresh]: Whether to refresh the entire table
------------
## Selected area
### rangeSelectBefore
- Type: Function
- Default: null
- Usage: Frame selection or trigger before setting selection
- Parameter:
- {Object | Array} [range]: Selection area, may be multiple selection areas
------------
### rangeSelectAfter
### rangeSelect
- Type: Function
- Default: null
- Usage: Frame selection or trigger after setting selection
- Parameter:
- {Object} [sheet]: Current sheet object
- {Object | Array} [range]: Selection area, may be multiple selection areas
------------
### rangeMoveBefore
- Type: Function
- Default: null

18
docs/zh/guide/config.md

@ -655,17 +655,30 @@ Luckysheet开放了更细致的自定义配置选项,分别有
- {Object} [sheet]:当前sheet对象
- {Object} [ctx]: 当前画布的context
------------
### cellUpdate
### cellUpdateBefore
- 类型:Function
- 默认值:null
- 作用:更新这个单元格时触发,在退出编辑保存单元格值前触发
- 作用:更新这个单元格之前触发,`return false` 则不执行后续的更新
- 参数:
- {Number} [r]: 单元格所在行数
- {Number} [c]: 单元格所在列数
- {Object | String | Number} [value]: 要修改的单元格内容
- {Boolean} [isRefresh]: 是否刷新整个表格
------------
### cellUpdated
- 类型:Function
- 默认值:null
- 作用:更新这个单元格后触发
- 参数:
- {Number} [r]: 单元格所在行数
- {Number} [c]: 单元格所在列数
- {Object} [oldValue]: 修改前的单元格对象
- {Object} [newValue]: 修改后的单元格对象
- {Boolean} [isRefresh]: 是否刷新整个表格
------------
### rowTitleCellRenderBefore
@ -852,6 +865,7 @@ Luckysheet开放了更细致的自定义配置选项,分别有
- 默认值:null
- 作用:框选或者设置选区后触发
- 参数:
- {Object} [sheet]:当前sheet对象
- {Object | Array} [range]: 选区范围,可能为多个选区
------------

2
src/controllers/select.js

@ -188,7 +188,7 @@ function selectHightlightShow(isRestore=false) {
const luckysheet_select_save_previous = JSON.stringify(Store.luckysheet_select_save);
if(Store.luckysheet_select_save_previous == null || Store.luckysheet_select_save_previous !== luckysheet_select_save_previous){
method.createHookFunction('rangeSelect', Store.currentSheetIndex, Store.luckysheet_select_save);
method.createHookFunction('rangeSelect', Store.luckysheetfile[getSheetIndex(Store.currentSheetIndex)], Store.luckysheet_select_save);
}
Store.luckysheet_select_save_previous = luckysheet_select_save_previous;

17
src/global/formula.js

@ -1229,13 +1229,12 @@ const luckysheetformula = {
});
},
updatecell: function(r, c, value, isRefresh=true) {
// 钩子函数
method.createHookFunction('cellUpdate',r,c,value,isRefresh);
let _this = this;
let $input = $("#luckysheet-rich-text-editor");
let inputText = $input.text(), inputHtml = $input.html();
if (_this.rangetosheet != null && _this.rangetosheet != Store.currentSheetIndex) {
sheetmanage.changeSheetExec(_this.rangetosheet);
@ -1258,6 +1257,10 @@ const luckysheetformula = {
}
let curv = Store.flowdata[r][c];
// Store old value for hook function
const oldValue = JSON.stringify(curv);
let isPrevInline = isInlineStringCell(curv);
let isCurInline = (inputText.slice(0, 1) != "=" && inputHtml.substr(0,5) == "<span");
if(!value && !isCurInline && isPrevInline){
@ -1286,6 +1289,11 @@ const luckysheetformula = {
// API, we get value from user
value = value || $input.text();
// Hook function
if(!method.createHookFunction("cellUpdateBefore", r, c, value, isRefresh)){
return;
}
if(!isCurInline){
if(isRealNull(value) && !isPrevInline){
if(curv == null || (isRealNull(curv.v) && curv.spl == null && curv.f == null)){
@ -1610,6 +1618,11 @@ const luckysheetformula = {
}
}
setTimeout(() => {
// Hook function
method.createHookFunction("cellUpdated", r, c, JSON.parse(oldValue), Store.flowdata[r][c], isRefresh);
}, 0);
if(isRefresh){
jfrefreshgrid(d, [{ "row": [r, r], "column": [c, c] }], allParam, isRunExecFunction);
// Store.luckysheetCellUpdate.length = 0; //clear array

11
src/index.html

@ -109,14 +109,17 @@
updated:function(operate){
// console.info(operate)
},
cellUpdate:function(r,c,value,isRefresh){
// console.info(r,c,value)
cellUpdateBefore:function(r,c,value,isRefresh){
// console.info('cellUpdateBefore',r,c,value,isRefresh)
},
cellUpdated:function(r,c,oldValue, newValue, isRefresh){
// console.info('cellUpdated',r,c,oldValue, newValue, isRefresh)
},
sheetActivate:function(index, isPivotInitial, isNewSheet){
// console.info(index, isPivotInitial, isNewSheet)
},
rangeSelect:function(index, range){
// console.info(index, range)
rangeSelect:function(index, sheet){
console.info(index, sheet)
}

Loading…
Cancel
Save