import { FreeGrid } from '../';
import { html } from 'lit-html';
import { rowTextColumnElement } from './rowTextColumnElement';
import { rowCheckboxColumnElement } from './rowCheckboxColumnElement';
import { rowNumberColumnElement } from './rowNumberColumnElement';
import { rowImageColumnElement } from './rowImageColumnElement';
import { rowDateColumnElement } from './rowDateColumnElement';
import { CallbackEvent, IDataRow } from '../interfaces';
export function rowElementsStandardRender(
freeGridRowStyle: string,
rowClick: Function,
freeGrid: FreeGrid,
rowNo: number,
rowData: IDataRow
) {
const grouping = freeGrid.config.groupingSet && freeGrid.config.groupingSet.length;
let curleft = rowData && grouping ? rowData.__groupLvl * 15 : 0;
return html`
${html`
`}
${freeGrid.config.columns.map(col => {
if (!col.hide) {
// common style
const colStyle = `width:${col.width || 100}px; left:${curleft}px`;
const _data = rowData ? rowData[col.attribute] : '';
// callback on cell edit
const updateCallback = (e: CallbackEvent) => {
col.beforeEditCallbackFn &&
col.beforeEditCallbackFn(e, col, rowNo, rowData, freeGrid);
// filter out based on type so we know what type to use
if (col.autoUpdateData !== false) {
switch (col.type) {
case 'boolean':
rowData[col.attribute] = e.target.checked;
break;
case 'image':
// rowData[col.attribute] = e.target.checked;
// we need this ever ?
break;
case 'date':
rowData[col.attribute] = e.target.valueAsDate;
break;
case 'number':
rowData[col.attribute] = e.target.valueAsNumber;
break;
default:
rowData[col.attribute] = e.target.value;
}
}
col.afterEditCallbackFn &&
col.afterEditCallbackFn(e, col, rowNo, rowData, freeGrid);
};
let template;
if (col.rowRenderCallBackFn) {
// custom column, supply them with lit.html
template = html`
${col.rowRenderCallBackFn(html, col, rowNo, rowData, freeGrid)}
`;
} else {
// only part seperating thiese are value type, use directive ?
switch (col.type) {
case 'boolean':
template = rowCheckboxColumnElement(
colStyle,
col,
updateCallback,
_data
);
break;
case 'image':
template = rowImageColumnElement(colStyle, _data);
break;
case 'date':
template = rowDateColumnElement(
colStyle,
col,
updateCallback,
_data
);
break;
case 'number':
template = rowNumberColumnElement(
colStyle,
col,
updateCallback,
_data
);
break;
default:
template = rowTextColumnElement(
colStyle,
col,
updateCallback,
_data
);
}
}
curleft = curleft + (col.width || 100);
return template;
} else {
return html``;
}
})}
`;
}