aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSam Wilkins <abdullah_ahmed@brown.edu>2019-07-24 12:28:17 -0400
committerSam Wilkins <abdullah_ahmed@brown.edu>2019-07-24 12:28:17 -0400
commit07e4ad670134213afc019bf84f765cdfc00a510a (patch)
treeaf4c91b5198d152dba8d4f2e229290b37c19545c /src
parent40b7197fb9b4748a63845bb664fa9ab02ad6915a (diff)
can text wrap row via context menu
Diffstat (limited to 'src')
-rw-r--r--src/client/views/collections/CollectionSchemaMovableTableHOC.tsx34
-rw-r--r--src/client/views/collections/CollectionSchemaView.scss8
-rw-r--r--src/client/views/collections/CollectionSchemaView.tsx28
3 files changed, 53 insertions, 17 deletions
diff --git a/src/client/views/collections/CollectionSchemaMovableTableHOC.tsx b/src/client/views/collections/CollectionSchemaMovableTableHOC.tsx
index 6fc04849c..beae739ec 100644
--- a/src/client/views/collections/CollectionSchemaMovableTableHOC.tsx
+++ b/src/client/views/collections/CollectionSchemaMovableTableHOC.tsx
@@ -1,11 +1,12 @@
import React = require("react");
-import { ReactTableDefaults, TableCellRenderer, ComponentPropsGetterR, ComponentPropsGetter0 } from "react-table";
+import { ReactTableDefaults, TableCellRenderer, ComponentPropsGetterR, ComponentPropsGetter0, RowInfo } from "react-table";
import "./CollectionSchemaView.scss";
import { Transform } from "../../util/Transform";
import { Doc } from "../../../new_fields/Doc";
import { DragManager, SetupDrag } from "../../util/DragManager";
import { SelectionManager } from "../../util/SelectionManager";
import { Cast, FieldValue, StrCast } from "../../../new_fields/Types";
+import { ContextMenu } from "../ContextMenu";
export interface MovableColumnProps {
@@ -60,7 +61,7 @@ export class MovableColumn extends React.Component<MovableColumnProps> {
return false;
}
- setupDrag (ref: React.RefObject<HTMLElement>) {
+ setupDrag(ref: React.RefObject<HTMLElement>) {
let onRowMove = (e: PointerEvent) => {
e.stopPropagation();
e.preventDefault();
@@ -102,10 +103,13 @@ export class MovableColumn extends React.Component<MovableColumnProps> {
}
export interface MovableRowProps {
+ rowInfo: RowInfo;
ScreenToLocalTransform: () => Transform;
addDoc: (doc: Doc, relativeTo?: Doc, before?: boolean) => boolean;
moveDoc: DragManager.MoveFunction;
rowFocused: boolean;
+ textWrapRow: (doc: Doc) => void;
+ rowWrapped: boolean;
}
export class MovableRow extends React.Component<MovableRowProps> {
@@ -141,11 +145,10 @@ export class MovableRow extends React.Component<MovableRowProps> {
}
rowDrop = (e: Event, de: DragManager.DropEvent) => {
- const { children = null, rowInfo } = this.props;
- if (!rowInfo) return false;
+ // const { children = null, rowInfo } = this.props;
+ // if (!rowInfo) return false;
- const { original } = rowInfo;
- const rowDoc = FieldValue(Cast(original, Doc));
+ const rowDoc = FieldValue(Cast(this.props.rowInfo.original, Doc));
if (!rowDoc) return false;
let x = this.props.ScreenToLocalTransform().transformPoint(de.x, de.y);
@@ -158,16 +161,23 @@ export class MovableRow extends React.Component<MovableRowProps> {
if (de.data.draggedDocuments[0] === rowDoc) return true;
let addDocument = (doc: Doc) => this.props.addDoc(doc, rowDoc, before);
let movedDocs = de.data.draggedDocuments; //(de.data.options === this.props.treeViewId ? de.data.draggedDocuments : de.data.droppedDocuments);
- return (de.data.dropAction || de.data.userDropAction) ?
+ return (de.data.dropAction || de.data.userDropAction) ?
de.data.droppedDocuments.reduce((added: boolean, d) => this.props.addDoc(d, rowDoc, before) || added, false)
: (de.data.moveDocument) ?
- movedDocs.reduce((added: boolean, d) => de.data.moveDocument(d, rowDoc, addDocument) || added, false)
+ movedDocs.reduce((added: boolean, d) => de.data.moveDocument(d, rowDoc, addDocument) || added, false)
// movedDocs.reduce((added: boolean, d) => this.props.moveDoc(d, rowDoc, addDocument) || added, false)
: de.data.droppedDocuments.reduce((added: boolean, d) => this.props.addDoc(d, rowDoc, before), false);
}
return false;
}
+ onRowContextMenu = (e: React.MouseEvent): void => {
+ // const { rowInfo } = this.props;
+ // const { textWrapRow, original } = rowInfo;
+ let description = this.props.rowWrapped ? "Unwrap text on row" : "Text wrap row";
+ ContextMenu.Instance.addItem({ description: description, event: () => this.props.textWrapRow(this.props.rowInfo.original) });
+ }
+
render() {
const { children = null, rowInfo } = this.props;
if (!rowInfo) {
@@ -179,10 +189,14 @@ export class MovableRow extends React.Component<MovableRowProps> {
if (!doc) return <></>;
let reference = React.createRef<HTMLDivElement>();
- let onItemDown = SetupDrag(reference, () => doc);
+ let onItemDown = SetupDrag(reference, () => doc, this.props.moveDoc);
+
+ let className = "collectionSchema-row";
+ if (this.props.rowFocused) className += " row-focused";
+ if (this.props.rowWrapped) className += " row-wrapped";
return (
- <div className={this.props.rowFocused ? "collectionSchema-row row-focused" : "collectionSchema-row"} ref={this.createRowDropTarget}>
+ <div className={className} ref={this.createRowDropTarget} onContextMenu={this.onRowContextMenu}>
<div className="collectionSchema-row-wrapper" ref={this._header} onPointerEnter={this.onPointerEnter} onPointerLeave={this.onPointerLeave}>
<div className="row-dragger" ref={reference} onPointerDown={onItemDown}>
<ReactTableDefaults.TrComponent>
diff --git a/src/client/views/collections/CollectionSchemaView.scss b/src/client/views/collections/CollectionSchemaView.scss
index 38d14c2de..410790197 100644
--- a/src/client/views/collections/CollectionSchemaView.scss
+++ b/src/client/views/collections/CollectionSchemaView.scss
@@ -148,7 +148,7 @@
padding: 0;
font-size: 13px;
text-align: center;
- white-space: normal;
+ // white-space: normal;
.imageBox-cont {
position: relative;
@@ -287,6 +287,12 @@ button.add-column {
background-color: $light-color-secondary;
}
+ &.row-wrapped {
+ .rt-td {
+ white-space: normal;
+ }
+ }
+
.row-dragger {
// height: $MAX_ROW_HEIGHT;
}
diff --git a/src/client/views/collections/CollectionSchemaView.tsx b/src/client/views/collections/CollectionSchemaView.tsx
index 0e2d37a9e..62e4ceb54 100644
--- a/src/client/views/collections/CollectionSchemaView.tsx
+++ b/src/client/views/collections/CollectionSchemaView.tsx
@@ -53,6 +53,7 @@ export enum ColumnType {
}
// this map should be used for keys that should have a const type of value
const columnTypes: Map<string, ColumnType> = new Map([
+ ["title", ColumnType.String],
["x", ColumnType.Number], ["y", ColumnType.Number], ["width", ColumnType.Number], ["height", ColumnType.Number],
["nativeWidth", ColumnType.Number], ["nativeHeight", ColumnType.Number], ["isPrototype", ColumnType.Boolean],
["page", ColumnType.Number], ["curPage", ColumnType.Number], ["libraryBrush", ColumnType.Boolean], ["zIndex", ColumnType.Number]
@@ -268,7 +269,8 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
@observable _cellIsEditing: boolean = false;
@observable _focusedCell: { row: number, col: number } = { row: 0, col: 0 };
@observable _sortedColumns: Map<string, { id: string, desc: boolean }> = new Map();
- @observable _openCollections: Array<Doc> = [];
+ @observable _openCollections: Array<string> = [];
+ @observable _textWrappedRows: Array<string> = [];
@observable private _node: HTMLDivElement | null = null;
@computed get previewWidth() { return () => NumCast(this.props.Document.schemaPreviewWidth); }
@@ -396,7 +398,7 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
}
tableMoveDoc = (d: Doc, target: Doc, addDoc: (doc: Doc) => boolean) => {
- console.log("SCHEMA MOVE");
+ console.log("SCHEMA MOVE", StrCast(d.title), StrCast(target.title));
this.props.moveDocument(d, target, addDoc);
}
@@ -410,7 +412,9 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
addDoc: this.tableAddDoc,
moveDoc: this.tableMoveDoc,
rowInfo,
- rowFocused: !this._headerIsEditing && rowInfo.index === this._focusedCell.row && this.props.isFocused(this.props.Document)
+ rowFocused: !this._headerIsEditing && rowInfo.index === this._focusedCell.row && this.props.isFocused(this.props.Document),
+ textWrapRow: this.textWrapRow,
+ rowWrapped: this._textWrappedRows.findIndex(id => rowInfo.original[Id] === id) > -1
};
}
@@ -429,12 +433,12 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
@action
onExpandCollection = (collection: Doc): void => {
- this._openCollections.push(collection);
+ this._openCollections.push(collection[Id]);
}
@action
onCloseCollection = (collection: Doc): void => {
- let index = this._openCollections.findIndex(col => col === collection);
+ let index = this._openCollections.findIndex(col => col === collection[Id]);
if (index > -1) this._openCollections.splice(index, 1);
}
@@ -610,13 +614,25 @@ export class SchemaTable extends React.Component<SchemaTableProps> {
return Array.from(Object.keys(keys));
}
+ @action
+ textWrapRow = (doc: Doc): void => {
+ let index = this._textWrappedRows.findIndex(id => doc[Id] === id);
+ if (index > -1) {
+ this._textWrappedRows.splice(index, 1);
+ } else {
+ this._textWrappedRows.push(doc[Id]);
+ }
+
+ }
+
@computed
get reactTable() {
let previewWidth = this.previewWidth() + 2 * this.borderWidth + this.DIVIDER_WIDTH + 1;
let hasCollectionChild = this.props.childDocs.reduce((found, doc) => found || doc.type === "collection", false);
- let expandedRowsList = this._openCollections.map(col => this.props.childDocs.findIndex(doc => doc === col).toString());
+ let expandedRowsList = this._openCollections.map(col => this.props.childDocs.findIndex(doc => doc[Id] === col).toString());
let expanded = {};
expandedRowsList.forEach(row => expanded[row] = true);
+ console.log(...[...this._textWrappedRows]); // TODO: get component to rerender on text wrap change without needign to console.log :((((
return <ReactTable
style={{ position: "relative", float: "left", width: `calc(100% - ${previewWidth}px` }}