diff options
| author | bobzel <zzzman@gmail.com> | 2025-06-10 19:06:31 -0400 |
|---|---|---|
| committer | bobzel <zzzman@gmail.com> | 2025-06-10 19:06:31 -0400 |
| commit | 403dcfb5e8b659f62ed51212ede3f5807caa58c6 (patch) | |
| tree | 8d72f2d4c3a22c13c8f53f8e82355a887333f4ac /src/client/views/collections | |
| parent | 272534c8a7517d08c70928c96d487d84b14772f6 (diff) | |
cleanup and streamlining of scrapbook code.
Diffstat (limited to 'src/client/views/collections')
| -rw-r--r-- | src/client/views/collections/collectionFreeForm/MarqueeView.tsx | 112 |
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> + </> ); } } |
