diff options
Diffstat (limited to 'src/client/views/nodes/CollectionFreeFormDocumentView.tsx')
| -rw-r--r-- | src/client/views/nodes/CollectionFreeFormDocumentView.tsx | 27 | 
1 files changed, 16 insertions, 11 deletions
| diff --git a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx index fcf483659..dd063ec9d 100644 --- a/src/client/views/nodes/CollectionFreeFormDocumentView.tsx +++ b/src/client/views/nodes/CollectionFreeFormDocumentView.tsx @@ -12,6 +12,7 @@ import { Doc, WidthSym, HeightSym } from "../../../new_fields/Doc";  import { random } from "animejs";  export interface CollectionFreeFormDocumentViewProps extends DocumentViewProps { +    dataProvider?: (doc: Doc, dataDoc?: Doc) => { x: number, y: number, width: number, height: number, z: number, transition?: string } | undefined;      x?: number;      y?: number;      width?: number; @@ -32,14 +33,14 @@ export const PositionDocument = makeInterface(documentSchema, positionSchema);  @observer  export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeFormDocumentViewProps, PositionDocument>(PositionDocument) {      _disposer: IReactionDisposer | undefined = undefined; -    @computed get transform() { return `scale(${this.props.ContentScaling()}) translate(${this.X}px, ${this.Y}px) rotate(${random(-1, 1) * this.props.jitterRotation}deg)`; } -    @computed get X() { return this._animPos !== undefined ? this._animPos[0] : this.renderScriptDim ? this.renderScriptDim.x : this.props.x !== undefined ? this.props.x : this.Document.x || 0; } -    @computed get Y() { return this._animPos !== undefined ? this._animPos[1] : this.renderScriptDim ? this.renderScriptDim.y : this.props.y !== undefined ? this.props.y : this.Document.y || 0; } -    @computed get width() { return this.renderScriptDim ? this.renderScriptDim.width : this.props.width !== undefined ? this.props.width : this.props.Document[WidthSym](); } -    @computed get height() { return this.renderScriptDim ? this.renderScriptDim.height : this.props.height !== undefined ? this.props.height : this.props.Document[HeightSym](); } +    get transform() { return `scale(${this.props.ContentScaling()}) translate(${this.X}px, ${this.Y}px) rotate(${random(-1, 1) * this.props.jitterRotation}deg)`; } +    get X() { return this._animPos !== undefined ? this._animPos[0] : this.renderScriptDim ? this.renderScriptDim.x : this.props.x !== undefined ? this.props.x : this.dataProvider ? this.dataProvider.x : this.Document.x || 0; } +    get Y() { return this._animPos !== undefined ? this._animPos[1] : this.renderScriptDim ? this.renderScriptDim.y : this.props.y !== undefined ? this.props.y : this.dataProvider ? this.dataProvider.y : this.Document.y || 0; } +    get width() { return this.renderScriptDim ? this.renderScriptDim.width : this.props.width !== undefined ? this.props.width : this.props.dataProvider && this.dataProvider ? this.dataProvider.width : this.props.Document[WidthSym](); } +    get height() { return this.renderScriptDim ? this.renderScriptDim.height : this.props.height !== undefined ? this.props.height : this.props.dataProvider && this.dataProvider ? this.dataProvider.height : this.props.Document[HeightSym](); } +    @computed get dataProvider() { return this.props.dataProvider && this.props.dataProvider(this.props.Document, this.props.DataDoc) ? this.props.dataProvider(this.props.Document, this.props.DataDoc) : undefined; }      @computed get nativeWidth() { return FieldValue(this.Document.nativeWidth, 0); }      @computed get nativeHeight() { return FieldValue(this.Document.nativeHeight, 0); } -    @computed get scaleToOverridingWidth() { return this.width / FieldValue(this.Document.width, this.width); }      @computed get renderScriptDim() {          if (this.Document.renderScript) { @@ -72,11 +73,12 @@ export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeF      panelHeight = () => this.props.PanelHeight();      getTransform = (): Transform => this.props.ScreenToLocalTransform()          .translate(-this.X, -this.Y) -        .scale(1 / this.contentScaling()).scale(1 / this.scaleToOverridingWidth) +        .scale(1 / this.contentScaling())      borderRounding = () => {          let ruleRounding = this.props.ruleProvider ? StrCast(this.props.ruleProvider["ruleRounding_" + this.Document.heading]) : undefined; -        let br = StrCast(((this.layoutDoc.layout as Doc) || this.Document).borderRounding); +        let ld = this.layoutDoc.layout instanceof Doc ? this.layoutDoc.layout : undefined; +        let br = StrCast((ld || this.props.Document).borderRounding);          br = !br && ruleRounding ? ruleRounding : br;          if (br.endsWith("%")) {              let nativeDim = Math.min(NumCast(this.layoutDoc.nativeWidth), NumCast(this.layoutDoc.nativeHeight)); @@ -98,6 +100,9 @@ export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeF      @observable _animPos: number[] | undefined = undefined; +    finalPanelWidth = () => this.dataProvider ? this.dataProvider.width : this.panelWidth(); +    finalPanelHeight = () => this.dataProvider ? this.dataProvider.height : this.panelHeight(); +      render() {          return (              <div className="collectionFreeFormDocumentView-container" @@ -110,7 +115,7 @@ export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeF                                          StrCast(this.layoutDoc.boxShadow, ""),                      borderRadius: this.borderRounding(),                      transform: this.transform, -                    //transition: this.Document.isAnimating !== undefined ? ".5s ease-in" : this.props.transition ? this.props.transition : StrCast(this.layoutDoc.transition), +                    // transition: this.Document.isAnimating !== undefined ? ".5s ease-in" : this.props.transition ? this.props.transition : this.dataProvider ? this.dataProvider.transition : StrCast(this.layoutDoc.transition),                      width: this.width,                      height: this.height,                      zIndex: this.Document.zIndex || 0, @@ -119,8 +124,8 @@ export class CollectionFreeFormDocumentView extends DocComponent<CollectionFreeF                      ContentScaling={this.contentScaling}                      ScreenToLocalTransform={this.getTransform}                      backgroundColor={this.clusterColorFunc} -                    PanelWidth={this.panelWidth} -                    PanelHeight={this.panelHeight} +                    PanelWidth={this.finalPanelWidth} +                    PanelHeight={this.finalPanelHeight}                  />              </div>          ); | 
