import {isCensored} from 'app/common/gristTypes'; import * as ko from 'knockout'; import {KoArray} from 'app/client/lib/koArray'; import {jsonObservable} from 'app/client/models/modelUtil'; import * as modelUtil from 'app/client/models/modelUtil'; import {ColumnRec, DocModel, IRowModel, recordSet, refRecord, TableRec} from 'app/client/models/DocModel'; export interface CellRec extends IRowModel<"_grist_Cells"> { column: ko.Computed<ColumnRec>; table: ko.Computed<TableRec>; children: ko.Computed<KoArray<CellRec>>; hidden: ko.Computed<boolean>; parent: ko.Computed<CellRec>; text: modelUtil.KoSaveableObservable<string|undefined>; userName: modelUtil.KoSaveableObservable<string|undefined>; timeCreated: modelUtil.KoSaveableObservable<number|undefined>; timeUpdated: modelUtil.KoSaveableObservable<number|undefined>; resolved: modelUtil.KoSaveableObservable<boolean|undefined>; resolvedBy: modelUtil.KoSaveableObservable<string|undefined>; } export function createCellRec(this: CellRec, docModel: DocModel): void { this.hidden = ko.pureComputed(() => isCensored(this.content())); this.column = refRecord(docModel.columns, this.colRef); this.table = refRecord(docModel.tables, this.tableRef); this.parent = refRecord(docModel.cells, this.parentId); this.children = recordSet(this, docModel.cells, 'parentId'); const properContent = modelUtil.savingComputed({ read: () => this.hidden() ? '{}' : this.content(), write: (setter, val) => setter(this.content, val) }); const optionJson = jsonObservable(properContent); // Comments: this.text = optionJson.prop('text'); this.userName = optionJson.prop('userName'); this.timeCreated = optionJson.prop('timeCreated'); this.timeUpdated = optionJson.prop('timeUpdated'); this.resolved = optionJson.prop('resolved'); this.resolvedBy = optionJson.prop('resolvedBy'); }