@olympeio-extensions/reactgrid 2.11.0 → 2.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/main-node.js.map +1 -1
- package/main-web.js.map +1 -1
- package/package.json +1 -1
package/main-node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main-node.js","mappings":"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A;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,0BAA0B;AACrC,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,0BAA0B;AACrC,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,gCAAgC,mDAAa;AAC7C;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,IAAI,KAAK,kBAAkB;AACvG;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA,kBAAkB,MAAM,GAAG,gBAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB;AACO;AACP,kBAAkB,aAAa,GAAG,gBAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,YAAY;AACvB,WAAW,eAAe;AAC1B,YAAY;AACZ;AACA;AACA,6BAA6B,mBAAmB;AAChD;AACA,oBAAoB,yCAAyC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB,WAAW,YAAY;AACvB;AACO;AACP,6BAA6B,mBAAmB;AAChD,gBAAgB,uCAAuC;AACvD;;AAEA;AACA,WAAW,eAAe;AAC1B,WAAW,YAAY;AACvB,YAAY;AACZ;AACO;AACP,6BAA6B,mBAAmB;AAChD;AACA;;AAEA;AACA,WAAW,eAAe;AAC1B,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACzSA;AACmC;;AAEnC;AACiC;AACe;AAC0C;AACnD;AACI;;AAE3C;AACA,aAAa,QAAQ;AACrB,cAAc,wBAAwB;AACtC,cAAc,yBAAyB;AACvC,cAAc,GAAG;AACjB,cAAc,GAAG;AACjB,cAAc,aAAa;AAC3B;AACO;;AAEP;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB;AACO;AACP;AACA;AACA;AACA,QAAQ,8CAAI;AACZ;AACA;;AAEA;AACA;AACA,4BAA4B,6DAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA,4BAA4B,oDAAU;AACtC;AACA;AACA;AACA;AACA,gBAAgB,8CAAI,8BAA8B,kBAAkB,WAAW,gBAAgB;AAC/F;AACA;;AAEA;AACA;AACA,gBAAgB,gEAAwB;AACxC;AACA;;AAEA;AACA;AACA,gBAAgB,+DAAuB;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,oDAAY;AACtC,0BAA0B,oDAAY;AACtC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,wDAAa;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6CAAS;AACzC;AACA;;AAEA;AACA;AACA,gBAAgB,wDAAa;AAC7B;AACA,SAAS;;AAET;AACA;AACA;;;;;;;;;;;;;;;;;;AClHqC;;AAErC;AACA;AACA,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,YAAY;AACZ;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+CAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AACqC;AACQ;;AAE7C;AACgE;;AAEhE;AACyC;AACO;;AAEhD;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB,YAAY;AACZ;AACO;AACP;AACA,8BAA8B,GAAG;AACjC,8BAA8B,GAAG;;AAEjC;AACA,WAAW,mDAAa;AACxB;AACA;AACA,kBAAkB,yCAAG,6BAA6B,sDAAW;AAC7D,kBAAkB,0DAAoB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,yCAAG;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD,kDAAkD;AACzG;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA,cAAc,yCAAG;AACjB;AACA,iDAAiD,+CAAW;AAC5D;AACA;AACA,SAAS;;AAET;AACA,cAAc,yCAAG;AACjB;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA,WAAW,eAAe;AAC1B,YAAY;AACZ;AACO;AACP,4BAA4B,2DAAW;AACvC;AACA;;AAEA;AACA,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;;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","sources":["webpack://@olympeio-extensions/reactgrid/webpack/universalModuleDefinition","webpack://@olympeio-extensions/reactgrid/./src/common/RGCreateColumnConfig.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGetChangeMetadata.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGetChangeProperties.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGroupTuplesByIndexes.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForCloudObjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForJSONString.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForObjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGWrapObject.js","webpack://@olympeio-extensions/reactgrid/./src/common/helpers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/box.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/cells.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/changes.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/cloudobjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/columns.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/data.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/helpers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/rows.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/scroll.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/triggers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/wrappers.js","webpack://@olympeio-extensions/reactgrid/external commonjs \"@olympeio/core\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"jsonpath-plus\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"react\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"rxjs\"","webpack://@olympeio-extensions/reactgrid/external umd \"olympe\"","webpack://@olympeio-extensions/reactgrid/webpack/bootstrap","webpack://@olympeio-extensions/reactgrid/webpack/runtime/compat get default export","webpack://@olympeio-extensions/reactgrid/webpack/runtime/define property getters","webpack://@olympeio-extensions/reactgrid/webpack/runtime/hasOwnProperty shorthand","webpack://@olympeio-extensions/reactgrid/webpack/runtime/make namespace object","webpack://@olympeio-extensions/reactgrid/./src/main-node.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"olympe\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"olympe\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@olympeio-extensions/reactgrid\"] = factory(require(\"olympe\"));\n\telse\n\t\troot[\"@olympeio-extensions/reactgrid\"] = factory(root[\"olympe\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE_olympe__) => {\nreturn ","import { Brick, registerBrick } from 'olympe';\nimport { fromJson } from './helpers';\n\nexport default class RGCreateColumnConfig extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {number} rank\n * @param {string} propertyPath\n * @param {string} header\n * @param {number} width\n * @param {string} type\n * @param {string|!Object} options\n * @param {boolean} editable\n * @param {boolean} resizable\n * @param {number} level\n * @param {function(!Object)} setObject\n */\n update(_$, [rank, propertyPath, header, width, type, options, editable, resizable, level], [setObject]) {\n setObject({\n Rank: rank,\n 'Property Path': propertyPath,\n Header: header,\n Width: width,\n Type: type,\n Options: fromJson(options)[0],\n Editable: editable,\n Resizable: resizable,\n Level: level\n });\n }\n}\n\nregisterBrick('01921d9038d9eb72f609', RGCreateColumnConfig);\n","import { Brick, registerBrick } from 'olympe';\n\nexport default class RGGetChangeMetadata extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!RGChange} change\n * @param {function(!Object)} setNewCell\n * @param {function(!Object)} setPreviousCell\n * @param {function(string|number)} setRowId\n * @param {function(string|number)} setColumnId\n * @param {function(string)} setType\n */\n update(_$, [change], [setNewCell, setPreviousCell, setRowId, setColumnId, setType]) {\n setNewCell(change.metadata.newCell);\n setPreviousCell(change.metadata.previousCell);\n setRowId(change.metadata.rowId);\n setColumnId(change.metadata.columnId);\n setType(change.metadata.type);\n }\n}\n\nregisterBrick('01920a4d4d8390252c91', RGGetChangeMetadata);\n","import { Brick, registerBrick } from 'olympe';\n\nexport default class RGGetChangeProperties extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!RGChange} change\n * @param {function(!Object|!CloudObject)} setObject\n * @param {function(!Object|!CloudObject)} setProperty\n * @param {function(!*)} setNewValue\n * @param {function(!*)} setOldValue\n */\n update(_$, [change], [setObject, setProperty, setNewValue, setOldValue]) {\n setObject(change.object);\n setProperty(change.property);\n setNewValue(change.newValue);\n setOldValue(change.oldValue);\n }\n}\n\nregisterBrick('0192055d7857bd08279c', RGGetChangeProperties);\n","import { Brick, registerBrick } from 'olympe';\nimport { rgWrap, RGWrapper } from './helpers';\n\nexport default class RGGroupTuplesByIndexes extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array} data\n * @param {string} indexes\n * @param {function(!Array)} setGroupedData\n */\n update(_$, [data, indexes], [setGroupedData]) {\n // Get the indexes and make the grouping recursively\n const _indexes = indexes.split(',').map(index => parseInt(index));\n setGroupedData(groupBy(data.map(d => rgWrap(d)), _indexes, 0));\n }\n}\n\nregisterBrick('0192288806aa3cc82b95', RGGroupTuplesByIndexes);\n\n/**\n * Group data by indexes, for the given level\n * @param {!Array} wrappers\n * @param {!Array<number>} indexes\n * @param {number} level\n * @return {!Array}\n */\nfunction groupBy(wrappers, indexes, level) {\n // End of recursion\n if(level >= indexes.length || !Array.isArray(wrappers)) {\n return wrappers;\n }\n\n // Get the current working index\n const index = indexes[level] - level;\n\n // Group the data in a Map\n const groupedWrappers = wrappers.reduce((parents, wrapper) => {\n // Split the tuple into parts\n const [wrapped, child] = splitTuple(wrapper, index, level);\n const key = wrapped.rgGetKey();\n\n // If this key is not in a group yet\n if(!parents.has(key)) {\n // Create the new group\n parents.set(key, wrapped);\n }\n\n // If there is a child, add it to the group\n // (group the child itself also)\n if(child) {\n const parent = parents.get(key);\n parent.rgChildren.push(child);\n }\n\n // Done\n return parents;\n }, new Map());\n\n // Apply the grouping on the children\n return Array.from(groupedWrappers.values()).map(({ rgChildren, ...others }) => ({\n rgChildren: groupBy(rgChildren.map(c => rgWrap(c, level + 1)), indexes, level + 1),\n ...others\n }));\n}\n\n/**\n * @param {!RGWrapper} wrapper \n * @param {number} index \n * @param {number} level \n * @return {[!RGWrapper, *]}\n */\nfunction splitTuple(wrapper, index, level) {\n // Real tuple case\n if(wrapper._rgType === 'tuple') {\n // Extract the info\n const tuple = wrapper.rgObject;\n const wrapped = rgWrap(tuple[index], level);\n const before = tuple.slice(0, index);\n const after = tuple.slice(index + 1);\n const child = [...before, ...after];\n \n // Handle all cases\n if(child.length > 1) {\n return [wrapped, child];\n }\n else if(child.length > 0) {\n return [wrapped, child[0]];\n }\n else {\n return [wrapped, null];\n }\n }\n\n // Not a tuple case\n else {\n return [wrapper, null];\n }\n}\n","import { ActionBrick, registerBrick, Transaction, ErrorFlow } from 'olympe';\n\nexport default class RGProcessChangesForCloudObjects extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {boolean} executeAsLarge\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n */\n update(_$, [changes, executeAsLarge], [forwardEvent, setErrorFlow]) {\n const t = new Transaction();\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(change.metadata.newCell.validator?.(change.newValue) ?? true) {\n t.update(change.object, change.property, change.newValue);\n }\n else {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n const promise = executeAsLarge ? t.executeAsLarge() : t.execute();\n promise.then(forwardEvent)\n .catch(error => setErrorFlow(ErrorFlow.create(error.message, 0)));\n }\n}\n\nregisterBrick('01920a8134e1cf0fa551', RGProcessChangesForCloudObjects);\n","import { ActionBrick, registerBrick, ErrorFlow } from 'olympe';\nimport { fromJson } from './helpers';\n\nexport default class RGProcessChangesForJSONString extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {string} json\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n * @param {function(string)} setNewJson\n */\n update(_$, [changes, json], [forwardEvent, setErrorFlow, setNewJson]) {\n const [data, error] = fromJson(json);\n if(!error) {\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(change.metadata.newCell.validator?.(change.newValue) ?? true) {\n data[change.metadata.rowId][change.property] = change.newValue;\n }\n else {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n setNewJson(JSON.stringify(data));\n forwardEvent();\n }\n else {\n setErrorFlow(ErrorFlow.create(`input 'json' is not valid, error: ${error.message}`, 0));\n }\n }\n}\n\nregisterBrick('01921e064dbe25faec55', RGProcessChangesForJSONString);\n","import { ActionBrick, registerBrick, ErrorFlow } from 'olympe';\n\nexport default class RGProcessChangesForObjects extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {boolean} inPlace\n * @param {Array} data\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n */\n update(_$, [changes, inPlace, data], [forwardEvent, setErrorFlow]) {\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(!(change.metadata.newCell.validator?.(change.newValue) ?? true)) {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n if(inPlace) {\n changes.forEach(change => {\n change.object[change.property] = change.newValue;\n });\n }\n else {\n changes.forEach(change => {\n data[change.metadata.rowId][change.property] = change.newValue;\n });\n }\n forwardEvent();\n }\n}\n\nregisterBrick('01921e0d2b383c95bd22', RGProcessChangesForObjects);\n","import { Brick, registerBrick } from 'olympe';\nimport { rgWrap, RGWrapper } from './helpers';\n\nexport default class RGWrapObject extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!*} object\n * @param {number} level\n * @param {function(!RGWrapper)} setWrapped\n */\n update(_$, [object, level], [setWrapped]) {\n setWrapped(rgWrap(object, level));\n }\n}\n\nregisterBrick('019232c3d1873de0d259', RGWrapObject);\n","// Re-export\nexport { rgWrap, RGWrapper } from './internal/wrappers';\nexport { RGChange } from './internal/changes';\nexport { fromJson } from './internal/helpers';\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { tap, combineLatest, throttleTime } from 'rxjs';\n\n/**\n * Init the bounding box\n * @param {!BrickContext} $ \n */\nexport function initBox($) {\n // Listen to the component position and size\n combineLatest([$.observe('Width'), $.observe('Height')])\n\n // Debounce the changes to avoid to many rerendering\n .pipe(throttleTime(100, undefined, { leading: true, trailing: true }))\n\n // Set the final box\n .pipe(tap(([width, height]) => $.set('_rgBox', { width, height })))\n\n // Run \n .subscribe();\n}\n\n/**\n * @param {!BrickContext}\n * @return {!*}\n */\nexport function useBox($) {\n return useProperty($, '_rgBox') ?? {width: $.get('Width'), height: $.get('Height') };\n}\n\n","// Internal\nimport { fromJson, validateEmail, error, warn } from './helpers';\n\n/**\n * @param {!BrickContext} $\n */\nexport function initCells($) {\n $.set('_rgDropdownIsOpen', '');\n $.set('_rgDropdownInputValue', '');\n}\n\n/**\n * Generate a cell for the defined wrapper/column\n * @param {!BrickContext} $\n * @param {!RGWrapper} wrapper\n * @param {number} rowId\n * @param {!Object} column\n * @param {boolean} cellEdition\n * @return {!Object}\n */\nexport function generateCell($, wrapper, rowId, column, cellEdition) {\n try {\n // Get the cell value\n const value = wrapper.__rgGetValue(column['Property Path'] ?? '');\n\n // Get the options\n const [options, optionsError] = fromJson(column.Options);\n if(optionsError) {\n warn(`cannot parse column options, error: ${optionsError.message}`);\n }\n const validator = options.validator ? s => new RegExp(options.validator).test(s) : undefined;\n const common = {\n nonEditable: cellEdition === 'DISABLED' || (cellEdition === 'USE CONFIG' && !column.Editable),\n style: getCellStyle($)\n };\n\n // Generate the cell depending on the type\n switch(column.Type) {\n case 'TEXT': return generateTextCell(value, options, common, column, validator);\n case 'NUMBER': return generateNumberCell(value, options, common);\n case 'EMAIL': return generateEmailCell(value, common, validator);\n case 'DATE': \n case 'TIME': return generateDateTimeCell(value, options, common, column);\n case 'CHECKBOX': return generateCheckboxCell(value, options, common);\n case 'DROPDOWN': return generateDropdownCell(value, options, common, column, $, rowId);\n case 'HEADER': return generateHeaderCell(value, options, common);\n case 'CHEVRON': return generateChevronCell(value, options, common, wrapper, $);\n\n // AUTO case\n default:\n if(value instanceof Date) {\n return generateCell($, wrapper, rowId, { ...column, Type: 'DATE' }, cellEdition);\n }\n switch(typeof value) {\n case 'number': return generateCell($, wrapper, rowId, { ...column, Type: 'NUMBER' }, cellEdition);\n case 'boolean': return generateCell($, wrapper, rowId, { ...column, Type: 'CHECKBOX' }, cellEdition);\n default: return generateCell($, wrapper, rowId, { ...column, Type: 'TEXT', _cast: true }, cellEdition);\n }\n }\n }\n catch(err) {\n error(`cannot generate cell, error: ${err.message}`);\n return errorCell();\n }\n}\n\n/**\n * Get the cell value, depending on its type\n * @param {!Object} cell\n * @return {*}\n */\nexport function getCellValue(cell) {\n switch(cell.type) {\n case 'number': return cell.value;\n case 'date': return cell.date;\n case 'time': return cell.time;\n case 'checkbox': return cell.checked;\n case 'dropdown': return cell.selectedValue;\n default: return cell.text;\n }\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @param {function(string):boolean} validator \n * @return {!TextCell} \n */\nfunction generateTextCell(value, options, common, column, validator) {\n return {\n type: 'text',\n text: (column._cast ? String(value ?? '') : value ?? ''),\n placeholder: options.placeholder,\n validator: validator,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!NumberCell} \n */\nfunction generateNumberCell(value, options, common) {\n return {\n type: 'number',\n value: value,\n format: new Intl.NumberFormat(options.locale, options.format),\n nanToZero: options.nanToZero,\n hideZero: options.hideZero,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} common \n * @param {function(string):boolean} validator \n * @return {!EmailCell} \n */\nfunction generateEmailCell(value, common, validator) {\n return {\n type: 'email',\n text: value ?? '',\n validator: validator ?? validateEmail,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @return {!DateCell|!TimeCell} \n */\nfunction generateDateTimeCell(value, options, common, column) {\n const type = column.Type.toLowerCase();\n return {\n type: type,\n [type]: value instanceof Date ? value : new Date(value),\n format: new Intl.DateTimeFormat(options.locale, options.format ?? { [`${type}Style`]: 'short' }),\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!CheckboxCell} \n */\nfunction generateCheckboxCell(value, options, common) {\n return {\n type: 'checkbox',\n checked: Boolean(value ?? false),\n checkedText: options.checkedText,\n uncheckedText: options.uncheckedText,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @param {!BrickContext} $ \n * @param {number} rowId\n * @return {!DropdownCell} \n */\nfunction generateDropdownCell(value, options, common, column, $, rowId) {\n const id = `${rowId}.${column.columnId}`;\n const isOpen = id === $.get('_rgDropdownIsOpen');\n const inputValue = isOpen ? $.get('_rgDropdownInputValue') : '';\n return {\n type: 'dropdown',\n selectedValue: value,\n values: options.values ?? [],\n isDisabled: options.isDisabled,\n isOpen: isOpen,\n inputValue: inputValue,\n ...common\n };\n}\n\n/**\n * Handle the dropdowns internal states\n * @param {!BrickContext} $ \n * @param {!CellChange} change \n */\nexport function handleDropdownCellChange($, change) {\n const id = `${change.rowId}.${change.columnId}`;\n if(change.newCell.isOpen && !change.newCell.isDisabled) {\n $.set('_rgDropdownIsOpen', id);\n $.set('_rgDropdownInputValue', change.newCell.inputValue);\n }\n else {\n $.set('_rgDropdownIsOpen', '');\n $.set('_rgDropdownInputValue', '');\n }\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!HeaderCell} \n */\nfunction generateHeaderCell(value, options, common) {\n return {\n type: 'header',\n text: value ?? options.text ?? '',\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!RGWrapper} wrapper\n * @param {!BrickContext} $ \n * @return {!ChevronCell} \n */\nfunction generateChevronCell(value, options, common, wrapper, $) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n if(!$.has(id)) {\n $.set(id, { isExpanded: options.isExpanded ?? false });\n }\n const state = $.get(id);\n return {\n type: 'chevron',\n text: value ?? options.text ?? '',\n indent: options.indent,\n hasChildren: wrapper.rgChildren.length > 0,\n ...state,\n ...common\n };\n}\n\n/**\n * Handle the chevrons internal states\n * @param {!BrickContext} $ \n * @param {!CellChange} change \n * @param {!RGWrapper} wrapper \n */\nexport function handleChevronCellChange($, change, wrapper) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n $.set(id, { isExpanded: change.newCell.isExpanded });\n}\n\n/**\n * @param {!BrickContext} $ \n * @param {!RGWrapper} wrapper \n * @return {boolean}\n */\nexport function isChevronCellExpanded($, wrapper) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n return $.get(id)?.isExpanded ?? false;\n}\n\n/**\n * @param {!BrickContext} $\n * @return {!Object}\n */\nexport function getCellStyle($) {\n const borderStyle = { \n color: $.get('Border Color'),\n width: $.get('Border Width') \n };\n return {\n background: $.get('Default Color'),\n border: {\n left: borderStyle,\n top: borderStyle,\n right: borderStyle,\n bottom: borderStyle\n }\n };\n}\n\n/**\n * @return {!TextCell}\n */\nfunction errorCell() {\n return {\n type: 'text',\n text: '!ERROR',\n nonEditable: true,\n style: {\n color: 'red'\n }\n };\n}\n","// Olympe\nimport { ErrorFlow } from 'olympe';\n\n// Internal\nimport { warn } from './helpers';\nimport { getFlattenWrappers } from './wrappers';\nimport { handleDropdownCellChange, handleChevronCellChange, getCellValue } from './cells';\nimport { getColumns } from './columns';\nimport { triggerReload } from './triggers';\n\n/**\n * @typedef {Object} RGChange\n * @property {(!Object|!CloudObject)} object\n * @property {(string|!PropertyModel)} property\n * @property {*} oldValue\n * @property {*} newValue\n * @property {!CellChange} metadata\n */\nexport const RGChange = {};\n\n/**\n * Process the changes event from the reactgrid, and forward it to a lambda\n * @param {!BrickContext} $ \n * @param {!Array} changes \n */\nexport function handleOnCellsChanged($, changes) {\n // Only process changes when a lambda is defined\n const processor = $.get('Process Changes');\n if(!processor) {\n warn('no change is processed, the `Process Changes` lambda is no defined');\n return;\n }\n\n // Adapt the changes to olympe\n let internalStateChanged = false;\n const flattenWrappers = getFlattenWrappers($);\n const _changes = changes\n // Transform the changes to work well with Olympe\n .map(change => {\n // Get the required data\n const wrapper = flattenWrappers[change.rowId].wrapper;\n const columns = getColumns($, wrapper._rgLevel);\n const column = columns.find(c => c.Rank === change.columnId);\n \n // Guard\n if(column === undefined) {\n warn(`no column found for level ${wrapper._rgLevel} and rank ${change.columnId}`);\n return null;\n }\n\n // Handle dropdowns states\n if(change.type === 'dropdown') {\n handleDropdownCellChange($, change);\n internalStateChanged = true;\n }\n\n // Handle chevrons states\n else if(change.type === 'chevron') {\n handleChevronCellChange($, change, wrapper);\n internalStateChanged = true;\n }\n\n // Create the RGChange object\n return {\n object: wrapper.__rgGetObject(column['Property Path']),\n property: wrapper.__rgGetProperty(column['Property Path']),\n oldValue: getCellValue(change.previousCell),\n newValue: getCellValue(change.newCell),\n metadata: change\n };\n })\n // Filter out null change\n .filter(change => change !== null)\n // Filter out the dropdown change that are only about the internal state\n .filter(change => change.metadata.type !== 'dropdown' || change.newValue !== change.oldValue)\n // Filter out the chevron change that are only about the internal state\n .filter(change => change.metadata.type !== 'chevron' || change.newValue !== change.oldValue)\n // Filter out changes with no value, only if there is change with value -> hack to fix paste from excel until a better solution\n .filter((change, _index, all) => change.newValue !== \"\" || all.every(c => c.newValue === \"\"));\n\n // Guard\n if(_changes.length === 0) {\n if(internalStateChanged) {\n triggerReload($);\n }\n return;\n }\n\n // Call the lambda\n const [iFlow, iChanges] = processor.getInputs();\n const [oFlow, oErrorFlow] = processor.getOutputs();\n const processor$ = $.runner(processor);\n processor$.set(iChanges, _changes);\n processor$.trigger(iFlow);\n\n // Wait for the end of it\n Promise.race([\n processor$.waitFor(oFlow), \n processor$.waitFor(oErrorFlow)\n ])\n .then(value => {\n // In case of error, throw it again\n if(value instanceof ErrorFlow) {\n $.throw(value);\n }\n\n // Success\n else {\n triggerReload($);\n }\n })\n\n // Free the lambda\n .finally(() => processor$.destroy());\n}\n","import { CloudObject } from 'olympe';\n\n/**\n * Find an object property based on its name\n * @param {!CloudObject} object\n * @param {string} path\n * @return {!PropertyModel}\n */\nexport function findObjectProperty(object, path) {\n const mapping = getModelPropertiesMapping(object);\n return mapping.get(path);\n}\n\n/**\n * Get all properties name of an object\n * @param {!CloudObject} object\n * @return {!Array<string>}\n */\nexport function getModelPropertiesName(object) {\n const mapping = getModelPropertiesMapping(object);\n return Array.from(mapping.keys());\n}\n\n/**\n * Get an object model properties mapping\n * @param {!CloudObject} object\n * @return {!Map<string, PropertyModel>}\n */\nfunction getModelPropertiesMapping(object) {\n const model = object.getModel();\n if(!modelProperties.has(model.getTag())) {\n const mapping = new Map();\n model.query()\n .follow(CloudObject.propertyRel)\n .executeFromCache()\n .forEach(property => mapping.set(property.name(), property));\n modelProperties.set(model.getTag(), mapping);\n }\n return modelProperties.get(model.getTag());\n}\n\n/**\n * Singleton map for model properties mapping (name <-> instance)\n * @type {!Map<string, !Map<string, PropertyModel>>}\n */\nconst modelProperties = new Map();\n\n","// Olympe\nimport { CloudObject } from 'olympe';\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { combineLatest, map, distinctUntilChanged } from 'rxjs';\n\n// Internal\nimport { defaultWrap } from './wrappers';\nimport { reorderObject, warn } from './helpers';\n\n/**\n * Init the columns\n * @param {!BrickContext} $ \n * @param {!Observable} _wrappers \n * @return {!Observable}\n */\nexport function initFilteredColumns($, _wrappers) {\n // Internal states\n $.set('_rgColumnWidth', {}); // Column width overrides\n $.set('_rgColumnOrder', {}); // Column order (rank) overrides\n\n // Listen to the config and the _wrappers first object properties\n return combineLatest([\n $.observe('Config', false),\n _wrappers\n .pipe(map(wrappers => (wrappers[0] ?? defaultWrap()).__rgProperties()))\n .pipe(distinctUntilChanged()),\n $.observe('Enable Column Reordering', false),\n $.observe('_rgColumnWidth'),\n $.observe('_rgColumnOrder'),\n $.observe('Default Width')\n ])\n\n // Build the columns\n .pipe(map(([config, properties, ...others]) => {\n // Config is set by the user\n if (config) {\n return [config, ...others];\n }\n\n // Config is auto-generated from the data\n if (properties.length > 0) {\n return [\n properties.map((path, index) => ({ 'Property Path': path, Type: 'AUTO', Rank: index })),\n ...others\n ];\n }\n\n // Empty config\n return [[], ...others];\n }))\n\n // Transform to an array of objects\n .pipe(map(([config, reorderableColumns, columnWidth, columnOrder, defaultWidth]) => {\n return config\n .map(column => column instanceof CloudObject ? column.toObject(true, true) : column)\n .sort((a, b) => getColumnRank(a, columnOrder) - getColumnRank(b, columnOrder))\n .map(column => generateColumn(column, reorderableColumns, columnWidth, defaultWidth));\n }))\n\n // Cache the filtered columns (per level) for quick access\n .pipe(map(columns => {\n const filteredColumns = filterLevelledColumns(columns);\n $.set('_rgFilteredColumns', filteredColumns);\n return filteredColumns;\n }));\n}\n\n/**\n * @param {!BrickContext} $\n * @return {!*}\n */\nexport function useColumns($) {\n const filteredColumns = useProperty($, '_rgFilteredColumns');\n return filteredColumns?.get(0) ?? [];\n}\n\n/**\n * @param {!BrickContext} $\n * @param {number} level \n * @return {!Array}\n */\nexport function getColumns($, level) {\n const filteredColumns = $.get('_rgFilteredColumns');\n return filteredColumns?.get(level ?? 0) ?? [];\n}\n\n/**\n * Handle the resizing of columns\n * @param {!BrickContext} $ \n * @param {string} columnId \n * @param {number} width \n */\nexport function handleOnColumnResized($, columnId, width) {\n const currentCols = { ...$.get('_rgColumnWidth') };\n currentCols[columnId] = width;\n $.set('_rgColumnWidth', currentCols);\n}\n\n/**\n * @param {!Array} columns\n * @return {!Map<number, !Array>}\n */\nfunction filterLevelledColumns(columns) {\n // Group the columns by rank and save all levels\n const levels = new Set();\n const perRank = columns.reduce((acc, cur) => {\n const rank = cur.Rank ?? 0;\n if(!acc.has(rank)) {\n acc.set(rank, []);\n }\n acc.get(rank).push(cur);\n levels.add(cur.Level ?? 0);\n return acc;\n }, new Map());\n const allRanks = Array.from(perRank.keys());\n\n // Get the columns for each level\n const filterLevel = level => {\n return allRanks.map(rank => {\n const rankColumns = perRank.get(rank);\n const atLevel = rankColumns.find(column => (column.Level ?? 0) === level);\n const generic = rankColumns.find(column => (column.Level ?? 0) === -1);\n return atLevel ?? generic ?? rankColumns[0];\n });\n };\n\n // Return all levels\n return Array.from(levels.values()).reduce((acc, cur) => acc.set(cur, filterLevel(cur)), new Map());\n}\n\n/**\n * @param {!Object} column\n * @param {boolean} reorderableColumns\n * @param {!Object} columnWidth\n * @param {number} defaultWidth\n * @return {!Object}\n */\nfunction generateColumn(column, reorderableColumns, columnWidth, defaultWidth) {\n if(typeof column.Rank !== 'number') {\n warn(`column rank is missing, using 0 as fallback (column: ${column.Header ?? column['Property Path']})`);\n }\n const rank = column.Rank ?? 0;\n return {\n columnId: rank,\n reorderable: reorderableColumns,\n width: columnWidth?.[rank] ?? column.Width ?? defaultWidth ?? 150,\n resizable: column.Resizable,\n Level: column.Level ?? 0,\n ...column\n };\n}\n\n/**\n * @param {!BrickContext} $\n * @param {number} targetColumnId\n * @param {!Array} columnIds\n */\nexport function handleOnColumnsReordered($, targetColumnId, columnIds) {\n const columns = getColumns($, 0);\n const ranks = columns.map(column => column.Rank);\n const targetIndex = ranks.indexOf(targetColumnId);\n const movingIndexes = columnIds.map(id => ranks.indexOf(id));\n const newRanks = reorderObject(ranks, movingIndexes, targetIndex);\n const newOrder = newRanks.reduce((acc, cur, index) => ({ [cur]: index, ...acc }), {});\n $.set('_rgColumnOrder', newOrder);\n}\n\n/**\n * @param {!Object} column\n * @param {!Object} overrides\n * @return {number}\n */\nfunction getColumnRank(column, overrides) {\n return overrides[column.Rank] ?? column.Rank;\n}\n","// Olympe\nimport { QueryResult } from 'olympe';\n\n// Rxjs\nimport { tap, combineLatest, map } from 'rxjs';\n\n// Internal\nimport { warn, fromJson } from './helpers';\n\n/**\n * Init the internal data state, make sure it is an array\n * @param {!BrickContext} $ \n * @param {!Observable} _reload\n * @return {!Observable}\n */\nexport function initData($, _reload) {\n // Listen to the data and for any refresh\n return combineLatest([\n $.observe('Data', false),\n _reload\n ])\n\n // Default values\n .pipe(map(([data]) => data ? data : []))\n\n // Transform to an array\n .pipe(map(data => {\n // The data is already an array\n if (Array.isArray(data)) {\n return data;\n }\n\n // QueryResult case\n if (data instanceof QueryResult) {\n return data.toArray();\n }\n\n // JSON case\n if (typeof data === 'string') {\n const [json, error] = fromJson(data);\n if (!error && Array.isArray(json)) {\n return json;\n }\n }\n\n // Type is not supported\n warn('the `Data` property is not convertible to an array');\n return [];\n }))\n \n // Set the transformed data into _Data\n .pipe(tap(data => $.set('_rgData', data)));\n}\n\n","// Olympe\nimport { getLogger } from '@olympeio/core';\n\n/**\n * Parse a json string without throwing an exception\n * @param {string|!Object} json \n * @return {!Array}\n */\nexport function fromJson(json) {\n try {\n return typeof json === 'string'\n ? [JSON.parse(json), null]\n : [json ?? {}, null];\n }\n catch(err) {\n return [{}, err];\n }\n}\n\n/**\n * Warn message with a default format\n * @param {string} message \n */\nexport function warn(message) {\n getLogger('ReactGrid').warn(`ReactGrid: ${message}`);\n}\n\n/**\n * Error message with a default format\n * @param {string} message \n */\nexport function error(message) {\n getLogger('ReactGrid').error(`ReactGrid: ${message}`);\n}\n\n/**\n * Make a jsonpath-plus path readable\n * @param {string} path\n * @return {string} \n */\nexport function trimPath(path) {\n if(path.startsWith('$') || path.startsWith('.')) {\n return trimPath(path.substring(1));\n }\n if(path.startsWith('[')) {\n return trimPath(path.substring(path.indexOf(']') + 1));\n }\n return path;\n}\n\n/**\n * Test for email format\n * @param {string} text\n * @return {boolean}\n */\nexport function validateEmail(text) {\n return emailRegex.test(text);\n}\n\n// Email regex (https://emailregex.com/)\nconst emailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n/**\n * Reorders elements in an object by moving specific elements to a new position.\n *\n * @param {Array} values - The original array to reorder.\n * @param {number[]} ids - An array of indices representing the elements to move.\n * @param {number} to - The target index where the selected elements should be moved.\n * @return {Object} - A new object with the specified elements reordered.\n */\nexport function reorderObject(values, ids, to) {\n const reorderedValues = [...values];\n\n // Get elements to move based on the ids\n const elementsToMove = ids.map(index => reorderedValues[index]);\n ids.sort((a, b) => b - a).forEach(index => {\n reorderedValues.splice(index, 1);\n });\n\n // Adjust the target id based on moving forward or backward\n const adjustedTargetId = to >= Math.min(...ids) ? to - elementsToMove.length + 1 : to;\n\n // Insert the elements in target id\n if (elementsToMove.length > 0) {\n reorderedValues.splice(adjustedTargetId, 0, ...elementsToMove);\n }\n\n return reorderedValues;\n}\n\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { tap, combineLatest, map, distinctUntilChanged } from 'rxjs';\n\n// Internal\nimport { generateCell, getCellStyle } from './cells';\nimport { trimPath } from './helpers';\nimport { getColumns } from './columns';\nimport { getFlattenWrappers } from './wrappers';\n\n/**\n * Init the rows\n * @param {!BrickContext} $ \n * @param {!Observable} _wrappers \n * @param {!Observable} _filteredColumns \n */\nexport function initRows($, _wrappers, _filteredColumns) {\n // Listen to the _data and the _columns\n combineLatest([\n _wrappers,\n _filteredColumns\n .pipe(distinctUntilChanged(undefined, filteredColumns => {\n // Avoid updating the rows for some changes on the column config: width, resizable, etc.\n return Array.from(filteredColumns.values())\n .flat()\n .map(c => `${c.Header}${c['Property Path']}${c.Type}${c.Options}${c.Rank}${c.Editable}${c.Level}`)\n .join('');\n })),\n $.observe('Row Height', false),\n $.observe('Cell Edition', false),\n $.observe('Disable Header Row', false),\n $.observe('Default Color', false),\n $.observe('Border Color', false),\n $.observe('Border Width', false)\n ])\n\n // Use the reactgrid format for rows\n .pipe(map(([_wrappers, _filteredColumns, rowHeight, cellEdition, removeHeaderRow]) => {\n // Optional header row\n const headerRow = removeHeaderRow ? [] : [{\n rowId: '_header',\n height: rowHeight,\n cells: getColumns($, 0).map(column => {\n const text = column.Header ?? trimPath(column['Property Path'] ?? '');\n const finalText = column.Level === 0 ? text : '';\n return { type: 'header', text: finalText, style: getCellStyle($) };\n })\n }];\n\n // Generate all the rows\n const rows = getFlattenWrappers($).map(({ wrapper, level }, index) => {\n const rowColumns = getColumns($, level);\n return generateRow(wrapper, rowColumns, index, $, rowHeight, cellEdition);\n });\n\n // Final rows\n return [headerRow, rows].flat();\n }))\n\n // Set the final rows\n .pipe(tap(rows => $.set('_rgRows', rows)))\n\n // Run \n .subscribe();\n}\n\n/**\n * @param {!BrickContext}\n * @return {!*}\n */\nexport function useRows($) {\n return useProperty($, '_rgRows') ?? [];\n}\n\n/**\n * @param {!RGWrapper} wrapper \n * @param {!Array} columns \n * @param {number} index \n * @param {!BrickContext} $ \n * @param {number} rowHeight \n * @param {boolean} cellEdition \n * @return {!Object}\n */\nfunction generateRow(wrapper, columns, index, $, rowHeight, cellEdition) {\n return { \n rowId: index,\n height: rowHeight,\n cells: columns.map(column => generateCell($, wrapper, index, column, cellEdition))\n };\n}\n","// React\nimport { useEffect } from 'react';\nimport { tap, interval } from 'rxjs';\n\n// Internal\nimport { triggerRedraw } from './triggers';\n\n/**\n * @param {!BrickContext} $\n */\nexport function initScroll($) {\n // Auto-redraw on scroll (fix fast scrolling issue)\n $.set('_rgLastScroll', 0);\n $.set('_rgLastScrollRedraw', 0);\n interval(1000)\n .pipe(tap(() => {\n if($.get('_rgLastScroll') !== $.get('_rgLastScrollRedraw')) {\n $.set('_rgLastScrollRedraw', $.get('_rgLastScroll'));\n triggerRedraw($);\n }\n }))\n .subscribe();\n}\n\n/**\n * @param {!BrickContext} $\n * @param {!*} ref\n */\nexport function useRedrawAfterScroll($, ref) {\n const registerScroll = () => $.set('_rgLastScroll', Date.now());\n useEffect(() => {\n if (ref.current) {\n ref.current.parentElement.style.overflow = 'visible';\n ref.current.addEventListener('scroll', registerScroll);\n }\n return () => {\n if (ref.current) {\n ref.current.removeEventListener('scroll', registerScroll);\n }\n };\n }, [ref]);\n}\n\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n/**\n * @param {!BrickContext} $\n * @return {!Observable}\n */\nexport function initTriggers($) {\n return $.observe('Reload', false);\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function useRedraw($) {\n useProperty($, 'Redraw');\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function triggerRedraw($) {\n $.trigger('Redraw');\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function triggerReload($) {\n $.trigger('Reload');\n}\n\n","// Olympe\nimport { CloudObject } from 'olympe';\n\n// Rxjs\nimport { tap, map } from 'rxjs';\n\n// Json\nimport { JSONPath } from 'jsonpath-plus';\n\n// Internal\nimport { warn, trimPath } from './helpers';\nimport { getModelPropertiesName, findObjectProperty } from './cloudobjects';\nimport { isChevronCellExpanded } from './cells';\n\n/**\n * @typedef RGWrapper\n * @property {!*} rgObject - The wrapped object\n * @property {!Array} rgChildren - Potential children of the object\n * @property {function():string} rgGetKey - Get a unique key\n * @property {string} _rgType - The type of the wrapped object\n * @property {number} _rgLevel - The level in the hierarchy\n * @property {function():!Array<string>} __rgProperties - Get all the properties name\n * @property {function(string):!*} __rgGetProperty - Get a property by its path\n * @property {function(string):!*} __rgGetValue - Get a value for a path\n * @property {function(string):!*} __rgGetObject - Get the object for a path\n */\nexport const RGWrapper = {};\n\n/**\n * Init the internal data state, make sure it is an array\n * @param {!BrickContext} $ \n * @param {!Observable} _data \n * @return {!Observable}\n */\nexport function initWrappers($, _data) {\n // Observe the data\n return _data\n\n // Wrap all objects\n .pipe(map(data => data.map(d => rgWrap(d))))\n\n // Set the transformed data into _Data\n .pipe(tap(wrappers => $.set('_rgWrappers', wrappers)));\n}\n\n/**\n * @param {!*} object \n * @param {number=} level \n * @return {!RGWrapper} \n */\nexport function rgWrap(object, level) {\n // Already wrapped -> rewrap missing properties\n if(object.hasOwnProperty('rgObject')) {\n const missingProps = ['rgChildren', 'rgGetKey', '_rgType', '_rgLevel',\n '__rgProperties', '__rgGetProperty', '__rgGetValue',\n '__rgGetObject'].filter(prop => !object.hasOwnProperty(prop));\n if(missingProps.length > 0) {\n const wrapped = rgWrap(object.rgObject, level ?? 0);\n return missingProps.reduce((acc, cur) => {\n acc[cur] = wrapped[cur];\n return acc;\n }, object);\n }\n return object;\n }\n\n // Tuple case\n if(Array.isArray(object)) {\n return wrapTuple(object, level ?? 0);\n }\n\n // CloudObject case\n if(object instanceof CloudObject) {\n return wrapCloudObject(object, level ?? 0);\n }\n\n // Object case\n if(typeof object === 'object') {\n return wrapObject(object, level ?? 0);\n }\n\n // Wrong type\n warn('some data are not of the following type: Object, CloudObject, Array');\n return defaultWrap(level ?? 0);\n}\n\n/**\n * @param {!Object} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapObject(object, level) {\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => Object.values(object).join('.'),\n _rgType: 'object',\n _rgLevel: level,\n __rgProperties: () => Object.keys(object),\n __rgGetProperty: path => trimPath(path),\n __rgGetValue: path => JSONPath({ path, json: object, wrap: false }),\n __rgGetObject: () => object\n };\n}\n\n/**\n * @param {!CloudObject} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapCloudObject(object, level) {\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => object.getTag(),\n _rgType: 'cloudobject',\n _rgLevel: level,\n __rgProperties: () => getModelPropertiesName(object),\n __rgGetProperty: path => findObjectProperty(object, path),\n __rgGetValue: path => object.get(findObjectProperty(object, path)),\n __rgGetObject: () => object\n };\n}\n\n/**\n * @param {!Array} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapTuple(object, level) {\n const wrapped = object.map(o => rgWrap(o, level + 1));\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => `[${wrapped.map(w => w.rgGetKey()).join('.')}]`,\n _rgType: 'tuple',\n _rgLevel: level,\n __rgProperties: () => wrapped.map((w, i) => w.__rgProperties().map(p => `$[${i}].${p}`)).flat(),\n __rgGetProperty: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetProperty(subPath);\n },\n __rgGetValue: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetValue(subPath);\n },\n __rgGetObject: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetObject(subPath);\n }\n };\n}\n\n/**\n * @param {number=} level \n * @return {!RGWrapper} \n */\nexport function defaultWrap(level) {\n return wrapObject({}, level ?? 0);\n}\n\n/**\n * @param {string} path \n * @returns {![number, string]} \n */\nfunction splitTuplePath(path) {\n const endBracket = path.indexOf(']');\n const index = parseInt(path.substring(path.indexOf('[') + 1, endBracket));\n const subPath = trimPath(path.substring(endBracket + 1));\n return [index, subPath];\n}\n\n/**\n * @param {!BrickContext} $ \n * @param {!Array} wrappers \n * @param {number} level \n * @return {!Array}\n */\nfunction flatten($, wrappers, level) {\n return wrappers.flatMap(wrapper => {\n const isExpanded = isChevronCellExpanded($, wrapper);\n const children = isExpanded ? flatten($, wrapper.rgChildren, level + 1) : [];\n return [{ wrapper, level }, ...children]; \n });\n}\n\n/**\n * @param {!BrickContext} $ \n * @return {!Array}\n */\nexport function getFlattenWrappers($) {\n return flatten($, $.get('_rgWrappers'), 0);\n}\n","module.exports = require(\"@olympeio/core\");","module.exports = require(\"jsonpath-plus\");","module.exports = require(\"react\");","module.exports = require(\"rxjs\");","module.exports = __WEBPACK_EXTERNAL_MODULE_olympe__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","\n// Import Olympe runtime or DRAW\nimport 'olympe';\n\n// Import project bricks (we use webpack-import-glob-loader to import all bricks)\nimport './common/helpers.js'; import './common/internal/box.js'; import './common/internal/cells.js'; import './common/internal/changes.js'; import './common/internal/cloudobjects.js'; import './common/internal/columns.js'; import './common/internal/data.js'; import './common/internal/helpers.js'; import './common/internal/rows.js'; import './common/internal/scroll.js'; import './common/internal/triggers.js'; import './common/internal/wrappers.js'; import './common/RGCreateColumnConfig.js'; import './common/RGGetChangeMetadata.js'; import './common/RGGetChangeProperties.js'; import './common/RGGroupTuplesByIndexes.js'; import './common/RGProcessChangesForCloudObjects.js'; import './common/RGProcessChangesForJSONString.js'; import './common/RGProcessChangesForObjects.js'; import './common/RGWrapObject.js';\n;\n"],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"main-node.js","mappings":"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A;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,0BAA0B;AACrC,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,0BAA0B;AACrC,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,gCAAgC,mDAAa;AAC7C;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,IAAI,KAAK,kBAAkB;AACvG;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA,kBAAkB,MAAM,GAAG,gBAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB;AACO;AACP,kBAAkB,aAAa,GAAG,gBAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,YAAY;AACvB,WAAW,eAAe;AAC1B,YAAY;AACZ;AACA;AACA,6BAA6B,mBAAmB;AAChD;AACA,oBAAoB,yCAAyC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB,WAAW,YAAY;AACvB;AACO;AACP,6BAA6B,mBAAmB;AAChD,gBAAgB,uCAAuC;AACvD;;AAEA;AACA,WAAW,eAAe;AAC1B,WAAW,YAAY;AACvB,YAAY;AACZ;AACO;AACP,6BAA6B,mBAAmB;AAChD;AACA;;AAEA;AACA,WAAW,eAAe;AAC1B,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACzSA;AACmC;;AAEnC;AACiC;AACe;AAC0C;AACnD;AACI;;AAE3C;AACA,aAAa,QAAQ;AACrB,cAAc,wBAAwB;AACtC,cAAc,yBAAyB;AACvC,cAAc,GAAG;AACjB,cAAc,GAAG;AACjB,cAAc,aAAa;AAC3B;AACO;;AAEP;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB;AACO;AACP;AACA;AACA;AACA,QAAQ,8CAAI;AACZ;AACA;;AAEA;AACA;AACA,4BAA4B,6DAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA,4BAA4B,oDAAU;AACtC;AACA;AACA;AACA;AACA,gBAAgB,8CAAI,8BAA8B,kBAAkB,WAAW,gBAAgB;AAC/F;AACA;;AAEA;AACA;AACA,gBAAgB,gEAAwB;AACxC;AACA;;AAEA;AACA;AACA,gBAAgB,+DAAuB;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,oDAAY;AACtC,0BAA0B,oDAAY;AACtC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,wDAAa;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6CAAS;AACzC;AACA;;AAEA;AACA;AACA,gBAAgB,wDAAa;AAC7B;AACA,SAAS;;AAET;AACA;AACA;;;;;;;;;;;;;;;;;;AClHqC;;AAErC;AACA;AACA,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,YAAY;AACZ;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+CAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AACqC;AACQ;;AAE7C;AACgE;;AAEhE;AACyC;AACO;;AAEhD;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB,YAAY;AACZ;AACO;AACP;AACA,8BAA8B,GAAG;AACjC,8BAA8B,GAAG;;AAEjC;AACA,WAAW,mDAAa;AACxB;AACA;AACA,kBAAkB,yCAAG,6BAA6B,sDAAW;AAC7D,kBAAkB,0DAAoB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,yCAAG;AACjB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,uDAAuD,kDAAkD;AACzG;AACA;AACA;;AAEA;AACA;AACA,SAAS;;AAET;AACA,cAAc,yCAAG;AACjB;AACA,iDAAiD,+CAAW;AAC5D;AACA;AACA,SAAS;;AAET;AACA,cAAc,yCAAG;AACjB;AACA;AACA;AACA,SAAS;AACT;;AAEA;AACA,WAAW,eAAe;AAC1B,YAAY;AACZ;AACO;AACP,4BAA4B,2DAAW;AACvC;AACA;;AAEA;AACA,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;;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","sources":["webpack://@olympeio-extensions/reactgrid/webpack/universalModuleDefinition","webpack://@olympeio-extensions/reactgrid/./src/common/RGCreateColumnConfig.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGetChangeMetadata.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGetChangeProperties.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGroupTuplesByIndexes.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForCloudObjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForJSONString.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForObjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGWrapObject.js","webpack://@olympeio-extensions/reactgrid/./src/common/helpers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/box.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/cells.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/changes.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/cloudobjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/columns.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/data.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/helpers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/rows.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/scroll.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/triggers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/wrappers.js","webpack://@olympeio-extensions/reactgrid/external commonjs \"@olympeio/core\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"jsonpath-plus\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"react\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"rxjs\"","webpack://@olympeio-extensions/reactgrid/external umd \"olympe\"","webpack://@olympeio-extensions/reactgrid/webpack/bootstrap","webpack://@olympeio-extensions/reactgrid/webpack/runtime/compat get default export","webpack://@olympeio-extensions/reactgrid/webpack/runtime/define property getters","webpack://@olympeio-extensions/reactgrid/webpack/runtime/hasOwnProperty shorthand","webpack://@olympeio-extensions/reactgrid/webpack/runtime/make namespace object","webpack://@olympeio-extensions/reactgrid/./src/main-node.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"olympe\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"olympe\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@olympeio-extensions/reactgrid\"] = factory(require(\"olympe\"));\n\telse\n\t\troot[\"@olympeio-extensions/reactgrid\"] = factory(root[\"olympe\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE_olympe__) => {\nreturn ","import { Brick, registerBrick } from 'olympe';\nimport { fromJson } from './helpers';\n\nexport default class RGCreateColumnConfig extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {number} rank\n * @param {string} propertyPath\n * @param {string} header\n * @param {number} width\n * @param {string} type\n * @param {string|!Object} options\n * @param {boolean} editable\n * @param {boolean} resizable\n * @param {number} level\n * @param {function(!Object)} setObject\n */\n update(_$, [rank, propertyPath, header, width, type, options, editable, resizable, level], [setObject]) {\n setObject({\n Rank: rank,\n 'Property Path': propertyPath,\n Header: header,\n Width: width,\n Type: type,\n Options: fromJson(options)[0],\n Editable: editable,\n Resizable: resizable,\n Level: level\n });\n }\n}\n\nregisterBrick('01921d9038d9eb72f609', RGCreateColumnConfig);\n","import { Brick, registerBrick } from 'olympe';\n\nexport default class RGGetChangeMetadata extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!RGChange} change\n * @param {function(!Object)} setNewCell\n * @param {function(!Object)} setPreviousCell\n * @param {function(string|number)} setRowId\n * @param {function(string|number)} setColumnId\n * @param {function(string)} setType\n */\n update(_$, [change], [setNewCell, setPreviousCell, setRowId, setColumnId, setType]) {\n setNewCell(change.metadata.newCell);\n setPreviousCell(change.metadata.previousCell);\n setRowId(change.metadata.rowId);\n setColumnId(change.metadata.columnId);\n setType(change.metadata.type);\n }\n}\n\nregisterBrick('01920a4d4d8390252c91', RGGetChangeMetadata);\n","import { Brick, registerBrick } from 'olympe';\n\nexport default class RGGetChangeProperties extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!RGChange} change\n * @param {function(!Object|!CloudObject)} setObject\n * @param {function(!Object|!CloudObject)} setProperty\n * @param {function(!*)} setNewValue\n * @param {function(!*)} setOldValue\n */\n update(_$, [change], [setObject, setProperty, setNewValue, setOldValue]) {\n setObject(change.object);\n setProperty(change.property);\n setNewValue(change.newValue);\n setOldValue(change.oldValue);\n }\n}\n\nregisterBrick('0192055d7857bd08279c', RGGetChangeProperties);\n","import { Brick, registerBrick } from 'olympe';\nimport { rgWrap, RGWrapper } from './helpers';\n\nexport default class RGGroupTuplesByIndexes extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array} data\n * @param {string} indexes\n * @param {function(!Array)} setGroupedData\n */\n update(_$, [data, indexes], [setGroupedData]) {\n // Get the indexes and make the grouping recursively\n const _indexes = indexes.split(',').map(index => parseInt(index));\n setGroupedData(groupBy(data.map(d => rgWrap(d)), _indexes, 0));\n }\n}\n\nregisterBrick('0192288806aa3cc82b95', RGGroupTuplesByIndexes);\n\n/**\n * Group data by indexes, for the given level\n * @param {!Array} wrappers\n * @param {!Array<number>} indexes\n * @param {number} level\n * @return {!Array}\n */\nfunction groupBy(wrappers, indexes, level) {\n // End of recursion\n if(level >= indexes.length || !Array.isArray(wrappers)) {\n return wrappers;\n }\n\n // Get the current working index\n const index = indexes[level] - level;\n\n // Group the data in a Map\n const groupedWrappers = wrappers.reduce((parents, wrapper) => {\n // Split the tuple into parts\n const [wrapped, child] = splitTuple(wrapper, index, level);\n const key = wrapped.rgGetKey();\n\n // If this key is not in a group yet\n if(!parents.has(key)) {\n // Create the new group\n parents.set(key, wrapped);\n }\n\n // If there is a child, add it to the group\n // (group the child itself also)\n if(child) {\n const parent = parents.get(key);\n parent.rgChildren.push(child);\n }\n\n // Done\n return parents;\n }, new Map());\n\n // Apply the grouping on the children\n return Array.from(groupedWrappers.values()).map(({ rgChildren, ...others }) => ({\n rgChildren: groupBy(rgChildren.map(c => rgWrap(c, level + 1)), indexes, level + 1),\n ...others\n }));\n}\n\n/**\n * @param {!RGWrapper} wrapper \n * @param {number} index \n * @param {number} level \n * @return {[!RGWrapper, *]}\n */\nfunction splitTuple(wrapper, index, level) {\n // Real tuple case\n if(wrapper._rgType === 'tuple') {\n // Extract the info\n const tuple = wrapper.rgObject;\n const wrapped = rgWrap(tuple[index], level);\n const before = tuple.slice(0, index);\n const after = tuple.slice(index + 1);\n const child = [...before, ...after];\n \n // Handle all cases\n if(child.length > 1) {\n return [wrapped, child];\n }\n else if(child.length > 0) {\n return [wrapped, child[0]];\n }\n else {\n return [wrapped, null];\n }\n }\n\n // Not a tuple case\n else {\n return [wrapper, null];\n }\n}\n","import { ActionBrick, registerBrick, Transaction, ErrorFlow } from 'olympe';\n\nexport default class RGProcessChangesForCloudObjects extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {boolean} executeAsLarge\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n */\n update(_$, [changes, executeAsLarge], [forwardEvent, setErrorFlow]) {\n const t = new Transaction();\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(change.metadata.newCell.validator?.(change.newValue) ?? true) {\n t.update(change.object, change.property, change.newValue);\n }\n else {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n const promise = executeAsLarge ? t.executeAsLarge() : t.execute();\n promise.then(forwardEvent)\n .catch(error => setErrorFlow(ErrorFlow.create(error.message, 0)));\n }\n}\n\nregisterBrick('01920a8134e1cf0fa551', RGProcessChangesForCloudObjects);\n","import { ActionBrick, registerBrick, ErrorFlow } from 'olympe';\nimport { fromJson } from './helpers';\n\nexport default class RGProcessChangesForJSONString extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {string} json\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n * @param {function(string)} setNewJson\n */\n update(_$, [changes, json], [forwardEvent, setErrorFlow, setNewJson]) {\n const [data, error] = fromJson(json);\n if(!error) {\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(change.metadata.newCell.validator?.(change.newValue) ?? true) {\n data[change.metadata.rowId][change.property] = change.newValue;\n }\n else {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n setNewJson(JSON.stringify(data));\n forwardEvent();\n }\n else {\n setErrorFlow(ErrorFlow.create(`input 'json' is not valid, error: ${error.message}`, 0));\n }\n }\n}\n\nregisterBrick('01921e064dbe25faec55', RGProcessChangesForJSONString);\n","import { ActionBrick, registerBrick, ErrorFlow } from 'olympe';\n\nexport default class RGProcessChangesForObjects extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {boolean} inPlace\n * @param {Array} data\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n */\n update(_$, [changes, inPlace, data], [forwardEvent, setErrorFlow]) {\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(!(change.metadata.newCell.validator?.(change.newValue) ?? true)) {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n if(inPlace) {\n changes.forEach(change => {\n change.object[change.property] = change.newValue;\n });\n }\n else {\n changes.forEach(change => {\n data[change.metadata.rowId][change.property] = change.newValue;\n });\n }\n forwardEvent();\n }\n}\n\nregisterBrick('01921e0d2b383c95bd22', RGProcessChangesForObjects);\n","import { Brick, registerBrick } from 'olympe';\nimport { rgWrap, RGWrapper } from './helpers';\n\nexport default class RGWrapObject extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!*} object\n * @param {number} level\n * @param {function(!RGWrapper)} setWrapped\n */\n update(_$, [object, level], [setWrapped]) {\n setWrapped(rgWrap(object, level));\n }\n}\n\nregisterBrick('019232c3d1873de0d259', RGWrapObject);\n","// Re-export\nexport { rgWrap, RGWrapper } from './internal/wrappers';\nexport { RGChange } from './internal/changes';\nexport { fromJson } from './internal/helpers';\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { tap, combineLatest, throttleTime } from 'rxjs';\n\n/**\n * Init the bounding box\n * @param {!BrickContext} $ \n */\nexport function initBox($) {\n // Listen to the component position and size\n combineLatest([$.observe('Width'), $.observe('Height')])\n\n // Debounce the changes to avoid to many rerendering\n .pipe(throttleTime(100, undefined, { leading: true, trailing: true }))\n\n // Set the final box\n .pipe(tap(([width, height]) => $.set('_rgBox', { width, height })))\n\n // Run \n .subscribe();\n}\n\n/**\n * @param {!BrickContext}\n * @return {!*}\n */\nexport function useBox($) {\n return useProperty($, '_rgBox') ?? {width: $.get('Width'), height: $.get('Height') };\n}\n\n","// Internal\nimport { fromJson, validateEmail, error, warn } from './helpers';\n\n/**\n * @param {!BrickContext} $\n */\nexport function initCells($) {\n $.set('_rgDropdownIsOpen', '');\n $.set('_rgDropdownInputValue', '');\n}\n\n/**\n * Generate a cell for the defined wrapper/column\n * @param {!BrickContext} $\n * @param {!RGWrapper} wrapper\n * @param {number} rowId\n * @param {!Object} column\n * @param {boolean} cellEdition\n * @return {!Object}\n */\nexport function generateCell($, wrapper, rowId, column, cellEdition) {\n try {\n // Get the cell value\n const value = wrapper.__rgGetValue(column['Property Path'] ?? '');\n\n // Get the options\n const [options, optionsError] = fromJson(column.Options);\n if(optionsError) {\n warn(`cannot parse column options, error: ${optionsError.message}`);\n }\n const validator = options.validator ? s => new RegExp(options.validator).test(s) : undefined;\n const common = {\n nonEditable: cellEdition === 'DISABLED' || (cellEdition === 'USE CONFIG' && !column.Editable),\n style: getCellStyle($)\n };\n\n // Generate the cell depending on the type\n switch(column.Type) {\n case 'TEXT': return generateTextCell(value, options, common, column, validator);\n case 'NUMBER': return generateNumberCell(value, options, common);\n case 'EMAIL': return generateEmailCell(value, common, validator);\n case 'DATE': \n case 'TIME': return generateDateTimeCell(value, options, common, column);\n case 'CHECKBOX': return generateCheckboxCell(value, options, common);\n case 'DROPDOWN': return generateDropdownCell(value, options, common, column, $, rowId);\n case 'HEADER': return generateHeaderCell(value, options, common);\n case 'CHEVRON': return generateChevronCell(value, options, common, wrapper, $);\n\n // AUTO case\n default:\n if(value instanceof Date) {\n return generateCell($, wrapper, rowId, { ...column, Type: 'DATE' }, cellEdition);\n }\n switch(typeof value) {\n case 'number': return generateCell($, wrapper, rowId, { ...column, Type: 'NUMBER' }, cellEdition);\n case 'boolean': return generateCell($, wrapper, rowId, { ...column, Type: 'CHECKBOX' }, cellEdition);\n default: return generateCell($, wrapper, rowId, { ...column, Type: 'TEXT', _cast: true }, cellEdition);\n }\n }\n }\n catch(err) {\n error(`cannot generate cell, error: ${err.message}`);\n return errorCell();\n }\n}\n\n/**\n * Get the cell value, depending on its type\n * @param {!Object} cell\n * @return {*}\n */\nexport function getCellValue(cell) {\n switch(cell.type) {\n case 'number': return cell.value;\n case 'date': return cell.date;\n case 'time': return cell.time;\n case 'checkbox': return cell.checked;\n case 'dropdown': return cell.selectedValue;\n default: return cell.text;\n }\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @param {function(string):boolean} validator \n * @return {!TextCell} \n */\nfunction generateTextCell(value, options, common, column, validator) {\n return {\n type: 'text',\n text: (column._cast ? String(value ?? '') : value ?? ''),\n placeholder: options.placeholder,\n validator: validator,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!NumberCell} \n */\nfunction generateNumberCell(value, options, common) {\n return {\n type: 'number',\n value: value,\n format: new Intl.NumberFormat(options.locale, options.format),\n nanToZero: options.nanToZero,\n hideZero: options.hideZero,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} common \n * @param {function(string):boolean} validator \n * @return {!EmailCell} \n */\nfunction generateEmailCell(value, common, validator) {\n return {\n type: 'email',\n text: value ?? '',\n validator: validator ?? validateEmail,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @return {!DateCell|!TimeCell} \n */\nfunction generateDateTimeCell(value, options, common, column) {\n const type = column.Type.toLowerCase();\n return {\n type: type,\n [type]: value instanceof Date ? value : new Date(value),\n format: new Intl.DateTimeFormat(options.locale, options.format ?? { [`${type}Style`]: 'short' }),\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!CheckboxCell} \n */\nfunction generateCheckboxCell(value, options, common) {\n return {\n type: 'checkbox',\n checked: Boolean(value ?? false),\n checkedText: options.checkedText,\n uncheckedText: options.uncheckedText,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @param {!BrickContext} $ \n * @param {number} rowId\n * @return {!DropdownCell} \n */\nfunction generateDropdownCell(value, options, common, column, $, rowId) {\n const id = `${rowId}.${column.columnId}`;\n const isOpen = id === $.get('_rgDropdownIsOpen');\n const inputValue = isOpen ? $.get('_rgDropdownInputValue') : '';\n return {\n type: 'dropdown',\n selectedValue: value,\n values: options.values ?? [],\n isDisabled: options.isDisabled,\n isOpen: isOpen,\n inputValue: inputValue,\n ...common\n };\n}\n\n/**\n * Handle the dropdowns internal states\n * @param {!BrickContext} $ \n * @param {!CellChange} change \n */\nexport function handleDropdownCellChange($, change) {\n const id = `${change.rowId}.${change.columnId}`;\n if(change.newCell.isOpen && !change.newCell.isDisabled) {\n $.set('_rgDropdownIsOpen', id);\n $.set('_rgDropdownInputValue', change.newCell.inputValue);\n }\n else {\n $.set('_rgDropdownIsOpen', '');\n $.set('_rgDropdownInputValue', '');\n }\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!HeaderCell} \n */\nfunction generateHeaderCell(value, options, common) {\n return {\n type: 'header',\n text: value ?? options.text ?? '',\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!RGWrapper} wrapper\n * @param {!BrickContext} $ \n * @return {!ChevronCell} \n */\nfunction generateChevronCell(value, options, common, wrapper, $) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n if(!$.has(id)) {\n $.set(id, { isExpanded: options.isExpanded ?? false });\n }\n const state = $.get(id);\n return {\n type: 'chevron',\n text: value ?? options.text ?? '',\n indent: options.indent,\n hasChildren: wrapper.rgChildren.length > 0,\n ...state,\n ...common\n };\n}\n\n/**\n * Handle the chevrons internal states\n * @param {!BrickContext} $ \n * @param {!CellChange} change \n * @param {!RGWrapper} wrapper \n */\nexport function handleChevronCellChange($, change, wrapper) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n $.set(id, { isExpanded: change.newCell.isExpanded });\n}\n\n/**\n * @param {!BrickContext} $ \n * @param {!RGWrapper} wrapper \n * @return {boolean}\n */\nexport function isChevronCellExpanded($, wrapper) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n return $.get(id)?.isExpanded ?? false;\n}\n\n/**\n * @param {!BrickContext} $\n * @return {!Object}\n */\nexport function getCellStyle($) {\n const borderStyle = { \n color: $.get('Border Color'),\n width: $.get('Border Width') \n };\n return {\n background: $.get('Default Color'),\n border: {\n left: borderStyle,\n top: borderStyle,\n right: borderStyle,\n bottom: borderStyle\n }\n };\n}\n\n/**\n * @return {!TextCell}\n */\nfunction errorCell() {\n return {\n type: 'text',\n text: '!ERROR',\n nonEditable: true,\n style: {\n color: 'red'\n }\n };\n}\n","// Olympe\nimport { ErrorFlow } from 'olympe';\n\n// Internal\nimport { warn } from './helpers';\nimport { getFlattenWrappers } from './wrappers';\nimport { handleDropdownCellChange, handleChevronCellChange, getCellValue } from './cells';\nimport { getColumns } from './columns';\nimport { triggerReload } from './triggers';\n\n/**\n * @typedef {Object} RGChange\n * @property {(!Object|!CloudObject)} object\n * @property {(string|!PropertyModel)} property\n * @property {*} oldValue\n * @property {*} newValue\n * @property {!CellChange} metadata\n */\nexport const RGChange = {};\n\n/**\n * Process the changes event from the reactgrid, and forward it to a lambda\n * @param {!BrickContext} $ \n * @param {!Array} changes \n */\nexport function handleOnCellsChanged($, changes) {\n // Only process changes when a lambda is defined\n const processor = $.get('Process Changes');\n if(!processor) {\n warn('no change is processed, the `Process Changes` lambda is no defined');\n return;\n }\n\n // Adapt the changes to olympe\n let internalStateChanged = false;\n const flattenWrappers = getFlattenWrappers($);\n const _changes = changes\n // Transform the changes to work well with Olympe\n .map(change => {\n // Get the required data\n const wrapper = flattenWrappers[change.rowId].wrapper;\n const columns = getColumns($, wrapper._rgLevel);\n const column = columns.find(c => c.Rank === change.columnId);\n \n // Guard\n if(column === undefined) {\n warn(`no column found for level ${wrapper._rgLevel} and rank ${change.columnId}`);\n return null;\n }\n\n // Handle dropdowns states\n if(change.type === 'dropdown') {\n handleDropdownCellChange($, change);\n internalStateChanged = true;\n }\n\n // Handle chevrons states\n else if(change.type === 'chevron') {\n handleChevronCellChange($, change, wrapper);\n internalStateChanged = true;\n }\n\n // Create the RGChange object\n return {\n object: wrapper.__rgGetObject(column['Property Path']),\n property: wrapper.__rgGetProperty(column['Property Path']),\n oldValue: getCellValue(change.previousCell),\n newValue: getCellValue(change.newCell),\n metadata: change\n };\n })\n // Filter out null change\n .filter(change => change !== null)\n // Filter out the dropdown change that are only about the internal state\n .filter(change => change.metadata.type !== 'dropdown' || change.newValue !== change.oldValue)\n // Filter out the chevron change that are only about the internal state\n .filter(change => change.metadata.type !== 'chevron' || change.newValue !== change.oldValue)\n // Filter out changes with no value, only if there is change with value -> hack to fix paste from excel until a better solution\n .filter((change, _index, all) => change.newValue !== \"\" || all.every(c => c.newValue === \"\"));\n\n // Guard\n if(_changes.length === 0) {\n if(internalStateChanged) {\n triggerReload($);\n }\n return;\n }\n\n // Call the lambda\n const [iFlow, iChanges] = processor.getInputs();\n const [oFlow, oErrorFlow] = processor.getOutputs();\n const processor$ = $.runner(processor);\n processor$.set(iChanges, _changes);\n processor$.trigger(iFlow);\n\n // Wait for the end of it\n Promise.race([\n processor$.waitFor(oFlow), \n processor$.waitFor(oErrorFlow)\n ])\n .then(value => {\n // In case of error, throw it again\n if(value instanceof ErrorFlow) {\n $.throw(value);\n }\n\n // Success\n else {\n triggerReload($);\n }\n })\n\n // Free the lambda\n .finally(() => processor$.destroy());\n}\n","import { CloudObject } from 'olympe';\n\n/**\n * Find an object property based on its name\n * @param {!CloudObject} object\n * @param {string} path\n * @return {!PropertyModel}\n */\nexport function findObjectProperty(object, path) {\n const mapping = getModelPropertiesMapping(object);\n return mapping.get(path);\n}\n\n/**\n * Get all properties name of an object\n * @param {!CloudObject} object\n * @return {!Array<string>}\n */\nexport function getModelPropertiesName(object) {\n const mapping = getModelPropertiesMapping(object);\n return Array.from(mapping.keys());\n}\n\n/**\n * Get an object model properties mapping\n * @param {!CloudObject} object\n * @return {!Map<string, PropertyModel>}\n */\nfunction getModelPropertiesMapping(object) {\n const model = object.getModel();\n if(!modelProperties.has(model.getTag())) {\n const mapping = new Map();\n model.query()\n .follow(CloudObject.propertyRel)\n .executeFromCache()\n .forEach(property => mapping.set(property.name(), property));\n modelProperties.set(model.getTag(), mapping);\n }\n return modelProperties.get(model.getTag());\n}\n\n/**\n * Singleton map for model properties mapping (name <-> instance)\n * @type {!Map<string, !Map<string, PropertyModel>>}\n */\nconst modelProperties = new Map();\n\n","// Olympe\nimport { CloudObject } from 'olympe';\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { combineLatest, map, distinctUntilChanged } from 'rxjs';\n\n// Internal\nimport { defaultWrap } from './wrappers';\nimport { reorderObject, warn } from './helpers';\n\n/**\n * Init the columns\n * @param {!BrickContext} $ \n * @param {!Observable} _wrappers \n * @return {!Observable}\n */\nexport function initFilteredColumns($, _wrappers) {\n // Internal states\n $.set('_rgColumnWidth', {}); // Column width overrides\n $.set('_rgColumnOrder', {}); // Column order (rank) overrides\n\n // Listen to the config and the _wrappers first object properties\n return combineLatest([\n $.observe('Config', false),\n _wrappers\n .pipe(map(wrappers => (wrappers[0] ?? defaultWrap()).__rgProperties()))\n .pipe(distinctUntilChanged()),\n $.observe('Enable Column Reordering', false),\n $.observe('_rgColumnWidth'),\n $.observe('_rgColumnOrder'),\n $.observe('Default Width')\n ])\n\n // Build the columns\n .pipe(map(([config, properties, ...others]) => {\n // Config is set by the user\n if (config) {\n return [config, ...others];\n }\n\n // Config is auto-generated from the data\n if (properties.length > 0) {\n return [\n properties.map((path, index) => ({ 'Property Path': path, Type: 'AUTO', Rank: index })),\n ...others\n ];\n }\n\n // Empty config\n return [[], ...others];\n }))\n\n // Transform to an array of objects\n .pipe(map(([config, reorderableColumns, columnWidth, columnOrder, defaultWidth]) => {\n return config\n .map(column => column instanceof CloudObject ? column.toObject(true, true) : column)\n .sort((a, b) => getColumnRank(a, columnOrder) - getColumnRank(b, columnOrder))\n .map(column => generateColumn(column, reorderableColumns, columnWidth, defaultWidth));\n }))\n\n // Cache the filtered columns (per level) for quick access\n .pipe(map(columns => {\n const filteredColumns = filterLevelledColumns(columns);\n $.set('_rgFilteredColumns', filteredColumns);\n return filteredColumns;\n }));\n}\n\n/**\n * @param {!BrickContext} $\n * @return {!*}\n */\nexport function useColumns($) {\n const filteredColumns = useProperty($, '_rgFilteredColumns');\n return filteredColumns?.get(0) ?? [];\n}\n\n/**\n * @param {!BrickContext} $\n * @param {number} level \n * @return {!Array}\n */\nexport function getColumns($, level) {\n const filteredColumns = $.get('_rgFilteredColumns');\n return filteredColumns?.get(level ?? 0) ?? [];\n}\n\n/**\n * Handle the resizing of columns\n * @param {!BrickContext} $ \n * @param {string} columnId \n * @param {number} width \n */\nexport function handleOnColumnResized($, columnId, width) {\n const currentCols = { ...$.get('_rgColumnWidth') };\n currentCols[columnId] = width;\n $.set('_rgColumnWidth', currentCols);\n}\n\n/**\n * @param {!Array} columns\n * @return {!Map<number, !Array>}\n */\nfunction filterLevelledColumns(columns) {\n // Group the columns by rank and save all levels\n const levels = new Set();\n const perRank = columns.reduce((acc, cur) => {\n const rank = cur.Rank ?? 0;\n if(!acc.has(rank)) {\n acc.set(rank, []);\n }\n acc.get(rank).push(cur);\n levels.add(cur.Level ?? 0);\n return acc;\n }, new Map());\n const allRanks = Array.from(perRank.keys());\n\n // Get the columns for each level\n const filterLevel = level => {\n return allRanks.map(rank => {\n const rankColumns = perRank.get(rank);\n const atLevel = rankColumns.find(column => (column.Level ?? 0) === level);\n const generic = rankColumns.find(column => (column.Level ?? 0) === -1);\n return atLevel ?? generic ?? rankColumns[0];\n });\n };\n\n // Return all levels\n return Array.from(levels.values()).reduce((acc, cur) => acc.set(cur, filterLevel(cur)), new Map());\n}\n\n/**\n * @param {!Object} column\n * @param {boolean} reorderableColumns\n * @param {!Object} columnWidth\n * @param {number} defaultWidth\n * @return {!Object}\n */\nfunction generateColumn(column, reorderableColumns, columnWidth, defaultWidth) {\n if(typeof column.Rank !== 'number') {\n warn(`column rank is missing, using 0 as fallback (column: ${column.Header ?? column['Property Path']})`);\n }\n const rank = column.Rank ?? 0;\n return {\n columnId: rank,\n reorderable: reorderableColumns,\n width: columnWidth?.[rank] ?? column.Width ?? defaultWidth ?? 150,\n resizable: column.Resizable,\n Level: column.Level ?? 0,\n ...column\n };\n}\n\n/**\n * @param {!BrickContext} $\n * @param {number} targetColumnId\n * @param {!Array} columnIds\n */\nexport function handleOnColumnsReordered($, targetColumnId, columnIds) {\n const columns = getColumns($, 0);\n const ranks = columns.map(column => column.Rank);\n const targetIndex = ranks.indexOf(targetColumnId);\n const movingIndexes = columnIds.map(id => ranks.indexOf(id));\n const newRanks = reorderObject(ranks, movingIndexes, targetIndex);\n const newOrder = newRanks.reduce((acc, cur, index) => ({ [cur]: index, ...acc }), {});\n $.set('_rgColumnOrder', newOrder);\n}\n\n/**\n * @param {!Object} column\n * @param {!Object} overrides\n * @return {number}\n */\nfunction getColumnRank(column, overrides) {\n return overrides[column.Rank] ?? column.Rank;\n}\n","// Olympe\nimport { QueryResult } from 'olympe';\n\n// Rxjs\nimport { tap, combineLatest, map } from 'rxjs';\n\n// Internal\nimport { warn, fromJson } from './helpers';\n\n/**\n * Init the internal data state, make sure it is an array\n * @param {!BrickContext} $ \n * @param {!Observable} _reload\n * @return {!Observable}\n */\nexport function initData($, _reload) {\n // Listen to the data and for any refresh\n return combineLatest([\n $.observe('Data', false),\n _reload\n ])\n\n // Default values\n .pipe(map(([data]) => data ? data : []))\n\n // Transform to an array\n .pipe(map(data => {\n // The data is already an array\n if (Array.isArray(data)) {\n return data;\n }\n\n // QueryResult case\n if (data instanceof QueryResult) {\n return data.toArray();\n }\n\n // JSON case\n if (typeof data === 'string') {\n const [json, error] = fromJson(data);\n if (!error && Array.isArray(json)) {\n return json;\n }\n }\n\n // Type is not supported\n warn('the `Data` property is not convertible to an array');\n return [];\n }))\n \n // Set the transformed data into _Data\n .pipe(tap(data => $.set('_rgData', data)));\n}\n\n","// Olympe\nimport { getLogger } from '@olympeio/core';\n\n/**\n * Parse a json string without throwing an exception\n * @param {string|!Object} json \n * @return {!Array}\n */\nexport function fromJson(json) {\n try {\n return typeof json === 'string'\n ? [JSON.parse(json), null]\n : [json ?? {}, null];\n }\n catch(err) {\n return [{}, err];\n }\n}\n\n/**\n * Warn message with a default format\n * @param {string} message \n */\nexport function warn(message) {\n getLogger('ReactGrid').warn(`ReactGrid: ${message}`);\n}\n\n/**\n * Error message with a default format\n * @param {string} message \n */\nexport function error(message) {\n getLogger('ReactGrid').error(`ReactGrid: ${message}`);\n}\n\n/**\n * Make a jsonpath-plus path readable\n * @param {string} path\n * @return {string} \n */\nexport function trimPath(path) {\n if(path.startsWith('$') || path.startsWith('.')) {\n return trimPath(path.substring(1));\n }\n if(path.startsWith('[')) {\n return trimPath(path.substring(path.indexOf(']') + 1));\n }\n return path;\n}\n\n/**\n * Test for email format\n * @param {string} text\n * @return {boolean}\n */\nexport function validateEmail(text) {\n return emailRegex.test(text);\n}\n\n// Email regex (https://emailregex.com/)\nconst emailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n/**\n * Reorders elements in an object by moving specific elements to a new position.\n *\n * @param {Array} values - The original array to reorder.\n * @param {number[]} ids - An array of indices representing the elements to move.\n * @param {number} to - The target index where the selected elements should be moved.\n * @return {Object} - A new object with the specified elements reordered.\n */\nexport function reorderObject(values, ids, to) {\n const reorderedValues = [...values];\n\n // Get elements to move based on the ids\n const elementsToMove = ids.map(index => reorderedValues[index]);\n ids.sort((a, b) => b - a).forEach(index => {\n reorderedValues.splice(index, 1);\n });\n\n // Adjust the target id based on moving forward or backward\n const adjustedTargetId = to >= Math.min(...ids) ? to - elementsToMove.length + 1 : to;\n\n // Insert the elements in target id\n if (elementsToMove.length > 0) {\n reorderedValues.splice(adjustedTargetId, 0, ...elementsToMove);\n }\n\n return reorderedValues;\n}\n\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { tap, combineLatest, map, distinctUntilChanged } from 'rxjs';\n\n// Internal\nimport { generateCell, getCellStyle } from './cells';\nimport { trimPath } from './helpers';\nimport { getColumns } from './columns';\nimport { getFlattenWrappers } from './wrappers';\n\n/**\n * Init the rows\n * @param {!BrickContext} $ \n * @param {!Observable} _wrappers \n * @param {!Observable} _filteredColumns \n */\nexport function initRows($, _wrappers, _filteredColumns) {\n // Listen to the _data and the _columns\n combineLatest([\n _wrappers,\n _filteredColumns\n .pipe(distinctUntilChanged(undefined, filteredColumns => {\n // Avoid updating the rows for some changes on the column config: width, resizable, etc.\n return Array.from(filteredColumns.values())\n .flat()\n .map(c => `${c.Header}${c['Property Path']}${c.Type}${c.Options}${c.Rank}${c.Editable}${c.Level}`)\n .join('');\n })),\n $.observe('Row Height', false),\n $.observe('Cell Edition', false),\n $.observe('Disable Header Row', false),\n $.observe('Default Color', false),\n $.observe('Border Color', false),\n $.observe('Border Width', false)\n ])\n\n // Use the reactgrid format for rows\n .pipe(map(([_wrappers, _filteredColumns, rowHeight, cellEdition, removeHeaderRow]) => {\n // Optional header row\n const headerRow = removeHeaderRow ? [] : [{\n rowId: '_header',\n height: rowHeight,\n cells: getColumns($, 0).map(column => {\n const text = column.Header ?? trimPath(column['Property Path'] ?? '');\n const finalText = column.Level === 0 ? text : '';\n return { type: 'header', text: finalText, style: getCellStyle($) };\n })\n }];\n\n // Generate all the rows\n const rows = getFlattenWrappers($).map(({ wrapper, level }, index) => {\n const rowColumns = getColumns($, level);\n return generateRow(wrapper, rowColumns, index, $, rowHeight, cellEdition);\n });\n\n // Final rows\n return [headerRow, rows].flat();\n }))\n\n // Set the final rows\n .pipe(tap(rows => $.set('_rgRows', rows)))\n\n // Run \n .subscribe();\n}\n\n/**\n * @param {!BrickContext}\n * @return {!*}\n */\nexport function useRows($) {\n return useProperty($, '_rgRows') ?? [];\n}\n\n/**\n * @param {!RGWrapper} wrapper \n * @param {!Array} columns \n * @param {number} index \n * @param {!BrickContext} $ \n * @param {number} rowHeight \n * @param {boolean} cellEdition \n * @return {!Object}\n */\nfunction generateRow(wrapper, columns, index, $, rowHeight, cellEdition) {\n return { \n rowId: index,\n height: rowHeight,\n cells: columns.map(column => generateCell($, wrapper, index, column, cellEdition))\n };\n}\n","// React\nimport { useEffect } from 'react';\nimport { tap, interval } from 'rxjs';\n\n// Internal\nimport { triggerRedraw } from './triggers';\n\n/**\n * @param {!BrickContext} $\n */\nexport function initScroll($) {\n // Auto-redraw on scroll (fix fast scrolling issue)\n $.set('_rgLastScroll', 0);\n $.set('_rgLastScrollRedraw', 0);\n interval(1000)\n .pipe(tap(() => {\n if($.get('_rgLastScroll') !== $.get('_rgLastScrollRedraw')) {\n $.set('_rgLastScrollRedraw', $.get('_rgLastScroll'));\n triggerRedraw($);\n }\n }))\n .subscribe();\n}\n\n/**\n * @param {!BrickContext} $\n * @param {!*} ref\n */\nexport function useRedrawAfterScroll($, ref) {\n const registerScroll = () => $.set('_rgLastScroll', Date.now());\n useEffect(() => {\n if (ref.current) {\n ref.current.parentElement.style.overflow = 'visible';\n ref.current.addEventListener('scroll', registerScroll);\n }\n return () => {\n if (ref.current) {\n ref.current.removeEventListener('scroll', registerScroll);\n }\n };\n }, [ref]);\n}\n\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n/**\n * @param {!BrickContext} $\n * @return {!Observable}\n */\nexport function initTriggers($) {\n return $.observe('Reload', false);\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function useRedraw($) {\n useProperty($, 'Redraw');\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function triggerRedraw($) {\n $.trigger('Redraw');\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function triggerReload($) {\n $.trigger('Reload');\n}\n\n","// Olympe\nimport { CloudObject } from 'olympe';\n\n// Rxjs\nimport { tap, map } from 'rxjs';\n\n// Json\nimport { JSONPath } from 'jsonpath-plus';\n\n// Internal\nimport { warn, trimPath } from './helpers';\nimport { getModelPropertiesName, findObjectProperty } from './cloudobjects';\nimport { isChevronCellExpanded } from './cells';\n\n/**\n * @typedef RGWrapper\n * @property {!*} rgObject - The wrapped object\n * @property {!Array} rgChildren - Potential children of the object\n * @property {function():string} rgGetKey - Get a unique key\n * @property {string} _rgType - The type of the wrapped object\n * @property {number} _rgLevel - The level in the hierarchy\n * @property {function():!Array<string>} __rgProperties - Get all the properties name\n * @property {function(string):!*} __rgGetProperty - Get a property by its path\n * @property {function(string):!*} __rgGetValue - Get a value for a path\n * @property {function(string):!*} __rgGetObject - Get the object for a path\n */\nexport const RGWrapper = {};\n\n/**\n * Init the internal data state, make sure it is an array\n * @param {!BrickContext} $ \n * @param {!Observable} _data \n * @return {!Observable}\n */\nexport function initWrappers($, _data) {\n // Observe the data\n return _data\n\n // Wrap all objects\n .pipe(map(data => data.map(d => rgWrap(d))))\n\n // Set the transformed data into _Data\n .pipe(tap(wrappers => $.set('_rgWrappers', wrappers)));\n}\n\n/**\n * @param {!*} object \n * @param {number=} level \n * @return {!RGWrapper} \n */\nexport function rgWrap(object, level) {\n // Already wrapped -> rewrap missing properties\n if(object.hasOwnProperty('rgObject')) {\n const missingProps = ['rgChildren', 'rgGetKey', '_rgType', '_rgLevel',\n '__rgProperties', '__rgGetProperty', '__rgGetValue',\n '__rgGetObject'].filter(prop => !object.hasOwnProperty(prop));\n if(missingProps.length > 0) {\n const wrapped = rgWrap(object.rgObject, level ?? 0);\n return missingProps.reduce((acc, cur) => {\n acc[cur] = wrapped[cur];\n return acc;\n }, object);\n }\n return object;\n }\n\n // Tuple case\n if(Array.isArray(object)) {\n return wrapTuple(object, level ?? 0);\n }\n\n // CloudObject case\n if(object instanceof CloudObject) {\n return wrapCloudObject(object, level ?? 0);\n }\n\n // Object case\n if(typeof object === 'object') {\n return wrapObject(object, level ?? 0);\n }\n\n // Wrong type\n warn('some data are not of the following type: Object, CloudObject, Array');\n return defaultWrap(level ?? 0);\n}\n\n/**\n * @param {!Object} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapObject(object, level) {\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => Object.values(object).join('.'),\n _rgType: 'object',\n _rgLevel: level,\n __rgProperties: () => Object.keys(object),\n __rgGetProperty: path => trimPath(path),\n __rgGetValue: path => JSONPath({ path, json: object, wrap: false }),\n __rgGetObject: () => object\n };\n}\n\n/**\n * @param {!CloudObject} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapCloudObject(object, level) {\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => object.getTag(),\n _rgType: 'cloudobject',\n _rgLevel: level,\n __rgProperties: () => getModelPropertiesName(object),\n __rgGetProperty: path => findObjectProperty(object, path),\n __rgGetValue: path => object.get(findObjectProperty(object, path)),\n __rgGetObject: () => object\n };\n}\n\n/**\n * @param {!Array} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapTuple(object, level) {\n const wrapped = object.map(o => rgWrap(o, level + 1));\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => `[${wrapped.map(w => w.rgGetKey()).join('.')}]`,\n _rgType: 'tuple',\n _rgLevel: level,\n __rgProperties: () => wrapped.map((w, i) => w.__rgProperties().map(p => `$[${i}].${p}`)).flat(),\n __rgGetProperty: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetProperty(subPath);\n },\n __rgGetValue: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetValue(subPath);\n },\n __rgGetObject: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetObject(subPath);\n }\n };\n}\n\n/**\n * @param {number=} level \n * @return {!RGWrapper} \n */\nexport function defaultWrap(level) {\n return wrapObject({}, level ?? 0);\n}\n\n/**\n * @param {string} path \n * @returns {![number, string]} \n */\nfunction splitTuplePath(path) {\n const endBracket = path.indexOf(']');\n const index = parseInt(path.substring(path.indexOf('[') + 1, endBracket));\n const subPath = trimPath(path.substring(endBracket + 1));\n return [index, subPath];\n}\n\n/**\n * @param {!BrickContext} $ \n * @param {!Array} wrappers \n * @param {number} level \n * @return {!Array}\n */\nfunction flatten($, wrappers, level) {\n return wrappers.flatMap(wrapper => {\n const isExpanded = isChevronCellExpanded($, wrapper);\n const children = isExpanded ? flatten($, wrapper.rgChildren, level + 1) : [];\n return [{ wrapper, level }, ...children]; \n });\n}\n\n/**\n * @param {!BrickContext} $ \n * @return {!Array}\n */\nexport function getFlattenWrappers($) {\n return flatten($, $.get('_rgWrappers'), 0);\n}\n","module.exports = require(\"@olympeio/core\");","module.exports = require(\"jsonpath-plus\");","module.exports = require(\"react\");","module.exports = require(\"rxjs\");","module.exports = __WEBPACK_EXTERNAL_MODULE_olympe__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","\n// Import Olympe runtime or DRAW\nimport 'olympe';\n\n// Import project bricks (we use webpack-import-glob-loader to import all bricks)\nimport './common/helpers.js'; import './common/internal/box.js'; import './common/internal/cells.js'; import './common/internal/changes.js'; import './common/internal/cloudobjects.js'; import './common/internal/columns.js'; import './common/internal/data.js'; import './common/internal/helpers.js'; import './common/internal/rows.js'; import './common/internal/scroll.js'; import './common/internal/triggers.js'; import './common/internal/wrappers.js'; import './common/RGCreateColumnConfig.js'; import './common/RGGetChangeMetadata.js'; import './common/RGGetChangeProperties.js'; import './common/RGGroupTuplesByIndexes.js'; import './common/RGProcessChangesForCloudObjects.js'; import './common/RGProcessChangesForJSONString.js'; import './common/RGProcessChangesForObjects.js'; import './common/RGWrapObject.js';\n;\n"],"names":[],"sourceRoot":""}
|
package/main-web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main-web.js","mappings":"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ACA;AACA;;AAEA;AACA,wCAAwC,kDAAQ;AAChD;AACA,YAAY,8CAAI,wCAAwC,qBAAqB;AAC7E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6DAA6D,yBAAyB;AACtF;AACA;AACA,4EAA4E,2BAA2B;AACvG,6EAA6E,6BAA6B;AAC1G,sEAAsE,sCAAsC;AAC5G;AACA;AACA;AACA;AACA,QAAQ,+CAAK,iCAAiC,YAAY;AAC1D;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,0BAA0B;AACrC,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,0BAA0B;AACrC,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,gCAAgC,mDAAa;AAC7C;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,IAAI,KAAK,kBAAkB;AACvG;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA,kBAAkB,MAAM,GAAG,gBAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB;AACO;AACP,kBAAkB,aAAa,GAAG,gBAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,YAAY;AACvB,WAAW,eAAe;AAC1B,YAAY;AACZ;AACA;AACA,6BAA6B,mBAAmB;AAChD;AACA,oBAAoB,yCAAyC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB,WAAW,YAAY;AACvB;AACO;AACP,6BAA6B,mBAAmB;AAChD,gBAAgB,uCAAuC;AACvD;;AAEA;AACA,WAAW,eAAe;AAC1B,WAAW,YAAY;AACvB,YAAY;AACZ;AACO;AACP,6BAA6B,mBAAmB;AAChD;AACA;;AAEA;AACA,WAAW,eAAe;AAC1B,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACzSA;AACmC;;AAEnC;AACiC;AACe;AAC0C;AACnD;AACI;;AAE3C;AACA,aAAa,QAAQ;AACrB,cAAc,wBAAwB;AACtC,cAAc,yBAAyB;AACvC,cAAc,GAAG;AACjB,cAAc,GAAG;AACjB,cAAc,aAAa;AAC3B;AACO;;AAEP;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB;AACO;AACP;AACA;AACA;AACA,QAAQ,8CAAI;AACZ;AACA;;AAEA;AACA;AACA,4BAA4B,6DAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA,4BAA4B,oDAAU;AACtC;AACA;AACA;AACA;AACA,gBAAgB,8CAAI,8BAA8B,kBAAkB,WAAW,gBAAgB;AAC/F;AACA;;AAEA;AACA;AACA,gBAAgB,gEAAwB;AACxC;AACA;;AAEA;AACA;AACA,gBAAgB,+DAAuB;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,oDAAY;AACtC,0BAA0B,oDAAY;AACtC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,wDAAa;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6CAAS;AACzC;AACA;;AAEA;AACA;AACA,gBAAgB,wDAAa;AAC7B;AACA,SAAS;;AAET;AACA;AACA;;;;;;;;;;;;;;;;;;AClHqC;;AAErC;AACA;AACA,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,YAAY;AACZ;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+CAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AACqC;AACQ;;AAE7C;AACgE;;AAEhE;AACyC;AACO;;AAEhD;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB,YAAY;AACZ;AACO;AACP;AACA,8BAA8B,GAAG;AACjC,8BAA8B,GAAG;;AAEjC;AACA,WAAW,mDAAa;AACxB;AACA;AACA,kBAAkB,yCAAG,6BAA6B,sDAAW;AAC7D,kBAAkB,0DAAoB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,yCAAG;AACjB;AACA;AACA;AACA;;AAEA;AACA;AA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","sources":["webpack://@olympeio-extensions/reactgrid/webpack/universalModuleDefinition","webpack://@olympeio-extensions/reactgrid/./src/web/RGReactGrid.jsx","webpack://@olympeio-extensions/reactgrid/./src/common/RGCreateColumnConfig.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGetChangeMetadata.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGetChangeProperties.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGroupTuplesByIndexes.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForCloudObjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForJSONString.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForObjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGWrapObject.js","webpack://@olympeio-extensions/reactgrid/./src/common/helpers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/box.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/cells.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/changes.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/cloudobjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/columns.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/data.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/helpers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/rows.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/scroll.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/triggers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/wrappers.js","webpack://@olympeio-extensions/reactgrid/external commonjs \"@olympeio/core\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"@silevis/reactgrid\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"@silevis/reactgrid/styles.css\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"jsonpath-plus\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"react\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"rxjs\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"styled-jsx/style\"","webpack://@olympeio-extensions/reactgrid/external umd \"olympe\"","webpack://@olympeio-extensions/reactgrid/webpack/bootstrap","webpack://@olympeio-extensions/reactgrid/webpack/runtime/compat get default export","webpack://@olympeio-extensions/reactgrid/webpack/runtime/define property getters","webpack://@olympeio-extensions/reactgrid/webpack/runtime/hasOwnProperty shorthand","webpack://@olympeio-extensions/reactgrid/webpack/runtime/make namespace object","webpack://@olympeio-extensions/reactgrid/./src/main-web.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"olympe\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"olympe\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@olympeio-extensions/reactgrid\"] = factory(require(\"olympe\"));\n\telse\n\t\troot[\"@olympeio-extensions/reactgrid\"] = factory(root[\"olympe\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE_olympe__) => {\nreturn ","// Olympe\nimport { registerBrick } from 'olympe';\nimport { ReactBrick, useProperty } from '@olympeio/core';\n\n// React\nimport React, {useCallback, useRef, useState} from 'react';\nimport { ReactGrid } from '@silevis/reactgrid';\nimport '@silevis/reactgrid/styles.css';\n\n// Internal\nimport { initData } from '../common/internal/data';\nimport { initWrappers } from '../common/internal/wrappers';\nimport { initFilteredColumns, useColumns, handleOnColumnResized, handleOnColumnsReordered } from '../common/internal/columns';\nimport { initRows, useRows } from '../common/internal/rows';\nimport { initBox, useBox } from '../common/internal/box';\nimport { handleOnCellsChanged } from '../common/internal/changes';\nimport { initTriggers, useRedraw } from '../common/internal/triggers';\nimport { initScroll, useRedrawAfterScroll } from '../common/internal/scroll';\nimport { initCells } from '../common/internal/cells';\n\nexport default class RGReactGrid extends ReactBrick {\n\n /**\n * @override\n */\n init($) {\n // Data/Config to Rows/Columns flow\n initCells($);\n const _reload = initTriggers($);\n const _data = initData($, _reload);\n const _wrappers = initWrappers($, _data);\n const _filteredColumns = initFilteredColumns($, _wrappers);\n initRows($, _wrappers, _filteredColumns);\n\n // Bounding box flow\n initBox($);\n\n // Scroll \n initScroll($);\n }\n\n /**\n * @override\n */\n static getReactComponent($) {\n return () => {\n // Display\n const box = useBox($);\n const hidden = useProperty($, 'Hidden');\n const allowContentOverflow = useProperty($, 'Allow Content Overflow');\n const fontSize = useProperty($, 'Font Size');\n\n // Data\n const rows = useRows($);\n const columns = useColumns($);\n\n // Behaviors\n const rangeSelection = useProperty($, 'Enable Range Selection');\n const rowSelection = useProperty($, 'Enable Row Selection');\n const colSelection = useProperty($, 'Enable Column Selection');\n const fillHandle = useProperty($, 'Enable Fill Handle');\n\n // Sticky\n const stickTop = useProperty($, 'Sticky Top Rows');\n const stickBottom = useProperty($, 'Sticky Bottom Rows');\n const stickLeft = useProperty($, 'Sticky Left Columns');\n const stickRight = useProperty($, 'Sticky Right Columns');\n\n // Redraw hook\n const containerRef = useRef();\n useRedrawAfterScroll($, containerRef);\n useRedraw($);\n\n // Compute the global position of the grid to set the editor cell in the right place\n const [gridPosition, setGridPosition] = useState({ x: 0, y: 0 });\n const updateBoxPosition = useCallback(() => {\n const rect = containerRef.current?.getBoundingClientRect();\n setGridPosition({ x: rect.left, y: rect.top });\n }, []);\n\n // Render the grid\n return (\n <div ref={containerRef}>\n {/* ReactGrid component */}\n <ReactGrid\n // Data\n rows={rows}\n columns={columns}\n onCellsChanged={handleOnCellsChanged.bind(undefined, $)}\n enableFillHandle={fillHandle}\n onFocusLocationChanged={updateBoxPosition} // Compute the global position of the grid to set the editor cell in the right place\n\n // Sticky\n stickyLeftColumns={stickLeft}\n stickyRightColumns={stickRight}\n stickyTopRows={stickTop}\n stickyBottomRows={stickBottom}\n\n // Selection\n enableRangeSelection={rangeSelection}\n enableColumnSelection={colSelection}\n enableRowSelection={rowSelection}\n\n // Resizing\n onColumnResized={handleOnColumnResized.bind(undefined, $)}\n\n // Reordering\n onColumnsReordered={handleOnColumnsReordered.bind(undefined, $)}\n />\n\n {/* Styling */}\n <style jsx>{`\n // Wrapper styling\n div {\n display: ${hidden ? 'none' : 'inline-block'};\n width: ${box.width}px;\n height: ${box.height}px;\n overflow: ${allowContentOverflow ? 'visible' : 'scroll'};\n font-family: 'Roboto', sans-serif;\n }\n\n // Hack: put the editor cell in the right place, based on the computed global position of the grid\n div :global(.rg-celleditor) {\n font-size: ${fontSize}px !important;\n transform: translate(${-gridPosition.x}px, ${-gridPosition.y}px);\n }\n\n // Pane styling\n div :global(.rg-pane) {\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n background-color: #fff; \n }\n\n // General cell styling\n div :global(.rg-cell) {\n padding: 10px;\n font-size: ${fontSize}px !important;\n border-bottom: 1px solid #e0e0e0;\n color: rgba(0, 0, 0, 0.87);\n transition: background-color 0.2s ease-in-out;\n }\n\n // Header cell styling to match MUI Table header\n div :global(.rg-header-cell) {\n background-color: #f5f5f5;\n font-weight: 500;\n color: rgba(0, 0, 0, 0.87);\n font-size: 14px;\n border-bottom: 1px solid #e0e0e0;\n padding: 12px;\n }\n\n // Number cell styling\n div :global(.rg-number-cell) {\n text-align: right;\n padding-right: 14px;\n color: rgba(0, 0, 0, 0.87);\n padding-left: 12px;\n }\n\n // Text cell styling\n div :global(.rg-text-cell) {\n text-align: left;\n color: rgba(0, 0, 0, 0.87);\n padding-left: 12px;\n }\n\n // Hover effect for cells to look like MUI Table rows\n div :global(.rg-cell):hover {\n background-color: #f5f5f5;\n }\n\n // Scrollbar styling to match MUI's scrollbars\n div::-webkit-scrollbar {\n display: block;\n width: 8px;\n height: 8px;\n }\n div::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n }\n div::-webkit-scrollbar-track {\n background-color: #f0f0f0;\n }\n `}</style>\n </div>\n );\n };\n }\n}\n\nregisterBrick('019154c4600798f105aa', RGReactGrid);\n","import { Brick, registerBrick } from 'olympe';\nimport { fromJson } from './helpers';\n\nexport default class RGCreateColumnConfig extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {number} rank\n * @param {string} propertyPath\n * @param {string} header\n * @param {number} width\n * @param {string} type\n * @param {string|!Object} options\n * @param {boolean} editable\n * @param {boolean} resizable\n * @param {number} level\n * @param {function(!Object)} setObject\n */\n update(_$, [rank, propertyPath, header, width, type, options, editable, resizable, level], [setObject]) {\n setObject({\n Rank: rank,\n 'Property Path': propertyPath,\n Header: header,\n Width: width,\n Type: type,\n Options: fromJson(options)[0],\n Editable: editable,\n Resizable: resizable,\n Level: level\n });\n }\n}\n\nregisterBrick('01921d9038d9eb72f609', RGCreateColumnConfig);\n","import { Brick, registerBrick } from 'olympe';\n\nexport default class RGGetChangeMetadata extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!RGChange} change\n * @param {function(!Object)} setNewCell\n * @param {function(!Object)} setPreviousCell\n * @param {function(string|number)} setRowId\n * @param {function(string|number)} setColumnId\n * @param {function(string)} setType\n */\n update(_$, [change], [setNewCell, setPreviousCell, setRowId, setColumnId, setType]) {\n setNewCell(change.metadata.newCell);\n setPreviousCell(change.metadata.previousCell);\n setRowId(change.metadata.rowId);\n setColumnId(change.metadata.columnId);\n setType(change.metadata.type);\n }\n}\n\nregisterBrick('01920a4d4d8390252c91', RGGetChangeMetadata);\n","import { Brick, registerBrick } from 'olympe';\n\nexport default class RGGetChangeProperties extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!RGChange} change\n * @param {function(!Object|!CloudObject)} setObject\n * @param {function(!Object|!CloudObject)} setProperty\n * @param {function(!*)} setNewValue\n * @param {function(!*)} setOldValue\n */\n update(_$, [change], [setObject, setProperty, setNewValue, setOldValue]) {\n setObject(change.object);\n setProperty(change.property);\n setNewValue(change.newValue);\n setOldValue(change.oldValue);\n }\n}\n\nregisterBrick('0192055d7857bd08279c', RGGetChangeProperties);\n","import { Brick, registerBrick } from 'olympe';\nimport { rgWrap, RGWrapper } from './helpers';\n\nexport default class RGGroupTuplesByIndexes extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array} data\n * @param {string} indexes\n * @param {function(!Array)} setGroupedData\n */\n update(_$, [data, indexes], [setGroupedData]) {\n // Get the indexes and make the grouping recursively\n const _indexes = indexes.split(',').map(index => parseInt(index));\n setGroupedData(groupBy(data.map(d => rgWrap(d)), _indexes, 0));\n }\n}\n\nregisterBrick('0192288806aa3cc82b95', RGGroupTuplesByIndexes);\n\n/**\n * Group data by indexes, for the given level\n * @param {!Array} wrappers\n * @param {!Array<number>} indexes\n * @param {number} level\n * @return {!Array}\n */\nfunction groupBy(wrappers, indexes, level) {\n // End of recursion\n if(level >= indexes.length || !Array.isArray(wrappers)) {\n return wrappers;\n }\n\n // Get the current working index\n const index = indexes[level] - level;\n\n // Group the data in a Map\n const groupedWrappers = wrappers.reduce((parents, wrapper) => {\n // Split the tuple into parts\n const [wrapped, child] = splitTuple(wrapper, index, level);\n const key = wrapped.rgGetKey();\n\n // If this key is not in a group yet\n if(!parents.has(key)) {\n // Create the new group\n parents.set(key, wrapped);\n }\n\n // If there is a child, add it to the group\n // (group the child itself also)\n if(child) {\n const parent = parents.get(key);\n parent.rgChildren.push(child);\n }\n\n // Done\n return parents;\n }, new Map());\n\n // Apply the grouping on the children\n return Array.from(groupedWrappers.values()).map(({ rgChildren, ...others }) => ({\n rgChildren: groupBy(rgChildren.map(c => rgWrap(c, level + 1)), indexes, level + 1),\n ...others\n }));\n}\n\n/**\n * @param {!RGWrapper} wrapper \n * @param {number} index \n * @param {number} level \n * @return {[!RGWrapper, *]}\n */\nfunction splitTuple(wrapper, index, level) {\n // Real tuple case\n if(wrapper._rgType === 'tuple') {\n // Extract the info\n const tuple = wrapper.rgObject;\n const wrapped = rgWrap(tuple[index], level);\n const before = tuple.slice(0, index);\n const after = tuple.slice(index + 1);\n const child = [...before, ...after];\n \n // Handle all cases\n if(child.length > 1) {\n return [wrapped, child];\n }\n else if(child.length > 0) {\n return [wrapped, child[0]];\n }\n else {\n return [wrapped, null];\n }\n }\n\n // Not a tuple case\n else {\n return [wrapper, null];\n }\n}\n","import { ActionBrick, registerBrick, Transaction, ErrorFlow } from 'olympe';\n\nexport default class RGProcessChangesForCloudObjects extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {boolean} executeAsLarge\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n */\n update(_$, [changes, executeAsLarge], [forwardEvent, setErrorFlow]) {\n const t = new Transaction();\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(change.metadata.newCell.validator?.(change.newValue) ?? true) {\n t.update(change.object, change.property, change.newValue);\n }\n else {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n const promise = executeAsLarge ? t.executeAsLarge() : t.execute();\n promise.then(forwardEvent)\n .catch(error => setErrorFlow(ErrorFlow.create(error.message, 0)));\n }\n}\n\nregisterBrick('01920a8134e1cf0fa551', RGProcessChangesForCloudObjects);\n","import { ActionBrick, registerBrick, ErrorFlow } from 'olympe';\nimport { fromJson } from './helpers';\n\nexport default class RGProcessChangesForJSONString extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {string} json\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n * @param {function(string)} setNewJson\n */\n update(_$, [changes, json], [forwardEvent, setErrorFlow, setNewJson]) {\n const [data, error] = fromJson(json);\n if(!error) {\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(change.metadata.newCell.validator?.(change.newValue) ?? true) {\n data[change.metadata.rowId][change.property] = change.newValue;\n }\n else {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n setNewJson(JSON.stringify(data));\n forwardEvent();\n }\n else {\n setErrorFlow(ErrorFlow.create(`input 'json' is not valid, error: ${error.message}`, 0));\n }\n }\n}\n\nregisterBrick('01921e064dbe25faec55', RGProcessChangesForJSONString);\n","import { ActionBrick, registerBrick, ErrorFlow } from 'olympe';\n\nexport default class RGProcessChangesForObjects extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {boolean} inPlace\n * @param {Array} data\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n */\n update(_$, [changes, inPlace, data], [forwardEvent, setErrorFlow]) {\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(!(change.metadata.newCell.validator?.(change.newValue) ?? true)) {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n if(inPlace) {\n changes.forEach(change => {\n change.object[change.property] = change.newValue;\n });\n }\n else {\n changes.forEach(change => {\n data[change.metadata.rowId][change.property] = change.newValue;\n });\n }\n forwardEvent();\n }\n}\n\nregisterBrick('01921e0d2b383c95bd22', RGProcessChangesForObjects);\n","import { Brick, registerBrick } from 'olympe';\nimport { rgWrap, RGWrapper } from './helpers';\n\nexport default class RGWrapObject extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!*} object\n * @param {number} level\n * @param {function(!RGWrapper)} setWrapped\n */\n update(_$, [object, level], [setWrapped]) {\n setWrapped(rgWrap(object, level));\n }\n}\n\nregisterBrick('019232c3d1873de0d259', RGWrapObject);\n","// Re-export\nexport { rgWrap, RGWrapper } from './internal/wrappers';\nexport { RGChange } from './internal/changes';\nexport { fromJson } from './internal/helpers';\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { tap, combineLatest, throttleTime } from 'rxjs';\n\n/**\n * Init the bounding box\n * @param {!BrickContext} $ \n */\nexport function initBox($) {\n // Listen to the component position and size\n combineLatest([$.observe('Width'), $.observe('Height')])\n\n // Debounce the changes to avoid to many rerendering\n .pipe(throttleTime(100, undefined, { leading: true, trailing: true }))\n\n // Set the final box\n .pipe(tap(([width, height]) => $.set('_rgBox', { width, height })))\n\n // Run \n .subscribe();\n}\n\n/**\n * @param {!BrickContext}\n * @return {!*}\n */\nexport function useBox($) {\n return useProperty($, '_rgBox') ?? {width: $.get('Width'), height: $.get('Height') };\n}\n\n","// Internal\nimport { fromJson, validateEmail, error, warn } from './helpers';\n\n/**\n * @param {!BrickContext} $\n */\nexport function initCells($) {\n $.set('_rgDropdownIsOpen', '');\n $.set('_rgDropdownInputValue', '');\n}\n\n/**\n * Generate a cell for the defined wrapper/column\n * @param {!BrickContext} $\n * @param {!RGWrapper} wrapper\n * @param {number} rowId\n * @param {!Object} column\n * @param {boolean} cellEdition\n * @return {!Object}\n */\nexport function generateCell($, wrapper, rowId, column, cellEdition) {\n try {\n // Get the cell value\n const value = wrapper.__rgGetValue(column['Property Path'] ?? '');\n\n // Get the options\n const [options, optionsError] = fromJson(column.Options);\n if(optionsError) {\n warn(`cannot parse column options, error: ${optionsError.message}`);\n }\n const validator = options.validator ? s => new RegExp(options.validator).test(s) : undefined;\n const common = {\n nonEditable: cellEdition === 'DISABLED' || (cellEdition === 'USE CONFIG' && !column.Editable),\n style: getCellStyle($)\n };\n\n // Generate the cell depending on the type\n switch(column.Type) {\n case 'TEXT': return generateTextCell(value, options, common, column, validator);\n case 'NUMBER': return generateNumberCell(value, options, common);\n case 'EMAIL': return generateEmailCell(value, common, validator);\n case 'DATE': \n case 'TIME': return generateDateTimeCell(value, options, common, column);\n case 'CHECKBOX': return generateCheckboxCell(value, options, common);\n case 'DROPDOWN': return generateDropdownCell(value, options, common, column, $, rowId);\n case 'HEADER': return generateHeaderCell(value, options, common);\n case 'CHEVRON': return generateChevronCell(value, options, common, wrapper, $);\n\n // AUTO case\n default:\n if(value instanceof Date) {\n return generateCell($, wrapper, rowId, { ...column, Type: 'DATE' }, cellEdition);\n }\n switch(typeof value) {\n case 'number': return generateCell($, wrapper, rowId, { ...column, Type: 'NUMBER' }, cellEdition);\n case 'boolean': return generateCell($, wrapper, rowId, { ...column, Type: 'CHECKBOX' }, cellEdition);\n default: return generateCell($, wrapper, rowId, { ...column, Type: 'TEXT', _cast: true }, cellEdition);\n }\n }\n }\n catch(err) {\n error(`cannot generate cell, error: ${err.message}`);\n return errorCell();\n }\n}\n\n/**\n * Get the cell value, depending on its type\n * @param {!Object} cell\n * @return {*}\n */\nexport function getCellValue(cell) {\n switch(cell.type) {\n case 'number': return cell.value;\n case 'date': return cell.date;\n case 'time': return cell.time;\n case 'checkbox': return cell.checked;\n case 'dropdown': return cell.selectedValue;\n default: return cell.text;\n }\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @param {function(string):boolean} validator \n * @return {!TextCell} \n */\nfunction generateTextCell(value, options, common, column, validator) {\n return {\n type: 'text',\n text: (column._cast ? String(value ?? '') : value ?? ''),\n placeholder: options.placeholder,\n validator: validator,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!NumberCell} \n */\nfunction generateNumberCell(value, options, common) {\n return {\n type: 'number',\n value: value,\n format: new Intl.NumberFormat(options.locale, options.format),\n nanToZero: options.nanToZero,\n hideZero: options.hideZero,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} common \n * @param {function(string):boolean} validator \n * @return {!EmailCell} \n */\nfunction generateEmailCell(value, common, validator) {\n return {\n type: 'email',\n text: value ?? '',\n validator: validator ?? validateEmail,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @return {!DateCell|!TimeCell} \n */\nfunction generateDateTimeCell(value, options, common, column) {\n const type = column.Type.toLowerCase();\n return {\n type: type,\n [type]: value instanceof Date ? value : new Date(value),\n format: new Intl.DateTimeFormat(options.locale, options.format ?? { [`${type}Style`]: 'short' }),\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!CheckboxCell} \n */\nfunction generateCheckboxCell(value, options, common) {\n return {\n type: 'checkbox',\n checked: Boolean(value ?? false),\n checkedText: options.checkedText,\n uncheckedText: options.uncheckedText,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @param {!BrickContext} $ \n * @param {number} rowId\n * @return {!DropdownCell} \n */\nfunction generateDropdownCell(value, options, common, column, $, rowId) {\n const id = `${rowId}.${column.columnId}`;\n const isOpen = id === $.get('_rgDropdownIsOpen');\n const inputValue = isOpen ? $.get('_rgDropdownInputValue') : '';\n return {\n type: 'dropdown',\n selectedValue: value,\n values: options.values ?? [],\n isDisabled: options.isDisabled,\n isOpen: isOpen,\n inputValue: inputValue,\n ...common\n };\n}\n\n/**\n * Handle the dropdowns internal states\n * @param {!BrickContext} $ \n * @param {!CellChange} change \n */\nexport function handleDropdownCellChange($, change) {\n const id = `${change.rowId}.${change.columnId}`;\n if(change.newCell.isOpen && !change.newCell.isDisabled) {\n $.set('_rgDropdownIsOpen', id);\n $.set('_rgDropdownInputValue', change.newCell.inputValue);\n }\n else {\n $.set('_rgDropdownIsOpen', '');\n $.set('_rgDropdownInputValue', '');\n }\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!HeaderCell} \n */\nfunction generateHeaderCell(value, options, common) {\n return {\n type: 'header',\n text: value ?? options.text ?? '',\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!RGWrapper} wrapper\n * @param {!BrickContext} $ \n * @return {!ChevronCell} \n */\nfunction generateChevronCell(value, options, common, wrapper, $) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n if(!$.has(id)) {\n $.set(id, { isExpanded: options.isExpanded ?? false });\n }\n const state = $.get(id);\n return {\n type: 'chevron',\n text: value ?? options.text ?? '',\n indent: options.indent,\n hasChildren: wrapper.rgChildren.length > 0,\n ...state,\n ...common\n };\n}\n\n/**\n * Handle the chevrons internal states\n * @param {!BrickContext} $ \n * @param {!CellChange} change \n * @param {!RGWrapper} wrapper \n */\nexport function handleChevronCellChange($, change, wrapper) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n $.set(id, { isExpanded: change.newCell.isExpanded });\n}\n\n/**\n * @param {!BrickContext} $ \n * @param {!RGWrapper} wrapper \n * @return {boolean}\n */\nexport function isChevronCellExpanded($, wrapper) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n return $.get(id)?.isExpanded ?? false;\n}\n\n/**\n * @param {!BrickContext} $\n * @return {!Object}\n */\nexport function getCellStyle($) {\n const borderStyle = { \n color: $.get('Border Color'),\n width: $.get('Border Width') \n };\n return {\n background: $.get('Default Color'),\n border: {\n left: borderStyle,\n top: borderStyle,\n right: borderStyle,\n bottom: borderStyle\n }\n };\n}\n\n/**\n * @return {!TextCell}\n */\nfunction errorCell() {\n return {\n type: 'text',\n text: '!ERROR',\n nonEditable: true,\n style: {\n color: 'red'\n }\n };\n}\n","// Olympe\nimport { ErrorFlow } from 'olympe';\n\n// Internal\nimport { warn } from './helpers';\nimport { getFlattenWrappers } from './wrappers';\nimport { handleDropdownCellChange, handleChevronCellChange, getCellValue } from './cells';\nimport { getColumns } from './columns';\nimport { triggerReload } from './triggers';\n\n/**\n * @typedef {Object} RGChange\n * @property {(!Object|!CloudObject)} object\n * @property {(string|!PropertyModel)} property\n * @property {*} oldValue\n * @property {*} newValue\n * @property {!CellChange} metadata\n */\nexport const RGChange = {};\n\n/**\n * Process the changes event from the reactgrid, and forward it to a lambda\n * @param {!BrickContext} $ \n * @param {!Array} changes \n */\nexport function handleOnCellsChanged($, changes) {\n // Only process changes when a lambda is defined\n const processor = $.get('Process Changes');\n if(!processor) {\n warn('no change is processed, the `Process Changes` lambda is no defined');\n return;\n }\n\n // Adapt the changes to olympe\n let internalStateChanged = false;\n const flattenWrappers = getFlattenWrappers($);\n const _changes = changes\n // Transform the changes to work well with Olympe\n .map(change => {\n // Get the required data\n const wrapper = flattenWrappers[change.rowId].wrapper;\n const columns = getColumns($, wrapper._rgLevel);\n const column = columns.find(c => c.Rank === change.columnId);\n \n // Guard\n if(column === undefined) {\n warn(`no column found for level ${wrapper._rgLevel} and rank ${change.columnId}`);\n return null;\n }\n\n // Handle dropdowns states\n if(change.type === 'dropdown') {\n handleDropdownCellChange($, change);\n internalStateChanged = true;\n }\n\n // Handle chevrons states\n else if(change.type === 'chevron') {\n handleChevronCellChange($, change, wrapper);\n internalStateChanged = true;\n }\n\n // Create the RGChange object\n return {\n object: wrapper.__rgGetObject(column['Property Path']),\n property: wrapper.__rgGetProperty(column['Property Path']),\n oldValue: getCellValue(change.previousCell),\n newValue: getCellValue(change.newCell),\n metadata: change\n };\n })\n // Filter out null change\n .filter(change => change !== null)\n // Filter out the dropdown change that are only about the internal state\n .filter(change => change.metadata.type !== 'dropdown' || change.newValue !== change.oldValue)\n // Filter out the chevron change that are only about the internal state\n .filter(change => change.metadata.type !== 'chevron' || change.newValue !== change.oldValue)\n // Filter out changes with no value, only if there is change with value -> hack to fix paste from excel until a better solution\n .filter((change, _index, all) => change.newValue !== \"\" || all.every(c => c.newValue === \"\"));\n\n // Guard\n if(_changes.length === 0) {\n if(internalStateChanged) {\n triggerReload($);\n }\n return;\n }\n\n // Call the lambda\n const [iFlow, iChanges] = processor.getInputs();\n const [oFlow, oErrorFlow] = processor.getOutputs();\n const processor$ = $.runner(processor);\n processor$.set(iChanges, _changes);\n processor$.trigger(iFlow);\n\n // Wait for the end of it\n Promise.race([\n processor$.waitFor(oFlow), \n processor$.waitFor(oErrorFlow)\n ])\n .then(value => {\n // In case of error, throw it again\n if(value instanceof ErrorFlow) {\n $.throw(value);\n }\n\n // Success\n else {\n triggerReload($);\n }\n })\n\n // Free the lambda\n .finally(() => processor$.destroy());\n}\n","import { CloudObject } from 'olympe';\n\n/**\n * Find an object property based on its name\n * @param {!CloudObject} object\n * @param {string} path\n * @return {!PropertyModel}\n */\nexport function findObjectProperty(object, path) {\n const mapping = getModelPropertiesMapping(object);\n return mapping.get(path);\n}\n\n/**\n * Get all properties name of an object\n * @param {!CloudObject} object\n * @return {!Array<string>}\n */\nexport function getModelPropertiesName(object) {\n const mapping = getModelPropertiesMapping(object);\n return Array.from(mapping.keys());\n}\n\n/**\n * Get an object model properties mapping\n * @param {!CloudObject} object\n * @return {!Map<string, PropertyModel>}\n */\nfunction getModelPropertiesMapping(object) {\n const model = object.getModel();\n if(!modelProperties.has(model.getTag())) {\n const mapping = new Map();\n model.query()\n .follow(CloudObject.propertyRel)\n .executeFromCache()\n .forEach(property => mapping.set(property.name(), property));\n modelProperties.set(model.getTag(), mapping);\n }\n return modelProperties.get(model.getTag());\n}\n\n/**\n * Singleton map for model properties mapping (name <-> instance)\n * @type {!Map<string, !Map<string, PropertyModel>>}\n */\nconst modelProperties = new Map();\n\n","// Olympe\nimport { CloudObject } from 'olympe';\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { combineLatest, map, distinctUntilChanged } from 'rxjs';\n\n// Internal\nimport { defaultWrap } from './wrappers';\nimport { reorderObject, warn } from './helpers';\n\n/**\n * Init the columns\n * @param {!BrickContext} $ \n * @param {!Observable} _wrappers \n * @return {!Observable}\n */\nexport function initFilteredColumns($, _wrappers) {\n // Internal states\n $.set('_rgColumnWidth', {}); // Column width overrides\n $.set('_rgColumnOrder', {}); // Column order (rank) overrides\n\n // Listen to the config and the _wrappers first object properties\n return combineLatest([\n $.observe('Config', false),\n _wrappers\n .pipe(map(wrappers => (wrappers[0] ?? defaultWrap()).__rgProperties()))\n .pipe(distinctUntilChanged()),\n $.observe('Enable Column Reordering', false),\n $.observe('_rgColumnWidth'),\n $.observe('_rgColumnOrder'),\n $.observe('Default Width')\n ])\n\n // Build the columns\n .pipe(map(([config, properties, ...others]) => {\n // Config is set by the user\n if (config) {\n return [config, ...others];\n }\n\n // Config is auto-generated from the data\n if (properties.length > 0) {\n return [\n properties.map((path, index) => ({ 'Property Path': path, Type: 'AUTO', Rank: index })),\n ...others\n ];\n }\n\n // Empty config\n return [[], ...others];\n }))\n\n // Transform to an array of objects\n .pipe(map(([config, reorderableColumns, columnWidth, columnOrder, defaultWidth]) => {\n return config\n .map(column => column instanceof CloudObject ? column.toObject(true, true) : column)\n .sort((a, b) => getColumnRank(a, columnOrder) - getColumnRank(b, columnOrder))\n .map(column => generateColumn(column, reorderableColumns, columnWidth, defaultWidth));\n }))\n\n // Cache the filtered columns (per level) for quick access\n .pipe(map(columns => {\n const filteredColumns = filterLevelledColumns(columns);\n $.set('_rgFilteredColumns', filteredColumns);\n return filteredColumns;\n }));\n}\n\n/**\n * @param {!BrickContext} $\n * @return {!*}\n */\nexport function useColumns($) {\n const filteredColumns = useProperty($, '_rgFilteredColumns');\n return filteredColumns?.get(0) ?? [];\n}\n\n/**\n * @param {!BrickContext} $\n * @param {number} level \n * @return {!Array}\n */\nexport function getColumns($, level) {\n const filteredColumns = $.get('_rgFilteredColumns');\n return filteredColumns?.get(level ?? 0) ?? [];\n}\n\n/**\n * Handle the resizing of columns\n * @param {!BrickContext} $ \n * @param {string} columnId \n * @param {number} width \n */\nexport function handleOnColumnResized($, columnId, width) {\n const currentCols = { ...$.get('_rgColumnWidth') };\n currentCols[columnId] = width;\n $.set('_rgColumnWidth', currentCols);\n}\n\n/**\n * @param {!Array} columns\n * @return {!Map<number, !Array>}\n */\nfunction filterLevelledColumns(columns) {\n // Group the columns by rank and save all levels\n const levels = new Set();\n const perRank = columns.reduce((acc, cur) => {\n const rank = cur.Rank ?? 0;\n if(!acc.has(rank)) {\n acc.set(rank, []);\n }\n acc.get(rank).push(cur);\n levels.add(cur.Level ?? 0);\n return acc;\n }, new Map());\n const allRanks = Array.from(perRank.keys());\n\n // Get the columns for each level\n const filterLevel = level => {\n return allRanks.map(rank => {\n const rankColumns = perRank.get(rank);\n const atLevel = rankColumns.find(column => (column.Level ?? 0) === level);\n const generic = rankColumns.find(column => (column.Level ?? 0) === -1);\n return atLevel ?? generic ?? rankColumns[0];\n });\n };\n\n // Return all levels\n return Array.from(levels.values()).reduce((acc, cur) => acc.set(cur, filterLevel(cur)), new Map());\n}\n\n/**\n * @param {!Object} column\n * @param {boolean} reorderableColumns\n * @param {!Object} columnWidth\n * @param {number} defaultWidth\n * @return {!Object}\n */\nfunction generateColumn(column, reorderableColumns, columnWidth, defaultWidth) {\n if(typeof column.Rank !== 'number') {\n warn(`column rank is missing, using 0 as fallback (column: ${column.Header ?? column['Property Path']})`);\n }\n const rank = column.Rank ?? 0;\n return {\n columnId: rank,\n reorderable: reorderableColumns,\n width: columnWidth?.[rank] ?? column.Width ?? defaultWidth ?? 150,\n resizable: column.Resizable,\n Level: column.Level ?? 0,\n ...column\n };\n}\n\n/**\n * @param {!BrickContext} $\n * @param {number} targetColumnId\n * @param {!Array} columnIds\n */\nexport function handleOnColumnsReordered($, targetColumnId, columnIds) {\n const columns = getColumns($, 0);\n const ranks = columns.map(column => column.Rank);\n const targetIndex = ranks.indexOf(targetColumnId);\n const movingIndexes = columnIds.map(id => ranks.indexOf(id));\n const newRanks = reorderObject(ranks, movingIndexes, targetIndex);\n const newOrder = newRanks.reduce((acc, cur, index) => ({ [cur]: index, ...acc }), {});\n $.set('_rgColumnOrder', newOrder);\n}\n\n/**\n * @param {!Object} column\n * @param {!Object} overrides\n * @return {number}\n */\nfunction getColumnRank(column, overrides) {\n return overrides[column.Rank] ?? column.Rank;\n}\n","// Olympe\nimport { QueryResult } from 'olympe';\n\n// Rxjs\nimport { tap, combineLatest, map } from 'rxjs';\n\n// Internal\nimport { warn, fromJson } from './helpers';\n\n/**\n * Init the internal data state, make sure it is an array\n * @param {!BrickContext} $ \n * @param {!Observable} _reload\n * @return {!Observable}\n */\nexport function initData($, _reload) {\n // Listen to the data and for any refresh\n return combineLatest([\n $.observe('Data', false),\n _reload\n ])\n\n // Default values\n .pipe(map(([data]) => data ? data : []))\n\n // Transform to an array\n .pipe(map(data => {\n // The data is already an array\n if (Array.isArray(data)) {\n return data;\n }\n\n // QueryResult case\n if (data instanceof QueryResult) {\n return data.toArray();\n }\n\n // JSON case\n if (typeof data === 'string') {\n const [json, error] = fromJson(data);\n if (!error && Array.isArray(json)) {\n return json;\n }\n }\n\n // Type is not supported\n warn('the `Data` property is not convertible to an array');\n return [];\n }))\n \n // Set the transformed data into _Data\n .pipe(tap(data => $.set('_rgData', data)));\n}\n\n","// Olympe\nimport { getLogger } from '@olympeio/core';\n\n/**\n * Parse a json string without throwing an exception\n * @param {string|!Object} json \n * @return {!Array}\n */\nexport function fromJson(json) {\n try {\n return typeof json === 'string'\n ? [JSON.parse(json), null]\n : [json ?? {}, null];\n }\n catch(err) {\n return [{}, err];\n }\n}\n\n/**\n * Warn message with a default format\n * @param {string} message \n */\nexport function warn(message) {\n getLogger('ReactGrid').warn(`ReactGrid: ${message}`);\n}\n\n/**\n * Error message with a default format\n * @param {string} message \n */\nexport function error(message) {\n getLogger('ReactGrid').error(`ReactGrid: ${message}`);\n}\n\n/**\n * Make a jsonpath-plus path readable\n * @param {string} path\n * @return {string} \n */\nexport function trimPath(path) {\n if(path.startsWith('$') || path.startsWith('.')) {\n return trimPath(path.substring(1));\n }\n if(path.startsWith('[')) {\n return trimPath(path.substring(path.indexOf(']') + 1));\n }\n return path;\n}\n\n/**\n * Test for email format\n * @param {string} text\n * @return {boolean}\n */\nexport function validateEmail(text) {\n return emailRegex.test(text);\n}\n\n// Email regex (https://emailregex.com/)\nconst emailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n/**\n * Reorders elements in an object by moving specific elements to a new position.\n *\n * @param {Array} values - The original array to reorder.\n * @param {number[]} ids - An array of indices representing the elements to move.\n * @param {number} to - The target index where the selected elements should be moved.\n * @return {Object} - A new object with the specified elements reordered.\n */\nexport function reorderObject(values, ids, to) {\n const reorderedValues = [...values];\n\n // Get elements to move based on the ids\n const elementsToMove = ids.map(index => reorderedValues[index]);\n ids.sort((a, b) => b - a).forEach(index => {\n reorderedValues.splice(index, 1);\n });\n\n // Adjust the target id based on moving forward or backward\n const adjustedTargetId = to >= Math.min(...ids) ? to - elementsToMove.length + 1 : to;\n\n // Insert the elements in target id\n if (elementsToMove.length > 0) {\n reorderedValues.splice(adjustedTargetId, 0, ...elementsToMove);\n }\n\n return reorderedValues;\n}\n\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { tap, combineLatest, map, distinctUntilChanged } from 'rxjs';\n\n// Internal\nimport { generateCell, getCellStyle } from './cells';\nimport { trimPath } from './helpers';\nimport { getColumns } from './columns';\nimport { getFlattenWrappers } from './wrappers';\n\n/**\n * Init the rows\n * @param {!BrickContext} $ \n * @param {!Observable} _wrappers \n * @param {!Observable} _filteredColumns \n */\nexport function initRows($, _wrappers, _filteredColumns) {\n // Listen to the _data and the _columns\n combineLatest([\n _wrappers,\n _filteredColumns\n .pipe(distinctUntilChanged(undefined, filteredColumns => {\n // Avoid updating the rows for some changes on the column config: width, resizable, etc.\n return Array.from(filteredColumns.values())\n .flat()\n .map(c => `${c.Header}${c['Property Path']}${c.Type}${c.Options}${c.Rank}${c.Editable}${c.Level}`)\n .join('');\n })),\n $.observe('Row Height', false),\n $.observe('Cell Edition', false),\n $.observe('Disable Header Row', false),\n $.observe('Default Color', false),\n $.observe('Border Color', false),\n $.observe('Border Width', false)\n ])\n\n // Use the reactgrid format for rows\n .pipe(map(([_wrappers, _filteredColumns, rowHeight, cellEdition, removeHeaderRow]) => {\n // Optional header row\n const headerRow = removeHeaderRow ? [] : [{\n rowId: '_header',\n height: rowHeight,\n cells: getColumns($, 0).map(column => {\n const text = column.Header ?? trimPath(column['Property Path'] ?? '');\n const finalText = column.Level === 0 ? text : '';\n return { type: 'header', text: finalText, style: getCellStyle($) };\n })\n }];\n\n // Generate all the rows\n const rows = getFlattenWrappers($).map(({ wrapper, level }, index) => {\n const rowColumns = getColumns($, level);\n return generateRow(wrapper, rowColumns, index, $, rowHeight, cellEdition);\n });\n\n // Final rows\n return [headerRow, rows].flat();\n }))\n\n // Set the final rows\n .pipe(tap(rows => $.set('_rgRows', rows)))\n\n // Run \n .subscribe();\n}\n\n/**\n * @param {!BrickContext}\n * @return {!*}\n */\nexport function useRows($) {\n return useProperty($, '_rgRows') ?? [];\n}\n\n/**\n * @param {!RGWrapper} wrapper \n * @param {!Array} columns \n * @param {number} index \n * @param {!BrickContext} $ \n * @param {number} rowHeight \n * @param {boolean} cellEdition \n * @return {!Object}\n */\nfunction generateRow(wrapper, columns, index, $, rowHeight, cellEdition) {\n return { \n rowId: index,\n height: rowHeight,\n cells: columns.map(column => generateCell($, wrapper, index, column, cellEdition))\n };\n}\n","// React\nimport { useEffect } from 'react';\nimport { tap, interval } from 'rxjs';\n\n// Internal\nimport { triggerRedraw } from './triggers';\n\n/**\n * @param {!BrickContext} $\n */\nexport function initScroll($) {\n // Auto-redraw on scroll (fix fast scrolling issue)\n $.set('_rgLastScroll', 0);\n $.set('_rgLastScrollRedraw', 0);\n interval(1000)\n .pipe(tap(() => {\n if($.get('_rgLastScroll') !== $.get('_rgLastScrollRedraw')) {\n $.set('_rgLastScrollRedraw', $.get('_rgLastScroll'));\n triggerRedraw($);\n }\n }))\n .subscribe();\n}\n\n/**\n * @param {!BrickContext} $\n * @param {!*} ref\n */\nexport function useRedrawAfterScroll($, ref) {\n const registerScroll = () => $.set('_rgLastScroll', Date.now());\n useEffect(() => {\n if (ref.current) {\n ref.current.parentElement.style.overflow = 'visible';\n ref.current.addEventListener('scroll', registerScroll);\n }\n return () => {\n if (ref.current) {\n ref.current.removeEventListener('scroll', registerScroll);\n }\n };\n }, [ref]);\n}\n\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n/**\n * @param {!BrickContext} $\n * @return {!Observable}\n */\nexport function initTriggers($) {\n return $.observe('Reload', false);\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function useRedraw($) {\n useProperty($, 'Redraw');\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function triggerRedraw($) {\n $.trigger('Redraw');\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function triggerReload($) {\n $.trigger('Reload');\n}\n\n","// Olympe\nimport { CloudObject } from 'olympe';\n\n// Rxjs\nimport { tap, map } from 'rxjs';\n\n// Json\nimport { JSONPath } from 'jsonpath-plus';\n\n// Internal\nimport { warn, trimPath } from './helpers';\nimport { getModelPropertiesName, findObjectProperty } from './cloudobjects';\nimport { isChevronCellExpanded } from './cells';\n\n/**\n * @typedef RGWrapper\n * @property {!*} rgObject - The wrapped object\n * @property {!Array} rgChildren - Potential children of the object\n * @property {function():string} rgGetKey - Get a unique key\n * @property {string} _rgType - The type of the wrapped object\n * @property {number} _rgLevel - The level in the hierarchy\n * @property {function():!Array<string>} __rgProperties - Get all the properties name\n * @property {function(string):!*} __rgGetProperty - Get a property by its path\n * @property {function(string):!*} __rgGetValue - Get a value for a path\n * @property {function(string):!*} __rgGetObject - Get the object for a path\n */\nexport const RGWrapper = {};\n\n/**\n * Init the internal data state, make sure it is an array\n * @param {!BrickContext} $ \n * @param {!Observable} _data \n * @return {!Observable}\n */\nexport function initWrappers($, _data) {\n // Observe the data\n return _data\n\n // Wrap all objects\n .pipe(map(data => data.map(d => rgWrap(d))))\n\n // Set the transformed data into _Data\n .pipe(tap(wrappers => $.set('_rgWrappers', wrappers)));\n}\n\n/**\n * @param {!*} object \n * @param {number=} level \n * @return {!RGWrapper} \n */\nexport function rgWrap(object, level) {\n // Already wrapped -> rewrap missing properties\n if(object.hasOwnProperty('rgObject')) {\n const missingProps = ['rgChildren', 'rgGetKey', '_rgType', '_rgLevel',\n '__rgProperties', '__rgGetProperty', '__rgGetValue',\n '__rgGetObject'].filter(prop => !object.hasOwnProperty(prop));\n if(missingProps.length > 0) {\n const wrapped = rgWrap(object.rgObject, level ?? 0);\n return missingProps.reduce((acc, cur) => {\n acc[cur] = wrapped[cur];\n return acc;\n }, object);\n }\n return object;\n }\n\n // Tuple case\n if(Array.isArray(object)) {\n return wrapTuple(object, level ?? 0);\n }\n\n // CloudObject case\n if(object instanceof CloudObject) {\n return wrapCloudObject(object, level ?? 0);\n }\n\n // Object case\n if(typeof object === 'object') {\n return wrapObject(object, level ?? 0);\n }\n\n // Wrong type\n warn('some data are not of the following type: Object, CloudObject, Array');\n return defaultWrap(level ?? 0);\n}\n\n/**\n * @param {!Object} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapObject(object, level) {\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => Object.values(object).join('.'),\n _rgType: 'object',\n _rgLevel: level,\n __rgProperties: () => Object.keys(object),\n __rgGetProperty: path => trimPath(path),\n __rgGetValue: path => JSONPath({ path, json: object, wrap: false }),\n __rgGetObject: () => object\n };\n}\n\n/**\n * @param {!CloudObject} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapCloudObject(object, level) {\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => object.getTag(),\n _rgType: 'cloudobject',\n _rgLevel: level,\n __rgProperties: () => getModelPropertiesName(object),\n __rgGetProperty: path => findObjectProperty(object, path),\n __rgGetValue: path => object.get(findObjectProperty(object, path)),\n __rgGetObject: () => object\n };\n}\n\n/**\n * @param {!Array} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapTuple(object, level) {\n const wrapped = object.map(o => rgWrap(o, level + 1));\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => `[${wrapped.map(w => w.rgGetKey()).join('.')}]`,\n _rgType: 'tuple',\n _rgLevel: level,\n __rgProperties: () => wrapped.map((w, i) => w.__rgProperties().map(p => `$[${i}].${p}`)).flat(),\n __rgGetProperty: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetProperty(subPath);\n },\n __rgGetValue: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetValue(subPath);\n },\n __rgGetObject: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetObject(subPath);\n }\n };\n}\n\n/**\n * @param {number=} level \n * @return {!RGWrapper} \n */\nexport function defaultWrap(level) {\n return wrapObject({}, level ?? 0);\n}\n\n/**\n * @param {string} path \n * @returns {![number, string]} \n */\nfunction splitTuplePath(path) {\n const endBracket = path.indexOf(']');\n const index = parseInt(path.substring(path.indexOf('[') + 1, endBracket));\n const subPath = trimPath(path.substring(endBracket + 1));\n return [index, subPath];\n}\n\n/**\n * @param {!BrickContext} $ \n * @param {!Array} wrappers \n * @param {number} level \n * @return {!Array}\n */\nfunction flatten($, wrappers, level) {\n return wrappers.flatMap(wrapper => {\n const isExpanded = isChevronCellExpanded($, wrapper);\n const children = isExpanded ? flatten($, wrapper.rgChildren, level + 1) : [];\n return [{ wrapper, level }, ...children]; \n });\n}\n\n/**\n * @param {!BrickContext} $ \n * @return {!Array}\n */\nexport function getFlattenWrappers($) {\n return flatten($, $.get('_rgWrappers'), 0);\n}\n","module.exports = require(\"@olympeio/core\");","module.exports = require(\"@silevis/reactgrid\");","module.exports = require(\"@silevis/reactgrid/styles.css\");","module.exports = require(\"jsonpath-plus\");","module.exports = require(\"react\");","module.exports = require(\"rxjs\");","module.exports = require(\"styled-jsx/style\");","module.exports = __WEBPACK_EXTERNAL_MODULE_olympe__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Import Olympe runtime or DRAW\nimport 'olympe';\n\n// Import project bricks (we use webpack-import-glob-loader to import all bricks)\nimport './common/helpers.js'; import './common/internal/box.js'; import './common/internal/cells.js'; import './common/internal/changes.js'; import './common/internal/cloudobjects.js'; import './common/internal/columns.js'; import './common/internal/data.js'; import './common/internal/helpers.js'; import './common/internal/rows.js'; import './common/internal/scroll.js'; import './common/internal/triggers.js'; import './common/internal/wrappers.js'; import './common/RGCreateColumnConfig.js'; import './common/RGGetChangeMetadata.js'; import './common/RGGetChangeProperties.js'; import './common/RGGroupTuplesByIndexes.js'; import './common/RGProcessChangesForCloudObjects.js'; import './common/RGProcessChangesForJSONString.js'; import './common/RGProcessChangesForObjects.js'; import './common/RGWrapObject.js';\n;\nimport './web/RGReactGrid.jsx';\n\n"],"names":["registerBrick","ReactBrick","useProperty","React","useCallback","useRef","useState","ReactGrid","initData","initWrappers","initFilteredColumns","useColumns","handleOnColumnResized","handleOnColumnsReordered","initRows","useRows","initBox","useBox","handleOnCellsChanged","initTriggers","useRedraw","initScroll","useRedrawAfterScroll","initCells","RGReactGrid","_ReactBrick","_classCallCheck","_callSuper","arguments","_inherits","_createClass","key","value","init","$","_reload","_data","_wrappers","_filteredColumns","getReactComponent","box","hidden","allowContentOverflow","fontSize","rows","columns","rangeSelection","rowSelection","colSelection","fillHandle","stickTop","stickBottom","stickLeft","stickRight","containerRef","_useState","x","y","_useState2","_slicedToArray","gridPosition","setGridPosition","updateBoxPosition","_containerRef$current","rect","current","getBoundingClientRect","left","top","createElement","ref","className","_JSXStyle","dynamic","width","height","onCellsChanged","bind","undefined","enableFillHandle","onFocusLocationChanged","stickyLeftColumns","stickyRightColumns","stickyTopRows","stickyBottomRows","enableRangeSelection","enableColumnSelection","enableRowSelection","onColumnResized","onColumnsReordered","id","concat","default"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"main-web.js","mappings":"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;AACA;AACA;;AAEA;AACA,wCAAwC,kDAAQ;AAChD;AACA,YAAY,8CAAI,wCAAwC,qBAAqB;AAC7E;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6DAA6D,yBAAyB;AACtF;AACA;AACA,4EAA4E,2BAA2B;AACvG,6EAA6E,6BAA6B;AAC1G,sEAAsE,sCAAsC;AAC5G;AACA;AACA;AACA;AACA,QAAQ,+CAAK,iCAAiC,YAAY;AAC1D;AACA;AACA;;AAEA;AACA;AACA,WAAW,SAAS;AACpB,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,0BAA0B;AACrC,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,0BAA0B;AACrC,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,gCAAgC,mDAAa;AAC7C;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,4EAA4E,IAAI,KAAK,kBAAkB;AACvG;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA,kBAAkB,MAAM,GAAG,gBAAgB;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB;AACO;AACP,kBAAkB,aAAa,GAAG,gBAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,WAAW,GAAG;AACd,WAAW,SAAS;AACpB,WAAW,SAAS;AACpB,WAAW,YAAY;AACvB,WAAW,eAAe;AAC1B,YAAY;AACZ;AACA;AACA,6BAA6B,mBAAmB;AAChD;AACA,oBAAoB,yCAAyC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB,WAAW,YAAY;AACvB;AACO;AACP,6BAA6B,mBAAmB;AAChD,gBAAgB,uCAAuC;AACvD;;AAEA;AACA,WAAW,eAAe;AAC1B,WAAW,YAAY;AACvB,YAAY;AACZ;AACO;AACP,6BAA6B,mBAAmB;AAChD;AACA;;AAEA;AACA,WAAW,eAAe;AAC1B,YAAY;AACZ;AACO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;ACzSA;AACmC;;AAEnC;AACiC;AACe;AAC0C;AACnD;AACI;;AAE3C;AACA,aAAa,QAAQ;AACrB,cAAc,wBAAwB;AACtC,cAAc,yBAAyB;AACvC,cAAc,GAAG;AACjB,cAAc,GAAG;AACjB,cAAc,aAAa;AAC3B;AACO;;AAEP;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,QAAQ;AACnB;AACO;AACP;AACA;AACA;AACA,QAAQ,8CAAI;AACZ;AACA;;AAEA;AACA;AACA,4BAA4B,6DAAkB;AAC9C;AACA;AACA;AACA;AACA;AACA,4BAA4B,oDAAU;AACtC;AACA;AACA;AACA;AACA,gBAAgB,8CAAI,8BAA8B,kBAAkB,WAAW,gBAAgB;AAC/F;AACA;;AAEA;AACA;AACA,gBAAgB,gEAAwB;AACxC;AACA;;AAEA;AACA;AACA,gBAAgB,+DAAuB;AACvC;AACA;;AAEA;AACA;AACA;AACA;AACA,0BAA0B,oDAAY;AACtC,0BAA0B,oDAAY;AACtC;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,wDAAa;AACzB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,6CAAS;AACzC;AACA;;AAEA;AACA;AACA,gBAAgB,wDAAa;AAC7B;AACA,SAAS;;AAET;AACA;AACA;;;;;;;;;;;;;;;;;;AClHqC;;AAErC;AACA;AACA,WAAW,cAAc;AACzB,WAAW,QAAQ;AACnB,YAAY;AACZ;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,YAAY;AACZ;AACO;AACP;AACA;AACA;;AAEA;AACA;AACA,WAAW,cAAc;AACzB,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,+CAAW;AAC/B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU;AACV;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7CA;AACqC;AACQ;;AAE7C;AACgE;;AAEhE;AACyC;AACO;;AAEhD;AACA;AACA,WAAW,eAAe;AAC1B,WAAW,aAAa;AACxB,YAAY;AACZ;AACO;AACP;AACA,8BAA8B,GAAG;AACjC,8BAA8B,GAAG;;AAEjC;AACA,WAAW,mDAAa;AACxB;AACA;AACA,kBAAkB,yCAAG,6BAA6B,sDAAW;AAC7D,kBAAkB,0DAAoB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA,cAAc,yCAAG;AACjB;AACA;AACA;AACA;;AAEA;AACA;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","sources":["webpack://@olympeio-extensions/reactgrid/webpack/universalModuleDefinition","webpack://@olympeio-extensions/reactgrid/./src/web/RGReactGrid.jsx","webpack://@olympeio-extensions/reactgrid/./src/common/RGCreateColumnConfig.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGetChangeMetadata.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGetChangeProperties.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGGroupTuplesByIndexes.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForCloudObjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForJSONString.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGProcessChangesForObjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/RGWrapObject.js","webpack://@olympeio-extensions/reactgrid/./src/common/helpers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/box.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/cells.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/changes.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/cloudobjects.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/columns.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/data.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/helpers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/rows.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/scroll.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/triggers.js","webpack://@olympeio-extensions/reactgrid/./src/common/internal/wrappers.js","webpack://@olympeio-extensions/reactgrid/external commonjs \"@olympeio/core\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"@silevis/reactgrid\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"@silevis/reactgrid/styles.css\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"jsonpath-plus\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"react\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"rxjs\"","webpack://@olympeio-extensions/reactgrid/external commonjs \"styled-jsx/style\"","webpack://@olympeio-extensions/reactgrid/external umd \"olympe\"","webpack://@olympeio-extensions/reactgrid/webpack/bootstrap","webpack://@olympeio-extensions/reactgrid/webpack/runtime/compat get default export","webpack://@olympeio-extensions/reactgrid/webpack/runtime/define property getters","webpack://@olympeio-extensions/reactgrid/webpack/runtime/hasOwnProperty shorthand","webpack://@olympeio-extensions/reactgrid/webpack/runtime/make namespace object","webpack://@olympeio-extensions/reactgrid/./src/main-web.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"olympe\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"olympe\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@olympeio-extensions/reactgrid\"] = factory(require(\"olympe\"));\n\telse\n\t\troot[\"@olympeio-extensions/reactgrid\"] = factory(root[\"olympe\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE_olympe__) => {\nreturn ","// Olympe\nimport { registerBrick } from 'olympe';\nimport { ReactBrick, useProperty } from '@olympeio/core';\n\n// React\nimport React, {useCallback, useRef, useState} from 'react';\nimport { ReactGrid } from '@silevis/reactgrid';\nimport '@silevis/reactgrid/styles.css';\n\n// Internal\nimport { initData } from '../common/internal/data';\nimport { initWrappers } from '../common/internal/wrappers';\nimport { initFilteredColumns, useColumns, handleOnColumnResized, handleOnColumnsReordered } from '../common/internal/columns';\nimport { initRows, useRows } from '../common/internal/rows';\nimport { initBox, useBox } from '../common/internal/box';\nimport { handleOnCellsChanged } from '../common/internal/changes';\nimport { initTriggers, useRedraw } from '../common/internal/triggers';\nimport { initScroll, useRedrawAfterScroll } from '../common/internal/scroll';\nimport { initCells } from '../common/internal/cells';\n\nexport default class RGReactGrid extends ReactBrick {\n\n /**\n * @override\n */\n init($) {\n // Data/Config to Rows/Columns flow\n initCells($);\n const _reload = initTriggers($);\n const _data = initData($, _reload);\n const _wrappers = initWrappers($, _data);\n const _filteredColumns = initFilteredColumns($, _wrappers);\n initRows($, _wrappers, _filteredColumns);\n\n // Bounding box flow\n initBox($);\n\n // Scroll \n initScroll($);\n }\n\n /**\n * @override\n */\n static getReactComponent($) {\n return () => {\n // Display\n const box = useBox($);\n const hidden = useProperty($, 'Hidden');\n const allowContentOverflow = useProperty($, 'Allow Content Overflow');\n const fontSize = useProperty($, 'Font Size');\n\n // Data\n const rows = useRows($);\n const columns = useColumns($);\n\n // Behaviors\n const rangeSelection = useProperty($, 'Enable Range Selection');\n const rowSelection = useProperty($, 'Enable Row Selection');\n const colSelection = useProperty($, 'Enable Column Selection');\n const fillHandle = useProperty($, 'Enable Fill Handle');\n\n // Sticky\n const stickTop = useProperty($, 'Sticky Top Rows');\n const stickBottom = useProperty($, 'Sticky Bottom Rows');\n const stickLeft = useProperty($, 'Sticky Left Columns');\n const stickRight = useProperty($, 'Sticky Right Columns');\n\n // Redraw hook\n const containerRef = useRef();\n useRedrawAfterScroll($, containerRef);\n useRedraw($);\n\n // Compute the global position of the grid to set the editor cell in the right place\n const [gridPosition, setGridPosition] = useState({ x: 0, y: 0 });\n const updateBoxPosition = useCallback(() => {\n const rect = containerRef.current?.getBoundingClientRect();\n setGridPosition({ x: rect.left, y: rect.top });\n }, []);\n\n // Render the grid\n return (\n <div ref={containerRef}>\n {/* ReactGrid component */}\n <ReactGrid\n // Data\n rows={rows}\n columns={columns}\n onCellsChanged={handleOnCellsChanged.bind(undefined, $)}\n enableFillHandle={fillHandle}\n onFocusLocationChanged={updateBoxPosition} // Compute the global position of the grid to set the editor cell in the right place\n\n // Sticky\n stickyLeftColumns={stickLeft}\n stickyRightColumns={stickRight}\n stickyTopRows={stickTop}\n stickyBottomRows={stickBottom}\n\n // Selection\n enableRangeSelection={rangeSelection}\n enableColumnSelection={colSelection}\n enableRowSelection={rowSelection}\n\n // Resizing\n onColumnResized={handleOnColumnResized.bind(undefined, $)}\n\n // Reordering\n onColumnsReordered={handleOnColumnsReordered.bind(undefined, $)}\n />\n\n {/* Styling */}\n <style jsx>{`\n // Wrapper styling\n div {\n display: ${hidden ? 'none' : 'inline-block'};\n width: ${box.width}px;\n height: ${box.height}px;\n overflow: ${allowContentOverflow ? 'visible' : 'scroll'};\n font-family: 'Roboto', sans-serif;\n }\n\n // Hack: put the editor cell in the right place, based on the computed global position of the grid\n div :global(.rg-celleditor) {\n font-size: ${fontSize}px !important;\n transform: translate(${-gridPosition.x}px, ${-gridPosition.y}px);\n }\n\n // Pane styling\n div :global(.rg-pane) {\n box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.1);\n background-color: #fff; \n }\n\n // General cell styling\n div :global(.rg-cell) {\n padding: 10px;\n font-size: ${fontSize}px !important;\n border-bottom: 1px solid #e0e0e0;\n color: rgba(0, 0, 0, 0.87);\n transition: background-color 0.2s ease-in-out;\n }\n\n // Header cell styling to match MUI Table header\n div :global(.rg-header-cell) {\n background-color: #f5f5f5;\n font-weight: 500;\n color: rgba(0, 0, 0, 0.87);\n font-size: 14px;\n border-bottom: 1px solid #e0e0e0;\n padding: 12px;\n }\n\n // Number cell styling\n div :global(.rg-number-cell) {\n text-align: right;\n padding-right: 14px;\n color: rgba(0, 0, 0, 0.87);\n padding-left: 12px;\n }\n\n // Text cell styling\n div :global(.rg-text-cell) {\n text-align: left;\n color: rgba(0, 0, 0, 0.87);\n padding-left: 12px;\n }\n\n // Hover effect for cells to look like MUI Table rows\n div :global(.rg-cell):hover {\n background-color: #f5f5f5;\n }\n\n // Scrollbar styling to match MUI's scrollbars\n div::-webkit-scrollbar {\n display: block;\n width: 8px;\n height: 8px;\n }\n div::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: 4px;\n }\n div::-webkit-scrollbar-track {\n background-color: #f0f0f0;\n }\n `}</style>\n </div>\n );\n };\n }\n}\n\nregisterBrick('019154c4600798f105aa', RGReactGrid);\n","import { Brick, registerBrick } from 'olympe';\nimport { fromJson } from './helpers';\n\nexport default class RGCreateColumnConfig extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {number} rank\n * @param {string} propertyPath\n * @param {string} header\n * @param {number} width\n * @param {string} type\n * @param {string|!Object} options\n * @param {boolean} editable\n * @param {boolean} resizable\n * @param {number} level\n * @param {function(!Object)} setObject\n */\n update(_$, [rank, propertyPath, header, width, type, options, editable, resizable, level], [setObject]) {\n setObject({\n Rank: rank,\n 'Property Path': propertyPath,\n Header: header,\n Width: width,\n Type: type,\n Options: fromJson(options)[0],\n Editable: editable,\n Resizable: resizable,\n Level: level\n });\n }\n}\n\nregisterBrick('01921d9038d9eb72f609', RGCreateColumnConfig);\n","import { Brick, registerBrick } from 'olympe';\n\nexport default class RGGetChangeMetadata extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!RGChange} change\n * @param {function(!Object)} setNewCell\n * @param {function(!Object)} setPreviousCell\n * @param {function(string|number)} setRowId\n * @param {function(string|number)} setColumnId\n * @param {function(string)} setType\n */\n update(_$, [change], [setNewCell, setPreviousCell, setRowId, setColumnId, setType]) {\n setNewCell(change.metadata.newCell);\n setPreviousCell(change.metadata.previousCell);\n setRowId(change.metadata.rowId);\n setColumnId(change.metadata.columnId);\n setType(change.metadata.type);\n }\n}\n\nregisterBrick('01920a4d4d8390252c91', RGGetChangeMetadata);\n","import { Brick, registerBrick } from 'olympe';\n\nexport default class RGGetChangeProperties extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!RGChange} change\n * @param {function(!Object|!CloudObject)} setObject\n * @param {function(!Object|!CloudObject)} setProperty\n * @param {function(!*)} setNewValue\n * @param {function(!*)} setOldValue\n */\n update(_$, [change], [setObject, setProperty, setNewValue, setOldValue]) {\n setObject(change.object);\n setProperty(change.property);\n setNewValue(change.newValue);\n setOldValue(change.oldValue);\n }\n}\n\nregisterBrick('0192055d7857bd08279c', RGGetChangeProperties);\n","import { Brick, registerBrick } from 'olympe';\nimport { rgWrap, RGWrapper } from './helpers';\n\nexport default class RGGroupTuplesByIndexes extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array} data\n * @param {string} indexes\n * @param {function(!Array)} setGroupedData\n */\n update(_$, [data, indexes], [setGroupedData]) {\n // Get the indexes and make the grouping recursively\n const _indexes = indexes.split(',').map(index => parseInt(index));\n setGroupedData(groupBy(data.map(d => rgWrap(d)), _indexes, 0));\n }\n}\n\nregisterBrick('0192288806aa3cc82b95', RGGroupTuplesByIndexes);\n\n/**\n * Group data by indexes, for the given level\n * @param {!Array} wrappers\n * @param {!Array<number>} indexes\n * @param {number} level\n * @return {!Array}\n */\nfunction groupBy(wrappers, indexes, level) {\n // End of recursion\n if(level >= indexes.length || !Array.isArray(wrappers)) {\n return wrappers;\n }\n\n // Get the current working index\n const index = indexes[level] - level;\n\n // Group the data in a Map\n const groupedWrappers = wrappers.reduce((parents, wrapper) => {\n // Split the tuple into parts\n const [wrapped, child] = splitTuple(wrapper, index, level);\n const key = wrapped.rgGetKey();\n\n // If this key is not in a group yet\n if(!parents.has(key)) {\n // Create the new group\n parents.set(key, wrapped);\n }\n\n // If there is a child, add it to the group\n // (group the child itself also)\n if(child) {\n const parent = parents.get(key);\n parent.rgChildren.push(child);\n }\n\n // Done\n return parents;\n }, new Map());\n\n // Apply the grouping on the children\n return Array.from(groupedWrappers.values()).map(({ rgChildren, ...others }) => ({\n rgChildren: groupBy(rgChildren.map(c => rgWrap(c, level + 1)), indexes, level + 1),\n ...others\n }));\n}\n\n/**\n * @param {!RGWrapper} wrapper \n * @param {number} index \n * @param {number} level \n * @return {[!RGWrapper, *]}\n */\nfunction splitTuple(wrapper, index, level) {\n // Real tuple case\n if(wrapper._rgType === 'tuple') {\n // Extract the info\n const tuple = wrapper.rgObject;\n const wrapped = rgWrap(tuple[index], level);\n const before = tuple.slice(0, index);\n const after = tuple.slice(index + 1);\n const child = [...before, ...after];\n \n // Handle all cases\n if(child.length > 1) {\n return [wrapped, child];\n }\n else if(child.length > 0) {\n return [wrapped, child[0]];\n }\n else {\n return [wrapped, null];\n }\n }\n\n // Not a tuple case\n else {\n return [wrapper, null];\n }\n}\n","import { ActionBrick, registerBrick, Transaction, ErrorFlow } from 'olympe';\n\nexport default class RGProcessChangesForCloudObjects extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {boolean} executeAsLarge\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n */\n update(_$, [changes, executeAsLarge], [forwardEvent, setErrorFlow]) {\n const t = new Transaction();\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(change.metadata.newCell.validator?.(change.newValue) ?? true) {\n t.update(change.object, change.property, change.newValue);\n }\n else {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n const promise = executeAsLarge ? t.executeAsLarge() : t.execute();\n promise.then(forwardEvent)\n .catch(error => setErrorFlow(ErrorFlow.create(error.message, 0)));\n }\n}\n\nregisterBrick('01920a8134e1cf0fa551', RGProcessChangesForCloudObjects);\n","import { ActionBrick, registerBrick, ErrorFlow } from 'olympe';\nimport { fromJson } from './helpers';\n\nexport default class RGProcessChangesForJSONString extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {string} json\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n * @param {function(string)} setNewJson\n */\n update(_$, [changes, json], [forwardEvent, setErrorFlow, setNewJson]) {\n const [data, error] = fromJson(json);\n if(!error) {\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(change.metadata.newCell.validator?.(change.newValue) ?? true) {\n data[change.metadata.rowId][change.property] = change.newValue;\n }\n else {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n setNewJson(JSON.stringify(data));\n forwardEvent();\n }\n else {\n setErrorFlow(ErrorFlow.create(`input 'json' is not valid, error: ${error.message}`, 0));\n }\n }\n}\n\nregisterBrick('01921e064dbe25faec55', RGProcessChangesForJSONString);\n","import { ActionBrick, registerBrick, ErrorFlow } from 'olympe';\n\nexport default class RGProcessChangesForObjects extends ActionBrick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!Array<!RGChange>} changes\n * @param {boolean} inPlace\n * @param {Array} data\n * @param {function()} forwardEvent\n * @param {function(!ErrorFlow)} setErrorFlow\n */\n update(_$, [changes, inPlace, data], [forwardEvent, setErrorFlow]) {\n const errors = ['No changes applied because:'];\n changes.forEach(change => {\n if(!(change.metadata.newCell.validator?.(change.newValue) ?? true)) {\n errors.push(`This value is not valid: ${change.newValue}`);\n }\n });\n if(errors.length > 1) {\n setErrorFlow(ErrorFlow.create(errors.join('\\n'), 1));\n return;\n }\n if(inPlace) {\n changes.forEach(change => {\n change.object[change.property] = change.newValue;\n });\n }\n else {\n changes.forEach(change => {\n data[change.metadata.rowId][change.property] = change.newValue;\n });\n }\n forwardEvent();\n }\n}\n\nregisterBrick('01921e0d2b383c95bd22', RGProcessChangesForObjects);\n","import { Brick, registerBrick } from 'olympe';\nimport { rgWrap, RGWrapper } from './helpers';\n\nexport default class RGWrapObject extends Brick {\n\n /**\n * @override\n * @protected\n * @param {!BrickContext} $\n * @param {!*} object\n * @param {number} level\n * @param {function(!RGWrapper)} setWrapped\n */\n update(_$, [object, level], [setWrapped]) {\n setWrapped(rgWrap(object, level));\n }\n}\n\nregisterBrick('019232c3d1873de0d259', RGWrapObject);\n","// Re-export\nexport { rgWrap, RGWrapper } from './internal/wrappers';\nexport { RGChange } from './internal/changes';\nexport { fromJson } from './internal/helpers';\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { tap, combineLatest, throttleTime } from 'rxjs';\n\n/**\n * Init the bounding box\n * @param {!BrickContext} $ \n */\nexport function initBox($) {\n // Listen to the component position and size\n combineLatest([$.observe('Width'), $.observe('Height')])\n\n // Debounce the changes to avoid to many rerendering\n .pipe(throttleTime(100, undefined, { leading: true, trailing: true }))\n\n // Set the final box\n .pipe(tap(([width, height]) => $.set('_rgBox', { width, height })))\n\n // Run \n .subscribe();\n}\n\n/**\n * @param {!BrickContext}\n * @return {!*}\n */\nexport function useBox($) {\n return useProperty($, '_rgBox') ?? {width: $.get('Width'), height: $.get('Height') };\n}\n\n","// Internal\nimport { fromJson, validateEmail, error, warn } from './helpers';\n\n/**\n * @param {!BrickContext} $\n */\nexport function initCells($) {\n $.set('_rgDropdownIsOpen', '');\n $.set('_rgDropdownInputValue', '');\n}\n\n/**\n * Generate a cell for the defined wrapper/column\n * @param {!BrickContext} $\n * @param {!RGWrapper} wrapper\n * @param {number} rowId\n * @param {!Object} column\n * @param {boolean} cellEdition\n * @return {!Object}\n */\nexport function generateCell($, wrapper, rowId, column, cellEdition) {\n try {\n // Get the cell value\n const value = wrapper.__rgGetValue(column['Property Path'] ?? '');\n\n // Get the options\n const [options, optionsError] = fromJson(column.Options);\n if(optionsError) {\n warn(`cannot parse column options, error: ${optionsError.message}`);\n }\n const validator = options.validator ? s => new RegExp(options.validator).test(s) : undefined;\n const common = {\n nonEditable: cellEdition === 'DISABLED' || (cellEdition === 'USE CONFIG' && !column.Editable),\n style: getCellStyle($)\n };\n\n // Generate the cell depending on the type\n switch(column.Type) {\n case 'TEXT': return generateTextCell(value, options, common, column, validator);\n case 'NUMBER': return generateNumberCell(value, options, common);\n case 'EMAIL': return generateEmailCell(value, common, validator);\n case 'DATE': \n case 'TIME': return generateDateTimeCell(value, options, common, column);\n case 'CHECKBOX': return generateCheckboxCell(value, options, common);\n case 'DROPDOWN': return generateDropdownCell(value, options, common, column, $, rowId);\n case 'HEADER': return generateHeaderCell(value, options, common);\n case 'CHEVRON': return generateChevronCell(value, options, common, wrapper, $);\n\n // AUTO case\n default:\n if(value instanceof Date) {\n return generateCell($, wrapper, rowId, { ...column, Type: 'DATE' }, cellEdition);\n }\n switch(typeof value) {\n case 'number': return generateCell($, wrapper, rowId, { ...column, Type: 'NUMBER' }, cellEdition);\n case 'boolean': return generateCell($, wrapper, rowId, { ...column, Type: 'CHECKBOX' }, cellEdition);\n default: return generateCell($, wrapper, rowId, { ...column, Type: 'TEXT', _cast: true }, cellEdition);\n }\n }\n }\n catch(err) {\n error(`cannot generate cell, error: ${err.message}`);\n return errorCell();\n }\n}\n\n/**\n * Get the cell value, depending on its type\n * @param {!Object} cell\n * @return {*}\n */\nexport function getCellValue(cell) {\n switch(cell.type) {\n case 'number': return cell.value;\n case 'date': return cell.date;\n case 'time': return cell.time;\n case 'checkbox': return cell.checked;\n case 'dropdown': return cell.selectedValue;\n default: return cell.text;\n }\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @param {function(string):boolean} validator \n * @return {!TextCell} \n */\nfunction generateTextCell(value, options, common, column, validator) {\n return {\n type: 'text',\n text: (column._cast ? String(value ?? '') : value ?? ''),\n placeholder: options.placeholder,\n validator: validator,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!NumberCell} \n */\nfunction generateNumberCell(value, options, common) {\n return {\n type: 'number',\n value: value,\n format: new Intl.NumberFormat(options.locale, options.format),\n nanToZero: options.nanToZero,\n hideZero: options.hideZero,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} common \n * @param {function(string):boolean} validator \n * @return {!EmailCell} \n */\nfunction generateEmailCell(value, common, validator) {\n return {\n type: 'email',\n text: value ?? '',\n validator: validator ?? validateEmail,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @return {!DateCell|!TimeCell} \n */\nfunction generateDateTimeCell(value, options, common, column) {\n const type = column.Type.toLowerCase();\n return {\n type: type,\n [type]: value instanceof Date ? value : new Date(value),\n format: new Intl.DateTimeFormat(options.locale, options.format ?? { [`${type}Style`]: 'short' }),\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!CheckboxCell} \n */\nfunction generateCheckboxCell(value, options, common) {\n return {\n type: 'checkbox',\n checked: Boolean(value ?? false),\n checkedText: options.checkedText,\n uncheckedText: options.uncheckedText,\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!Object} column\n * @param {!BrickContext} $ \n * @param {number} rowId\n * @return {!DropdownCell} \n */\nfunction generateDropdownCell(value, options, common, column, $, rowId) {\n const id = `${rowId}.${column.columnId}`;\n const isOpen = id === $.get('_rgDropdownIsOpen');\n const inputValue = isOpen ? $.get('_rgDropdownInputValue') : '';\n return {\n type: 'dropdown',\n selectedValue: value,\n values: options.values ?? [],\n isDisabled: options.isDisabled,\n isOpen: isOpen,\n inputValue: inputValue,\n ...common\n };\n}\n\n/**\n * Handle the dropdowns internal states\n * @param {!BrickContext} $ \n * @param {!CellChange} change \n */\nexport function handleDropdownCellChange($, change) {\n const id = `${change.rowId}.${change.columnId}`;\n if(change.newCell.isOpen && !change.newCell.isDisabled) {\n $.set('_rgDropdownIsOpen', id);\n $.set('_rgDropdownInputValue', change.newCell.inputValue);\n }\n else {\n $.set('_rgDropdownIsOpen', '');\n $.set('_rgDropdownInputValue', '');\n }\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @return {!HeaderCell} \n */\nfunction generateHeaderCell(value, options, common) {\n return {\n type: 'header',\n text: value ?? options.text ?? '',\n ...common\n };\n}\n\n/**\n * @param {*} value \n * @param {!Object} options \n * @param {!Object} common \n * @param {!RGWrapper} wrapper\n * @param {!BrickContext} $ \n * @return {!ChevronCell} \n */\nfunction generateChevronCell(value, options, common, wrapper, $) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n if(!$.has(id)) {\n $.set(id, { isExpanded: options.isExpanded ?? false });\n }\n const state = $.get(id);\n return {\n type: 'chevron',\n text: value ?? options.text ?? '',\n indent: options.indent,\n hasChildren: wrapper.rgChildren.length > 0,\n ...state,\n ...common\n };\n}\n\n/**\n * Handle the chevrons internal states\n * @param {!BrickContext} $ \n * @param {!CellChange} change \n * @param {!RGWrapper} wrapper \n */\nexport function handleChevronCellChange($, change, wrapper) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n $.set(id, { isExpanded: change.newCell.isExpanded });\n}\n\n/**\n * @param {!BrickContext} $ \n * @param {!RGWrapper} wrapper \n * @return {boolean}\n */\nexport function isChevronCellExpanded($, wrapper) {\n const id = `_rgChevron.${wrapper.rgGetKey()}`;\n return $.get(id)?.isExpanded ?? false;\n}\n\n/**\n * @param {!BrickContext} $\n * @return {!Object}\n */\nexport function getCellStyle($) {\n const borderStyle = { \n color: $.get('Border Color'),\n width: $.get('Border Width') \n };\n return {\n background: $.get('Default Color'),\n border: {\n left: borderStyle,\n top: borderStyle,\n right: borderStyle,\n bottom: borderStyle\n }\n };\n}\n\n/**\n * @return {!TextCell}\n */\nfunction errorCell() {\n return {\n type: 'text',\n text: '!ERROR',\n nonEditable: true,\n style: {\n color: 'red'\n }\n };\n}\n","// Olympe\nimport { ErrorFlow } from 'olympe';\n\n// Internal\nimport { warn } from './helpers';\nimport { getFlattenWrappers } from './wrappers';\nimport { handleDropdownCellChange, handleChevronCellChange, getCellValue } from './cells';\nimport { getColumns } from './columns';\nimport { triggerReload } from './triggers';\n\n/**\n * @typedef {Object} RGChange\n * @property {(!Object|!CloudObject)} object\n * @property {(string|!PropertyModel)} property\n * @property {*} oldValue\n * @property {*} newValue\n * @property {!CellChange} metadata\n */\nexport const RGChange = {};\n\n/**\n * Process the changes event from the reactgrid, and forward it to a lambda\n * @param {!BrickContext} $ \n * @param {!Array} changes \n */\nexport function handleOnCellsChanged($, changes) {\n // Only process changes when a lambda is defined\n const processor = $.get('Process Changes');\n if(!processor) {\n warn('no change is processed, the `Process Changes` lambda is no defined');\n return;\n }\n\n // Adapt the changes to olympe\n let internalStateChanged = false;\n const flattenWrappers = getFlattenWrappers($);\n const _changes = changes\n // Transform the changes to work well with Olympe\n .map(change => {\n // Get the required data\n const wrapper = flattenWrappers[change.rowId].wrapper;\n const columns = getColumns($, wrapper._rgLevel);\n const column = columns.find(c => c.Rank === change.columnId);\n \n // Guard\n if(column === undefined) {\n warn(`no column found for level ${wrapper._rgLevel} and rank ${change.columnId}`);\n return null;\n }\n\n // Handle dropdowns states\n if(change.type === 'dropdown') {\n handleDropdownCellChange($, change);\n internalStateChanged = true;\n }\n\n // Handle chevrons states\n else if(change.type === 'chevron') {\n handleChevronCellChange($, change, wrapper);\n internalStateChanged = true;\n }\n\n // Create the RGChange object\n return {\n object: wrapper.__rgGetObject(column['Property Path']),\n property: wrapper.__rgGetProperty(column['Property Path']),\n oldValue: getCellValue(change.previousCell),\n newValue: getCellValue(change.newCell),\n metadata: change\n };\n })\n // Filter out null change\n .filter(change => change !== null)\n // Filter out the dropdown change that are only about the internal state\n .filter(change => change.metadata.type !== 'dropdown' || change.newValue !== change.oldValue)\n // Filter out the chevron change that are only about the internal state\n .filter(change => change.metadata.type !== 'chevron' || change.newValue !== change.oldValue)\n // Filter out changes with no value, only if there is change with value -> hack to fix paste from excel until a better solution\n .filter((change, _index, all) => change.newValue !== \"\" || all.every(c => c.newValue === \"\"));\n\n // Guard\n if(_changes.length === 0) {\n if(internalStateChanged) {\n triggerReload($);\n }\n return;\n }\n\n // Call the lambda\n const [iFlow, iChanges] = processor.getInputs();\n const [oFlow, oErrorFlow] = processor.getOutputs();\n const processor$ = $.runner(processor);\n processor$.set(iChanges, _changes);\n processor$.trigger(iFlow);\n\n // Wait for the end of it\n Promise.race([\n processor$.waitFor(oFlow), \n processor$.waitFor(oErrorFlow)\n ])\n .then(value => {\n // In case of error, throw it again\n if(value instanceof ErrorFlow) {\n $.throw(value);\n }\n\n // Success\n else {\n triggerReload($);\n }\n })\n\n // Free the lambda\n .finally(() => processor$.destroy());\n}\n","import { CloudObject } from 'olympe';\n\n/**\n * Find an object property based on its name\n * @param {!CloudObject} object\n * @param {string} path\n * @return {!PropertyModel}\n */\nexport function findObjectProperty(object, path) {\n const mapping = getModelPropertiesMapping(object);\n return mapping.get(path);\n}\n\n/**\n * Get all properties name of an object\n * @param {!CloudObject} object\n * @return {!Array<string>}\n */\nexport function getModelPropertiesName(object) {\n const mapping = getModelPropertiesMapping(object);\n return Array.from(mapping.keys());\n}\n\n/**\n * Get an object model properties mapping\n * @param {!CloudObject} object\n * @return {!Map<string, PropertyModel>}\n */\nfunction getModelPropertiesMapping(object) {\n const model = object.getModel();\n if(!modelProperties.has(model.getTag())) {\n const mapping = new Map();\n model.query()\n .follow(CloudObject.propertyRel)\n .executeFromCache()\n .forEach(property => mapping.set(property.name(), property));\n modelProperties.set(model.getTag(), mapping);\n }\n return modelProperties.get(model.getTag());\n}\n\n/**\n * Singleton map for model properties mapping (name <-> instance)\n * @type {!Map<string, !Map<string, PropertyModel>>}\n */\nconst modelProperties = new Map();\n\n","// Olympe\nimport { CloudObject } from 'olympe';\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { combineLatest, map, distinctUntilChanged } from 'rxjs';\n\n// Internal\nimport { defaultWrap } from './wrappers';\nimport { reorderObject, warn } from './helpers';\n\n/**\n * Init the columns\n * @param {!BrickContext} $ \n * @param {!Observable} _wrappers \n * @return {!Observable}\n */\nexport function initFilteredColumns($, _wrappers) {\n // Internal states\n $.set('_rgColumnWidth', {}); // Column width overrides\n $.set('_rgColumnOrder', {}); // Column order (rank) overrides\n\n // Listen to the config and the _wrappers first object properties\n return combineLatest([\n $.observe('Config', false),\n _wrappers\n .pipe(map(wrappers => (wrappers[0] ?? defaultWrap()).__rgProperties()))\n .pipe(distinctUntilChanged()),\n $.observe('Enable Column Reordering', false),\n $.observe('_rgColumnWidth'),\n $.observe('_rgColumnOrder'),\n $.observe('Default Width')\n ])\n\n // Build the columns\n .pipe(map(([config, properties, ...others]) => {\n // Config is set by the user\n if (config) {\n return [config, ...others];\n }\n\n // Config is auto-generated from the data\n if (properties.length > 0) {\n return [\n properties.map((path, index) => ({ 'Property Path': path, Type: 'AUTO', Rank: index })),\n ...others\n ];\n }\n\n // Empty config\n return [[], ...others];\n }))\n\n // Transform to an array of objects\n .pipe(map(([config, reorderableColumns, columnWidth, columnOrder, defaultWidth]) => {\n return config\n .map(column => column instanceof CloudObject ? column.toObject(true, true) : column)\n .sort((a, b) => getColumnRank(a, columnOrder) - getColumnRank(b, columnOrder))\n .map(column => generateColumn(column, reorderableColumns, columnWidth, defaultWidth));\n }))\n\n // Cache the filtered columns (per level) for quick access\n .pipe(map(columns => {\n const filteredColumns = filterLevelledColumns(columns);\n $.set('_rgFilteredColumns', filteredColumns);\n return filteredColumns;\n }));\n}\n\n/**\n * @param {!BrickContext} $\n * @return {!*}\n */\nexport function useColumns($) {\n const filteredColumns = useProperty($, '_rgFilteredColumns');\n return filteredColumns?.get(0) ?? [];\n}\n\n/**\n * @param {!BrickContext} $\n * @param {number} level \n * @return {!Array}\n */\nexport function getColumns($, level) {\n const filteredColumns = $.get('_rgFilteredColumns');\n return filteredColumns?.get(level ?? 0) ?? [];\n}\n\n/**\n * Handle the resizing of columns\n * @param {!BrickContext} $ \n * @param {string} columnId \n * @param {number} width \n */\nexport function handleOnColumnResized($, columnId, width) {\n const currentCols = { ...$.get('_rgColumnWidth') };\n currentCols[columnId] = width;\n $.set('_rgColumnWidth', currentCols);\n}\n\n/**\n * @param {!Array} columns\n * @return {!Map<number, !Array>}\n */\nfunction filterLevelledColumns(columns) {\n // Group the columns by rank and save all levels\n const levels = new Set();\n const perRank = columns.reduce((acc, cur) => {\n const rank = cur.Rank ?? 0;\n if(!acc.has(rank)) {\n acc.set(rank, []);\n }\n acc.get(rank).push(cur);\n levels.add(cur.Level ?? 0);\n return acc;\n }, new Map());\n const allRanks = Array.from(perRank.keys());\n\n // Get the columns for each level\n const filterLevel = level => {\n return allRanks.map(rank => {\n const rankColumns = perRank.get(rank);\n const atLevel = rankColumns.find(column => (column.Level ?? 0) === level);\n const generic = rankColumns.find(column => (column.Level ?? 0) === -1);\n return atLevel ?? generic ?? rankColumns[0];\n });\n };\n\n // Return all levels\n return Array.from(levels.values()).reduce((acc, cur) => acc.set(cur, filterLevel(cur)), new Map());\n}\n\n/**\n * @param {!Object} column\n * @param {boolean} reorderableColumns\n * @param {!Object} columnWidth\n * @param {number} defaultWidth\n * @return {!Object}\n */\nfunction generateColumn(column, reorderableColumns, columnWidth, defaultWidth) {\n if(typeof column.Rank !== 'number') {\n warn(`column rank is missing, using 0 as fallback (column: ${column.Header ?? column['Property Path']})`);\n }\n const rank = column.Rank ?? 0;\n return {\n columnId: rank,\n reorderable: reorderableColumns,\n width: columnWidth?.[rank] ?? column.Width ?? defaultWidth ?? 150,\n resizable: column.Resizable,\n Level: column.Level ?? 0,\n ...column\n };\n}\n\n/**\n * @param {!BrickContext} $\n * @param {number} targetColumnId\n * @param {!Array} columnIds\n */\nexport function handleOnColumnsReordered($, targetColumnId, columnIds) {\n const columns = getColumns($, 0);\n const ranks = columns.map(column => column.Rank);\n const targetIndex = ranks.indexOf(targetColumnId);\n const movingIndexes = columnIds.map(id => ranks.indexOf(id));\n const newRanks = reorderObject(ranks, movingIndexes, targetIndex);\n const newOrder = newRanks.reduce((acc, cur, index) => ({ [cur]: index, ...acc }), {});\n $.set('_rgColumnOrder', newOrder);\n}\n\n/**\n * @param {!Object} column\n * @param {!Object} overrides\n * @return {number}\n */\nfunction getColumnRank(column, overrides) {\n return overrides[column.Rank] ?? column.Rank;\n}\n","// Olympe\nimport { QueryResult } from 'olympe';\n\n// Rxjs\nimport { tap, combineLatest, map } from 'rxjs';\n\n// Internal\nimport { warn, fromJson } from './helpers';\n\n/**\n * Init the internal data state, make sure it is an array\n * @param {!BrickContext} $ \n * @param {!Observable} _reload\n * @return {!Observable}\n */\nexport function initData($, _reload) {\n // Listen to the data and for any refresh\n return combineLatest([\n $.observe('Data', false),\n _reload\n ])\n\n // Default values\n .pipe(map(([data]) => data ? data : []))\n\n // Transform to an array\n .pipe(map(data => {\n // The data is already an array\n if (Array.isArray(data)) {\n return data;\n }\n\n // QueryResult case\n if (data instanceof QueryResult) {\n return data.toArray();\n }\n\n // JSON case\n if (typeof data === 'string') {\n const [json, error] = fromJson(data);\n if (!error && Array.isArray(json)) {\n return json;\n }\n }\n\n // Type is not supported\n warn('the `Data` property is not convertible to an array');\n return [];\n }))\n \n // Set the transformed data into _Data\n .pipe(tap(data => $.set('_rgData', data)));\n}\n\n","// Olympe\nimport { getLogger } from '@olympeio/core';\n\n/**\n * Parse a json string without throwing an exception\n * @param {string|!Object} json \n * @return {!Array}\n */\nexport function fromJson(json) {\n try {\n return typeof json === 'string'\n ? [JSON.parse(json), null]\n : [json ?? {}, null];\n }\n catch(err) {\n return [{}, err];\n }\n}\n\n/**\n * Warn message with a default format\n * @param {string} message \n */\nexport function warn(message) {\n getLogger('ReactGrid').warn(`ReactGrid: ${message}`);\n}\n\n/**\n * Error message with a default format\n * @param {string} message \n */\nexport function error(message) {\n getLogger('ReactGrid').error(`ReactGrid: ${message}`);\n}\n\n/**\n * Make a jsonpath-plus path readable\n * @param {string} path\n * @return {string} \n */\nexport function trimPath(path) {\n if(path.startsWith('$') || path.startsWith('.')) {\n return trimPath(path.substring(1));\n }\n if(path.startsWith('[')) {\n return trimPath(path.substring(path.indexOf(']') + 1));\n }\n return path;\n}\n\n/**\n * Test for email format\n * @param {string} text\n * @return {boolean}\n */\nexport function validateEmail(text) {\n return emailRegex.test(text);\n}\n\n// Email regex (https://emailregex.com/)\nconst emailRegex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\n/**\n * Reorders elements in an object by moving specific elements to a new position.\n *\n * @param {Array} values - The original array to reorder.\n * @param {number[]} ids - An array of indices representing the elements to move.\n * @param {number} to - The target index where the selected elements should be moved.\n * @return {Object} - A new object with the specified elements reordered.\n */\nexport function reorderObject(values, ids, to) {\n const reorderedValues = [...values];\n\n // Get elements to move based on the ids\n const elementsToMove = ids.map(index => reorderedValues[index]);\n ids.sort((a, b) => b - a).forEach(index => {\n reorderedValues.splice(index, 1);\n });\n\n // Adjust the target id based on moving forward or backward\n const adjustedTargetId = to >= Math.min(...ids) ? to - elementsToMove.length + 1 : to;\n\n // Insert the elements in target id\n if (elementsToMove.length > 0) {\n reorderedValues.splice(adjustedTargetId, 0, ...elementsToMove);\n }\n\n return reorderedValues;\n}\n\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n// Rxjs\nimport { tap, combineLatest, map, distinctUntilChanged } from 'rxjs';\n\n// Internal\nimport { generateCell, getCellStyle } from './cells';\nimport { trimPath } from './helpers';\nimport { getColumns } from './columns';\nimport { getFlattenWrappers } from './wrappers';\n\n/**\n * Init the rows\n * @param {!BrickContext} $ \n * @param {!Observable} _wrappers \n * @param {!Observable} _filteredColumns \n */\nexport function initRows($, _wrappers, _filteredColumns) {\n // Listen to the _data and the _columns\n combineLatest([\n _wrappers,\n _filteredColumns\n .pipe(distinctUntilChanged(undefined, filteredColumns => {\n // Avoid updating the rows for some changes on the column config: width, resizable, etc.\n return Array.from(filteredColumns.values())\n .flat()\n .map(c => `${c.Header}${c['Property Path']}${c.Type}${c.Options}${c.Rank}${c.Editable}${c.Level}`)\n .join('');\n })),\n $.observe('Row Height', false),\n $.observe('Cell Edition', false),\n $.observe('Disable Header Row', false),\n $.observe('Default Color', false),\n $.observe('Border Color', false),\n $.observe('Border Width', false)\n ])\n\n // Use the reactgrid format for rows\n .pipe(map(([_wrappers, _filteredColumns, rowHeight, cellEdition, removeHeaderRow]) => {\n // Optional header row\n const headerRow = removeHeaderRow ? [] : [{\n rowId: '_header',\n height: rowHeight,\n cells: getColumns($, 0).map(column => {\n const text = column.Header ?? trimPath(column['Property Path'] ?? '');\n const finalText = column.Level === 0 ? text : '';\n return { type: 'header', text: finalText, style: getCellStyle($) };\n })\n }];\n\n // Generate all the rows\n const rows = getFlattenWrappers($).map(({ wrapper, level }, index) => {\n const rowColumns = getColumns($, level);\n return generateRow(wrapper, rowColumns, index, $, rowHeight, cellEdition);\n });\n\n // Final rows\n return [headerRow, rows].flat();\n }))\n\n // Set the final rows\n .pipe(tap(rows => $.set('_rgRows', rows)))\n\n // Run \n .subscribe();\n}\n\n/**\n * @param {!BrickContext}\n * @return {!*}\n */\nexport function useRows($) {\n return useProperty($, '_rgRows') ?? [];\n}\n\n/**\n * @param {!RGWrapper} wrapper \n * @param {!Array} columns \n * @param {number} index \n * @param {!BrickContext} $ \n * @param {number} rowHeight \n * @param {boolean} cellEdition \n * @return {!Object}\n */\nfunction generateRow(wrapper, columns, index, $, rowHeight, cellEdition) {\n return { \n rowId: index,\n height: rowHeight,\n cells: columns.map(column => generateCell($, wrapper, index, column, cellEdition))\n };\n}\n","// React\nimport { useEffect } from 'react';\nimport { tap, interval } from 'rxjs';\n\n// Internal\nimport { triggerRedraw } from './triggers';\n\n/**\n * @param {!BrickContext} $\n */\nexport function initScroll($) {\n // Auto-redraw on scroll (fix fast scrolling issue)\n $.set('_rgLastScroll', 0);\n $.set('_rgLastScrollRedraw', 0);\n interval(1000)\n .pipe(tap(() => {\n if($.get('_rgLastScroll') !== $.get('_rgLastScrollRedraw')) {\n $.set('_rgLastScrollRedraw', $.get('_rgLastScroll'));\n triggerRedraw($);\n }\n }))\n .subscribe();\n}\n\n/**\n * @param {!BrickContext} $\n * @param {!*} ref\n */\nexport function useRedrawAfterScroll($, ref) {\n const registerScroll = () => $.set('_rgLastScroll', Date.now());\n useEffect(() => {\n if (ref.current) {\n ref.current.parentElement.style.overflow = 'visible';\n ref.current.addEventListener('scroll', registerScroll);\n }\n return () => {\n if (ref.current) {\n ref.current.removeEventListener('scroll', registerScroll);\n }\n };\n }, [ref]);\n}\n\n","// Olympe\nimport { useProperty } from '@olympeio/core';\n\n/**\n * @param {!BrickContext} $\n * @return {!Observable}\n */\nexport function initTriggers($) {\n return $.observe('Reload', false);\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function useRedraw($) {\n useProperty($, 'Redraw');\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function triggerRedraw($) {\n $.trigger('Redraw');\n}\n\n/**\n * @param {!BrickContext} $\n */\nexport function triggerReload($) {\n $.trigger('Reload');\n}\n\n","// Olympe\nimport { CloudObject } from 'olympe';\n\n// Rxjs\nimport { tap, map } from 'rxjs';\n\n// Json\nimport { JSONPath } from 'jsonpath-plus';\n\n// Internal\nimport { warn, trimPath } from './helpers';\nimport { getModelPropertiesName, findObjectProperty } from './cloudobjects';\nimport { isChevronCellExpanded } from './cells';\n\n/**\n * @typedef RGWrapper\n * @property {!*} rgObject - The wrapped object\n * @property {!Array} rgChildren - Potential children of the object\n * @property {function():string} rgGetKey - Get a unique key\n * @property {string} _rgType - The type of the wrapped object\n * @property {number} _rgLevel - The level in the hierarchy\n * @property {function():!Array<string>} __rgProperties - Get all the properties name\n * @property {function(string):!*} __rgGetProperty - Get a property by its path\n * @property {function(string):!*} __rgGetValue - Get a value for a path\n * @property {function(string):!*} __rgGetObject - Get the object for a path\n */\nexport const RGWrapper = {};\n\n/**\n * Init the internal data state, make sure it is an array\n * @param {!BrickContext} $ \n * @param {!Observable} _data \n * @return {!Observable}\n */\nexport function initWrappers($, _data) {\n // Observe the data\n return _data\n\n // Wrap all objects\n .pipe(map(data => data.map(d => rgWrap(d))))\n\n // Set the transformed data into _Data\n .pipe(tap(wrappers => $.set('_rgWrappers', wrappers)));\n}\n\n/**\n * @param {!*} object \n * @param {number=} level \n * @return {!RGWrapper} \n */\nexport function rgWrap(object, level) {\n // Already wrapped -> rewrap missing properties\n if(object.hasOwnProperty('rgObject')) {\n const missingProps = ['rgChildren', 'rgGetKey', '_rgType', '_rgLevel',\n '__rgProperties', '__rgGetProperty', '__rgGetValue',\n '__rgGetObject'].filter(prop => !object.hasOwnProperty(prop));\n if(missingProps.length > 0) {\n const wrapped = rgWrap(object.rgObject, level ?? 0);\n return missingProps.reduce((acc, cur) => {\n acc[cur] = wrapped[cur];\n return acc;\n }, object);\n }\n return object;\n }\n\n // Tuple case\n if(Array.isArray(object)) {\n return wrapTuple(object, level ?? 0);\n }\n\n // CloudObject case\n if(object instanceof CloudObject) {\n return wrapCloudObject(object, level ?? 0);\n }\n\n // Object case\n if(typeof object === 'object') {\n return wrapObject(object, level ?? 0);\n }\n\n // Wrong type\n warn('some data are not of the following type: Object, CloudObject, Array');\n return defaultWrap(level ?? 0);\n}\n\n/**\n * @param {!Object} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapObject(object, level) {\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => Object.values(object).join('.'),\n _rgType: 'object',\n _rgLevel: level,\n __rgProperties: () => Object.keys(object),\n __rgGetProperty: path => trimPath(path),\n __rgGetValue: path => JSONPath({ path, json: object, wrap: false }),\n __rgGetObject: () => object\n };\n}\n\n/**\n * @param {!CloudObject} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapCloudObject(object, level) {\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => object.getTag(),\n _rgType: 'cloudobject',\n _rgLevel: level,\n __rgProperties: () => getModelPropertiesName(object),\n __rgGetProperty: path => findObjectProperty(object, path),\n __rgGetValue: path => object.get(findObjectProperty(object, path)),\n __rgGetObject: () => object\n };\n}\n\n/**\n * @param {!Array} object \n * @param {number} level \n * @return {!RGWrapper} \n */\nfunction wrapTuple(object, level) {\n const wrapped = object.map(o => rgWrap(o, level + 1));\n return {\n rgObject: object,\n rgChildren: [],\n rgGetKey: () => `[${wrapped.map(w => w.rgGetKey()).join('.')}]`,\n _rgType: 'tuple',\n _rgLevel: level,\n __rgProperties: () => wrapped.map((w, i) => w.__rgProperties().map(p => `$[${i}].${p}`)).flat(),\n __rgGetProperty: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetProperty(subPath);\n },\n __rgGetValue: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetValue(subPath);\n },\n __rgGetObject: path => {\n const [index, subPath] = splitTuplePath(path);\n return wrapped[index].__rgGetObject(subPath);\n }\n };\n}\n\n/**\n * @param {number=} level \n * @return {!RGWrapper} \n */\nexport function defaultWrap(level) {\n return wrapObject({}, level ?? 0);\n}\n\n/**\n * @param {string} path \n * @returns {![number, string]} \n */\nfunction splitTuplePath(path) {\n const endBracket = path.indexOf(']');\n const index = parseInt(path.substring(path.indexOf('[') + 1, endBracket));\n const subPath = trimPath(path.substring(endBracket + 1));\n return [index, subPath];\n}\n\n/**\n * @param {!BrickContext} $ \n * @param {!Array} wrappers \n * @param {number} level \n * @return {!Array}\n */\nfunction flatten($, wrappers, level) {\n return wrappers.flatMap(wrapper => {\n const isExpanded = isChevronCellExpanded($, wrapper);\n const children = isExpanded ? flatten($, wrapper.rgChildren, level + 1) : [];\n return [{ wrapper, level }, ...children]; \n });\n}\n\n/**\n * @param {!BrickContext} $ \n * @return {!Array}\n */\nexport function getFlattenWrappers($) {\n return flatten($, $.get('_rgWrappers'), 0);\n}\n","module.exports = require(\"@olympeio/core\");","module.exports = require(\"@silevis/reactgrid\");","module.exports = require(\"@silevis/reactgrid/styles.css\");","module.exports = require(\"jsonpath-plus\");","module.exports = require(\"react\");","module.exports = require(\"rxjs\");","module.exports = require(\"styled-jsx/style\");","module.exports = __WEBPACK_EXTERNAL_MODULE_olympe__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Import Olympe runtime or DRAW\nimport 'olympe';\n\n// Import project bricks (we use webpack-import-glob-loader to import all bricks)\nimport './common/helpers.js'; import './common/internal/box.js'; import './common/internal/cells.js'; import './common/internal/changes.js'; import './common/internal/cloudobjects.js'; import './common/internal/columns.js'; import './common/internal/data.js'; import './common/internal/helpers.js'; import './common/internal/rows.js'; import './common/internal/scroll.js'; import './common/internal/triggers.js'; import './common/internal/wrappers.js'; import './common/RGCreateColumnConfig.js'; import './common/RGGetChangeMetadata.js'; import './common/RGGetChangeProperties.js'; import './common/RGGroupTuplesByIndexes.js'; import './common/RGProcessChangesForCloudObjects.js'; import './common/RGProcessChangesForJSONString.js'; import './common/RGProcessChangesForObjects.js'; import './common/RGWrapObject.js';\n;\nimport './web/RGReactGrid.jsx';\n\n"],"names":["registerBrick","ReactBrick","useProperty","React","useCallback","useRef","useState","ReactGrid","initData","initWrappers","initFilteredColumns","useColumns","handleOnColumnResized","handleOnColumnsReordered","initRows","useRows","initBox","useBox","handleOnCellsChanged","initTriggers","useRedraw","initScroll","useRedrawAfterScroll","initCells","RGReactGrid","_ReactBrick","_classCallCheck","_callSuper","arguments","_inherits","_createClass","key","value","init","$","_reload","_data","_wrappers","_filteredColumns","getReactComponent","box","hidden","allowContentOverflow","fontSize","rows","columns","rangeSelection","rowSelection","colSelection","fillHandle","stickTop","stickBottom","stickLeft","stickRight","containerRef","_useState","x","y","_useState2","_slicedToArray","gridPosition","setGridPosition","updateBoxPosition","_containerRef$current","rect","current","getBoundingClientRect","left","top","createElement","ref","className","_JSXStyle","dynamic","width","height","onCellsChanged","bind","undefined","enableFillHandle","onFocusLocationChanged","stickyLeftColumns","stickyRightColumns","stickyTopRows","stickyBottomRows","enableRangeSelection","enableColumnSelection","enableRowSelection","onColumnResized","onColumnsReordered","id","concat","default"],"sourceRoot":""}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@olympeio-extensions/reactgrid","version":"2.11.
|
|
1
|
+
{"name":"@olympeio-extensions/reactgrid","version":"2.11.3","main":"main-node.js","browser":"main-web.js","dependencies":{"@olympeio/core":"2.11.3","@olympeio/runtime-node":"~9.11.0","@olympeio/runtime-web":"~9.11.0","@silevis/reactgrid":"^4.1.8","babel-loader":"^9.1.3","jsonpath-plus":"^9.0.0","react":"17.0.2","react-dom":"17.0.2","rxjs":"7.8.1","styled-jsx":"^5.1.6"},"codeAsData":"codeAsData"}
|