diff options
-rw-r--r-- | src/client/views/collections/CollectionNoteTakingView.tsx | 730 | ||||
-rw-r--r-- | src/client/views/collections/CollectionNoteTakingViewFieldColumn.tsx | 340 |
2 files changed, 54 insertions, 1016 deletions
diff --git a/src/client/views/collections/CollectionNoteTakingView.tsx b/src/client/views/collections/CollectionNoteTakingView.tsx index 2521e50a0..6128c1c66 100644 --- a/src/client/views/collections/CollectionNoteTakingView.tsx +++ b/src/client/views/collections/CollectionNoteTakingView.tsx @@ -529,50 +529,49 @@ export class CollectionNoteTakingView extends CollectionSubView<Partial<collecti />; } - // what a section looks like if we're in masonry. Shouldn't actually need to use this. - sectionMasonry = (heading: SchemaHeaderField | undefined, docList: Doc[], first: boolean) => { - const key = this.pivotField; - let type: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | undefined = undefined; - const types = docList.length ? docList.map(d => typeof d[key]) : this.filteredChildren.map(d => typeof d[key]); - if (types.map((i, idx) => types.indexOf(i) === idx).length === 1) { - type = types[0]; - } - const rows = () => !this.isStackingView ? 1 : Math.max(1, Math.min(docList.length, - Math.floor((this.props.PanelWidth() - 2 * this.xMargin) / (this.columnWidth + this.gridGap)))); - return <CollectionMasonryViewFieldRow - showHandle={first} - Document={this.props.Document} - chromeHidden={this.chromeHidden} - pivotField={this.pivotField} - unobserveHeight={(ref) => this.refList.splice(this.refList.indexOf(ref), 1)} - observeHeight={(ref) => { - if (ref) { - this.refList.push(ref); - this.observer = new _global.ResizeObserver(action((entries: any) => { - if (this.layoutDoc._autoHeight && ref && this.refList.length && !SnappingManager.GetIsDragging()) { - const height = this.refList.reduce((p, r) => p + Number(getComputedStyle(r).height.replace("px", "")), 0); - this.props.setHeight(this.headerMargin + height); - } - })); - this.observer.observe(ref); - } - }} - key={heading ? heading.heading : ""} - rows={rows} - headings={this.headings} - heading={heading ? heading.heading : ""} - headingObject={heading} - docList={docList} - parent={this} - type={type} - createDropTarget={this.createDashEventsTarget} - screenToLocalTransform={this.props.ScreenToLocalTransform} - setDocHeight={this.setDocHeight} - />; - } + // // what a section looks like if we're in masonry. Shouldn't actually need to use this. + // sectionMasonry = (heading: SchemaHeaderField | undefined, docList: Doc[], first: boolean) => { + // const key = this.pivotField; + // let type: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | undefined = undefined; + // const types = docList.length ? docList.map(d => typeof d[key]) : this.filteredChildren.map(d => typeof d[key]); + // if (types.map((i, idx) => types.indexOf(i) === idx).length === 1) { + // type = types[0]; + // } + // const rows = () => !this.isStackingView ? 1 : Math.max(1, Math.min(docList.length, + // Math.floor((this.props.PanelWidth() - 2 * this.xMargin) / (this.columnWidth + this.gridGap)))); + // return <CollectionMasonryViewFieldRow + // showHandle={first} + // Document={this.props.Document} + // chromeHidden={this.chromeHidden} + // pivotField={this.pivotField} + // unobserveHeight={(ref) => this.refList.splice(this.refList.indexOf(ref), 1)} + // observeHeight={(ref) => { + // if (ref) { + // this.refList.push(ref); + // this.observer = new _global.ResizeObserver(action((entries: any) => { + // if (this.layoutDoc._autoHeight && ref && this.refList.length && !SnappingManager.GetIsDragging()) { + // const height = this.refList.reduce((p, r) => p + Number(getComputedStyle(r).height.replace("px", "")), 0); + // this.props.setHeight(this.headerMargin + height); + // } + // })); + // this.observer.observe(ref); + // } + // }} + // key={heading ? heading.heading : ""} + // rows={rows} + // headings={this.headings} + // heading={heading ? heading.heading : ""} + // headingObject={heading} + // docList={docList} + // parent={this} + // type={type} + // createDropTarget={this.createDashEventsTarget} + // screenToLocalTransform={this.props.ScreenToLocalTransform} + // setDocHeight={this.setDocHeight} + // />; + // } @action - // What are we adding a group to? addGroup = (value: string) => { if (value && this.columnHeaders) { const schemaHdrField = new SchemaHeaderField(value); @@ -610,7 +609,9 @@ export class CollectionNoteTakingView extends CollectionSubView<Partial<collecti sections = this.layoutDoc._columnsSort ? entries.sort(this.sortFunc) : entries; } // a section will have a header and a list of docs. Ok cool. - return sections.map((section, i) => this.isStackingView ? this.sectionStacking(section[0], section[1]) : this.sectionMasonry(section[0], section[1], i === 0)); + // return sections.map((section, i) => this.isStackingView ? this.sectionStacking(section[0], section[1]) : this.sectionMasonry(section[0], section[1], i === 0)); + return sections.map((section, i) => this.sectionStacking(section[0], section[1])); + } @computed get buttonMenu() { @@ -664,6 +665,7 @@ export class CollectionNoteTakingView extends CollectionSubView<Partial<collecti observer: any; render() { TraceMobx(); + //TODO: need to make this inside the field view column const editableViewProps = { GetValue: () => "", SetValue: this.addGroup, @@ -721,644 +723,4 @@ export class CollectionNoteTakingView extends CollectionSubView<Partial<collecti ); } -} - - -// import React = require("react"); -// import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -// import { CursorProperty } from "csstype"; -// import { action, computed, IReactionDisposer, observable, reaction, runInAction } from "mobx"; -// import { observer } from "mobx-react"; -// import { DataSym, Doc, HeightSym, Opt, WidthSym } from "../../../fields/Doc"; -// import { Id } from "../../../fields/FieldSymbols"; -// import { List } from "../../../fields/List"; -// import { listSpec } from "../../../fields/Schema"; -// import { SchemaHeaderField } from "../../../fields/SchemaHeaderField"; -// import { BoolCast, Cast, NumCast, ScriptCast, StrCast } from "../../../fields/Types"; -// import { TraceMobx } from "../../../fields/util"; -// import { emptyFunction, returnEmptyDoclist, returnFalse, returnTrue, returnZero, setupMoveUpEvents, smoothScroll, Utils } from "../../../Utils"; -// import { Docs, DocUtils } from "../../documents/Documents"; -// import { DragManager, dropActionType } from "../../util/DragManager"; -// import { SnappingManager } from "../../util/SnappingManager"; -// import { Transform } from "../../util/Transform"; -// import { undoBatch } from "../../util/UndoManager"; -// import { ContextMenu } from "../ContextMenu"; -// import { ContextMenuProps } from "../ContextMenuItem"; -// import { LightboxView } from "../LightboxView"; -// import { CollectionFreeFormDocumentView } from "../nodes/CollectionFreeFormDocumentView"; -// import { DocFocusOptions, DocumentView, DocumentViewProps, ViewAdjustment } from "../nodes/DocumentView"; -// import { StyleProp } from "../StyleProvider"; -// import { CollectionNoteTakingViewFieldColumn } from "./CollectionNoteTakingViewFieldColumn"; -// import "./CollectionStackingView.scss"; -// import { CollectionSubView } from "./CollectionSubView"; -// import { CollectionViewType } from "./CollectionView"; -// import internal = require("events"); -// const _global = (window /* browser */ || global /* node */) as any; - -// export type collectionNoteTakingViewProps = { -// chromeHidden?: boolean; -// viewType?: CollectionViewType; -// NativeWidth?: () => number; -// NativeHeight?: () => number; -// }; - -// //TODO: where am I going to add columns? - -// @observer -// export class CollectionNoteTakingView extends CollectionSubView<Partial<collectionNoteTakingViewProps>>() { -// // used in a column dragger, likely due for the masonry grid view. We want to use this -// _draggerRef = React.createRef<HTMLDivElement>(); -// // Seems like we cause reaction in MobX get rid of our height once we exit this view -// _autoHeightDisposer?: IReactionDisposer; -// // keeping track of documents. Updated on internal and external drops. What's the difference? -// _docXfs: { height: () => number, width: () => number, stackedDocTransform: () => Transform }[] = []; - -// //--------------------------------------------------------------------------------------------------------------// -// // TODO: these are things that I added but not sure that they actually belong here -// // We may not need to actually keep track of the numColumns -// _noteTakingRef: HTMLDivElement | null = null; -// // this is the layout doc field that we're splitting on. Replaces pivot field -// _columnIndex: string = "columnIndex"; -// @computed get columnIndex() { return this._columnIndex} -// _numColumns: number = 1; -// @computed get numColumns() { return this._numColumns} -// @computed get columnWidth() { return this.props.PanelWidth() - 2 * this.xMargin } -// //--------------------------------------------------------------------------------------------------------------// - -// // Assuming that this is the current css cursor style -// @observable _cursor: CursorProperty = "grab"; -// // gets reset whenever we scroll. Not sure what it is -// @observable _scroll = 0; // used to force the document decoration to update when scrolling -// // does this mean whether the browser is hidden? Or is chrome something else entirely? -// @computed get chromeHidden() { return this.props.chromeHidden || BoolCast(this.layoutDoc.chromeHidden); } -// // it looks like this gets the column headers that Mehek was showing just now -// @computed get columnHeaders() { return Cast(this.layoutDoc._columnHeaders, listSpec(SchemaHeaderField), null); } -// // filteredChildren is what you want to work with. It's the list of things that you're currently displaying -// @computed get filteredChildren() { return this.childLayoutPairs.filter(pair => (pair.layout instanceof Doc) && !pair.layout.hidden).map(pair => pair.layout); } -// // how much margin we give the header -// @computed get headerMargin() { return this.props.styleProvider?.(this.layoutDoc, this.props, StyleProp.HeaderMargin); } -// @computed get xMargin() { return NumCast(this.layoutDoc._xMargin, 2 * Math.min(this.gridGap, .05 * this.props.PanelWidth())); } -// @computed get yMargin() { return this.props.yPadding || NumCast(this.layoutDoc._yMargin, 5); } // 2 * this.gridGap)); } -// @computed get gridGap() { return NumCast(this.layoutDoc._gridGap, 10); } - -// @computed get NodeWidth() { return this.props.PanelWidth() - this.gridGap; } - -// constructor(props: any) { -// super(props); - -// if (this.columnHeaders === undefined) { -// this.layoutDoc._columnHeaders = new List<SchemaHeaderField>([new SchemaHeaderField("0")]); -// } -// console.log(this.layoutDoc._columnHeaders) -// } - -// children = (docs: Doc[]) => { -// TraceMobx(); -// this._docXfs.length = 0; -// // Go through each of the documents that are contained -// return docs.map((d, i) => { -// if (d._columnIndex && parseInt(d._columnIndex.toString()) + 1 > this.numColumns) { -// this._numColumns = parseInt(d._columnIndex.toString()) + 1; -// } else if (d._columnIndex === undefined) { -// d._columnIndex = 0; -// } -// const height = () => this.getDocHeight(d); -// const width = () => this.getDocWidth(d); -// // just getting the style -// const style = { width: width(), marginTop: i ? this.gridGap : 0, height: height(), margin: this.xMargin }; -// // So we're choosing whether we're going to render a column or a masonry doc -// return <div className={"collectionNoteTakingView-columnDoc"} key={d[Id]} style={style} > -// {this.getDisplayDoc(d, width)} -// </div> -// }); -// } - -// //TODO: this seems important -// get Sections() { -// // appears that pivot field IS actually for sorting -// if (!this.columnIndex || this.columnHeaders instanceof Promise) return new Map<SchemaHeaderField, Doc[]>(); - -// if (this.columnHeaders === undefined) { -// setTimeout(() => this.layoutDoc._columnHeaders = new List<SchemaHeaderField>(), 0); -// return new Map<SchemaHeaderField, Doc[]>(); -// } -// const columnHeaders = Array.from(this.columnHeaders); -// const fields = new Map<SchemaHeaderField, Doc[]>(columnHeaders.map(sh => [sh, []] as [SchemaHeaderField, []])); -// let changed = false; -// this.filteredChildren.map(d => { -// const sectionValue = (d[this.columnIndex] ? d[this.columnIndex] : `NO ${this.columnIndex.toUpperCase()} VALUE`) as object; -// // the next five lines ensures that floating point rounding errors don't create more than one section -syip -// const parsed = parseInt(sectionValue.toString()); -// const castedSectionValue = !isNaN(parsed) ? parsed : sectionValue; - -// // look for if header exists already -// const existingHeader = columnHeaders.find(sh => sh.heading === (castedSectionValue ? castedSectionValue.toString() : `NO ${this.columnIndex.toUpperCase()} VALUE`)); -// if (existingHeader) { -// fields.get(existingHeader)!.push(d); -// } -// else { -// const newSchemaHeader = new SchemaHeaderField(castedSectionValue ? castedSectionValue.toString() : `NO ${this.columnIndex.toUpperCase()} VALUE`); -// fields.set(newSchemaHeader, [d]); -// columnHeaders.push(newSchemaHeader); -// changed = true; -// } -// }); -// // remove all empty columns if hideHeadings is set -// // we will want to have something like this, so that we can hide columns and add them back in -// if (this.layoutDoc._columnsHideIfEmpty) { -// Array.from(fields.keys()).filter(key => !fields.get(key)!.length).map(header => { -// fields.delete(header); -// columnHeaders.splice(columnHeaders.indexOf(header), 1); -// changed = true; -// }); -// } -// changed && setTimeout(action(() => this.columnHeaders?.splice(0, this.columnHeaders.length, ...columnHeaders)), 0); -// return fields; -// } -// //TODO: this seems important -// // get Sections() { -// // // at the start, we likely will not have column headers -// // if (this.columnHeaders === undefined) { -// // console.log("columns weren't yet defined") -// // setTimeout(() => this.layoutDoc._columnHeaders = new List<SchemaHeaderField>([new SchemaHeaderField("0")])); -// // return new Map<SchemaHeaderField, Doc[]>(); -// // } - -// // // on later renders, we should have the column headers -// // const columnHeaders = Array.from(this.columnHeaders); -// // console.log(columnHeaders) -// // const fields = new Map<SchemaHeaderField, Doc[]>(); -// // let changed = false; -// // this.filteredChildren.map(d => { -// // const sectionValue = (d._columnIndex ? d._columnIndex : `NO COLUMN VALUE`) as object; -// // // the next five lines ensures that floating point rounding errors don't create more than one section -syip -// // const parsed = parseInt(sectionValue.toString()); -// // const castedSectionValue = !isNaN(parsed) ? parsed : sectionValue; -// // const newSchemaHeader = new SchemaHeaderField(castedSectionValue.toString()); -// // const currentDocs = fields.get(newSchemaHeader) -// // if (currentDocs) { -// // currentDocs.push(d) -// // fields.set(newSchemaHeader, currentDocs); -// // } -// // const existingHeader = columnHeaders.find(sh => sh.heading === (castedSectionValue ? castedSectionValue.toString() : `NO COLUMN VALUE`)); -// // if (existingHeader) { -// // columnHeaders.push(newSchemaHeader); -// // changed = true; -// // } -// // }); -// // changed && setTimeout(action(() => this.columnHeaders?.splice(0, this.columnHeaders.length, ...columnHeaders)), 0); -// // return fields; -// // } - -// componentDidMount() { -// super.componentDidMount?.(); - -// this._autoHeightDisposer = reaction(() => this.layoutDoc._autoHeight, -// autoHeight => autoHeight && this.props.setHeight(Math.min(NumCast(this.layoutDoc._maxHeight, Number.MAX_SAFE_INTEGER), -// this.headerMargin + -// Math.max(...this.refList.map(r => Number(getComputedStyle(r).height.replace("px", ""))))))); -// } - -// componentWillUnmount() { -// super.componentWillUnmount(); -// this._autoHeightDisposer?.(); -// } - -// @action -// moveDocument = (doc: Doc, targetCollection: Doc | undefined, addDocument: (document: Doc) => boolean): boolean => { -// return this.props.removeDocument?.(doc) && addDocument?.(doc) ? true : false; -// } -// createRef = (ele: HTMLDivElement | null) => { -// this._noteTakingRef = ele; -// this.createDashEventsTarget(ele!); //so the whole grid is the drop target? -// } - -// @computed get onChildClickHandler() { return () => this.props.childClickScript || ScriptCast(this.Document.onChildClick); } -// @computed get onChildDoubleClickHandler() { return () => this.props.childDoubleClickScript || ScriptCast(this.Document.onChildDoubleClick); } - -// addDocTab = (doc: Doc, where: string) => { -// if (where === "inPlace" && this.layoutDoc.isInPlaceContainer) { -// this.dataDoc[this.props.fieldKey] = new List<Doc>([doc]); -// return true; -// } -// return this.props.addDocTab(doc, where); -// } - -// scrollToBottom = () => { -// smoothScroll(500, this._mainCont!, this._mainCont!.scrollHeight); -// } - -// // let's dive in and get the actual document we want to drag/move around -// focusDocument = (doc: Doc, options?: DocFocusOptions) => { -// Doc.BrushDoc(doc); - -// let focusSpeed = 0; -// const found = this._mainCont && Array.from(this._mainCont.getElementsByClassName("documentView-node")).find((node: any) => node.id === doc[Id]); -// if (found) { -// const top = found.getBoundingClientRect().top; -// const localTop = this.props.ScreenToLocalTransform().transformPoint(0, top); -// if (Math.floor(localTop[1]) !== 0) { -// smoothScroll(focusSpeed = doc.presTransition || doc.presTransition === 0 ? NumCast(doc.presTransition) : 500, this._mainCont!, localTop[1] + this._mainCont!.scrollTop); -// } -// } -// const endFocus = async (moved: boolean) => options?.afterFocus ? options?.afterFocus(moved) : ViewAdjustment.doNothing; -// this.props.focus(this.rootDoc, { -// willZoom: options?.willZoom, scale: options?.scale, afterFocus: (didFocus: boolean) => -// new Promise<ViewAdjustment>(res => setTimeout(async () => res(await endFocus(didFocus)), focusSpeed)) -// }); -// } - -// styleProvider = (doc: Doc | undefined, props: Opt<DocumentViewProps>, property: string) => { -// if (property === StyleProp.Opacity && doc) { -// if (this.props.childOpacity) { -// return this.props.childOpacity(); -// } -// if (this.Document._currentFrame !== undefined) { -// return CollectionFreeFormDocumentView.getValues(doc, NumCast(this.Document._currentFrame))?.opacity; -// } -// } -// return this.props.styleProvider?.(doc, props, property); -// } -// isContentActive = () => this.props.isSelected() || this.props.isContentActive(); - -// // this is what renders the document that you see on the screen -// // called in Children: this actually adds a document to our children list -// getDisplayDoc(doc: Doc, width: () => number) { -// const dataDoc = (!doc.isTemplateDoc && !doc.isTemplateForField && !doc.PARAMS) ? undefined : this.props.DataDoc; -// const height = () => this.getDocHeight(doc); - -// let dref: Opt<DocumentView>; -// const stackedDocTransform = () => this.getDocTransform(doc, dref); -// this._docXfs.push({ stackedDocTransform, width, height }); -// //DocumentView is how the node will be rendered -// return <DocumentView ref={r => dref = r || undefined} -// Document={doc} -// DataDoc={dataDoc || (!Doc.AreProtosEqual(doc[DataSym], doc) && doc[DataSym])} -// renderDepth={this.props.renderDepth + 1} -// PanelWidth={width} -// PanelHeight={height} -// styleProvider={this.styleProvider} -// layerProvider={this.props.layerProvider} -// docViewPath={this.props.docViewPath} -// fitWidth={this.props.childFitWidth} -// isContentActive={emptyFunction} -// isDocumentActive={this.isContentActive} -// LayoutTemplate={this.props.childLayoutTemplate} -// LayoutTemplateString={this.props.childLayoutString} -// freezeDimensions={this.props.childFreezeDimensions} -// NativeWidth={this.props.childIgnoreNativeSize ? returnZero : this.props.childFitWidth?.(doc) || doc._fitWidth && !Doc.NativeWidth(doc) ? width : undefined} // explicitly ignore nativeWidth/height if childIgnoreNativeSize is set- used by PresBox -// NativeHeight={this.props.childIgnoreNativeSize ? returnZero : this.props.childFitWidth?.(doc) || doc._fitWidth && !Doc.NativeHeight(doc) ? height : undefined} -// dontCenter={this.props.childIgnoreNativeSize ? "xy" : undefined} -// dontRegisterView={dataDoc ? true : BoolCast(this.layoutDoc.childDontRegisterViews, this.props.dontRegisterView)} -// rootSelected={this.rootSelected} -// showTitle={this.props.childShowTitle} -// dropAction={StrCast(this.layoutDoc.childDropAction) as dropActionType} -// onClick={this.onChildClickHandler} -// onDoubleClick={this.onChildDoubleClickHandler} -// ScreenToLocalTransform={stackedDocTransform} -// focus={this.focusDocument} -// docFilters={this.childDocFilters} -// hideDecorationTitle={this.props.childHideDecorationTitle?.()} -// hideResizeHandles={this.props.childHideResizeHandles?.()} -// hideTitle={this.props.childHideTitle?.()} -// docRangeFilters={this.childDocRangeFilters} -// searchFilterDocs={this.searchFilterDocs} -// ContainingCollectionDoc={this.props.CollectionView?.props.Document} -// ContainingCollectionView={this.props.CollectionView} -// addDocument={this.props.addDocument} -// moveDocument={this.props.moveDocument} -// removeDocument={this.props.removeDocument} -// contentPointerEvents={StrCast(this.layoutDoc.contentPointerEvents)} -// whenChildContentsActiveChanged={this.props.whenChildContentsActiveChanged} -// addDocTab={this.addDocTab} -// bringToFront={returnFalse} -// scriptContext={this.props.scriptContext} -// pinToPres={this.props.pinToPres} -// />; -// } - -// getDocTransform(doc: Doc, dref?: DocumentView) { -// const y = this._scroll; // required for document decorations to update when the text box container is scrolled -// const { scale, translateX, translateY } = Utils.GetScreenTransform(dref?.ContentDiv || undefined); -// // the document view may center its contents and if so, will prepend that onto the screenToLocalTansform. so we have to subtract that off -// return new Transform(- translateX + (dref?.centeringX || 0), - translateY + (dref?.centeringY || 0), 1).scale(this.props.ScreenToLocalTransform().Scale); -// } -// getDocWidth(d?: Doc) { -// if (!d) return 0; -// const childLayoutDoc = Doc.Layout(d, this.props.childLayoutTemplate?.()); -// // TODO: pj - replace with a better way to calculate the margin -// let margin = 25; -// d.margin = 25; -// if (this.columnWidth < 150){ -// margin = 0; -// } -// const maxWidth = (this.columnWidth / this.numColumns) - (margin * 2); -// if (!this.layoutDoc._columnsFill && !(childLayoutDoc._fitWidth || this.props.childFitWidth?.(d))) { -// return Math.min(d[WidthSym](), maxWidth); -// } -// return maxWidth; -// } -// getDocHeight(d?: Doc) { -// if (!d || d.hidden) return 0; -// const childLayoutDoc = Doc.Layout(d, this.props.childLayoutTemplate?.()); -// const childDataDoc = (!d.isTemplateDoc && !d.isTemplateForField && !d.PARAMS) ? undefined : this.props.DataDoc; -// const maxHeight = (lim => lim === 0 ? this.props.PanelWidth() : lim === -1 ? 10000 : lim)(NumCast(this.layoutDoc.childLimitHeight, -1)); -// const nw = Doc.NativeWidth(childLayoutDoc, childDataDoc) || (!(childLayoutDoc._fitWidth || this.props.childFitWidth?.(d)) ? d[WidthSym]() : 0); -// const nh = Doc.NativeHeight(childLayoutDoc, childDataDoc) || (!(childLayoutDoc._fitWidth || this.props.childFitWidth?.(d)) ? d[HeightSym]() : 0); -// if (nw && nh) { -// const colWid = this.columnWidth / this.numColumns; -// const docWid = this.layoutDoc._columnsFill ? colWid : Math.min(this.getDocWidth(d), colWid); -// return Math.min( -// maxHeight, -// docWid * nh / nw); -// } -// const childHeight = NumCast(childLayoutDoc._height); -// const panelHeight = (childLayoutDoc._fitWidth || this.props.childFitWidth?.(d)) ? Number.MAX_SAFE_INTEGER : this.props.PanelHeight() - 2 * this.yMargin; -// return Math.min(childHeight, maxHeight, panelHeight); -// } - -// // This following three functions must be from the view Mehek showed -// columnDividerDown = (e: React.PointerEvent) => { -// runInAction(() => this._cursor = "grabbing"); -// setupMoveUpEvents(this, e, this.onDividerMove, action(() => this._cursor = "grab"), emptyFunction); -// } -// @action -// onDividerMove = (e: PointerEvent, down: number[], delta: number[]) => { -// this.layoutDoc._columnWidth = Math.max(10, this.columnWidth + delta[0]); -// return false; -// } - -// @computed get columnDragger() { -// return <div className="collectionStackingView-columnDragger" onPointerDown={this.columnDividerDown} ref={this._draggerRef} -// style={{ cursor: this._cursor, left: `${this.columnWidth + this.xMargin}px`, top: `${Math.max(0, this.yMargin - 9)}px` }} > -// <FontAwesomeIcon icon={"arrows-alt-h"} /> -// </div>; -// } - -// @undoBatch -// @action -// onInternalDrop = (e: Event, de: DragManager.DropEvent) => { -// // Fairly confident that this is where the swapping of nodes in the various arrays happens -// console.log('drop') -// const where = [de.x, de.y]; -// // start at -1 until we're sure we want to add it to the column -// let dropInd = -1; -// let dropAfter = 0; -// if (de.complete.docDragData) { -// // going to re-add the docs to the _docXFs based on position of where we just dropped -// this._docXfs.map((cd, i) => { -// const pos = cd.stackedDocTransform().inverse().transformPoint(-2 * this.gridGap, -2 * this.gridGap); -// const pos1 = cd.stackedDocTransform().inverse().transformPoint(cd.width(), cd.height()); -// if (where[0] > pos[0] && where[0] < pos1[0] && where[1] > pos[1] && (i === this._docXfs.length - 1 || where[1] < pos1[1])) { -// dropInd = i; -// //TODO: not sure what the axis should actually be. Had a ternary previously with 0/1 -// const axis = 1; -// dropAfter = where[axis] > (pos[axis] + pos1[axis]) / 2 ? 1 : 0; -// } -// }); -// const oldDocs = this.childDocs.length; -// if (super.onInternalDrop(e, de)) { -// // check to see if we actually need anything to the new column of nodes (if droppedDocs != empty) -// const droppedDocs = this.childDocs.slice().filter((d: Doc, ind: number) => ind >= oldDocs); // if the drop operation adds something to the end of the list, then use that as the new document (may be different than what was dropped e.g., in the case of a button which is dropped but which creates say, a note). -// const newDocs = droppedDocs.length ? droppedDocs : de.complete.docDragData.droppedDocuments; // if nothing was added to the end of the list, then presumably the dropped documents were already in the list, but possibly got reordered so we use them. - -// const docs = this.childDocList; -// // reset drag manager docs, because we just dropped -// DragManager.docsBeingDragged = []; -// // still figuring out where to add the document -// if (docs && newDocs.length) { -// const insertInd = dropInd === -1 ? docs.length : dropInd + dropAfter; -// const offset = newDocs.reduce((off, ndoc) => this.filteredChildren.find((fdoc, i) => ndoc === fdoc && i < insertInd) ? off + 1 : off, 0); -// newDocs.filter(ndoc => docs.indexOf(ndoc) !== -1).forEach(ndoc => docs.splice(docs.indexOf(ndoc), 1)); -// docs.splice(insertInd - offset, 0, ...newDocs); -// } -// } -// } // it seems like we're creating a link here. Weird. I didn't know that you could establish links by dragging -// else if (de.complete.linkDragData?.dragDocument.context === this.props.Document && de.complete.linkDragData?.linkDragView?.props.CollectionFreeFormDocumentView?.()) { -// const source = Docs.Create.TextDocument("", { _width: 200, _height: 75, _fitWidth: true, title: "dropped annotation" }); -// this.props.addDocument?.(source); -// de.complete.linkDocument = DocUtils.MakeLink({ doc: source }, { doc: de.complete.linkDragData.linkSourceGetAnchor() }, "doc annotation", ""); // TODODO this is where in text links get passed -// e.stopPropagation(); -// } -// else if (de.complete.annoDragData?.dragDocument && super.onInternalDrop(e, de)) return this.internalAnchorAnnoDrop(e, de.complete.annoDragData); -// return false; -// } - -// @undoBatch -// internalAnchorAnnoDrop(e: Event, annoDragData: DragManager.AnchorAnnoDragData) { -// const dropCreator = annoDragData.dropDocCreator; -// annoDragData.dropDocCreator = (annotationOn: Doc | undefined) => { -// const dropDoc = dropCreator(annotationOn); -// return dropDoc || this.rootDoc; -// }; -// return true; -// } - -// @undoBatch -// @action -// //What is the difference between internal and external drop?? Does internal mean we're dropping inside of a collection? -// // I take it back: external drop means we took it out of column/collection that we were just in -// onExternalDrop = async (e: React.DragEvent): Promise<void> => { -// console.log('external drop') -// const where = [e.clientX, e.clientY]; -// let targInd = -1; -// this._docXfs.map((cd, i) => { -// const pos = cd.stackedDocTransform().inverse().transformPoint(-2 * this.gridGap, -2 * this.gridGap); -// const pos1 = cd.stackedDocTransform().inverse().transformPoint(cd.width(), cd.height()); -// if (where[0] > pos[0] && where[0] < pos1[0] && where[1] > pos[1] && where[1] < pos1[1]) { -// targInd = i; -// } -// }); -// super.onExternalDrop(e, {}, () => { -// if (targInd !== -1) { -// const newDoc = this.childDocs[this.childDocs.length - 1]; -// const docs = this.childDocList; -// if (docs) { -// docs.splice(docs.length - 1, 1); -// docs.splice(targInd, 0, newDoc); -// } -// } -// }); -// } -// // sections are important -// headings = () => Array.from(this.Sections); -// refList: any[] = []; -// // what a section looks like if we're in stacking view -// sectionStacking = (heading: SchemaHeaderField | undefined, docList: Doc[]) => { -// const key = "columnIndex"; -// let type: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | undefined = undefined; -// const types = docList.length ? docList.map(d => typeof d[key]) : this.filteredChildren.map(d => typeof d[key]); -// if (types.map((i, idx) => types.indexOf(i) === idx).length === 1) { -// type = types[0]; -// } -// //TODO: I think that we only have one of these atm -// return <CollectionNoteTakingViewFieldColumn -// unobserveHeight={ref => this.refList.splice(this.refList.indexOf(ref), 1)} -// observeHeight={ref => { -// if (ref) { -// this.refList.push(ref); -// this.observer = new _global.ResizeObserver(action((entries: any) => { -// if (this.layoutDoc._autoHeight && ref && this.refList.length && !SnappingManager.GetIsDragging()) { -// const height = this.headerMargin + -// Math.min(NumCast(this.layoutDoc._maxHeight, Number.MAX_SAFE_INTEGER), -// Math.max(...this.refList.map(r => Number(getComputedStyle(r).height.replace("px", ""))))); -// if (!LightboxView.IsLightboxDocView(this.props.docViewPath())) { -// this.props.setHeight(height); -// } -// } -// })); -// this.observer.observe(ref); -// } -// }} -// addDocument={this.addDocument} -// chromeHidden={this.chromeHidden} -// columnHeaders={this.columnHeaders} -// Document={this.props.Document} -// DataDoc={this.props.DataDoc} -// renderChildren={this.children} -// columnWidth={this.columnWidth} -// columnIndex={this._columnIndex} -// numColumns={this.numColumns} -// gridGap={this.gridGap} -// key={heading?.heading ?? ""} -// headings={this.headings} -// heading={heading?.heading ?? ""} -// headingObject={heading} -// docList={docList} -// yMargin={this.yMargin} -// type={type} -// createDropTarget={this.createDashEventsTarget} -// screenToLocalTransform={this.props.ScreenToLocalTransform} -// />; -// } - -// @action -// // What are we adding a group to? -// addGroup = (value: string) => { -// if (value && this.columnHeaders) { -// const schemaHdrField = new SchemaHeaderField(value); -// this.columnHeaders.push(schemaHdrField); -// DocUtils.addFieldEnumerations(undefined, this._columnIndex, [{ title: value, _backgroundColor: "schemaHdrField.color" }]); -// return true; -// } -// return false; -// } - -// sortFunc = (a: [SchemaHeaderField, Doc[]], b: [SchemaHeaderField, Doc[]]): 1 | -1 => { -// const descending = StrCast(this.layoutDoc._columnsSort) === "descending"; -// const firstEntry = descending ? b : a; -// const secondEntry = descending ? a : b; -// return firstEntry[0].heading > secondEntry[0].heading ? 1 : -1; -// } - -// onContextMenu = (e: React.MouseEvent): void => { -// // need to test if propagation has stopped because GoldenLayout forces a parallel react hierarchy to be created for its top-level layout -// if (!e.isPropagationStopped()) { -// const subItems: ContextMenuProps[] = []; -// subItems.push({ description: `${this.layoutDoc._columnsFill ? "Variable Size" : "Autosize"} Column`, event: () => this.layoutDoc._columnsFill = !this.layoutDoc._columnsFill, icon: "plus" }); -// subItems.push({ description: `${this.layoutDoc._autoHeight ? "Variable Height" : "Auto Height"}`, event: () => this.layoutDoc._autoHeight = !this.layoutDoc._autoHeight, icon: "plus" }); -// subItems.push({ description: "Clear All", event: () => this.dataDoc.data = new List([]), icon: "times" }); -// ContextMenu.Instance.addItem({ description: "Options...", subitems: subItems, icon: "eye" }); -// } -// } - -// // -// @computed get renderedSections() { -// TraceMobx(); -// let sections = [[undefined, this.filteredChildren] as [SchemaHeaderField | undefined, Doc[]]]; -// const entries = Array.from(this.Sections.entries()); -// sections = this.layoutDoc._columnsSort ? entries.sort(this.sortFunc) : entries; -// // a section will have a header and a list of docs. Ok cool. -// return sections.map((section, i) => this.sectionStacking(section[0], section[1])); -// } - -// @computed get buttonMenu() { -// const menuDoc: Doc = Cast(this.rootDoc.buttonMenuDoc, Doc, null); -// // TODO:glr Allow support for multiple buttons -// if (menuDoc) { -// const width: number = NumCast(menuDoc._width, 30); -// const height: number = NumCast(menuDoc._height, 30); -// console.log(menuDoc.title, width, height); -// return (<div className="buttonMenu-docBtn" -// style={{ width: width, height: height }}> -// <DocumentView -// Document={menuDoc} -// DataDoc={menuDoc} -// isContentActive={this.props.isContentActive} -// isDocumentActive={returnTrue} -// addDocument={this.props.addDocument} -// moveDocument={this.props.moveDocument} -// addDocTab={this.props.addDocTab} -// pinToPres={emptyFunction} -// rootSelected={this.props.isSelected} -// removeDocument={this.props.removeDocument} -// ScreenToLocalTransform={Transform.Identity} -// PanelWidth={() => 35} -// PanelHeight={() => 35} -// renderDepth={this.props.renderDepth} -// focus={emptyFunction} -// styleProvider={this.props.styleProvider} -// layerProvider={this.props.layerProvider} -// docViewPath={returnEmptyDoclist} -// whenChildContentsActiveChanged={emptyFunction} -// bringToFront={emptyFunction} -// docFilters={this.props.docFilters} -// docRangeFilters={this.props.docRangeFilters} -// searchFilterDocs={this.props.searchFilterDocs} -// ContainingCollectionView={undefined} -// ContainingCollectionDoc={undefined} -// /> -// </div> -// ); -// } -// } - - -// @computed get nativeWidth() { return this.props.NativeWidth?.() ?? Doc.NativeWidth(this.layoutDoc); } -// @computed get nativeHeight() { return this.props.NativeHeight?.() ?? Doc.NativeHeight(this.layoutDoc); } - -// @computed get scaling() { return !this.nativeWidth ? 1 : this.props.PanelHeight() / this.nativeHeight; } - -// @computed get backgroundEvents() { return SnappingManager.GetIsDragging(); } -// observer: any; -// render() { -// TraceMobx(); -// const editableViewProps = { -// GetValue: () => "", -// SetValue: this.addGroup, -// // I don't recall ever seeing this add a group button -// contents: "+ ADD A GROUP" -// }; -// const buttonMenu = this.rootDoc.buttonMenu; -// const noviceExplainer = this.rootDoc.explainer; -// return ( -// <> -// {buttonMenu || noviceExplainer ? <div className="documentButtonMenu"> -// {buttonMenu ? this.buttonMenu : null} -// {Doc.UserDoc().noviceMode && noviceExplainer ? -// <div className="documentExplanation"> -// {noviceExplainer} -// </div> -// : null -// } -// </div> : null} -// <div className="collectionStackingMasonry-cont" > -// <div className={"collectionNoteTakingView"} -// ref={this.createRef} -// style={{ -// overflowY: this.props.isContentActive() ? "auto" : "hidden", -// background: this.props.styleProvider?.(this.rootDoc, this.props, StyleProp.BackgroundColor), -// pointerEvents: this.backgroundEvents ? "all" : undefined -// }} -// onScroll={action(e => this._scroll = e.currentTarget.scrollTop)} -// onDrop={this.onExternalDrop.bind(this)} -// onContextMenu={this.onContextMenu} -// onWheel={e => this.props.isContentActive(true) && e.stopPropagation()} > -// {this.renderedSections} -// </div> -// </div> -// </> - -// ); -// } -// } +}
\ No newline at end of file diff --git a/src/client/views/collections/CollectionNoteTakingViewFieldColumn.tsx b/src/client/views/collections/CollectionNoteTakingViewFieldColumn.tsx index 44e7e98dc..0131003f9 100644 --- a/src/client/views/collections/CollectionNoteTakingViewFieldColumn.tsx +++ b/src/client/views/collections/CollectionNoteTakingViewFieldColumn.tsx @@ -180,13 +180,13 @@ export class CollectionNoteTakingViewFieldColumn extends React.Component<CSVFiel // </div>; // } - renderMenu = () => { - return <div className="collectionStackingView-optionPicker"> - <div className="optionOptions"> - <div className={"optionPicker" + (true ? " active" : "")} onClick={action(() => { })}>Add options here</div> - </div> - </div >; - } + // renderMenu = () => { + // return <div className="collectionStackingView-optionPicker"> + // <div className="optionOptions"> + // <div className={"optionPicker" + (true ? " active" : "")} onClick={action(() => { })}>Add options here</div> + // </div> + // </div >; + // } @observable private collapsed: boolean = false; @@ -354,328 +354,4 @@ export class CollectionNoteTakingViewFieldColumn extends React.Component<CSVFiel </div > ); } -} - - -// import React = require("react"); -// import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -// import { action, computed, observable } from "mobx"; -// import { observer } from "mobx-react"; -// import { Doc, DocListCast, Opt } from "../../../fields/Doc"; -// import { Id } from "../../../fields/FieldSymbols"; -// import { RichTextField } from "../../../fields/RichTextField"; -// import { PastelSchemaPalette, SchemaHeaderField } from "../../../fields/SchemaHeaderField"; -// import { ScriptField } from "../../../fields/ScriptField"; -// import { NumCast } from "../../../fields/Types"; -// import { ImageField } from "../../../fields/URLField"; -// import { TraceMobx } from "../../../fields/util"; -// import { emptyFunction, returnEmptyString, setupMoveUpEvents } from "../../../Utils"; -// import { Docs, DocUtils } from "../../documents/Documents"; -// import { DocumentType } from "../../documents/DocumentTypes"; -// import { DragManager } from "../../util/DragManager"; -// import { SnappingManager } from "../../util/SnappingManager"; -// import { Transform } from "../../util/Transform"; -// import { undoBatch } from "../../util/UndoManager"; -// import { ContextMenu } from "../ContextMenu"; -// import { ContextMenuProps } from "../ContextMenuItem"; -// import { EditableView } from "../EditableView"; -// import { FormattedTextBox } from "../nodes/formattedText/FormattedTextBox"; -// import "./CollectionStackingView.scss"; -// const higflyout = require("@hig/flyout"); -// export const { anchorPoints } = higflyout; -// export const Flyout = higflyout.default; - -// interface CSVFieldColumnProps { -// Document: Doc; -// DataDoc: Opt<Doc>; -// docList: Doc[]; -// heading: string; -// columnIndex: string; -// chromeHidden?: boolean; -// columnHeaders: SchemaHeaderField[] | undefined; -// headingObject: SchemaHeaderField | undefined; -// yMargin: number; -// columnWidth: number; -// numColumns: number; -// gridGap: number; -// type: "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function" | undefined; -// headings: () => object[]; -// renderChildren: (docs: Doc[]) => JSX.Element[]; -// addDocument: (doc: Doc | Doc[]) => boolean; -// createDropTarget: (ele: HTMLDivElement) => void; -// screenToLocalTransform: () => Transform; -// observeHeight: (myref: any) => void; -// unobserveHeight: (myref: any) => void; -// } - -// @observer -// export class CollectionNoteTakingViewFieldColumn extends React.Component<CSVFieldColumnProps> { -// @observable private _background = "inherit"; - -// private dropDisposer?: DragManager.DragDropDisposer; -// private _headerRef: React.RefObject<HTMLDivElement> = React.createRef(); - -// // @observable _paletteOn = false; -// @observable _heading = this.props.headingObject ? this.props.headingObject.heading : this.props.heading; -// // @observable _color = this.props.headingObject ? this.props.headingObject.color : "#f1efeb"; -// _ele: HTMLElement | null = null; - -// // This is likely similar to what we will be doing. Why do we need to make these refs? -// // is that the only way to have drop targets? -// createColumnDropRef = (ele: HTMLDivElement | null) => { -// this.dropDisposer?.(); -// if (ele) { -// this._ele = ele; -// this.props.observeHeight(ele); -// this.dropDisposer = DragManager.MakeDropTarget(ele, this.columnDrop.bind(this)); -// } -// } -// componentWillUnmount() { -// this.props.unobserveHeight(this._ele); -// } - -// //TODO: what is scripting? I found it in SetInPlace def but don't know what that is -// @undoBatch -// columnDrop = action((e: Event, de: DragManager.DropEvent) => { -// const drop = { docs: de.complete.docDragData?.droppedDocuments, val: this.getValue(this._heading) }; -// drop.docs?.forEach(d => Doc.SetInPlace(d, this.props.columnIndex, drop.val, false)); -// }); - -// getValue = (value: string): any => { -// const parsed = parseInt(value); -// if (!isNaN(parsed)) return parsed; -// if (value.toLowerCase().indexOf("true") > -1) return true; -// if (value.toLowerCase().indexOf("false") > -1) return false; -// return value; -// } - -// @action -// headingChanged = (value: string) => { -// const castedValue = this.getValue(value); -// if (castedValue) { -// if (this.props.columnHeaders?.map(i => i.heading).indexOf(castedValue.toString()) !== -1) { -// return false; -// } -// this.props.docList.forEach(d => d[this.props.columnIndex] = castedValue); -// if (this.props.headingObject) { -// this.props.headingObject.setHeading(castedValue.toString()); -// this._heading = this.props.headingObject.heading; -// } -// return true; -// } -// return false; -// } - -// @action pointerEntered = () => SnappingManager.GetIsDragging() && (this._background = "#b4b4b4"); -// @action pointerLeave = () => this._background = "inherit"; -// textCallback = (char: string) => this.addNewTextDoc("-typed text-", false, true); - -// @action -// addNewTextDoc = (value: string, shiftDown?: boolean, forceEmptyNote?: boolean) => { -// if (!value && !forceEmptyNote) return false; -// const key = this.props.columnIndex; -// const newDoc = Docs.Create.TextDocument(value, { _height: 18, _width: 200, _fitWidth: true, title: value, _autoHeight: true }); -// newDoc[key] = this.getValue(this.props.heading); -// const maxHeading = this.props.docList.reduce((maxHeading, doc) => NumCast(doc.heading) > maxHeading ? NumCast(doc.heading) : maxHeading, 0); -// const heading = maxHeading === 0 || this.props.docList.length === 0 ? 1 : maxHeading === 1 ? 2 : 3; -// newDoc.heading = heading; -// FormattedTextBox.SelectOnLoad = newDoc[Id]; -// FormattedTextBox.SelectOnLoadChar = forceEmptyNote ? "" : " "; -// return this.props.addDocument?.(newDoc) || false; -// } - -// @action -// deleteColumn = () => { -// this.props.docList.forEach(d => d[this.props.columnIndex] = undefined); -// if (this.props.columnHeaders && this.props.headingObject) { -// const index = this.props.columnHeaders.indexOf(this.props.headingObject); -// this.props.columnHeaders.splice(index, 1); -// } -// } - -// @action -// collapseSection = () => { -// this.props.headingObject?.setCollapsed(!this.props.headingObject.collapsed); -// this.toggleVisibility(); -// } - -// headerDown = (e: React.PointerEvent<HTMLDivElement>) => setupMoveUpEvents(this, e, this.startDrag, emptyFunction, emptyFunction); - -// //TODO: I think this is where I'm supposed to edit stuff -// startDrag = (e: PointerEvent, down: number[], delta: number[]) => { -// // is MakeAlias a way to make a copy of a doc without rendering it? -// const alias = Doc.MakeAlias(this.props.Document); -// alias._width = this.props.columnWidth / (this.props.columnHeaders?.length || 1); -// alias._pivotField = undefined; -// let value = this.getValue(this._heading); -// value = typeof value === "string" ? `"${value}"` : value; -// alias.viewSpecScript = ScriptField.MakeFunction(`doc.${this.props.columnIndex} === ${value}`, { doc: Doc.name }); -// if (alias.viewSpecScript) { -// DragManager.StartDocumentDrag([this._headerRef.current!], new DragManager.DocumentDragData([alias]), e.clientX, e.clientY); -// return true; -// } -// return false; -// } - -// renderMenu = () => { -// return <div className="collectionStackingView-optionPicker"> -// <div className="optionOptions"> -// <div className={"optionPicker" + (true ? " active" : "")} onClick={action(() => { })}>Add options here</div> -// </div> -// </div >; -// } - -// @observable private collapsed: boolean = false; - -// private toggleVisibility = action(() => this.collapsed = !this.collapsed); - -// menuCallback = (x: number, y: number) => { -// ContextMenu.Instance.clearItems(); -// const layoutItems: ContextMenuProps[] = []; -// const docItems: ContextMenuProps[] = []; -// const dataDoc = this.props.DataDoc || this.props.Document; - -// DocUtils.addDocumentCreatorMenuItems((doc) => { -// FormattedTextBox.SelectOnLoad = doc[Id]; -// return this.props.addDocument?.(doc); -// }, this.props.addDocument, x, y, true); - -// Array.from(Object.keys(Doc.GetProto(dataDoc))).filter(fieldKey => dataDoc[fieldKey] instanceof RichTextField || dataDoc[fieldKey] instanceof ImageField || typeof (dataDoc[fieldKey]) === "string").map(fieldKey => -// docItems.push({ -// description: ":" + fieldKey, event: () => { -// const created = DocUtils.DocumentFromField(dataDoc, fieldKey, Doc.GetProto(this.props.Document)); -// if (created) { -// if (this.props.Document.isTemplateDoc) { -// Doc.MakeMetadataFieldTemplate(created, this.props.Document); -// } -// return this.props.addDocument?.(created); -// } -// }, icon: "compress-arrows-alt" -// })); -// Array.from(Object.keys(Doc.GetProto(dataDoc))).filter(fieldKey => DocListCast(dataDoc[fieldKey]).length).map(fieldKey => -// docItems.push({ -// description: ":" + fieldKey, event: () => { -// const created = Docs.Create.CarouselDocument([], { _width: 400, _height: 200, title: fieldKey }); -// if (created) { -// const container = this.props.Document.resolvedDataDoc ? Doc.GetProto(this.props.Document) : this.props.Document; -// if (container.isTemplateDoc) { -// Doc.MakeMetadataFieldTemplate(created, container); -// return Doc.AddDocToList(container, Doc.LayoutFieldKey(container), created); -// } -// return this.props.addDocument?.(created) || false; -// } -// }, icon: "compress-arrows-alt" -// })); -// !Doc.UserDoc().noviceMode && ContextMenu.Instance.addItem({ description: "Doc Fields ...", subitems: docItems, icon: "eye" }); -// !Doc.UserDoc().noviceMode && ContextMenu.Instance.addItem({ description: "Containers ...", subitems: layoutItems, icon: "eye" }); -// ContextMenu.Instance.setDefaultItem("::", (name: string): void => { -// Doc.GetProto(this.props.Document)[name] = ""; -// const created = Docs.Create.TextDocument("", { title: name, _width: 250, _autoHeight: true }); -// if (created) { -// if (this.props.Document.isTemplateDoc) { -// Doc.MakeMetadataFieldTemplate(created, this.props.Document); -// } -// this.props.addDocument?.(created); -// } -// }); -// const pt = this.props.screenToLocalTransform().inverse().transformPoint(x, y); -// ContextMenu.Instance.displayMenu(x, y, undefined, true); -// } -// @computed get innards() { -// TraceMobx(); -// const key = this.props.columnIndex; -// const headings = this.props.headings(); -// const heading = this._heading; -// const columnYMargin = this.props.headingObject ? 0 : this.props.yMargin; -// const uniqueHeadings = headings.map((i, idx) => headings.indexOf(i) === idx); -// const evContents = heading ? heading : this.props?.type === "number" ? "0" : `NO ${key.toUpperCase()} VALUE`; -// const headingView = this.props.headingObject ? -// <div key={heading} className="collectionStackingView-sectionHeader" ref={this._headerRef} -// style={{ -// marginTop: this.props.yMargin, -// width: (this.props.columnWidth) / -// ((uniqueHeadings.length + (this.props.chromeHidden ? 0 : 1)) || 1) -// }}> -// <div className={"collectionStackingView-collapseBar" + (this.props.headingObject.collapsed === true ? " active" : "")} onClick={this.collapseSection}></div> -// {/* the default bucket (no key value) has a tooltip that describes what it is. -// Further, it does not have a color and cannot be deleted. */} -// <div className="collectionStackingView-sectionHeader-subCont" onPointerDown={this.headerDown} -// title={evContents === `NO ${key.toUpperCase()} VALUE` ? -// `Documents that don't have a ${key} value will go here. This column cannot be removed.` : ""}> -// <EditableView -// GetValue={() => evContents} -// SetValue={this.headingChanged} -// contents={evContents} -// oneLine={true} -// toggle={this.toggleVisibility} /> -// {<button className="collectionStackingView-sectionDelete" onClick={this.deleteColumn}> -// <FontAwesomeIcon icon="trash" size="lg" /> -// </button>} -// {evContents === `NO ${key.toUpperCase()} VALUE` ? (null) : -// <div className="collectionStackingView-sectionOptions"> -// <Flyout anchorPoint={anchorPoints.TOP_RIGHT} content={this.renderMenu()}> -// <button className="collectionStackingView-sectionOptionButton"> -// <FontAwesomeIcon icon="ellipsis-v" size="lg"></FontAwesomeIcon> -// </button> -// </Flyout> -// </div> -// } -// </div> -// </div> : (null); -// const templatecols = `${this.props.columnWidth / this.props.numColumns}px `; -// const type = this.props.Document.type; -// return <> -// {this.props.Document._columnsHideIfEmpty ? (null) : headingView} -// { -// this.collapsed ? (null) : -// <div> -// <div key={`${heading}-stack`} className={`collectionStackingView-masonrySingle`} -// style={{ -// padding: `${columnYMargin}px ${0}px ${this.props.yMargin}px ${0}px`, -// margin: "auto", -// width: "max-content", //singleColumn ? undefined : `${cols * (style.columnWidth + style.gridGap) + 2 * style.xMargin - style.gridGap}px`, -// height: 'max-content', -// position: "relative", -// gridGap: this.props.gridGap, -// gridTemplateColumns: templatecols, -// gridAutoRows: "0px" -// }}> -// {this.props.renderChildren(this.props.docList)} -// </div> -// {!this.props.chromeHidden && type !== DocumentType.PRES ? -// <div key={`${heading}-add-document`} className="collectionStackingView-addDocumentButton" -// style={{ width: this.props.columnWidth / this.props.numColumns, marginBottom: 10, marginLeft: 25 }}> -// <EditableView -// GetValue={returnEmptyString} -// SetValue={this.addNewTextDoc} -// textCallback={this.textCallback} -// placeholder={"Type ':' for commands"} -// contents={<FontAwesomeIcon icon={"plus"}/>} -// toggle={this.toggleVisibility} -// menuCallback={this.menuCallback} -// /> -// </div> : null} -// </div> -// } -// </>; -// } - - -// render() { -// TraceMobx(); -// const headings = this.props.headings(); -// const heading = this._heading; -// const uniqueHeadings = headings.map((i, idx) => headings.indexOf(i) === idx); -// return ( -// <div className={"collectionStackingViewFieldColumn" + (SnappingManager.GetIsDragging() ? "Dragging" : "")} key={heading} -// style={{ -// width: `${100 / (uniqueHeadings.length + (this.props.chromeHidden ? 0 : 1) || 1)}%`, -// height: undefined, // DraggingManager.GetIsDragging() ? "100%" : undefined, -// background: this._background -// }} -// ref={this.createColumnDropRef} onPointerEnter={this.pointerEntered} onPointerLeave={this.pointerLeave}> -// {this.innards} -// </div > -// ); -// } -// }
\ No newline at end of file +}
\ No newline at end of file |