aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
diff options
context:
space:
mode:
authorsharkiecodes <lanyi_stroud@brown.edu>2025-07-01 14:34:48 -0400
committersharkiecodes <lanyi_stroud@brown.edu>2025-07-01 14:34:48 -0400
commitf49fa5010ac53eb87925d1cd40e3be145d441ea6 (patch)
tree27cd8f786e9948c765ec0a893e8272c62a7c39a6 /src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
parent0e2abee77d5310056921fc50779349c0b36e166d (diff)
parent86c666427ff8b9d516450a150af641570e00f2d2 (diff)
Merge branch 'agent-paper-main' into lanyi-expanded-agent-paper-main
Diffstat (limited to 'src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx')
-rw-r--r--src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx42
1 files changed, 41 insertions, 1 deletions
diff --git a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
index 6e9e503f4..a447a6ae4 100644
--- a/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
+++ b/src/client/views/collections/collectionFreeForm/CollectionFreeFormView.tsx
@@ -93,6 +93,8 @@ export interface collectionFreeformViewProps {
@observer
export class CollectionFreeFormView extends CollectionSubView<Partial<collectionFreeformViewProps>>() {
+ private static _infoUIInstance: CollectionFreeFormInfoUI | null = null;
+
public get displayName() {
return 'CollectionFreeFormView(' + (this.Document.title?.toString() ?? '') + ')';
} // this makes mobx trace() statements more descriptive
@@ -1754,11 +1756,49 @@ export class CollectionFreeFormView extends CollectionSubView<Partial<collection
static SetInfoUICreator(func: (doc: Doc, layout: Doc, childDocs: () => Doc[], close: () => void) => JSX.Element) {
CollectionFreeFormView._infoUI = func;
}
- infoUI = () =>
+ /**
+ * Called from TutorialTool in Agent system
+ */
+ public static showTutorial(kind: 'links' | 'pins' | 'presentation') {
+ const ui = CollectionFreeFormView._infoUIInstance;
+ if (!ui) return;
+ switch (kind) {
+ case 'links':
+ ui.skipToState((ui).tutorialStates.multipleDocs);
+ ui._nextState
+ break;
+ case 'pins':
+ ui.skipToState((ui).tutorialStates.presentDocs);
+ ui._nextState
+ break;
+ case 'presentation':
+ ui.skipToState((ui).tutorialStates.makePresentation);
+ ui._nextState
+ break;
+ }
+ }
+
+ infoUI = () => {
Doc.IsInfoUIDisabled || this.Document.annotationOn || this._props.renderDepth
? null //
: CollectionFreeFormView._infoUI?.(this.Document, this.layoutDoc, this.childDocsFunc, this.closeInfo) || null;
+ if (Doc.IsInfoUIDisabled || this.Document.annotationOn || this._props.renderDepth) {
+ return null;
+ }
+ const creator = CollectionFreeFormView._infoUI;
+ if (!creator) return null;
+ const element = creator(this.Document, this.layoutDoc, this.childDocsFunc, this.closeInfo);
+ // attach ref so we can call skipToState(...) later
+ return React.isValidElement(element)
+ ? React.cloneElement(element, {
+ ref: (r: CollectionFreeFormInfoUI) => {
+ CollectionFreeFormView._infoUIInstance = r;
+ }
+ })
+ : element;
+
+ };
componentDidMount() {
this._props.setContentViewBox?.(this);
super.componentDidMount?.();