aboutsummaryrefslogtreecommitdiff
path: root/src/client
diff options
context:
space:
mode:
Diffstat (limited to 'src/client')
-rw-r--r--src/client/DocServer.ts11
-rw-r--r--src/client/views/GestureOverlay.tsx2
-rw-r--r--src/client/views/PropertiesView.tsx8
-rw-r--r--src/client/views/collections/CollectionStackingView.scss2
-rw-r--r--src/client/views/collections/CollectionStackingView.tsx6
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx12
-rw-r--r--src/client/views/nodes/DocumentView.tsx7
-rw-r--r--src/client/views/nodes/ImageBox.tsx7
-rw-r--r--src/client/views/nodes/imageEditor/ImageEditor.tsx4
-rw-r--r--src/client/views/smartdraw/DrawingFillHandler.tsx2
-rw-r--r--src/client/views/smartdraw/SmartDrawHandler.tsx2
11 files changed, 30 insertions, 33 deletions
diff --git a/src/client/DocServer.ts b/src/client/DocServer.ts
index c644308b7..e3c4609c0 100644
--- a/src/client/DocServer.ts
+++ b/src/client/DocServer.ts
@@ -277,11 +277,11 @@ export namespace DocServer {
const fetchDocPromises: Map<string, Promise<Opt<Doc>>> = new Map(); // { p: Promise<Doc>; id: string }[] = []; // promises to fetch the value for a requested Doc
// Determine which requested documents need to be fetched
- // eslint-disable-next-line no-restricted-syntax
for (const id of ids.filter(filterid => filterid)) {
if (_cache[id] === undefined) {
// EMPTY CACHE - make promise that we resolve after all batch-requested Docs have been fetched and deserialized and we know we have this Doc
- const fetchPromise = new Promise<Opt<Doc>>(res =>
+ // eslint-disable-next-line no-loop-func
+ _cache[id] = new Promise<Opt<Doc>>(res =>
allCachesFilledPromise.then(() => {
// if all Docs have been cached, then we can be sure the fetched Doc has been found and cached. So return it to anyone who had been awaiting it.
const cache = _cache[id];
@@ -289,8 +289,7 @@ export namespace DocServer {
res(cache instanceof Doc ? cache : undefined);
})
);
- // eslint-disable-next-line no-loop-func
- fetchDocPromises.set(id, (_cache[id] = fetchPromise));
+ fetchDocPromises.set(id, _cache[id]);
uncachedRequestedIds.push(id); // add to list of Doc requests from server
}
// else CACHED => do nothing, Doc or promise of Doc is already in cache
@@ -307,11 +306,11 @@ export namespace DocServer {
let processed = 0;
console.log('Retrieved ' + serializedFields.length + ' fields');
// After the serialized Docs have been received, deserialize them into objects.
- // eslint-disable-next-line no-restricted-syntax
for (const field of serializedFields) {
- // eslint-disable-next-line no-await-in-loop
++processed % 150 === 0 &&
+ // eslint-disable-next-line no-await-in-loop
(await new Promise<number>(
+ // eslint-disable-next-line no-loop-func
res =>
setTimeout(action(() => res(FieldLoader.ServerLoadStatus.retrieved = processed))) // prettier-ignore
)); // force loading to yield to splash screen rendering to update progress
diff --git a/src/client/views/GestureOverlay.tsx b/src/client/views/GestureOverlay.tsx
index 8488c5293..113250a99 100644
--- a/src/client/views/GestureOverlay.tsx
+++ b/src/client/views/GestureOverlay.tsx
@@ -50,9 +50,7 @@ interface GestureOverlayProps {
* drew or perform the gesture's action
*/
export class GestureOverlay extends ObservableReactComponent<React.PropsWithChildren<GestureOverlayProps>> {
- // eslint-disable-next-line no-use-before-define
static Instance: GestureOverlay;
- // eslint-disable-next-line no-use-before-define
static Instances: GestureOverlay[] = [];
@observable public SavedColor?: string = undefined;
diff --git a/src/client/views/PropertiesView.tsx b/src/client/views/PropertiesView.tsx
index 06463b2a2..f7c4b464c 100644
--- a/src/client/views/PropertiesView.tsx
+++ b/src/client/views/PropertiesView.tsx
@@ -58,7 +58,6 @@ interface PropertiesViewProps {
export class PropertiesView extends ObservableReactComponent<PropertiesViewProps> {
private _widthUndo?: UndoManager.Batch;
- // eslint-disable-next-line no-use-before-define
public static Instance: PropertiesView;
constructor(props: PropertiesViewProps) {
super(props);
@@ -1187,6 +1186,7 @@ export class PropertiesView extends ObservableReactComponent<PropertiesViewProps
setFinalNumber = () => {
this._sliderKey = '';
this._sliderBatch?.end();
+ this._sliderBatch = undefined;
};
getNumber = (label: string, unit: string, min: number, max: number, number: number, setNumber: (val: number) => void, autorange?: number, autorangeMinVal?: number) => {
@@ -1198,7 +1198,6 @@ export class PropertiesView extends ObservableReactComponent<PropertiesViewProps
key={key}
onPointerDown={() => {
this._sliderKey = key;
- this._sliderBatch = UndoManager.StartBatch('slider ' + label);
}}
multithumb={false}
color={this.color}
@@ -1211,7 +1210,10 @@ export class PropertiesView extends ObservableReactComponent<PropertiesViewProps
unit={unit}
decimals={1}
setFinalNumber={this.setFinalNumber}
- setNumber={setNumber}
+ setNumber={e => {
+ if (!this._sliderBatch) this._sliderBatch = UndoManager.StartBatch('slider ' + label);
+ setNumber(e);
+ }}
fillWidth
/>
</div>
diff --git a/src/client/views/collections/CollectionStackingView.scss b/src/client/views/collections/CollectionStackingView.scss
index 2cf361847..ec81eb305 100644
--- a/src/client/views/collections/CollectionStackingView.scss
+++ b/src/client/views/collections/CollectionStackingView.scss
@@ -18,7 +18,7 @@
.collectionStackingView-columnDragger {
width: 28px;
height: 28px;
- position: relative;
+ position: absolute;
margin-left: -5px;
z-index: 10;
> svg {
diff --git a/src/client/views/collections/CollectionStackingView.tsx b/src/client/views/collections/CollectionStackingView.tsx
index fbdd23315..7ff90ee53 100644
--- a/src/client/views/collections/CollectionStackingView.tsx
+++ b/src/client/views/collections/CollectionStackingView.tsx
@@ -417,8 +417,8 @@ export class CollectionStackingView extends CollectionSubView<Partial<collection
className="collectionStackingView-columnDragger"
onPointerDown={this.columnDividerDown}
ref={this._draggerRef}
- style={{ cursor: this._cursor, color: SettingsManager.userColor, left: `${NumCast(this.Document._layout_columnWidth) + this.xMargin}px` }}>
- <FontAwesomeIcon icon="arrows-alt-h" />
+ style={{ cursor: this._cursor, color: SettingsManager.userColor, left: `${NumCast(this.Document._layout_columnWidth)}px` }}>
+ <FontAwesomeIcon icon="arrows-alt-h" size="sm" />
</div>
);
}
@@ -563,7 +563,7 @@ export class CollectionStackingView extends CollectionSubView<Partial<collection
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 (
<div key={(heading?.heading ?? '') + 'head'}>
- {this._props.isContentActive() && !this.isStackingView && !this.chromeHidden ? this.columnDragger : null}
+ {!this.isStackingView && !this.chromeHidden ? this.columnDragger : null}
<div style={{ position: 'relative' }}>
<CollectionMasonryViewFieldRow
showHandle={first}
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
index 76b9fd8db..3e6aa777f 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
@@ -107,7 +107,6 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
/**
* The Freeformview below the cursor at the start of a gesture (that receives the pointerDown event). Used by GestureOverlay to determine the doc a gesture should apply to.
*/
- // eslint-disable-next-line no-use-before-define
public static DownFfview: CollectionFreeFormView | undefined; // the first DocView that receives a pointerdown event. used by GestureOverlay to determine the doc a gesture should apply to.
private _clusters = new CollectionFreeFormClusters(this);
@@ -2204,10 +2203,6 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
@observable private _regenerateLoading = false;
@observable private _regenInput = '';
- @observable private _canInteract = true;
- @observable private _drawingFillInput = '';
- @observable private _regenLoading = false;
- @observable private _drawingFillLoading = false;
@observable private _fireflyRefStrength = 0;
componentAIView = () => {
@@ -2220,7 +2215,7 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
aria-label="Edit instructions input"
type="text"
value={this._regenInput || StrCast(this.Document.title)}
- onChange={action(e => this._canInteract && (this._regenInput = e.target.value))}
+ onChange={action(e => (this._regenInput = e.target.value))}
placeholder={this._regenInput || StrCast(this.Document.title)}
/>
<div className="imageBox-aiView-regenerate-createBtn">
@@ -2253,10 +2248,7 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
max={100}
number={this._fireflyRefStrength}
size={Size.XXSMALL}
- setNumber={undoable(
- action(val => this._canInteract && (this._fireflyRefStrength = val as number)),
- `${this.Document.title} button set from list`
- )}
+ setNumber={undoable(action(val => (this._fireflyRefStrength = val as number)),`${this.Document.title} button set from list` )}
fillWidth
/>
</div>
diff --git a/src/client/views/nodes/DocumentView.tsx b/src/client/views/nodes/DocumentView.tsx
index bd71115db..90edab3a7 100644
--- a/src/client/views/nodes/DocumentView.tsx
+++ b/src/client/views/nodes/DocumentView.tsx
@@ -743,6 +743,12 @@ export class DocumentViewInternal extends DocComponent<DocumentViewProps & Field
widgetOverlayFunc = () => (this.widgetDecorations ? this.widgetOverlay : null);
viewingAiEditor = () => (this._props.showAIEditor && this._componentView?.componentAIView?.() !== undefined ? this.aiEditor : null);
@observable _contentsRef: DocumentContentsView | undefined = undefined;
+ screenToContentsXf = () =>
+ this.viewingAiEditor()
+ ? this.layoutDoc.layout_reflowHorizontal
+ ? this._props.ScreenToLocalTransform().scale(Math.min(this.aiContentsWidth() / this._props.PanelWidth(), this.aiContentsHeight() / this._props.PanelHeight()))
+ : this._props.ScreenToLocalTransform().translate((this._props.PanelWidth() - this.aiContentsWidth()) / 2, 0)
+ : this._props.ScreenToLocalTransform();
@computed get viewBoxContents() {
TraceMobx();
const isInk = this.layoutDoc._layout_isSvg && !this._props.LayoutTemplateString;
@@ -762,6 +768,7 @@ export class DocumentViewInternal extends DocComponent<DocumentViewProps & Field
layoutFieldKey={StrCast(this.Document.layout_fieldKey, 'layout')}
pointerEvents={this.contentPointerEvents}
setContentViewBox={this.setContentView}
+ ScreenToLocalTransform={this.screenToContentsXf}
childFilters={this.childFilters}
PanelWidth={this.viewingAiEditor() ? this.aiContentsWidth : this._props.PanelWidth}
PanelHeight={this.viewingAiEditor() ? this.aiContentsHeight : this.panelHeight}
diff --git a/src/client/views/nodes/ImageBox.tsx b/src/client/views/nodes/ImageBox.tsx
index fb2346bd1..617a09ed5 100644
--- a/src/client/views/nodes/ImageBox.tsx
+++ b/src/client/views/nodes/ImageBox.tsx
@@ -99,7 +99,6 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
// variables for AI Image Editor
@observable private _regenInput = '';
- @observable private _canInteract = true;
@observable private _regenerateLoading = false;
// Add these observable properties to the ImageBox class
@@ -716,7 +715,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
@computed get nativeSize() {
TraceMobx();
- if (this.paths.length && this.paths[0].includes(DefaultPath)) return { nativeWidth: NumCast(this.layoutDoc._width), nativeHeight: NumCast(this.layoutDoc._height), nativeOrientation: 0 };
+ if (this.paths[0]?.includes(DefaultPath) && this.layoutDoc._height) return { nativeWidth: NumCast(this.layoutDoc._width), nativeHeight: NumCast(this.layoutDoc._height), nativeOrientation: 0 };
const { nativeWidth, nativeHeight } = this.imgNativeSize;
const nativeOrientation = NumCast(this.dataDoc[this.fieldKey + '_nativeOrientation'], 1);
return { nativeWidth, nativeHeight, nativeOrientation };
@@ -902,7 +901,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
aria-label="Edit instructions input"
type="text"
value={this._regenInput || StrCast(this.Document.title)}
- onChange={action(e => this._canInteract && (this._regenInput = e.target.value))}
+ onChange={action(e => (this._regenInput = e.target.value))}
placeholder={this._regenInput || StrCast(this.Document.title)}
/>
<div className="imageBox-aiView-regenerate-createBtn">
@@ -936,7 +935,7 @@ export class ImageBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
number={this._fireflyRefStrength}
size={Size.XXSMALL}
setNumber={undoable(
- action(val => this._canInteract && (this._fireflyRefStrength = val as number)),
+ action(val => (this._fireflyRefStrength = val as number)),
`${this.Document.title} button set from list`
)}
fillWidth
diff --git a/src/client/views/nodes/imageEditor/ImageEditor.tsx b/src/client/views/nodes/imageEditor/ImageEditor.tsx
index 198b8e713..abe235ad5 100644
--- a/src/client/views/nodes/imageEditor/ImageEditor.tsx
+++ b/src/client/views/nodes/imageEditor/ImageEditor.tsx
@@ -286,8 +286,8 @@ const ImageEditor = ({ imageEditorOpen, imageEditorSource, imageRootDoc, addDoc
const maskBlob = await ImageUtility.canvasToBlob(canvasMask);
const imgBlob = await ImageUtility.canvasToBlob(canvasOriginalImg);
const res = await ImageUtility.getEdit(imgBlob, maskBlob, input || 'Fill in the image in the same style', 2);
- if ((res as any).status == 'error') {
- alert((res as any).message);
+ if (res.status == 'error') {
+ alert(res.message);
}
// create first image
diff --git a/src/client/views/smartdraw/DrawingFillHandler.tsx b/src/client/views/smartdraw/DrawingFillHandler.tsx
index f773957e7..e9e3335f9 100644
--- a/src/client/views/smartdraw/DrawingFillHandler.tsx
+++ b/src/client/views/smartdraw/DrawingFillHandler.tsx
@@ -62,7 +62,7 @@ export class DrawingFillHandler {
ai_prompt: newPrompt,
tags: new List<string>(['@ai']),
title: newPrompt,
- _data_usePath: 'alternate:hover',
+ //_data_usePath: 'alternate:hover',
data_alternates: new List<Doc>([drawing]),
_width: 500,
data_nativeWidth: info.nativeWidth,
diff --git a/src/client/views/smartdraw/SmartDrawHandler.tsx b/src/client/views/smartdraw/SmartDrawHandler.tsx
index b7ff5fff7..a017dd7eb 100644
--- a/src/client/views/smartdraw/SmartDrawHandler.tsx
+++ b/src/client/views/smartdraw/SmartDrawHandler.tsx
@@ -450,7 +450,7 @@ export class SmartDrawHandler extends ObservableReactComponent<object> {
},
}}
checked={this._generateDrawing}
- onChange={() => this._canInteract && (this._generateDrawing = !this._generateDrawing)}
+ onChange={action(() => this._canInteract && (this._generateDrawing = !this._generateDrawing))}
/>
</div>
<div className="image-checkbox">