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 }