/ src / createDocumentProjection.ts
createDocumentProjection.ts
 1  import {createMemo, type Accessor} from "solid-js"
 2  import {DocHandle, type Doc} from "@automerge/automerge-repo"
 3  import makeDocumentProjection from "./makeDocumentProjection.js"
 4  import {access} from "@solid-primitives/utils"
 5  
 6  /**
 7   * get a fine-grained live view of a document from a handle. works with
 8   * {@link useDocHandle}.
 9   * @param handle an accessor (signal/resource) of a
10   * [DocHandle](https://automerge.org/automerge-repo/classes/_automerge_automerge_repo.DocHandle.html)
11   */
12  export default function createDocumentProjection<T>(
13  	handle: Accessor<DocHandle<T> | undefined>
14  ) {
15  	const projection = createMemo<Doc<T> | undefined>(
16  		() => access(handle) && makeDocumentProjection<T>(access(handle)!)
17  	)
18  	return projection
19  }