UNPKG

@limitless-angular/sanity

Version:

A powerful Angular library for Sanity.io integration, featuring Portable Text rendering and optimized image loading.

1 lines 5.83 kB
{"version":3,"file":"limitless-angular-sanity-preview-kit-compat.mjs","sources":["../../../../packages/sanity/preview-kit-compat/src/document-in-use.service.ts","../../../../packages/sanity/preview-kit-compat/src/limitless-angular-sanity-preview-kit-compat.ts"],"sourcesContent":["import { Injectable, inject, DestroyRef, PLATFORM_ID } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { distinctUntilChanged, filter } from 'rxjs/operators';\nimport type { ContentSourceMapDocuments } from '@sanity/client/csm';\nimport {\n createNode,\n createNodeMachine,\n type Message,\n type Node,\n} from '@sanity/comlink';\n\nimport {\n createCompatibilityActors,\n type PreviewKitNodeMsg,\n} from '@limitless-angular/sanity/visual-editing-helpers';\n\ntype UseDocumentsInUseConfig = { projectId: string; dataset: string };\n\n@Injectable()\nexport class UseDocumentsInUseService {\n private isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n private destroyRef = inject(DestroyRef);\n private comlink$ = new BehaviorSubject<Node<\n Message,\n PreviewKitNodeMsg\n > | null>(null);\n private connected$ = new BehaviorSubject(false);\n private documentsInUse$ = new BehaviorSubject<string>('[]');\n private documentsInUse = new Map<string, ContentSourceMapDocuments[number]>();\n\n initialize(config: UseDocumentsInUseConfig): this {\n if (this.isBrowser) {\n this.setupChannelIfNeeded();\n this.setupDocumentSync(config);\n }\n\n return this;\n }\n\n private setupChannelIfNeeded() {\n if (window.self !== window.top || window.opener) {\n const comlink = createNode<Message, PreviewKitNodeMsg>(\n {\n name: 'preview-kit',\n connectTo: 'presentation',\n },\n createNodeMachine<Message, PreviewKitNodeMsg>().provide({\n actors: createCompatibilityActors<PreviewKitNodeMsg>(),\n }),\n );\n\n comlink.onStatus((status) =>\n this.connected$.next(status === 'connected'),\n );\n\n const timeout = setTimeout(() => this.comlink$.next(comlink), 0);\n const stop = comlink.start();\n\n this.destroyRef.onDestroy(() => {\n stop();\n this.comlink$.next(null);\n clearTimeout(timeout);\n });\n }\n }\n\n private setupDocumentSync({ projectId, dataset }: UseDocumentsInUseConfig) {\n combineLatest([this.comlink$, this.connected$, this.documentsInUse$])\n .pipe(\n filter(\n ([comlink, connected, changedKeys]) =>\n !!comlink && connected && changedKeys !== '[]',\n ),\n distinctUntilChanged(),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(([comlink]) => {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n comlink!.post({\n type: 'preview-kit/documents',\n data: {\n projectId,\n dataset,\n perspective: 'previewDrafts',\n documents: Array.from(this.documentsInUse.values()),\n },\n });\n });\n }\n\n updateDocumentsInUse(\n documentsInUse: Map<string, ContentSourceMapDocuments[number]>,\n ): void {\n this.documentsInUse = documentsInUse;\n const changedKeys = JSON.stringify(Array.from(documentsInUse.keys()));\n this.documentsInUse$.next(changedKeys);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}