{"version":3,"sources":["../../src/api/ThreadListRuntime.ts"],"sourcesContent":["import { LazyMemoizeSubject } from \"./subscribable/LazyMemoizeSubject\";\nimport { ThreadListRuntimeCore } from \"../runtimes/core/ThreadListRuntimeCore\";\nimport { Unsubscribe } from \"../types\";\nimport {\n  ThreadListItemRuntime,\n  ThreadListItemRuntimeImpl,\n  ThreadListItemState,\n} from \"./ThreadListItemRuntime\";\nimport { SKIP_UPDATE } from \"./subscribable/SKIP_UPDATE\";\nimport { ShallowMemoizeSubject } from \"./subscribable/ShallowMemoizeSubject\";\nimport {\n  ThreadListItemRuntimeBinding,\n  ThreadRuntime,\n  ThreadRuntimeCoreBinding,\n  ThreadRuntimeImpl,\n} from \"./ThreadRuntime\";\nimport { NestedSubscriptionSubject } from \"./subscribable/NestedSubscriptionSubject\";\n\nexport type ThreadListState = {\n  readonly mainThreadId: string;\n  readonly newThread: string | undefined;\n  readonly threads: readonly string[];\n  readonly archivedThreads: readonly string[];\n};\n\nexport type ThreadListRuntime = {\n  getState(): ThreadListState;\n\n  subscribe(callback: () => void): Unsubscribe;\n\n  readonly main: ThreadRuntime;\n  getById(threadId: string): ThreadRuntime;\n\n  readonly mainItem: ThreadListItemRuntime;\n  getItemById(threadId: string): ThreadListItemRuntime;\n  getItemByIndex(idx: number): ThreadListItemRuntime;\n  getArchivedItemByIndex(idx: number): ThreadListItemRuntime;\n\n  switchToThread(threadId: string): Promise<void>;\n  switchToNewThread(): Promise<void>;\n};\n\nconst getThreadListState = (\n  threadList: ThreadListRuntimeCore,\n): ThreadListState => {\n  return {\n    mainThreadId: threadList.mainThreadId,\n    newThread: threadList.newThreadId,\n    threads: threadList.threadIds,\n    archivedThreads: threadList.archivedThreadIds,\n  };\n};\n\nconst getThreadListItemState = (\n  threadList: ThreadListRuntimeCore,\n  threadId: string | undefined,\n): ThreadListItemState | SKIP_UPDATE => {\n  if (threadId === undefined) return SKIP_UPDATE;\n\n  const threadData = threadList.getItemById(threadId);\n  if (!threadData) return SKIP_UPDATE;\n  return {\n    id: threadData.threadId,\n    threadId: threadData.threadId, // TODO remove in 0.8.0\n    remoteId: threadData.remoteId,\n    externalId: threadData.externalId,\n    title: threadData.title,\n    status: threadData.status,\n    isMain: threadData.threadId === threadList.mainThreadId,\n  };\n};\n\nexport type ThreadListRuntimeCoreBinding = ThreadListRuntimeCore;\n\nexport class ThreadListRuntimeImpl implements ThreadListRuntime {\n  private _getState;\n  constructor(\n    private _core: ThreadListRuntimeCoreBinding,\n    private _runtimeFactory: new (\n      binding: ThreadRuntimeCoreBinding,\n      threadListItemBinding: ThreadListItemRuntimeBinding,\n    ) => ThreadRuntime = ThreadRuntimeImpl,\n  ) {\n    const stateBinding = new LazyMemoizeSubject({\n      path: {},\n      getState: () => getThreadListState(_core),\n      subscribe: (callback) => _core.subscribe(callback),\n    });\n\n    this._getState = stateBinding.getState.bind(stateBinding);\n\n    this._mainThreadListItemRuntime = new ThreadListItemRuntimeImpl(\n      new ShallowMemoizeSubject({\n        path: {\n          ref: `threadItems[main]`,\n          threadSelector: { type: \"main\" },\n        },\n        getState: () => {\n          return getThreadListItemState(this._core, this._core.mainThreadId);\n        },\n        subscribe: (callback) => this._core.subscribe(callback),\n      }),\n      this._core,\n    );\n\n    this.main = new _runtimeFactory(\n      new NestedSubscriptionSubject({\n        path: {\n          ref: \"threads.main\",\n          threadSelector: { type: \"main\" },\n        },\n        getState: () => _core.getMainThreadRuntimeCore(),\n        subscribe: (callback) => _core.subscribe(callback),\n      }),\n      this._mainThreadListItemRuntime, // TODO capture \"main\" threadListItem from context around useLocalRuntime / useExternalStoreRuntime\n    );\n  }\n\n  protected __internal_bindMethods() {\n    this.switchToThread = this.switchToThread.bind(this);\n    this.switchToNewThread = this.switchToNewThread.bind(this);\n    this.getState = this.getState.bind(this);\n    this.subscribe = this.subscribe.bind(this);\n    this.getById = this.getById.bind(this);\n    this.getItemById = this.getItemById.bind(this);\n    this.getItemByIndex = this.getItemByIndex.bind(this);\n    this.getArchivedItemByIndex = this.getArchivedItemByIndex.bind(this);\n  }\n\n  public switchToThread(threadId: string): Promise<void> {\n    return this._core.switchToThread(threadId);\n  }\n\n  public switchToNewThread(): Promise<void> {\n    return this._core.switchToNewThread();\n  }\n\n  public getState(): ThreadListState {\n    return this._getState();\n  }\n\n  public subscribe(callback: () => void): Unsubscribe {\n    return this._core.subscribe(callback);\n  }\n\n  private _mainThreadListItemRuntime;\n\n  public readonly main: ThreadRuntime;\n\n  public get mainItem() {\n    return this._mainThreadListItemRuntime;\n  }\n\n  public getById(threadId: string) {\n    return new this._runtimeFactory(\n      new NestedSubscriptionSubject({\n        path: {\n          ref: \"threads[threadId=\" + JSON.stringify(threadId) + \"]\",\n          threadSelector: { type: \"threadId\", threadId },\n        },\n        getState: () => this._core.getThreadRuntimeCore(threadId),\n        subscribe: (callback) => this._core.subscribe(callback),\n      }),\n      this.mainItem, // TODO capture \"main\" threadListItem from context around useLocalRuntime / useExternalStoreRuntime\n    );\n  }\n\n  public getItemByIndex(idx: number) {\n    return new ThreadListItemRuntimeImpl(\n      new ShallowMemoizeSubject({\n        path: {\n          ref: `threadItems[${idx}]`,\n          threadSelector: { type: \"index\", index: idx },\n        },\n        getState: () => {\n          return getThreadListItemState(this._core, this._core.threadIds[idx]);\n        },\n        subscribe: (callback) => this._core.subscribe(callback),\n      }),\n      this._core,\n    );\n  }\n\n  public getArchivedItemByIndex(idx: number) {\n    return new ThreadListItemRuntimeImpl(\n      new ShallowMemoizeSubject({\n        path: {\n          ref: `archivedThreadItems[${idx}]`,\n          threadSelector: { type: \"archiveIndex\", index: idx },\n        },\n        getState: () => {\n          return getThreadListItemState(\n            this._core,\n            this._core.archivedThreadIds[idx],\n          );\n        },\n        subscribe: (callback) => this._core.subscribe(callback),\n      }),\n      this._core,\n    );\n  }\n\n  public getItemById(threadId: string) {\n    return new ThreadListItemRuntimeImpl(\n      new ShallowMemoizeSubject({\n        path: {\n          ref: `threadItems[threadId=${threadId}]`,\n          threadSelector: { type: \"threadId\", threadId },\n        },\n        getState: () => {\n          return getThreadListItemState(this._core, threadId);\n        },\n        subscribe: (callback) => this._core.subscribe(callback),\n      }),\n      this._core,\n    );\n  }\n}\n"],"mappings":"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","names":[]}