aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/CollectionMulticolumnView.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/CollectionMulticolumnView.tsx')
-rw-r--r--src/client/views/CollectionMulticolumnView.tsx39
1 files changed, 35 insertions, 4 deletions
diff --git a/src/client/views/CollectionMulticolumnView.tsx b/src/client/views/CollectionMulticolumnView.tsx
index ea1f0c189..0aa615ffc 100644
--- a/src/client/views/CollectionMulticolumnView.tsx
+++ b/src/client/views/CollectionMulticolumnView.tsx
@@ -1,12 +1,16 @@
import { observer } from 'mobx-react';
import { makeInterface, listSpec } from '../../new_fields/Schema';
import { documentSchema } from '../../new_fields/documentSchemas';
-import { CollectionSubView, SubCollectionViewProps } from './collections/CollectionSubView';
+import { CollectionSubView } from './collections/CollectionSubView';
import { DragManager } from '../util/DragManager';
import * as React from "react";
import { Doc, DocListCast } from '../../new_fields/Doc';
-import { NumCast, Cast } from '../../new_fields/Types';
+import { NumCast, Cast, StrCast } from '../../new_fields/Types';
import { List } from '../../new_fields/List';
+import { ContentFittingDocumentView } from './nodes/ContentFittingDocumentView';
+import { Utils } from '../../Utils';
+import { Transform } from '../util/Transform';
+import "./collectionMulticolumnView.scss";
type MulticolumnDocument = makeInterface<[typeof documentSchema]>;
const MulticolumnDocument = makeInterface(documentSchema);
@@ -29,14 +33,41 @@ export default class CollectionMulticolumnView extends CollectionSubView(Multico
}
}
+ getTransform = (ele: React.RefObject<HTMLDivElement>) => () => {
+ if (!ele.current) return Transform.Identity();
+ const { scale, translateX, translateY } = Utils.GetScreenTransform(ele.current);
+ return new Transform(-translateX, -translateY, 1 / scale);
+ }
+
public isCurrent(doc: Doc) { return !doc.isMinimized && (Math.abs(NumCast(doc.displayTimecode, -1) - NumCast(this.Document.currentTimecode, -1)) < 1.5 || NumCast(doc.displayTimecode, -1) === -1); }
render() {
+ const { PanelWidth } = this.props;
return (
<div className={"collectionMulticolumnView_outer"}>
<div className={"collectionMulticolumnView_contents"}>
- {this.configuration.map(config => ).filter(pair => this.isCurrent(pair.layout)).map(({ layout, data }) => {
-
+ {this.configuration.map(config => {
+ const { target } = config;
+ if (target instanceof Doc) {
+ let computedWidth: number = 0;
+ const widthSpecifier = Cast(config.columnWidth, "number");
+ let matches: RegExpExecArray | null;
+ if (widthSpecifier !== undefined) {
+ computedWidth = widthSpecifier;
+ } else if ((matches = /([\d.]+)\%/.exec(StrCast(config.columnWidth))) !== null) {
+ computedWidth = Number(matches[1]) / 100 * PanelWidth();
+ }
+ return (!computedWidth ? (null) :
+ <ContentFittingDocumentView
+ {...this.props}
+ Document={target}
+ DataDocument={undefined}
+ PanelWidth={() => computedWidth}
+ getTransform={this.props.ScreenToLocalTransform}
+ />
+ );
+ }
+ return (null);
})}
</div>
</div>