{"version":3,"file":"/Users/anthonygubler/development/dojo-org/widgets/src/grid/Body.tsx","sourceRoot":"","sources":["Body.tsx"],"names":[],"mappings":"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","sourcesContent":["import global from '@dojo/framework/shim/global';\nimport WidgetBase from '@dojo/framework/core/WidgetBase';\nimport { v, w } from '@dojo/framework/core/vdom';\nimport I18nMixin from '@dojo/framework/core/mixins/I18n';\nimport ThemedMixin, { theme } from '@dojo/framework/core/mixins/Themed';\nimport { DNode, VNodeProperties } from '@dojo/framework/core/interfaces';\nimport renderer from '@dojo/framework/core/vdom';\n\nimport { GridPages, ColumnConfig, SelectionType } from './interfaces';\nimport PlaceholderRow from './PlaceholderRow';\nimport Row from './Row';\n\nimport * as fixedCss from './styles/body.m.css';\nimport * as css from '../theme/default/grid-body.m.css';\nimport { diffProperty } from '@dojo/framework/core/decorators/diffProperty';\nimport { auto, reference } from '@dojo/framework/core/diff';\n\nexport interface BodyProperties<S> {\n\t/** The total number of rows */\n\ttotalRows?: number;\n\t/** The number of elements to a page */\n\tpageSize: number;\n\t/** A list of paginated grids */\n\tpages: GridPages<S>;\n\t/** The height (in pixels) */\n\theight: number;\n\t/** The width (in pixels) */\n\twidth?: number;\n\t/** Configuration for grid columns (id, title, properties, and custom renderer) */\n\tcolumnConfig: ColumnConfig[];\n\t/** Custom renderer for the placeholder row used while data is loaded */\n\tplaceholderRowRenderer?: (index: number) => DNode;\n\t/** Used to fetch additional pages of information */\n\tfetcher: (page: number, pageSize: number) => void;\n\t/** Called when a cell is updated */\n\tupdater: (page: number, rowNumber: number, columnId: string, value: string) => void;\n\t/** Called when the page changes */\n\tpageChange: (page: number) => void;\n\t/** Handler for scroll events */\n\tonScroll?: (value: number) => void;\n\t/** Calculated column widths */\n\tcolumnWidths?: { [index: string]: number };\n\t/** handler for row selection */\n\tonRowSelect?: (index: number, type: SelectionType) => void;\n\t/** array of selected rows */\n\tselectedRows?: number[];\n}\n\nconst offscreen = (dnode: DNode) => {\n\tconst r = renderer(() =>\n\t\tw(\n\t\t\tclass extends WidgetBase {\n\t\t\t\trender() {\n\t\t\t\t\treturn dnode;\n\t\t\t\t}\n\t\t\t},\n\t\t\t{}\n\t\t)\n\t);\n\tconst div = global.document.createElement('div');\n\tdiv.style.position = 'absolute';\n\tglobal.document.body.appendChild(div);\n\tr.mount({ domNode: div, sync: true });\n\tconst dimensions = div.getBoundingClientRect();\n\tglobal.document.body.removeChild(div);\n\treturn dimensions;\n};\n\n@theme(css)\n@diffProperty('pages', reference)\nexport default class Body<S> extends I18nMixin(ThemedMixin(WidgetBase))<BodyProperties<S>> {\n\tprivate _rowHeight!: number;\n\tprivate _rowsInView!: number;\n\tprivate _renderPageSize!: number;\n\tprivate _start = 0;\n\tprivate _end = 100;\n\tprivate _resetScroll = false;\n\n\tprivate _defaultPlaceholderRow(key: number) {\n\t\tconst { classes, theme } = this.properties;\n\t\treturn w(PlaceholderRow, { key, theme, classes });\n\t}\n\n\tprivate _updater(rowNumber: number, columnId: string, value: any) {\n\t\tconst page = Math.max(Math.ceil(rowNumber / this.properties.pageSize), 1);\n\t\tconst pageItemNumber = rowNumber - (page - 1) * this.properties.pageSize;\n\t\tthis.properties.updater(page, pageItemNumber, columnId, value);\n\t}\n\n\tprivate _onScroll(event: UIEvent) {\n\t\tconst { totalRows = 0, onScroll } = this.properties;\n\t\tconst scrollTop = (event.target as HTMLElement).scrollTop;\n\t\tconst scrollLeft = (event.target as HTMLElement).scrollLeft;\n\t\tconst topRow = Math.round(scrollTop / this._rowHeight);\n\t\tconst bottomRow = topRow + this._rowsInView;\n\t\tif (topRow <= this._start) {\n\t\t\tthis._start = Math.max(0, topRow - this._renderPageSize);\n\t\t\tthis._end = Math.min(totalRows, this._start + this._renderPageSize * 2);\n\t\t}\n\t\tif (bottomRow >= this._end) {\n\t\t\tthis._start = Math.min(topRow, totalRows - this._renderPageSize);\n\t\t\tthis._end = Math.min(totalRows, this._start + this._renderPageSize * 2);\n\t\t}\n\t\tonScroll && onScroll(scrollLeft);\n\t\tthis.invalidate();\n\t}\n\n\t@diffProperty('totalRows', auto)\n\tprotected _onDiffTotalRows() {\n\t\tthis._start = 0;\n\t\tthis._end = 100;\n\t\tthis._resetScroll = true;\n\t}\n\n\tprivate _renderRows(start: number, end: number) {\n\t\tconst {\n\t\t\ti18nBundle,\n\t\t\tpageSize,\n\t\t\tfetcher,\n\t\t\tpages,\n\t\t\tcolumnConfig,\n\t\t\tplaceholderRowRenderer = this._defaultPlaceholderRow,\n\t\t\tpageChange,\n\t\t\ttotalRows,\n\t\t\ttheme,\n\t\t\tclasses,\n\t\t\tcolumnWidths,\n\t\t\tonRowSelect,\n\t\t\tselectedRows = []\n\t\t} = this.properties;\n\n\t\tconst startPage = Math.max(Math.ceil(start / pageSize), 1);\n\t\tconst endPage = Math.ceil(end / pageSize);\n\n\t\tlet data = pages[`page-${startPage}`] || [];\n\n\t\tif (!data.length && (totalRows === undefined || totalRows > 0)) {\n\t\t\tfetcher(startPage, pageSize);\n\t\t}\n\n\t\tif (startPage !== endPage) {\n\t\t\tconst endData = pages[`page-${endPage}`] || [];\n\t\t\tif (!endData.length) {\n\t\t\t\tfetcher(endPage, pageSize);\n\t\t\t}\n\t\t\tconst midScreenPage = Math.max(Math.ceil((start + this._rowsInView / 2) / pageSize), 1);\n\t\t\tpageChange(midScreenPage);\n\t\t\tdata = [...data, ...endData];\n\t\t} else {\n\t\t\tpageChange(startPage);\n\t\t}\n\n\t\tconst rows: DNode[] = [];\n\n\t\tfor (let i = start; i < end; i++) {\n\t\t\tconst offset = i - (startPage * pageSize - pageSize);\n\t\t\tconst item = data[offset];\n\t\t\tif (item) {\n\t\t\t\trows.push(\n\t\t\t\t\tw(Row, {\n\t\t\t\t\t\tid: i,\n\t\t\t\t\t\tkey: i,\n\t\t\t\t\t\ti18nBundle,\n\t\t\t\t\t\ttheme,\n\t\t\t\t\t\tclasses,\n\t\t\t\t\t\titem,\n\t\t\t\t\t\tcolumnConfig,\n\t\t\t\t\t\tupdater: this._updater,\n\t\t\t\t\t\tcolumnWidths,\n\t\t\t\t\t\tonRowSelect: onRowSelect\n\t\t\t\t\t\t\t? (type: SelectionType) => {\n\t\t\t\t\t\t\t\t\tonRowSelect(i, type);\n\t\t\t\t\t\t\t  }\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\tselected: selectedRows.indexOf(i) !== -1\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tif (totalRows === undefined || (i > -1 && i < totalRows)) {\n\t\t\t\t\trows.push(placeholderRowRenderer(i));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn rows;\n\t}\n\n\tprotected render(): DNode {\n\t\tconst {\n\t\t\tplaceholderRowRenderer = this._defaultPlaceholderRow,\n\t\t\ttotalRows = 0,\n\t\t\tpageSize,\n\t\t\theight,\n\t\t\twidth,\n\t\t\tcolumnWidths\n\t\t} = this.properties;\n\n\t\tconst rowWidth =\n\t\t\tcolumnWidths &&\n\t\t\tObject.keys(columnWidths).reduce((rowWidth, key) => {\n\t\t\t\treturn rowWidth + columnWidths[key];\n\t\t\t}, 0);\n\n\t\tif (!this._rowHeight) {\n\t\t\tconst firstRow = placeholderRowRenderer(0);\n\t\t\tconst dimensions = offscreen(firstRow);\n\t\t\tthis._rowHeight = dimensions.height;\n\t\t\tthis._rowsInView = Math.ceil(height / this._rowHeight);\n\t\t\tthis._renderPageSize = this._rowsInView * 2;\n\t\t}\n\n\t\tconst rows: DNode[] = this._renderRows(this._start, this._end);\n\t\tconst topPaddingHeight = this._rowHeight * this._start;\n\t\tlet bottomPaddingHeight = 0;\n\t\tif (totalRows >= pageSize) {\n\t\t\tbottomPaddingHeight =\n\t\t\t\ttotalRows * this._rowHeight -\n\t\t\t\ttopPaddingHeight -\n\t\t\t\t(this._end - this._start) * this._rowHeight;\n\t\t}\n\n\t\tlet containerProperties: VNodeProperties = {\n\t\t\tkey: 'root',\n\t\t\tclasses: [this.theme(css.root), fixedCss.rootFixed],\n\t\t\trole: 'rowgroup',\n\t\t\tonscroll: this._onScroll,\n\t\t\tstyles: width\n\t\t\t\t? { height: `${height}px`, width: `${width}px` }\n\t\t\t\t: { height: `${height}px` }\n\t\t};\n\n\t\tif (this._resetScroll) {\n\t\t\tthis._resetScroll = false;\n\t\t\tcontainerProperties = {\n\t\t\t\t...containerProperties,\n\t\t\t\tscrollTop: 0\n\t\t\t};\n\t\t}\n\n\t\treturn v('div', containerProperties, [\n\t\t\tv('div', { styles: rowWidth ? { width: `${rowWidth}px` } : {} }, [\n\t\t\t\tv('div', { key: 'top', styles: { height: `${topPaddingHeight}px` } }),\n\t\t\t\t...rows,\n\t\t\t\tv('div', {\n\t\t\t\t\tkey: 'bottom',\n\t\t\t\t\tstyles: { height: `${bottomPaddingHeight}px` }\n\t\t\t\t})\n\t\t\t])\n\t\t]);\n\t}\n}\n"]}