aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx')
-rw-r--r--src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx233
1 files changed, 101 insertions, 132 deletions
diff --git a/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx b/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx
index 6d0155b45..9e5dbe967 100644
--- a/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx
+++ b/src/client/views/nodes/DataVizBox/DocCreatorMenu/DocCreatorMenu.tsx
@@ -1,40 +1,38 @@
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Colors } from 'browndash-components';
-import { action, computed, makeObservable, observable, reaction, runInAction } from 'mobx';
+import { action, computed, makeObservable, observable, runInAction } from 'mobx';
import { observer } from 'mobx-react';
import { IDisposer } from 'mobx-utils';
import * as React from 'react';
import ReactLoading from 'react-loading';
-import { ClientUtils, returnEmptyFilter, returnFalse, returnTrue, setupMoveUpEvents } from '../../../../../ClientUtils';
+import { ClientUtils, returnEmptyFilter, returnFalse, setupMoveUpEvents } from '../../../../../ClientUtils';
import { emptyFunction } from '../../../../../Utils';
import { Doc, DocListCast, FieldType, NumListCast, StrListCast, returnEmptyDoclist } from '../../../../../fields/Doc';
import { Id } from '../../../../../fields/FieldSymbols';
-import { Cast, DocCast, ImageCast, StrCast } from '../../../../../fields/Types';
+import { ImageCast, StrCast } from '../../../../../fields/Types';
import { ImageField } from '../../../../../fields/URLField';
import { Networking } from '../../../../Network';
import { GPTCallType, gptAPICall, gptImageCall } from '../../../../apis/gpt/GPT';
import { Docs, DocumentOptions } from '../../../../documents/Documents';
import { DragManager } from '../../../../util/DragManager';
-import { MakeTemplate } from '../../../../util/DropConverter';
import { SnappingManager } from '../../../../util/SnappingManager';
import { UndoManager, undoable } from '../../../../util/UndoManager';
-import { LightboxView } from '../../../LightboxView';
import { ObservableReactComponent } from '../../../ObservableReactComponent';
import { CollectionFreeFormView } from '../../../collections/collectionFreeForm/CollectionFreeFormView';
import { DocumentView, DocumentViewInternal } from '../../DocumentView';
-import { FieldViewProps } from '../../FieldView';
import { OpenWhere } from '../../OpenWhere';
import { DataVizBox } from '../DataVizBox';
import './DocCreatorMenu.scss';
-import { DefaultStyleProvider, returnEmptyDocViewList } from '../../../StyleProvider';
+import { DefaultStyleProvider } from '../../../StyleProvider';
import { Transform } from '../../../../util/Transform';
-import { IconProp } from '@fortawesome/fontawesome-svg-core';
import { TemplateFieldSize, TemplateFieldType, TemplateLayouts } from './TemplateBackend';
import { TemplateManager } from './TemplateManager';
import { Template } from './Template';
import { Field, ViewType } from './FieldTypes/Field';
import { TabDocView } from '../../../collections/TabDocView';
import { DocData } from '../../../../../fields/DocSymbols';
+import { IconProp } from '@fortawesome/fontawesome-svg-core';
+import { Upload } from '../../../../../server/SharedMediaTypes';
export enum LayoutType {
FREEFORM = 'Freeform',
@@ -44,8 +42,36 @@ export enum LayoutType {
CARD = 'Card View',
}
+export interface DataVizTemplateInfo {
+ doc: Doc;
+ layout: { type: LayoutType; xMargin: number; yMargin: number; repeat: number };
+ columns: number;
+ referencePos: { x: number; y: number };
+}
+
+export interface DataVizTemplateLayout {
+ template: Doc;
+ docsNumList: number[];
+ layout: { type: LayoutType; xMargin: number; yMargin: number; repeat: number };
+ columns: number;
+ rows: number;
+}
+
+export type Col = {
+ sizes: TemplateFieldSize[];
+ desc: string;
+ title: string;
+ type: TemplateFieldType;
+ defaultContent?: string;
+};
+
+interface DocCreateMenuProps {
+ addDocTab: (doc: Doc | Doc[], where: OpenWhere) => boolean;
+}
+
@observer
-export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
+export class DocCreatorMenu extends ObservableReactComponent<DocCreateMenuProps> {
+ // eslint-disable-next-line no-use-before-define
static Instance: DocCreatorMenu;
private DEBUG_MODE: boolean = false;
@@ -54,7 +80,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
private _ref: HTMLDivElement | null = null;
- private templateManager: TemplateManager;
+ private templateManager: TemplateManager;
@observable _fullyRenderedDocs: Doc[] = []; // collection of templates filled in with content
@observable _renderedDocCollection: Doc | undefined = undefined; // fullyRenderedDocs in a parent collection
@@ -90,8 +116,8 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
@observable _dragging: boolean = false;
@observable _draggingIndicator: boolean = false;
@observable _dataViz?: DataVizBox;
- @observable _interactionLock: any;
- @observable _snapPt: any;
+ @observable _interactionLock: boolean | undefined;
+ @observable _snapPt: { x: number; y: number } = { x: 0, y: 0 };
@observable _resizeHdlId: string = '';
@observable _resizing: boolean = false;
@observable _offset: { x: number; y: number } = { x: 0, y: 0 };
@@ -100,7 +126,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
@observable _menuDimensions: { width: number; height: number } = { width: 400, height: 400 };
@observable _editing: boolean = false;
- constructor(props: any) {
+ constructor(props: DocCreateMenuProps) {
super(props);
makeObservable(this);
DocCreatorMenu.Instance = this;
@@ -191,7 +217,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
return bounds;
}
- setUpButtonClick = (e: any, func: Function) => {
+ setUpButtonClick = (e: React.PointerEvent, func: () => void) => {
setupMoveUpEvents(
this,
e,
@@ -237,18 +263,6 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
componentDidMount() {
document.addEventListener('pointerdown', this.onPointerDown, true);
document.addEventListener('pointerup', this.onPointerUp);
- //this._disposers.columns = reaction(() => this._dataViz?.layoutDoc._dataViz_axes, () => {this.generateTemplates('')})
- this._disposers.lightbox = reaction(
- () => LightboxView.LightboxDoc(),
- doc => {
- doc ? this._shouldDisplay && this.closeMenu() : !this._shouldDisplay && this.openMenu();
- }
- );
- // this._disposers.layout = reaction(
- // () => this._layout,
- // layout => { this.updateRenderedDocCollection(); }
- // );
- //this._disposers.fields = reaction(() => this._dataViz?.axes, cols => this._selectedCols = cols?.map(col => { return {title: col, type: '', desc: ''}}))
}
componentWillUnmount() {
@@ -258,11 +272,6 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
}
@action
- updateSelectedCols = (cols: string[]) => {
- this._selectedCols;
- };
-
- @action
toggleDisplay = (x: number, y: number) => {
if (this._shouldDisplay) {
this._shouldDisplay = false;
@@ -290,7 +299,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
SnappingManager.SetIsResizing(DocumentView.Selected().lastElement()?.Document[Id]); // turns off pointer events on things like youtube videos and web pages so that dragging doesn't get "stuck" when cursor moves over them
e.stopPropagation();
const id = (this._resizeHdlId = e.currentTarget.className);
- const pad = id.includes('Left') || id.includes('Right') ? Number(getComputedStyle(e.target as any).width.replace('px', '')) / 2 : 0;
+ const pad = id.includes('Left') || id.includes('Right') ? Number(getComputedStyle(e.target as HTMLElement).width.replace('px', '')) / 2 : 0;
const bounds = e.currentTarget.getBoundingClientRect();
this._offset = {
x: id.toLowerCase().includes('left') ? bounds.right - e.clientX - pad : bounds.left - e.clientX + pad, //
@@ -301,7 +310,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
};
@action
- onResize = (e: any): boolean => {
+ onResize = (e: PointerEvent): boolean => {
const dragHdl = this._resizeHdlId.split(' ')[1];
const thisPt = DragManager.snapDrag(e, -this._offset.x, -this._offset.y, this._offset.x, this._offset.y);
@@ -310,13 +319,13 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
this._interactionLock = true;
const scaleAspect = {x: scale.x, y: scale.y};
this.resizeView(refPt, scaleAspect, transl); // prettier-ignore
- await new Promise<any>(res => { setTimeout(() => { res(this._interactionLock = undefined)})});
+ await new Promise<boolean | undefined>(res => { setTimeout(() => { res(this._interactionLock = undefined)})});
}); // prettier-ignore
return true;
};
@action
- onDrag = (e: any): boolean => {
+ onDrag = (e: PointerEvent): boolean => {
this._pageX = e.pageX - (this._startPos?.x ?? 0);
this._pageY = e.pageY - (this._startPos?.y ?? 0);
this._initDimensions.x = this._pageX;
@@ -326,7 +335,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
getResizeVals = (thisPt: { x: number; y: number }, dragHdl: string) => {
const [w, h] = [this._initDimensions.width, this._initDimensions.height];
- const [moveX, moveY] = [thisPt.x - this._snapPt.x, thisPt.y - this._snapPt.y];
+ const [moveX, moveY] = [thisPt.x - this._snapPt!.x, thisPt.y - this._snapPt!.y];
let vals: { scale: { x: number; y: number }; refPt: [number, number]; transl: { x: number; y: number } };
switch (dragHdl) {
case 'topLeft': vals = { scale: { x: 1 - moveX / w, y: 1 -moveY / h }, refPt: [this.bounds.r, this.bounds.b], transl: {x: moveX, y: moveY } }; break;
@@ -343,7 +352,6 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
};
resizeView = (refPt: number[], scale: { x: number; y: number }, translation: { x: number; y: number }) => {
- const refCent = [refPt[0], refPt[1]]; // fixed reference point for resize (ie, a point that doesn't move)
if (this._initDimensions.x === undefined) this._initDimensions.x = this._pageX;
if (this._initDimensions.y === undefined) this._initDimensions.y = this._pageY;
const { height, width, x, y } = this._initDimensions;
@@ -392,7 +400,6 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
};
editTemplate = (doc: Doc) => {
- //this.closeMenu();
DocumentViewInternal.addDocTabFunc(doc, OpenWhere.addRight);
DocumentView.DeselectAll();
Doc.UnBrushDoc(doc);
@@ -493,13 +500,11 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
};
generateGPTImage = async (prompt: string): Promise<string | undefined> => {
- console.log(prompt);
-
try {
const res = await gptImageCall(prompt);
if (res) {
- const result = await Networking.PostToServer('/uploadRemoteImage', { sources: res });
+ const result = (await Networking.PostToServer('/uploadRemoteImage', { sources: res })) as Upload.FileInformation[];
const source = ClientUtils.prepend(result[0].accessPaths.agnostic.client);
return source;
}
@@ -515,11 +520,8 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
* @returns a doc containing the fully rendered template
*/
applyGPTContentToTemplate = async (template: Template, assignments: { [field: string]: Col }): Promise<Template | undefined> => {
-
- const GPTTextCalls = Object.entries(assignments).filter(([str, col]) => col.type === TemplateFieldType.TEXT && this._userCreatedFields.includes(col));
- const GPTIMGCalls = Object.entries(assignments).filter(([str, col]) => col.type === TemplateFieldType.VISUAL && this._userCreatedFields.includes(col));
-
- let fieldContent: string = template.compiledContent;
+ const GPTTextCalls = Object.entries(assignments).filter(([, col]) => col.type === TemplateFieldType.TEXT && this._userCreatedFields.includes(col));
+ const GPTIMGCalls = Object.entries(assignments).filter(([, col]) => col.type === TemplateFieldType.VISUAL && this._userCreatedFields.includes(col));
if (GPTTextCalls.length) {
const promises = GPTTextCalls.map(([str, col]) => {
@@ -529,15 +531,13 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
await Promise.all(promises);
}
- console.log(GPTIMGCalls)
-
if (GPTIMGCalls.length) {
const promises = GPTIMGCalls.map(async ([fieldNum, col]) => {
return this.renderGPTImageCall(template, col, Number(fieldNum));
});
await Promise.all(promises);
- };
+ }
return template;
};
@@ -573,7 +573,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
++this._callCount;
const origCount = this._callCount;
- let prompt: string = `(${origCount}) ${inputText}`;
+ const prompt: string = `(${origCount}) ${inputText}`;
this._GPTLoading = true;
@@ -640,17 +640,16 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
});
};
- renderGPTImageCall = async (template: Template, col: Col, fieldNum: number): Promise<boolean> => {
- const generateAndLoadImage = async (fieldNum: string, col: Col, prompt: string) => {
+ renderGPTImageCall = async (template: Template, col: Col, fieldNumber: number): Promise<boolean> => {
+ const generateAndLoadImage = async (fieldNum: string, column: Col, prompt: string) => {
const url = await this.generateGPTImage(prompt);
- console.log('url: ', url)
const field: Field = template.getFieldByID(Number(fieldNum));
field.setContent(url ?? '', ViewType.IMG);
field.setTitle(col.title);
};
- let fieldContent: string = template.compiledContent;
+ const fieldContent: string = template.compiledContent;
try {
const sysPrompt =
@@ -661,12 +660,12 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
const prompt = await gptAPICall(sysPrompt, GPTCallType.COMPLETEPROMPT);
- await generateAndLoadImage(String(fieldNum), col, prompt);
+ await generateAndLoadImage(String(fieldNumber), col, prompt);
} catch (e) {
console.log(e);
}
return true;
- }
+ };
renderGPTTextCall = async (template: Template, col: Col, fieldNum: number): Promise<boolean> => {
const wordLimit = (size: TemplateFieldSize) => {
@@ -688,7 +687,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
const textAssignment = `--- title: ${col.title}, prompt: ${col.desc}, word limit: ${wordLimit(col.sizes[0])} words, assigned field: ${fieldNum} ---`;
- let fieldContent: string = template.compiledContent;
+ const fieldContent: string = template.compiledContent;
try {
const prompt = fieldContent + textAssignment;
@@ -701,7 +700,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
const assignments: { [title: string]: { number: string; content: string } } = JSON.parse(res);
Object.entries(assignments).forEach(([title, info]) => {
const field: Field = template.getFieldByID(Number(info.number));
- const col = this.getColByTitle(title);
+ const column = this.getColByTitle(title);
field.setContent(info.content ?? '', ViewType.TEXT);
field.setTitle(col.title);
@@ -712,7 +711,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
}
return true;
- }
+ };
createDocsFromTemplate = async (template: Template) => {
const dv = this._dataViz;
@@ -721,15 +720,15 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
this._docsRendering = true;
- const fields: string[] = Array.from(Object.keys(dv.records[0]));
+ const fields: string[] = Array.from(Object.keys(dv.records[0]));
const selectedRows = NumListCast(dv.layoutDoc.dataViz_selectedRows);
-
+
const rowContents: { [title: string]: string }[] = selectedRows.map(row => {
- let values: { [title: string]: string } = {};
+ const values: { [title: string]: string } = {};
fields.forEach(col => {
values[col] = dv.records[row][col];
});
-
+
return values;
});
@@ -791,7 +790,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
collection.y = this._pageY - this._menuDimensions.height;
mainCollection.addDocument(collection);
this.closeMenu();
- }
+ };
@action setExpandedView = (template: Template | undefined) => {
if (template) {
@@ -803,8 +802,8 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
}
};
- get editingWindow(){
- const rendered = !this._expandedPreview ? null :
+ get editingWindow() {
+ const rendered = !this._expandedPreview ? null : (
<div className="docCreatorMenu-expanded-template-preview">
<DocumentView
Document={this._expandedPreview}
@@ -814,13 +813,12 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
removeDocument={returnFalse}
PanelWidth={() => this._menuDimensions.width - 10}
PanelHeight={() => this._menuDimensions.height - 60}
- ScreenToLocalTransform={() => new Transform(-this._pageX - 5,-this._pageY - 35, 1)}
+ ScreenToLocalTransform={() => new Transform(-this._pageX - 5, -this._pageY - 35, 1)}
renderDepth={5}
whenChildContentsActiveChanged={emptyFunction}
focus={emptyFunction}
styleProvider={DefaultStyleProvider}
addDocTab={DocumentViewInternal.addDocTabFunc}
- // eslint-disable-next-line no-use-before-define
pinToPres={() => undefined}
childFilters={returnEmptyFilter}
childFiltersByRanges={returnEmptyFilter}
@@ -829,10 +827,11 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
fitWidth={returnFalse}
/>
</div>
+ );
return (
<div className="docCreatorMenu-expanded-template-preview">
- <div className="top-panel"/>
+ <div className="top-panel" />
{rendered}
<div className="right-buttons-panel">
<button className="docCreatorMenu-menu-button section-reveal-options top-right" onPointerDown={e => this.setUpButtonClick(e, () => {
@@ -946,7 +945,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
</button>
</div>
<div className="docCreatorMenu-templates-preview-window" style={{ justifyContent: this._menuDimensions.width > 400 ? 'center' : '' }}>
- <div className="docCreatorMenu-preview-window empty" onPointerDown={e => this.testTemplate()}>
+ <div className="docCreatorMenu-preview-window empty">
<FontAwesomeIcon icon="plus" color="rgb(160, 160, 160)" />
</div>
{this._userTemplates
@@ -981,7 +980,6 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
);
}
-
@action updateXMargin = (input: string) => {
this._layout.xMargin = Number(input);
setTimeout(() => {
@@ -1002,11 +1000,11 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
};
get layoutConfigOptions() {
- const optionInput = (icon: string, func: Function, def?: number, key?: string, noMargin?: boolean) => {
+ const optionInput = (icon: string, func: (input: string) => void, def?: number, key?: string, noMargin?: boolean) => {
return (
<div className="docCreatorMenu-option-container small no-margin" key={key} style={{ marginTop: noMargin ? '0px' : '' }}>
<div className="docCreatorMenu-option-title config layout-config">
- <FontAwesomeIcon icon={icon as any} />
+ <FontAwesomeIcon icon={icon as IconProp} />
</div>
<input defaultValue={def} onInput={e => func(e.currentTarget.value)} className="docCreatorMenu-input config layout-config" />
</div>
@@ -1027,8 +1025,6 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
}
}
- screenToLocalTransform = () => this._props.ScreenToLocalTransform();
-
applyLayout = (collection: Doc, docs: Doc[]) => {
const { horizontalSpan, verticalSpan } = this.previewInfo;
collection._height = verticalSpan;
@@ -1042,7 +1038,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
const docHeight: number = Number(docs[0]._height);
const docWidth: number = Number(docs[0]._width);
- if (columns === 0 || docs.length === 0){
+ if (columns === 0 || docs.length === 0) {
return;
}
@@ -1066,16 +1062,16 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
};
@computed
- get previewInfo(){
+ get previewInfo() {
const docHeight: number = Number(this._fullyRenderedDocs[0]._height);
const docWidth: number = Number(this._fullyRenderedDocs[0]._width);
const layout = this._layout;
return {
docHeight: docHeight,
docWidth: docWidth,
- horizontalSpan: (docWidth + layout.xMargin) * (this.columnsCount) - layout.xMargin,
- verticalSpan: (docHeight + layout.yMargin) * (this.rowsCount) - layout.yMargin,
- }
+ horizontalSpan: (docWidth + layout.xMargin) * this.columnsCount - layout.xMargin,
+ verticalSpan: (docHeight + layout.yMargin) * this.rowsCount - layout.yMargin,
+ };
}
/**
@@ -1085,7 +1081,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
updateRenderedDocCollection = () => {
if (!this._fullyRenderedDocs) return;
- const collectionFactory = (): (docs: Doc[], options: DocumentOptions) => Doc => {
+ const collectionFactory = (): ((docs: Doc[], options: DocumentOptions) => Doc) => {
switch (this._layout.type) {
case LayoutType.CAROUSEL3D:
return Docs.Create.Carousel3DDocument;
@@ -1100,7 +1096,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
default:
return Docs.Create.FreeformDocument;
}
- }
+ };
const collection = collectionFactory()([this._fullyRenderedDocs[6], this._fullyRenderedDocs[9]], {
isDefaultTemplateDoc: true,
@@ -1122,16 +1118,15 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
console.log('changed to: ', collection);
}
- layoutPreviewContents = (id?: number) => {
-
+ layoutPreviewContents = () => {
return this._docsRendering ? (
- <div className="docCreatorMenu-layout-preview-window-wrapper loading" id={String(id) ?? undefined}>
+ <div className="docCreatorMenu-layout-preview-window-wrapper loading">
<div className="loading-spinner">
<ReactLoading type="spin" color={StrCast(Doc.UserDoc().userVariantColor)} height={30} width={30} />
- </div>
+ </div>
</div>
) : !this._renderedDocCollection ? null : (
- <div className="docCreatorMenu-layout-preview-window-wrapper" id={String(id) ?? undefined}>
+ <div className="docCreatorMenu-layout-preview-window-wrapper">
<DocumentView
Document={this._renderedDocCollection}
isContentActive={emptyFunction}
@@ -1140,13 +1135,12 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
removeDocument={returnFalse}
PanelWidth={() => this._menuDimensions.width - 80}
PanelHeight={() => this._menuDimensions.height - 105}
- ScreenToLocalTransform={() => new Transform(-this._pageX - 5,-this._pageY - 35, 1)}
+ ScreenToLocalTransform={() => new Transform(-this._pageX - 5, -this._pageY - 35, 1)}
renderDepth={5}
whenChildContentsActiveChanged={emptyFunction}
focus={emptyFunction}
styleProvider={DefaultStyleProvider}
addDocTab={this._props.addDocTab}
- // eslint-disable-next-line no-use-before-define
pinToPres={() => undefined}
childFilters={returnEmptyFilter}
childFiltersByRanges={returnEmptyFilter}
@@ -1156,13 +1150,11 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
hideDecorations={true}
/>
</div>
- )
+ );
};
get optionsMenuContents() {
- const layoutEquals = (layout: DataVizTemplateLayout) => {}; //TODO: ADD LATER
-
- const layoutOption = (option: LayoutType, optStyle?: {}, specialFunc?: Function) => {
+ const layoutOption = (option: LayoutType, optStyle?: object, specialFunc?: () => void) => {
return (
<div
className="docCreatorMenu-dropdown-option"
@@ -1185,7 +1177,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
return (
<div className="docCreatorMenu-option-container">
<div className={`docCreatorMenu-option-title config ${specClass}`} style={{ width: width * 0.4, height: height }}>
- <FontAwesomeIcon icon={icon as any} />
+ <FontAwesomeIcon icon={icon as IconProp} />
</div>
{manual ? (
<input className={`docCreatorMenu-input config ${specClass}`} style={{ width: width * 0.6, height: height }} />
@@ -1216,13 +1208,13 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
</div>
</div>
{this._layout.type ? this.layoutConfigOptions : null}
- {this.layoutPreviewContents(this._menuDimensions.width * 0.75)}
+ {this.layoutPreviewContents()}
{selectionBox(
60,
20,
'repeat',
undefined,
- repeatOptions.map(num => <option onPointerDown={e => (this._layout.repeat = num)}>{`${num}x`}</option>)
+ repeatOptions.map(num => <option key={num} onPointerDown={() => (this._layout.repeat = num)}>{`${num}x`}</option>)
)}
<hr className="docCreatorMenu-option-divider" />
<div className="docCreatorMenu-general-options-container">
@@ -1387,19 +1379,19 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
const width: number = ref?.width ?? 0;
return [
- <div className='docCreatorMenu-resizer top' onPointerDown={this.onResizePointerDown} style={{width: width, left: 0, top: -7}}/>,
- <div className='docCreatorMenu-resizer left' onPointerDown={this.onResizePointerDown} style={{height: height, left: -7, top: 0}}/>,
- <div className='docCreatorMenu-resizer right' onPointerDown={this.onResizePointerDown} style={{height: height, left: width - 3, top: 0}}/>,
- <div className='docCreatorMenu-resizer bottom' onPointerDown={this.onResizePointerDown} style={{width: width, left: 0, top: height - 3}}/>,
- <div className='docCreatorMenu-resizer topLeft' onPointerDown={this.onResizePointerDown} style={{left: -10, top: -10, cursor: 'nwse-resize'}}/>,
- <div className='docCreatorMenu-resizer topRight' onPointerDown={this.onResizePointerDown} style={{left: width - 5, top: -10, cursor: 'nesw-resize'}}/>,
- <div className='docCreatorMenu-resizer bottomLeft' onPointerDown={this.onResizePointerDown} style={{left: -10, top: height - 5, cursor: 'nesw-resize'}}/>,
- <div className='docCreatorMenu-resizer bottomRight' onPointerDown={this.onResizePointerDown} style={{left: width - 5, top: height - 5, cursor: 'nwse-resize'}}/>,
+ <div className='docCreatorMenu-resizer top' key='0' onPointerDown={this.onResizePointerDown} style={{width: width, left: 0, top: -7}}/>,
+ <div className='docCreatorMenu-resizer left' key='1' onPointerDown={this.onResizePointerDown} style={{height: height, left: -7, top: 0}}/>,
+ <div className='docCreatorMenu-resizer right' key='2' onPointerDown={this.onResizePointerDown} style={{height: height, left: width - 3, top: 0}}/>,
+ <div className='docCreatorMenu-resizer bottom' key='3' onPointerDown={this.onResizePointerDown} style={{width: width, left: 0, top: height - 3}}/>,
+ <div className='docCreatorMenu-resizer topLeft' key='4' onPointerDown={this.onResizePointerDown} style={{left: -10, top: -10, cursor: 'nwse-resize'}}/>,
+ <div className='docCreatorMenu-resizer topRight' key='5' onPointerDown={this.onResizePointerDown} style={{left: width - 5, top: -10, cursor: 'nesw-resize'}}/>,
+ <div className='docCreatorMenu-resizer bottomLeft' key='6' onPointerDown={this.onResizePointerDown} style={{left: -10, top: height - 5, cursor: 'nesw-resize'}}/>,
+ <div className='docCreatorMenu-resizer bottomRight' key='7' onPointerDown={this.onResizePointerDown} style={{left: width - 5, top: height - 5, cursor: 'nwse-resize'}}/>,
]; //prettier-ignore
}
render() {
- const topButton = (icon: string, opt: string, func: Function, tag: string) => {
+ const topButton = (icon: string, opt: string, func: () => void, tag: string) => {
return (
<div className={`top-button-container ${tag} ${opt === this._menuContent ? 'selected' : ''}`}>
<div
@@ -1411,7 +1403,7 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
})
)
}>
- <FontAwesomeIcon icon={icon as any} />
+ <FontAwesomeIcon icon={icon as IconProp} />
</div>
</div>
);
@@ -1450,11 +1442,11 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
setupMoveUpEvents(
this,
e,
- e => {
+ event => {
this._dragging = true;
this._startPos = { x: 0, y: 0 };
- this._startPos.x = e.pageX - (this._ref?.getBoundingClientRect().left ?? 0);
- this._startPos.y = e.pageY - (this._ref?.getBoundingClientRect().top ?? 0);
+ this._startPos.x = event.pageX - (this._ref?.getBoundingClientRect().left ?? 0);
+ this._startPos.y = event.pageY - (this._ref?.getBoundingClientRect().top ?? 0);
document.addEventListener('pointermove', this.onDrag);
return true;
},
@@ -1480,26 +1472,3 @@ export class DocCreatorMenu extends ObservableReactComponent<FieldViewProps> {
);
}
}
-
-export interface DataVizTemplateInfo {
- doc: Doc;
- layout: { type: LayoutType; xMargin: number; yMargin: number; repeat: number };
- columns: number;
- referencePos: { x: number; y: number };
-}
-
-export interface DataVizTemplateLayout {
- template: Doc;
- docsNumList: number[];
- layout: { type: LayoutType; xMargin: number; yMargin: number; repeat: number };
- columns: number;
- rows: number;
-}
-
-export type Col = {
- sizes: TemplateFieldSize[];
- desc: string;
- title: string;
- type: TemplateFieldType;
- defaultContent?: string;
-};