aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2025-06-10 19:06:31 -0400
committerbobzel <zzzman@gmail.com>2025-06-10 19:06:31 -0400
commit403dcfb5e8b659f62ed51212ede3f5807caa58c6 (patch)
tree8d72f2d4c3a22c13c8f53f8e82355a887333f4ac /src/client/views/collections
parent272534c8a7517d08c70928c96d487d84b14772f6 (diff)
cleanup and streamlining of scrapbook code.
Diffstat (limited to 'src/client/views/collections')
-rw-r--r--src/client/views/collections/collectionFreeForm/MarqueeView.tsx112
1 files changed, 47 insertions, 65 deletions
diff --git a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
index b2b904509..12515a72c 100644
--- a/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
+++ b/src/client/views/collections/collectionFreeForm/MarqueeView.tsx
@@ -81,14 +81,11 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
@observable _labelsVisibile: boolean = false;
@observable _lassoPts: [number, number][] = [];
@observable _lassoFreehand: boolean = false;
- // ─── New Observables for “Pick 1 of N AI Scrapbook” ───
- @observable aiChoices: Doc[] = []; // temporary hidden Scrapbook docs
- @observable pickerX = 0; // popup x coordinate
- @observable pickerY = 0; // popup y coordinate
- @observable pickerVisible = false; // show/hide ScrapbookPicker
-
-
-
+ // ─── New Observables for “Pick 1 of N AI Scrapbook” ───
+ @observable aiChoices: Doc[] = []; // temporary hidden Scrapbook docs
+ @observable pickerX = 0; // popup x coordinate
+ @observable pickerY = 0; // popup y coordinate
+ @observable pickerVisible = false; // show/hide ScrapbookPicker
@computed get Transform() {
return this._props.getTransform();
@@ -532,42 +529,39 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
MarqueeOptionsMenu.Instance.fadeOut(true);
});
-
getAiPresetsDescriptors(): DocumentDescriptor[] {
- const selected = this.marqueeSelect(false);
- return selected.map((doc) => ({
- type: typeof doc.$type === 'string' ? doc.$type : 'UNKNOWN',
- tags: (() => {
- const s = new Set<string>();
- StrListCast(doc.$tags_chat ?? new List<string>()).forEach((t) => s.add(t));
- return Array.from(s);
- })(),
- }));
- }
-
+ const selected = this.marqueeSelect(false);
+ return selected.map(doc => ({
+ type: typeof doc.$type === 'string' ? doc.$type : 'UNKNOWN',
+ tags: (() => {
+ const s = new Set<string>();
+ StrListCast(doc.$tags_chat ?? new List<string>()).forEach(t => s.add(t));
+ return Array.from(s);
+ })(),
+ }));
+ }
generateScrapbook = action(async () => {
-
const selectedDocs = this.marqueeSelect(false);
if (!selectedDocs.length) return;
- const descriptors = this.getAiPresetsDescriptors();
- if (descriptors.length === 0) {
- alert('No documents selected to generate a scrapbook from!');
- return;
- }
+ const descriptors = this.getAiPresetsDescriptors();
+ if (descriptors.length === 0) {
+ alert('No documents selected to generate a scrapbook from!');
+ return;
+ }
const aiPreset = await requestAiGeneratedPreset(descriptors);
if (!aiPreset.length) {
- alert("Failed to generate preset");
+ alert('Failed to generate preset');
return;
}
const scrapbookPlaceholders: Doc[] = buildPlaceholdersFromConfigs(aiPreset);
/*
const scrapbookPlaceholders: Doc[] = aiPreset.map(cfg => {
const placeholderDoc = Docs.Create.TextDocument(cfg.tag);
- placeholderDoc.accepts_docType = cfg.type as DocumentType;
- placeholderDoc.accepts_tagType = new List<string>(cfg.acceptTags ?? [cfg.tag]);
+ placeholderDoc.placeholder_docType = cfg.type as DocumentType;
+ placeholderDoc.placeholder_acceptTags = new List<string>(cfg.acceptTags ?? [cfg.tag]);
const placeholder = new Doc();
placeholder.proto = placeholderDoc;
@@ -586,25 +580,17 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
y: this.Bounds.top,
_width: 500,
_height: 500,
- title: 'AI-generated Scrapbook'
+ title: 'AI-generated Scrapbook',
});
-
-
// 3) Now grab that new scrapbook’s flat placeholders
const flatPl = DocListCast(scrapbook[Doc.LayoutDataKey(scrapbook)]) as Doc[];
- const unwrap = (items: Doc[]): Doc[] =>
- items.flatMap(d =>
- d.$type === DocumentType.COL
- ? unwrap(DocListCast(d[Doc.LayoutDataKey(d)]))
- : [d]
- );
+ const unwrap = (items: Doc[]): Doc[] => items.flatMap(d => (d.$type === DocumentType.COL ? unwrap(DocListCast(d[Doc.LayoutDataKey(d)])) : [d]));
const allPlaceholders = unwrap(flatPl);
// 4) Slot each selectedDocs[i] into the first matching placeholder
selectedDocs.forEach(realDoc => {
- slotRealDocIntoPlaceholders(realDoc, allPlaceholders
- );
+ slotRealDocIntoPlaceholders(realDoc, allPlaceholders);
});
const selected = this.marqueeSelect(false).map(d => {
@@ -625,9 +611,6 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
this.hideMarquee();
});
-
-
-
@action
marqueeCommand = (e: KeyboardEvent) => {
const ee = e as unknown as KeyboardEvent & { propagationIsStopped?: boolean };
@@ -649,7 +632,7 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
if (e.key === 'g') this.collection(e, true);
if (e.key === 'c' || e.key === 't') this.collection(e);
if (e.key === 's' || e.key === 'S') this.summary();
- if (e.key === 'g' || e.key === 'G') this.generateScrapbook(); // ← scrapbook shortcut
+ if (e.key === 'g' || e.key === 'G') this.generateScrapbook(); // ← scrapbook shortcut
if (e.key === 'p') this.pileup();
this.cleanupInteractions(false);
}
@@ -795,27 +778,26 @@ export class MarqueeView extends ObservableReactComponent<SubCollectionViewProps
render() {
return (
<>
- <div
- className="marqueeView"
- ref={r => {
- r?.addEventListener('dashDragMovePause', this.onDragMovePause as EventListenerOrEventListenerObject);
- this.MarqueeRef = r;
- }}
- style={{
- overflow: StrCast(this._props.Document._overflow),
- cursor: Doc.ActiveTool === InkTool.Ink || this._visible ? 'crosshair' : 'pointer',
- }}
- onDragOver={e => e.preventDefault()}
- onScroll={e => {
- e.currentTarget.scrollTop = e.currentTarget.scrollLeft = 0;
- }}
- onClick={this.onClick}
- onPointerDown={this.onPointerDown}>
- {this._visible ? this.marqueeDiv : null}
- {this.props.children}
- </div>
- </>
-
+ <div
+ className="marqueeView"
+ ref={r => {
+ r?.addEventListener('dashDragMovePause', this.onDragMovePause as EventListenerOrEventListenerObject);
+ this.MarqueeRef = r;
+ }}
+ style={{
+ overflow: StrCast(this._props.Document._overflow),
+ cursor: Doc.ActiveTool === InkTool.Ink || this._visible ? 'crosshair' : 'pointer',
+ }}
+ onDragOver={e => e.preventDefault()}
+ onScroll={e => {
+ e.currentTarget.scrollTop = e.currentTarget.scrollLeft = 0;
+ }}
+ onClick={this.onClick}
+ onPointerDown={this.onPointerDown}>
+ {this._visible ? this.marqueeDiv : null}
+ {this.props.children}
+ </div>
+ </>
);
}
}