sanity-plugin-documents-pane 2.0.1 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +3 -2
- package/lib/index.esm.js +1 -2
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +1 -2
- package/lib/index.js.map +1 -1
- package/lib/src/index.d.ts +2 -3
- package/package.json +6 -5
- package/src/Documents.tsx +13 -6
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -10,13 +10,13 @@ Displays the results of a GROQ query in a View Pane. With the ability to use fie
|
|
|
10
10
|
## Installation
|
|
11
11
|
|
|
12
12
|
```sh
|
|
13
|
-
npm install --save sanity-plugin-documents-pane
|
|
13
|
+
npm install --save sanity-plugin-documents-pane
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
or
|
|
17
17
|
|
|
18
18
|
```sh
|
|
19
|
-
yarn add sanity-plugin-documents-pane
|
|
19
|
+
yarn add sanity-plugin-documents-pane
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
This plugin is designed to be used as a [Component inside of a View](https://www.sanity.io/docs/structure-builder-reference#c0c8284844b7).
|
|
@@ -116,3 +116,4 @@ Run ["CI & Release" workflow](https://github.com/sanity-io/sanity-plugin-documen
|
|
|
116
116
|
Make sure to select the main branch and check "Release new version".
|
|
117
117
|
|
|
118
118
|
Semantic release will only release on configured branches, so it is safe to run release on any branch.
|
|
119
|
+
|
package/lib/index.esm.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=index.esm.js.map
|
|
1
|
+
import{jsxs as e,Fragment as n,jsx as t}from"react/jsx-runtime";import{Stack as r,Box as i,Label as a,Code as o,Card as d,Text as c,Flex as l,Button as u,Spinner as s}from"@sanity/ui";import{useState as p,useRef as m,useEffect as h,useCallback as f}from"react";import{fromString as y}from"@sanity/util/paths";import{useDocumentStore as g,useSchema as b,Preview as v,DefaultPreview as T}from"sanity";import{usePaneRouter as q}from"sanity/desk";import{ComposeIcon as x,WarningOutlineIcon as V}from"@sanity/icons";import{distinctUntilChanged as j,catchError as P}from"rxjs/operators";import _ from"react-fast-compare";import{uuid as k}from"@sanity/uuid";import D from"dlv";function R(d){let{query:c,params:l}=d;return e(n,{children:[e(r,{space:4,children:[t(i,{children:t(a,{children:"Query"})}),t(i,{children:t(o,{children:c})})]}),l&&e(r,{space:4,children:[t(i,{children:t(a,{children:"Params"})}),t(i,{children:t(o,{children:JSON.stringify(l)})})]})]})}function w(e){const{children:n,tone:r="caution"}=e;return t(d,{padding:3,radius:2,shadow:1,tone:r,children:t(c,{size:1,children:n})})}const O={},C={apiVersion:"v2022-05-09"};function E(e){const{initialValueTemplates:n=[]}=e,{ReferenceChildLink:r}=q();return n.length?t(d,{borderBottom:!0,padding:2,children:t(l,{justify:"flex-end",gap:1,children:n.map((e=>e.template?t(r,{documentId:k(),documentType:e.schemaType,template:{id:e.template,params:e.parameters},parentRefPath:[],children:t(u,{icon:t(x,{}),text:e.title,mode:"bleed",as:"span"})},"".concat(e.schemaType,"-").concat(e.template)):null))})}):null}function I(a){const{query:o,params:c,debug:x,initialValueTemplates:k}=a,{routerPanesState:D,groupIndex:I,handleEditReference:N}=q(),Q=b(),{loading:S,error:z,data:A}=function(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:O,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:C;const[r,i]=p(!0),[a,o]=p(!1),[d,c]=p(null),l=m(null),u=g();return h((()=>(e&&(l.current=u.listenQuery(e,n,t).pipe(j(_),P((e=>(console.error(e),o(e),i(!1),c(null),e)))).subscribe((e=>{c((n=>_(n,e)?n:e)),i(!1),o(!1)}))),()=>l.current?l.current.unsubscribe():void 0)),[e,n,t,u]),{loading:r,error:a,data:d}}(o,c),B=f(((e,n)=>{var t;const r=(null==(t=D[I+1])?void 0:t[0].params)||{},{parentRefPath:i}=r;N({id:e,type:n,parentRefPath:i?y(i):[""],template:{id:e}})}),[D,I,N]);return S?t(i,{padding:4,children:t(l,{justify:"center",align:"center",children:t(s,{muted:!0})})}):z?e(r,{padding:4,space:5,children:[t(w,{children:"There was en error performing this query"}),x&&t(R,{query:o,params:c})]}):(null==A?void 0:A.length)?e(n,{children:[t(E,{initialValueTemplates:k}),t(r,{padding:2,space:1,children:A.map((e=>{const n=Q.get(e._type);return n?t(u,{onClick:()=>B(e._id,e._type),padding:2,mode:"bleed",children:t(v,{value:e,schemaType:n})},e._id):t(d,{radius:2,tone:"caution","data-ui":"Alert",padding:2,children:t(T,{media:t(V,{}),title:"Unknown schema type found",subtitle:'Encountered type "'.concat(e._type,'" that is not defined in the schema.')})},e._id)}))})]}):e(n,{children:[t(E,{initialValueTemplates:k}),e(r,{padding:4,space:5,children:[t(w,{children:"No Documents found"}),x&&t(R,{query:o,params:c})]})]})}function N(e){const{params:n,document:t}=e,r="function"==typeof n?n({document:t}):function(e){const{params:n,document:t,useDraft:r}=e;if(!n)return{};const i=r?t.displayed:t.published;return Object.keys(n).reduce(((e,t)=>({...e,[t]:D(i,n[t])})),{})}(e);if(!Object.values(r).includes(void 0))return r}function Q(n){const{document:i,options:a}=n,{query:o,params:d,useDraft:c=!1,debug:l=!1,initialValueTemplates:u}=a;if(c&&"function"==typeof d)return e(r,{padding:4,space:5,children:[e(w,{children:[t("code",{children:"useDraft"})," should not be ",t("code",{children:"true"})," when supplying a function for",t("code",{children:"params"})]}),l&&t(R,{query:o})]});const s=N({document:i,params:d,useDraft:c}),p=function(e){const{resolver:n,document:t}=e||{};return n?n({document:t}):[]}({resolver:u,document:i});return s?t(I,{query:o,params:s,debug:l,initialValueTemplates:p}):e(r,{padding:4,space:5,children:[t(w,{children:"Parameters for this query could not be resolved. This may mean the document does not yet exist or is incomplete."}),l&&t(R,{query:o})]})}export{Q as default};//# sourceMappingURL=index.esm.js.map
|
package/lib/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/Debug.tsx","../src/Feedback.tsx","../src/hooks/useListeningQuery.ts","../src/NewDocument.tsx","../src/Documents.tsx","../src/resolveParams.ts","../src/DocumentsPane.tsx","../src/resolveInitialValueTemplates.ts"],"sourcesContent":["import React from 'react'\nimport {Code, Box, Label, Stack} from '@sanity/ui'\n\nexport default function Debug({query, params}: {query: string; params?: {[key: string]: string}}) {\n return (\n <>\n <Stack space={4}>\n <Box>\n <Label>Query</Label>\n </Box>\n <Box>\n <Code>{query}</Code>\n </Box>\n </Stack>\n {params && (\n <Stack space={4}>\n <Box>\n <Label>Params</Label>\n </Box>\n <Box>\n <Code>{JSON.stringify(params)}</Code>\n </Box>\n </Stack>\n )}\n </>\n )\n}\n","import React from 'react'\nimport {Card, Text} from '@sanity/ui'\nimport type {BadgeTone} from '@sanity/ui'\n\ntype FeedbackProps = {\n children?: React.ReactNode\n tone?: BadgeTone\n}\n\nexport default function Feedback(props: FeedbackProps) {\n const {children, tone = `caution`} = props\n\n return (\n <Card padding={3} radius={2} shadow={1} tone={tone}>\n <Text size={1}>{children}</Text>\n </Card>\n )\n}\n","import {useEffect, useState, useRef} from 'react'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport isEqual from 'react-fast-compare'\nimport {SanityDocument, useDocumentStore} from 'sanity'\n\ntype Params = Record<string, string | number | boolean | string[]>\n\ninterface ListenQueryOptions {\n tag?: string\n apiVersion?: string\n}\n\ntype ReturnShape = {\n loading: boolean\n error: boolean\n data: SanityDocument[] | null\n}\n\ntype Observable = {\n unsubscribe: () => void\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2022-05-09`}\n\nexport default function useListeningQuery(\n query: string,\n params: Params = DEFAULT_PARAMS,\n options: ListenQueryOptions = DEFAULT_OPTIONS\n): ReturnShape {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [data, setData] = useState<SanityDocument[] | null>(null)\n const subscription = useRef<null | Observable>(null)\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query) {\n subscription.current = documentStore\n .listenQuery(query, params, options)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents: SanityDocument[]) => {\n setData((current) => (isEqual(current, documents) ? current : documents))\n setLoading(false)\n setError(false)\n })\n }\n\n return () => {\n return subscription.current ? subscription.current.unsubscribe() : undefined\n }\n }, [query, params, options, documentStore])\n\n return {loading, error, data}\n}\n","import {Button, Card, Flex} from '@sanity/ui'\nimport React from 'react'\nimport {DocumentsPaneInitialValueTemplate} from './types'\nimport {ComposeIcon} from '@sanity/icons'\nimport {usePaneRouter} from 'sanity/desk'\nimport {uuid} from '@sanity/uuid'\n\ninterface NewDocumentProps {\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n}\n\nexport default function NewDocument(props: NewDocumentProps) {\n const {initialValueTemplates = []} = props\n const {ReferenceChildLink} = usePaneRouter()\n\n if (!initialValueTemplates.length) return null\n\n return (\n <Card borderBottom={true} padding={2}>\n <Flex justify=\"flex-end\" gap={1}>\n {initialValueTemplates.map((template) => {\n if (!template.template) {\n return null\n }\n return (\n <ReferenceChildLink\n documentId={uuid()}\n documentType={template.schemaType}\n template={{id: template.template, params: template.parameters}}\n parentRefPath={[]}\n key={`${template.schemaType}-${template.template}`}\n >\n <Button icon={<ComposeIcon />} text={template.title} mode=\"bleed\" as=\"span\" />\n </ReferenceChildLink>\n )\n })}\n </Flex>\n </Card>\n )\n}\n","import React, {useCallback} from 'react'\nimport {Box, Button, Stack, Flex, Spinner} from '@sanity/ui'\nimport {fromString as pathFromString} from '@sanity/util/paths'\nimport {Preview, useSchema} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\n\nimport Debug from './Debug'\nimport Feedback from './Feedback'\nimport useListeningQuery from './hooks/useListeningQuery'\nimport {DocumentsPaneInitialValueTemplate} from './types'\nimport NewDocument from './NewDocument'\n\ntype DocumentsProps = {\n query: string\n params: {[key: string]: string}\n debug: boolean\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n}\n\nexport default function Documents(props: DocumentsProps) {\n const {query, params, debug, initialValueTemplates} = props\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const schema = useSchema()\n\n const {loading, error, data} = useListeningQuery(query, params)\n\n const handleClick = useCallback(\n (id: string, type: string) => {\n const childParams = routerPanesState[groupIndex + 1]?.[0].params || {}\n const {parentRefPath} = childParams\n\n handleEditReference({\n id,\n type,\n // Uncertain that this works as intended\n parentRefPath: parentRefPath ? pathFromString(parentRefPath) : [``],\n template: {id},\n })\n },\n [routerPanesState, groupIndex, handleEditReference]\n )\n\n if (loading) {\n return (\n <Box padding={4}>\n <Flex justify=\"center\" align=\"center\">\n <Spinner muted />\n </Flex>\n </Box>\n )\n }\n\n if (error) {\n return (\n <Stack padding={4} space={5}>\n <Feedback>There was en error performing this query</Feedback>\n {debug && <Debug query={query} params={params} />}\n </Stack>\n )\n }\n\n if (!data?.length) {\n return (\n <>\n <NewDocument initialValueTemplates={initialValueTemplates} />\n <Stack padding={4} space={5}>\n <Feedback>No Documents found</Feedback>\n {debug && <Debug query={query} params={params} />}\n </Stack>\n </>\n )\n }\n\n return (\n <>\n <NewDocument initialValueTemplates={initialValueTemplates} />\n <Stack padding={2} space={1}>\n {data.map((doc) => {\n const schemaType = schema.get(doc._type)\n if (!schemaType) {\n return null\n }\n return (\n <Button\n key={doc._id}\n onClick={() => handleClick(doc._id, doc._type)}\n padding={2}\n mode=\"bleed\"\n >\n <Preview value={doc} schemaType={schemaType} />\n </Button>\n )\n })}\n </Stack>\n </>\n )\n}\n","import {DocumentsPaneQueryParams, DocumentVersionsCollection} from './types'\nimport delve from 'dlv'\n\ninterface ResolveParamsOptions {\n params?: DocumentsPaneQueryParams\n document: DocumentVersionsCollection\n useDraft: boolean\n}\n\ntype ResolveParamsReturn = undefined | {[key: string]: string}\n\nfunction defaultResolver(options: ResolveParamsOptions): {\n [key: string]: string | undefined\n} {\n const {params, document, useDraft} = options\n\n // params is optional\n if (!params) return {}\n\n // legacy useDraft behaviour\n const doc = useDraft ? document.displayed : document.published\n\n return Object.keys(params).reduce(\n (acc, key) => ({\n ...acc,\n [key]: delve(doc, params[key as keyof DocumentsPaneQueryParams]),\n }),\n {}\n )\n}\n\nexport default function resolveParams(options: ResolveParamsOptions): ResolveParamsReturn {\n const {params, document} = options\n\n const resolvedParams = typeof params == 'function' ? params({document}) : defaultResolver(options)\n\n // if any of the parameters are undefined, the query will error\n // so return undefined so the UI can show a more appropriate message\n if (Object.values(resolvedParams).includes(undefined)) return undefined\n\n // Typescript can't tell that we've guarded against any value being undefined,\n // so forcing the type\n return resolvedParams as {[key: string]: string}\n}\n","import React from 'react'\nimport {Stack} from '@sanity/ui'\n\nimport Documents from './Documents'\nimport Feedback from './Feedback'\nimport Debug from './Debug'\nimport {DocumentsPaneProps} from './types'\nimport resolveParams from './resolveParams'\nimport resolveInitialValueTemplates from './resolveInitialValueTemplates'\n\nexport default function DocumentsPane(props: DocumentsPaneProps) {\n const {document, options} = props\n const {\n query,\n params,\n useDraft = false,\n debug = false,\n initialValueTemplates: initialValueTemplatesResolver,\n } = options\n\n if (useDraft && typeof params === 'function') {\n return (\n <Stack padding={4} space={5}>\n <Feedback>\n <code>useDraft</code> should not be <code>true</code> when supplying a function for\n <code>params</code>\n </Feedback>\n {debug && <Debug query={query} />}\n </Stack>\n )\n }\n\n const paramValues = resolveParams({document, params, useDraft})\n\n const initialValueTemplates = resolveInitialValueTemplates({\n resolver: initialValueTemplatesResolver,\n document,\n })\n\n if (!paramValues) {\n return (\n <Stack padding={4} space={5}>\n <Feedback>\n Parameters for this query could not be resolved. This may mean the document does not yet\n exist or is incomplete.\n </Feedback>\n {debug && <Debug query={query} />}\n </Stack>\n )\n }\n\n return (\n <Documents\n query={query}\n params={paramValues}\n debug={debug}\n initialValueTemplates={initialValueTemplates}\n />\n )\n}\n","import {\n DocumentsPaneInitialValueTemplate,\n DocumentsPaneInitialValueTemplateResolver,\n DocumentVersionsCollection,\n} from './types'\n\ninterface ResolveInitialValueTemplatesOptions {\n resolver: DocumentsPaneInitialValueTemplateResolver | undefined\n document: DocumentVersionsCollection\n}\n\nexport default function resolveInitialValueTemplates(\n options: ResolveInitialValueTemplatesOptions\n): DocumentsPaneInitialValueTemplate[] {\n const {resolver, document} = options || {}\n\n if (!resolver) return []\n\n return resolver({document})\n}\n"],"names":["Debug","_ref","query","params","jsxs","Fragment","children","Stack","space","jsx","Box","Label","Code","JSON","stringify","Feedback","props","tone","Card","padding","radius","shadow","Text","size","DEFAULT_PARAMS","DEFAULT_OPTIONS","apiVersion","NewDocument","initialValueTemplates","ReferenceChildLink","usePaneRouter","length","borderBottom","Flex","justify","gap","map","template","documentId","uuid","documentType","schemaType","id","parameters","parentRefPath","Button","icon","ComposeIcon","text","title","mode","as","concat","Documents","debug","routerPanesState","groupIndex","handleEditReference","schema","useSchema","loading","error","data","options","setLoading","useState","setError","setData","subscription","useRef","documentStore","useDocumentStore","useEffect","current","listenQuery","pipe","distinctUntilChanged","isEqual","catchError","err","console","subscribe","documents","unsubscribe","useListeningQuery","handleClick","useCallback","type","_a","childParams","pathFromString","align","Spinner","muted","doc","get","_type","onClick","_id","Preview","value","resolveParams","document","resolvedParams","useDraft","displayed","published","Object","keys","reduce","acc","key","delve","defaultResolver","values","includes","DocumentsPane","initialValueTemplatesResolver","paramValues","resolver","resolveInitialValueTemplates"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/Debug.tsx","../src/Feedback.tsx","../src/hooks/useListeningQuery.ts","../src/NewDocument.tsx","../src/Documents.tsx","../src/resolveParams.ts","../src/DocumentsPane.tsx","../src/resolveInitialValueTemplates.ts"],"sourcesContent":["import React from 'react'\nimport {Code, Box, Label, Stack} from '@sanity/ui'\n\nexport default function Debug({query, params}: {query: string; params?: {[key: string]: string}}) {\n return (\n <>\n <Stack space={4}>\n <Box>\n <Label>Query</Label>\n </Box>\n <Box>\n <Code>{query}</Code>\n </Box>\n </Stack>\n {params && (\n <Stack space={4}>\n <Box>\n <Label>Params</Label>\n </Box>\n <Box>\n <Code>{JSON.stringify(params)}</Code>\n </Box>\n </Stack>\n )}\n </>\n )\n}\n","import React from 'react'\nimport {Card, Text} from '@sanity/ui'\nimport type {BadgeTone} from '@sanity/ui'\n\ntype FeedbackProps = {\n children?: React.ReactNode\n tone?: BadgeTone\n}\n\nexport default function Feedback(props: FeedbackProps) {\n const {children, tone = `caution`} = props\n\n return (\n <Card padding={3} radius={2} shadow={1} tone={tone}>\n <Text size={1}>{children}</Text>\n </Card>\n )\n}\n","import {useEffect, useState, useRef} from 'react'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport isEqual from 'react-fast-compare'\nimport {SanityDocument, useDocumentStore} from 'sanity'\n\ntype Params = Record<string, string | number | boolean | string[]>\n\ninterface ListenQueryOptions {\n tag?: string\n apiVersion?: string\n}\n\ntype ReturnShape = {\n loading: boolean\n error: boolean\n data: SanityDocument[] | null\n}\n\ntype Observable = {\n unsubscribe: () => void\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2022-05-09`}\n\nexport default function useListeningQuery(\n query: string,\n params: Params = DEFAULT_PARAMS,\n options: ListenQueryOptions = DEFAULT_OPTIONS\n): ReturnShape {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [data, setData] = useState<SanityDocument[] | null>(null)\n const subscription = useRef<null | Observable>(null)\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query) {\n subscription.current = documentStore\n .listenQuery(query, params, options)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents: SanityDocument[]) => {\n setData((current) => (isEqual(current, documents) ? current : documents))\n setLoading(false)\n setError(false)\n })\n }\n\n return () => {\n return subscription.current ? subscription.current.unsubscribe() : undefined\n }\n }, [query, params, options, documentStore])\n\n return {loading, error, data}\n}\n","import {Button, Card, Flex} from '@sanity/ui'\nimport React from 'react'\nimport {DocumentsPaneInitialValueTemplate} from './types'\nimport {ComposeIcon} from '@sanity/icons'\nimport {usePaneRouter} from 'sanity/desk'\nimport {uuid} from '@sanity/uuid'\n\ninterface NewDocumentProps {\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n}\n\nexport default function NewDocument(props: NewDocumentProps) {\n const {initialValueTemplates = []} = props\n const {ReferenceChildLink} = usePaneRouter()\n\n if (!initialValueTemplates.length) return null\n\n return (\n <Card borderBottom={true} padding={2}>\n <Flex justify=\"flex-end\" gap={1}>\n {initialValueTemplates.map((template) => {\n if (!template.template) {\n return null\n }\n return (\n <ReferenceChildLink\n documentId={uuid()}\n documentType={template.schemaType}\n template={{id: template.template, params: template.parameters}}\n parentRefPath={[]}\n key={`${template.schemaType}-${template.template}`}\n >\n <Button icon={<ComposeIcon />} text={template.title} mode=\"bleed\" as=\"span\" />\n </ReferenceChildLink>\n )\n })}\n </Flex>\n </Card>\n )\n}\n","import React, {useCallback} from 'react'\nimport {Box, Button, Stack, Flex, Spinner, Card} from '@sanity/ui'\nimport {fromString as pathFromString} from '@sanity/util/paths'\nimport {Preview, useSchema, DefaultPreview} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\nimport {WarningOutlineIcon} from '@sanity/icons'\n\nimport Debug from './Debug'\nimport Feedback from './Feedback'\nimport useListeningQuery from './hooks/useListeningQuery'\nimport {DocumentsPaneInitialValueTemplate} from './types'\nimport NewDocument from './NewDocument'\n\ntype DocumentsProps = {\n query: string\n params: {[key: string]: string}\n debug: boolean\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n}\n\nexport default function Documents(props: DocumentsProps) {\n const {query, params, debug, initialValueTemplates} = props\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const schema = useSchema()\n\n const {loading, error, data} = useListeningQuery(query, params)\n\n const handleClick = useCallback(\n (id: string, type: string) => {\n const childParams = routerPanesState[groupIndex + 1]?.[0].params || {}\n const {parentRefPath} = childParams\n\n handleEditReference({\n id,\n type,\n // Uncertain that this works as intended\n parentRefPath: parentRefPath ? pathFromString(parentRefPath) : [``],\n template: {id},\n })\n },\n [routerPanesState, groupIndex, handleEditReference]\n )\n\n if (loading) {\n return (\n <Box padding={4}>\n <Flex justify=\"center\" align=\"center\">\n <Spinner muted />\n </Flex>\n </Box>\n )\n }\n\n if (error) {\n return (\n <Stack padding={4} space={5}>\n <Feedback>There was en error performing this query</Feedback>\n {debug && <Debug query={query} params={params} />}\n </Stack>\n )\n }\n\n if (!data?.length) {\n return (\n <>\n <NewDocument initialValueTemplates={initialValueTemplates} />\n <Stack padding={4} space={5}>\n <Feedback>No Documents found</Feedback>\n {debug && <Debug query={query} params={params} />}\n </Stack>\n </>\n )\n }\n\n return (\n <>\n <NewDocument initialValueTemplates={initialValueTemplates} />\n <Stack padding={2} space={1}>\n {data.map((doc) => {\n const schemaType = schema.get(doc._type)\n\n return schemaType ? (\n <Button\n key={doc._id}\n onClick={() => handleClick(doc._id, doc._type)}\n padding={2}\n mode=\"bleed\"\n >\n <Preview value={doc} schemaType={schemaType} />\n </Button>\n ) : (\n <Card radius={2} tone=\"caution\" data-ui=\"Alert\" padding={2} key={doc._id}>\n <DefaultPreview\n media={<WarningOutlineIcon />}\n title=\"Unknown schema type found\"\n subtitle={`Encountered type \"${doc._type}\" that is not defined in the schema.`}\n />\n </Card>\n )\n })}\n </Stack>\n </>\n )\n}\n","import {DocumentsPaneQueryParams, DocumentVersionsCollection} from './types'\nimport delve from 'dlv'\n\ninterface ResolveParamsOptions {\n params?: DocumentsPaneQueryParams\n document: DocumentVersionsCollection\n useDraft: boolean\n}\n\ntype ResolveParamsReturn = undefined | {[key: string]: string}\n\nfunction defaultResolver(options: ResolveParamsOptions): {\n [key: string]: string | undefined\n} {\n const {params, document, useDraft} = options\n\n // params is optional\n if (!params) return {}\n\n // legacy useDraft behaviour\n const doc = useDraft ? document.displayed : document.published\n\n return Object.keys(params).reduce(\n (acc, key) => ({\n ...acc,\n [key]: delve(doc, params[key as keyof DocumentsPaneQueryParams]),\n }),\n {}\n )\n}\n\nexport default function resolveParams(options: ResolveParamsOptions): ResolveParamsReturn {\n const {params, document} = options\n\n const resolvedParams = typeof params == 'function' ? params({document}) : defaultResolver(options)\n\n // if any of the parameters are undefined, the query will error\n // so return undefined so the UI can show a more appropriate message\n if (Object.values(resolvedParams).includes(undefined)) return undefined\n\n // Typescript can't tell that we've guarded against any value being undefined,\n // so forcing the type\n return resolvedParams as {[key: string]: string}\n}\n","import React from 'react'\nimport {Stack} from '@sanity/ui'\n\nimport Documents from './Documents'\nimport Feedback from './Feedback'\nimport Debug from './Debug'\nimport {DocumentsPaneProps} from './types'\nimport resolveParams from './resolveParams'\nimport resolveInitialValueTemplates from './resolveInitialValueTemplates'\n\nexport default function DocumentsPane(props: DocumentsPaneProps) {\n const {document, options} = props\n const {\n query,\n params,\n useDraft = false,\n debug = false,\n initialValueTemplates: initialValueTemplatesResolver,\n } = options\n\n if (useDraft && typeof params === 'function') {\n return (\n <Stack padding={4} space={5}>\n <Feedback>\n <code>useDraft</code> should not be <code>true</code> when supplying a function for\n <code>params</code>\n </Feedback>\n {debug && <Debug query={query} />}\n </Stack>\n )\n }\n\n const paramValues = resolveParams({document, params, useDraft})\n\n const initialValueTemplates = resolveInitialValueTemplates({\n resolver: initialValueTemplatesResolver,\n document,\n })\n\n if (!paramValues) {\n return (\n <Stack padding={4} space={5}>\n <Feedback>\n Parameters for this query could not be resolved. This may mean the document does not yet\n exist or is incomplete.\n </Feedback>\n {debug && <Debug query={query} />}\n </Stack>\n )\n }\n\n return (\n <Documents\n query={query}\n params={paramValues}\n debug={debug}\n initialValueTemplates={initialValueTemplates}\n />\n )\n}\n","import {\n DocumentsPaneInitialValueTemplate,\n DocumentsPaneInitialValueTemplateResolver,\n DocumentVersionsCollection,\n} from './types'\n\ninterface ResolveInitialValueTemplatesOptions {\n resolver: DocumentsPaneInitialValueTemplateResolver | undefined\n document: DocumentVersionsCollection\n}\n\nexport default function resolveInitialValueTemplates(\n options: ResolveInitialValueTemplatesOptions\n): DocumentsPaneInitialValueTemplate[] {\n const {resolver, document} = options || {}\n\n if (!resolver) return []\n\n return resolver({document})\n}\n"],"names":["jsxs","Fragment","jsx","Stack","Box","Label","Code","Card","Text","Flex","Button","Spinner","useState","useRef","useEffect","useCallback","fromString","useDocumentStore","useSchema","Preview","DefaultPreview","usePaneRouter","ComposeIcon","WarningOutlineIcon","distinctUntilChanged","catchError","isEqual","uuid","delve","Debug","_ref","query","params","children","space","JSON","stringify","Feedback","props","tone","padding","radius","shadow","size","DEFAULT_PARAMS","DEFAULT_OPTIONS","apiVersion","NewDocument","initialValueTemplates","ReferenceChildLink","length","borderBottom","justify","gap","map","template","documentId","documentType","schemaType","id","parameters","parentRefPath","icon","text","title","mode","as","concat","Documents","debug","routerPanesState","groupIndex","handleEditReference","schema","loading","error","data","arguments","undefined","options","setLoading","setError","setData","subscription","documentStore","current","listenQuery","pipe","err","console","subscribe","documents","unsubscribe","useListeningQuery","handleClick","type","_a","childParams","pathFromString","align","muted","doc","get","_type","onClick","_id","value","media","subtitle","resolveParams","document","resolvedParams","useDraft","displayed","published","Object","keys","reduce","acc","key","defaultResolver","values","includes","DocumentsPane","initialValueTemplatesResolver","paramValues","resolver","resolveInitialValueTemplates"],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),t=require("@sanity/ui"),n=require("react"),r=require("@sanity/util/paths"),s=require("sanity"),a=require("sanity/desk"),i=require("@sanity/icons"),u=require("rxjs/operators"),c=require("react-fast-compare"),d=require("@sanity/uuid"),o=require("dlv");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=l(c),h=l(o);function m(n){let{query:r,params:s}=n;return e.jsxs(e.Fragment,{children:[e.jsxs(t.Stack,{space:4,children:[e.jsx(t.Box,{children:e.jsx(t.Label,{children:"Query"})}),e.jsx(t.Box,{children:e.jsx(t.Code,{children:r})})]}),s&&e.jsxs(t.Stack,{space:4,children:[e.jsx(t.Box,{children:e.jsx(t.Label,{children:"Params"})}),e.jsx(t.Box,{children:e.jsx(t.Code,{children:JSON.stringify(s)})})]})]})}function x(n){const{children:r,tone:s="caution"}=n;return e.jsx(t.Card,{padding:3,radius:2,shadow:1,tone:s,children:e.jsx(t.Text,{size:1,children:r})})}const j={},f={apiVersion:"v2022-05-09"};function y(n){const{initialValueTemplates:r=[]}=n,{ReferenceChildLink:s}=a.usePaneRouter();return r.length?e.jsx(t.Card,{borderBottom:!0,padding:2,children:e.jsx(t.Flex,{justify:"flex-end",gap:1,children:r.map((n=>n.template?e.jsx(s,{documentId:d.uuid(),documentType:n.schemaType,template:{id:n.template,params:n.parameters},parentRefPath:[],children:e.jsx(t.Button,{icon:e.jsx(i.ComposeIcon,{}),text:n.title,mode:"bleed",as:"span"})},"".concat(n.schemaType,"-").concat(n.template)):null))})}):null}function g(c){const{query:d,params:o,debug:l,initialValueTemplates:h}=c,{routerPanesState:g,groupIndex:q,handleEditReference:b}=a.usePaneRouter(),v=s.useSchema(),{loading:S,error:k,data:T}=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:j,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f;const[a,i]=n.useState(!0),[c,d]=n.useState(!1),[o,l]=n.useState(null),h=n.useRef(null),m=s.useDocumentStore();return n.useEffect((()=>(e&&(h.current=m.listenQuery(e,t,r).pipe(u.distinctUntilChanged(p.default),u.catchError((e=>(console.error(e),d(e),i(!1),l(null),e)))).subscribe((e=>{l((t=>p.default(t,e)?t:e)),i(!1),d(!1)}))),()=>h.current?h.current.unsubscribe():void 0)),[e,t,r,m]),{loading:a,error:c,data:o}}(d,o),C=n.useCallback(((e,t)=>{var n;const s=(null==(n=g[q+1])?void 0:n[0].params)||{},{parentRefPath:a}=s;b({id:e,type:t,parentRefPath:a?r.fromString(a):[""],template:{id:e}})}),[g,q,b]);return S?e.jsx(t.Box,{padding:4,children:e.jsx(t.Flex,{justify:"center",align:"center",children:e.jsx(t.Spinner,{muted:!0})})}):k?e.jsxs(t.Stack,{padding:4,space:5,children:[e.jsx(x,{children:"There was en error performing this query"}),l&&e.jsx(m,{query:d,params:o})]}):(null==T?void 0:T.length)?e.jsxs(e.Fragment,{children:[e.jsx(y,{initialValueTemplates:h}),e.jsx(t.Stack,{padding:2,space:1,children:T.map((n=>{const r=v.get(n._type);return r?e.jsx(t.Button,{onClick:()=>C(n._id,n._type),padding:2,mode:"bleed",children:e.jsx(s.Preview,{value:n,schemaType:r})},n._id):e.jsx(t.Card,{radius:2,tone:"caution","data-ui":"Alert",padding:2,children:e.jsx(s.DefaultPreview,{media:e.jsx(i.WarningOutlineIcon,{}),title:"Unknown schema type found",subtitle:'Encountered type "'.concat(n._type,'" that is not defined in the schema.')})},n._id)}))})]}):e.jsxs(e.Fragment,{children:[e.jsx(y,{initialValueTemplates:h}),e.jsxs(t.Stack,{padding:4,space:5,children:[e.jsx(x,{children:"No Documents found"}),l&&e.jsx(m,{query:d,params:o})]})]})}function q(e){const{params:t,document:n}=e,r="function"==typeof t?t({document:n}):function(e){const{params:t,document:n,useDraft:r}=e;if(!t)return{};const s=r?n.displayed:n.published;return Object.keys(t).reduce(((e,n)=>({...e,[n]:h.default(s,t[n])})),{})}(e);if(!Object.values(r).includes(void 0))return r}module.exports=function(n){const{document:r,options:s}=n,{query:a,params:i,useDraft:u=!1,debug:c=!1,initialValueTemplates:d}=s;if(u&&"function"==typeof i)return e.jsxs(t.Stack,{padding:4,space:5,children:[e.jsxs(x,{children:[e.jsx("code",{children:"useDraft"})," should not be ",e.jsx("code",{children:"true"})," when supplying a function for",e.jsx("code",{children:"params"})]}),c&&e.jsx(m,{query:a})]});const o=q({document:r,params:i,useDraft:u}),l=function(e){const{resolver:t,document:n}=e||{};return t?t({document:n}):[]}({resolver:d,document:r});return o?e.jsx(g,{query:a,params:o,debug:c,initialValueTemplates:l}):e.jsxs(t.Stack,{padding:4,space:5,children:[e.jsx(x,{children:"Parameters for this query could not be resolved. This may mean the document does not yet exist or is incomplete."}),c&&e.jsx(m,{query:a})]})};//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/Debug.tsx","../src/Feedback.tsx","../src/hooks/useListeningQuery.ts","../src/NewDocument.tsx","../src/Documents.tsx","../src/resolveParams.ts","../src/DocumentsPane.tsx","../src/resolveInitialValueTemplates.ts"],"sourcesContent":["import React from 'react'\nimport {Code, Box, Label, Stack} from '@sanity/ui'\n\nexport default function Debug({query, params}: {query: string; params?: {[key: string]: string}}) {\n return (\n <>\n <Stack space={4}>\n <Box>\n <Label>Query</Label>\n </Box>\n <Box>\n <Code>{query}</Code>\n </Box>\n </Stack>\n {params && (\n <Stack space={4}>\n <Box>\n <Label>Params</Label>\n </Box>\n <Box>\n <Code>{JSON.stringify(params)}</Code>\n </Box>\n </Stack>\n )}\n </>\n )\n}\n","import React from 'react'\nimport {Card, Text} from '@sanity/ui'\nimport type {BadgeTone} from '@sanity/ui'\n\ntype FeedbackProps = {\n children?: React.ReactNode\n tone?: BadgeTone\n}\n\nexport default function Feedback(props: FeedbackProps) {\n const {children, tone = `caution`} = props\n\n return (\n <Card padding={3} radius={2} shadow={1} tone={tone}>\n <Text size={1}>{children}</Text>\n </Card>\n )\n}\n","import {useEffect, useState, useRef} from 'react'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport isEqual from 'react-fast-compare'\nimport {SanityDocument, useDocumentStore} from 'sanity'\n\ntype Params = Record<string, string | number | boolean | string[]>\n\ninterface ListenQueryOptions {\n tag?: string\n apiVersion?: string\n}\n\ntype ReturnShape = {\n loading: boolean\n error: boolean\n data: SanityDocument[] | null\n}\n\ntype Observable = {\n unsubscribe: () => void\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2022-05-09`}\n\nexport default function useListeningQuery(\n query: string,\n params: Params = DEFAULT_PARAMS,\n options: ListenQueryOptions = DEFAULT_OPTIONS\n): ReturnShape {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [data, setData] = useState<SanityDocument[] | null>(null)\n const subscription = useRef<null | Observable>(null)\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query) {\n subscription.current = documentStore\n .listenQuery(query, params, options)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents: SanityDocument[]) => {\n setData((current) => (isEqual(current, documents) ? current : documents))\n setLoading(false)\n setError(false)\n })\n }\n\n return () => {\n return subscription.current ? subscription.current.unsubscribe() : undefined\n }\n }, [query, params, options, documentStore])\n\n return {loading, error, data}\n}\n","import {Button, Card, Flex} from '@sanity/ui'\nimport React from 'react'\nimport {DocumentsPaneInitialValueTemplate} from './types'\nimport {ComposeIcon} from '@sanity/icons'\nimport {usePaneRouter} from 'sanity/desk'\nimport {uuid} from '@sanity/uuid'\n\ninterface NewDocumentProps {\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n}\n\nexport default function NewDocument(props: NewDocumentProps) {\n const {initialValueTemplates = []} = props\n const {ReferenceChildLink} = usePaneRouter()\n\n if (!initialValueTemplates.length) return null\n\n return (\n <Card borderBottom={true} padding={2}>\n <Flex justify=\"flex-end\" gap={1}>\n {initialValueTemplates.map((template) => {\n if (!template.template) {\n return null\n }\n return (\n <ReferenceChildLink\n documentId={uuid()}\n documentType={template.schemaType}\n template={{id: template.template, params: template.parameters}}\n parentRefPath={[]}\n key={`${template.schemaType}-${template.template}`}\n >\n <Button icon={<ComposeIcon />} text={template.title} mode=\"bleed\" as=\"span\" />\n </ReferenceChildLink>\n )\n })}\n </Flex>\n </Card>\n )\n}\n","import React, {useCallback} from 'react'\nimport {Box, Button, Stack, Flex, Spinner} from '@sanity/ui'\nimport {fromString as pathFromString} from '@sanity/util/paths'\nimport {Preview, useSchema} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\n\nimport Debug from './Debug'\nimport Feedback from './Feedback'\nimport useListeningQuery from './hooks/useListeningQuery'\nimport {DocumentsPaneInitialValueTemplate} from './types'\nimport NewDocument from './NewDocument'\n\ntype DocumentsProps = {\n query: string\n params: {[key: string]: string}\n debug: boolean\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n}\n\nexport default function Documents(props: DocumentsProps) {\n const {query, params, debug, initialValueTemplates} = props\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const schema = useSchema()\n\n const {loading, error, data} = useListeningQuery(query, params)\n\n const handleClick = useCallback(\n (id: string, type: string) => {\n const childParams = routerPanesState[groupIndex + 1]?.[0].params || {}\n const {parentRefPath} = childParams\n\n handleEditReference({\n id,\n type,\n // Uncertain that this works as intended\n parentRefPath: parentRefPath ? pathFromString(parentRefPath) : [``],\n template: {id},\n })\n },\n [routerPanesState, groupIndex, handleEditReference]\n )\n\n if (loading) {\n return (\n <Box padding={4}>\n <Flex justify=\"center\" align=\"center\">\n <Spinner muted />\n </Flex>\n </Box>\n )\n }\n\n if (error) {\n return (\n <Stack padding={4} space={5}>\n <Feedback>There was en error performing this query</Feedback>\n {debug && <Debug query={query} params={params} />}\n </Stack>\n )\n }\n\n if (!data?.length) {\n return (\n <>\n <NewDocument initialValueTemplates={initialValueTemplates} />\n <Stack padding={4} space={5}>\n <Feedback>No Documents found</Feedback>\n {debug && <Debug query={query} params={params} />}\n </Stack>\n </>\n )\n }\n\n return (\n <>\n <NewDocument initialValueTemplates={initialValueTemplates} />\n <Stack padding={2} space={1}>\n {data.map((doc) => {\n const schemaType = schema.get(doc._type)\n if (!schemaType) {\n return null\n }\n return (\n <Button\n key={doc._id}\n onClick={() => handleClick(doc._id, doc._type)}\n padding={2}\n mode=\"bleed\"\n >\n <Preview value={doc} schemaType={schemaType} />\n </Button>\n )\n })}\n </Stack>\n </>\n )\n}\n","import {DocumentsPaneQueryParams, DocumentVersionsCollection} from './types'\nimport delve from 'dlv'\n\ninterface ResolveParamsOptions {\n params?: DocumentsPaneQueryParams\n document: DocumentVersionsCollection\n useDraft: boolean\n}\n\ntype ResolveParamsReturn = undefined | {[key: string]: string}\n\nfunction defaultResolver(options: ResolveParamsOptions): {\n [key: string]: string | undefined\n} {\n const {params, document, useDraft} = options\n\n // params is optional\n if (!params) return {}\n\n // legacy useDraft behaviour\n const doc = useDraft ? document.displayed : document.published\n\n return Object.keys(params).reduce(\n (acc, key) => ({\n ...acc,\n [key]: delve(doc, params[key as keyof DocumentsPaneQueryParams]),\n }),\n {}\n )\n}\n\nexport default function resolveParams(options: ResolveParamsOptions): ResolveParamsReturn {\n const {params, document} = options\n\n const resolvedParams = typeof params == 'function' ? params({document}) : defaultResolver(options)\n\n // if any of the parameters are undefined, the query will error\n // so return undefined so the UI can show a more appropriate message\n if (Object.values(resolvedParams).includes(undefined)) return undefined\n\n // Typescript can't tell that we've guarded against any value being undefined,\n // so forcing the type\n return resolvedParams as {[key: string]: string}\n}\n","import React from 'react'\nimport {Stack} from '@sanity/ui'\n\nimport Documents from './Documents'\nimport Feedback from './Feedback'\nimport Debug from './Debug'\nimport {DocumentsPaneProps} from './types'\nimport resolveParams from './resolveParams'\nimport resolveInitialValueTemplates from './resolveInitialValueTemplates'\n\nexport default function DocumentsPane(props: DocumentsPaneProps) {\n const {document, options} = props\n const {\n query,\n params,\n useDraft = false,\n debug = false,\n initialValueTemplates: initialValueTemplatesResolver,\n } = options\n\n if (useDraft && typeof params === 'function') {\n return (\n <Stack padding={4} space={5}>\n <Feedback>\n <code>useDraft</code> should not be <code>true</code> when supplying a function for\n <code>params</code>\n </Feedback>\n {debug && <Debug query={query} />}\n </Stack>\n )\n }\n\n const paramValues = resolveParams({document, params, useDraft})\n\n const initialValueTemplates = resolveInitialValueTemplates({\n resolver: initialValueTemplatesResolver,\n document,\n })\n\n if (!paramValues) {\n return (\n <Stack padding={4} space={5}>\n <Feedback>\n Parameters for this query could not be resolved. This may mean the document does not yet\n exist or is incomplete.\n </Feedback>\n {debug && <Debug query={query} />}\n </Stack>\n )\n }\n\n return (\n <Documents\n query={query}\n params={paramValues}\n debug={debug}\n initialValueTemplates={initialValueTemplates}\n />\n )\n}\n","import {\n DocumentsPaneInitialValueTemplate,\n DocumentsPaneInitialValueTemplateResolver,\n DocumentVersionsCollection,\n} from './types'\n\ninterface ResolveInitialValueTemplatesOptions {\n resolver: DocumentsPaneInitialValueTemplateResolver | undefined\n document: DocumentVersionsCollection\n}\n\nexport default function resolveInitialValueTemplates(\n options: ResolveInitialValueTemplatesOptions\n): DocumentsPaneInitialValueTemplate[] {\n const {resolver, document} = options || {}\n\n if (!resolver) return []\n\n return resolver({document})\n}\n"],"names":["Debug","_ref","query","params","jsxs","Fragment","children","Stack","space","jsx","Box","Label","Code","JSON","stringify","Feedback","props","tone","Card","padding","radius","shadow","Text","size","DEFAULT_PARAMS","DEFAULT_OPTIONS","apiVersion","NewDocument","initialValueTemplates","ReferenceChildLink","usePaneRouter","length","borderBottom","Flex","justify","gap","map","template","documentId","uuid","documentType","schemaType","id","parameters","parentRefPath","Button","icon","ComposeIcon","text","title","mode","as","concat","Documents","debug","routerPanesState","groupIndex","handleEditReference","schema","useSchema","loading","error","data","options","setLoading","useState","setError","setData","subscription","useRef","documentStore","useDocumentStore","useEffect","current","listenQuery","pipe","distinctUntilChanged","isEqual","catchError","err","console","subscribe","documents","unsubscribe","useListeningQuery","handleClick","useCallback","type","_a","childParams","pathFromString","fromString","align","Spinner","muted","doc","get","_type","onClick","_id","Preview","value","resolveParams","document","resolvedParams","useDraft","displayed","published","Object","keys","reduce","acc","key","delve","defaultResolver","values","includes","initialValueTemplatesResolver","paramValues","resolver","resolveInitialValueTemplates"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/Debug.tsx","../src/Feedback.tsx","../src/hooks/useListeningQuery.ts","../src/NewDocument.tsx","../src/Documents.tsx","../src/resolveParams.ts","../src/DocumentsPane.tsx","../src/resolveInitialValueTemplates.ts"],"sourcesContent":["import React from 'react'\nimport {Code, Box, Label, Stack} from '@sanity/ui'\n\nexport default function Debug({query, params}: {query: string; params?: {[key: string]: string}}) {\n return (\n <>\n <Stack space={4}>\n <Box>\n <Label>Query</Label>\n </Box>\n <Box>\n <Code>{query}</Code>\n </Box>\n </Stack>\n {params && (\n <Stack space={4}>\n <Box>\n <Label>Params</Label>\n </Box>\n <Box>\n <Code>{JSON.stringify(params)}</Code>\n </Box>\n </Stack>\n )}\n </>\n )\n}\n","import React from 'react'\nimport {Card, Text} from '@sanity/ui'\nimport type {BadgeTone} from '@sanity/ui'\n\ntype FeedbackProps = {\n children?: React.ReactNode\n tone?: BadgeTone\n}\n\nexport default function Feedback(props: FeedbackProps) {\n const {children, tone = `caution`} = props\n\n return (\n <Card padding={3} radius={2} shadow={1} tone={tone}>\n <Text size={1}>{children}</Text>\n </Card>\n )\n}\n","import {useEffect, useState, useRef} from 'react'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport isEqual from 'react-fast-compare'\nimport {SanityDocument, useDocumentStore} from 'sanity'\n\ntype Params = Record<string, string | number | boolean | string[]>\n\ninterface ListenQueryOptions {\n tag?: string\n apiVersion?: string\n}\n\ntype ReturnShape = {\n loading: boolean\n error: boolean\n data: SanityDocument[] | null\n}\n\ntype Observable = {\n unsubscribe: () => void\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2022-05-09`}\n\nexport default function useListeningQuery(\n query: string,\n params: Params = DEFAULT_PARAMS,\n options: ListenQueryOptions = DEFAULT_OPTIONS\n): ReturnShape {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [data, setData] = useState<SanityDocument[] | null>(null)\n const subscription = useRef<null | Observable>(null)\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query) {\n subscription.current = documentStore\n .listenQuery(query, params, options)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents: SanityDocument[]) => {\n setData((current) => (isEqual(current, documents) ? current : documents))\n setLoading(false)\n setError(false)\n })\n }\n\n return () => {\n return subscription.current ? subscription.current.unsubscribe() : undefined\n }\n }, [query, params, options, documentStore])\n\n return {loading, error, data}\n}\n","import {Button, Card, Flex} from '@sanity/ui'\nimport React from 'react'\nimport {DocumentsPaneInitialValueTemplate} from './types'\nimport {ComposeIcon} from '@sanity/icons'\nimport {usePaneRouter} from 'sanity/desk'\nimport {uuid} from '@sanity/uuid'\n\ninterface NewDocumentProps {\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n}\n\nexport default function NewDocument(props: NewDocumentProps) {\n const {initialValueTemplates = []} = props\n const {ReferenceChildLink} = usePaneRouter()\n\n if (!initialValueTemplates.length) return null\n\n return (\n <Card borderBottom={true} padding={2}>\n <Flex justify=\"flex-end\" gap={1}>\n {initialValueTemplates.map((template) => {\n if (!template.template) {\n return null\n }\n return (\n <ReferenceChildLink\n documentId={uuid()}\n documentType={template.schemaType}\n template={{id: template.template, params: template.parameters}}\n parentRefPath={[]}\n key={`${template.schemaType}-${template.template}`}\n >\n <Button icon={<ComposeIcon />} text={template.title} mode=\"bleed\" as=\"span\" />\n </ReferenceChildLink>\n )\n })}\n </Flex>\n </Card>\n )\n}\n","import React, {useCallback} from 'react'\nimport {Box, Button, Stack, Flex, Spinner, Card} from '@sanity/ui'\nimport {fromString as pathFromString} from '@sanity/util/paths'\nimport {Preview, useSchema, DefaultPreview} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\nimport {WarningOutlineIcon} from '@sanity/icons'\n\nimport Debug from './Debug'\nimport Feedback from './Feedback'\nimport useListeningQuery from './hooks/useListeningQuery'\nimport {DocumentsPaneInitialValueTemplate} from './types'\nimport NewDocument from './NewDocument'\n\ntype DocumentsProps = {\n query: string\n params: {[key: string]: string}\n debug: boolean\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n}\n\nexport default function Documents(props: DocumentsProps) {\n const {query, params, debug, initialValueTemplates} = props\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const schema = useSchema()\n\n const {loading, error, data} = useListeningQuery(query, params)\n\n const handleClick = useCallback(\n (id: string, type: string) => {\n const childParams = routerPanesState[groupIndex + 1]?.[0].params || {}\n const {parentRefPath} = childParams\n\n handleEditReference({\n id,\n type,\n // Uncertain that this works as intended\n parentRefPath: parentRefPath ? pathFromString(parentRefPath) : [``],\n template: {id},\n })\n },\n [routerPanesState, groupIndex, handleEditReference]\n )\n\n if (loading) {\n return (\n <Box padding={4}>\n <Flex justify=\"center\" align=\"center\">\n <Spinner muted />\n </Flex>\n </Box>\n )\n }\n\n if (error) {\n return (\n <Stack padding={4} space={5}>\n <Feedback>There was en error performing this query</Feedback>\n {debug && <Debug query={query} params={params} />}\n </Stack>\n )\n }\n\n if (!data?.length) {\n return (\n <>\n <NewDocument initialValueTemplates={initialValueTemplates} />\n <Stack padding={4} space={5}>\n <Feedback>No Documents found</Feedback>\n {debug && <Debug query={query} params={params} />}\n </Stack>\n </>\n )\n }\n\n return (\n <>\n <NewDocument initialValueTemplates={initialValueTemplates} />\n <Stack padding={2} space={1}>\n {data.map((doc) => {\n const schemaType = schema.get(doc._type)\n\n return schemaType ? (\n <Button\n key={doc._id}\n onClick={() => handleClick(doc._id, doc._type)}\n padding={2}\n mode=\"bleed\"\n >\n <Preview value={doc} schemaType={schemaType} />\n </Button>\n ) : (\n <Card radius={2} tone=\"caution\" data-ui=\"Alert\" padding={2} key={doc._id}>\n <DefaultPreview\n media={<WarningOutlineIcon />}\n title=\"Unknown schema type found\"\n subtitle={`Encountered type \"${doc._type}\" that is not defined in the schema.`}\n />\n </Card>\n )\n })}\n </Stack>\n </>\n )\n}\n","import {DocumentsPaneQueryParams, DocumentVersionsCollection} from './types'\nimport delve from 'dlv'\n\ninterface ResolveParamsOptions {\n params?: DocumentsPaneQueryParams\n document: DocumentVersionsCollection\n useDraft: boolean\n}\n\ntype ResolveParamsReturn = undefined | {[key: string]: string}\n\nfunction defaultResolver(options: ResolveParamsOptions): {\n [key: string]: string | undefined\n} {\n const {params, document, useDraft} = options\n\n // params is optional\n if (!params) return {}\n\n // legacy useDraft behaviour\n const doc = useDraft ? document.displayed : document.published\n\n return Object.keys(params).reduce(\n (acc, key) => ({\n ...acc,\n [key]: delve(doc, params[key as keyof DocumentsPaneQueryParams]),\n }),\n {}\n )\n}\n\nexport default function resolveParams(options: ResolveParamsOptions): ResolveParamsReturn {\n const {params, document} = options\n\n const resolvedParams = typeof params == 'function' ? params({document}) : defaultResolver(options)\n\n // if any of the parameters are undefined, the query will error\n // so return undefined so the UI can show a more appropriate message\n if (Object.values(resolvedParams).includes(undefined)) return undefined\n\n // Typescript can't tell that we've guarded against any value being undefined,\n // so forcing the type\n return resolvedParams as {[key: string]: string}\n}\n","import React from 'react'\nimport {Stack} from '@sanity/ui'\n\nimport Documents from './Documents'\nimport Feedback from './Feedback'\nimport Debug from './Debug'\nimport {DocumentsPaneProps} from './types'\nimport resolveParams from './resolveParams'\nimport resolveInitialValueTemplates from './resolveInitialValueTemplates'\n\nexport default function DocumentsPane(props: DocumentsPaneProps) {\n const {document, options} = props\n const {\n query,\n params,\n useDraft = false,\n debug = false,\n initialValueTemplates: initialValueTemplatesResolver,\n } = options\n\n if (useDraft && typeof params === 'function') {\n return (\n <Stack padding={4} space={5}>\n <Feedback>\n <code>useDraft</code> should not be <code>true</code> when supplying a function for\n <code>params</code>\n </Feedback>\n {debug && <Debug query={query} />}\n </Stack>\n )\n }\n\n const paramValues = resolveParams({document, params, useDraft})\n\n const initialValueTemplates = resolveInitialValueTemplates({\n resolver: initialValueTemplatesResolver,\n document,\n })\n\n if (!paramValues) {\n return (\n <Stack padding={4} space={5}>\n <Feedback>\n Parameters for this query could not be resolved. This may mean the document does not yet\n exist or is incomplete.\n </Feedback>\n {debug && <Debug query={query} />}\n </Stack>\n )\n }\n\n return (\n <Documents\n query={query}\n params={paramValues}\n debug={debug}\n initialValueTemplates={initialValueTemplates}\n />\n )\n}\n","import {\n DocumentsPaneInitialValueTemplate,\n DocumentsPaneInitialValueTemplateResolver,\n DocumentVersionsCollection,\n} from './types'\n\ninterface ResolveInitialValueTemplatesOptions {\n resolver: DocumentsPaneInitialValueTemplateResolver | undefined\n document: DocumentVersionsCollection\n}\n\nexport default function resolveInitialValueTemplates(\n options: ResolveInitialValueTemplatesOptions\n): DocumentsPaneInitialValueTemplate[] {\n const {resolver, document} = options || {}\n\n if (!resolver) return []\n\n return resolver({document})\n}\n"],"names":["jsxRuntime","require","ui","react","paths","sanity","desk","icons","operators","isEqual","uuid","delve","_interopDefaultCompat","e","default","isEqual__default","delve__default","Debug","_ref","query","params","jsxs","Fragment","children","Stack","space","jsx","Box","Label","Code","JSON","stringify","Feedback","props","tone","Card","padding","radius","shadow","Text","size","DEFAULT_PARAMS","DEFAULT_OPTIONS","apiVersion","NewDocument","initialValueTemplates","ReferenceChildLink","usePaneRouter","length","borderBottom","Flex","justify","gap","map","template","documentId","documentType","schemaType","id","parameters","parentRefPath","Button","icon","ComposeIcon","text","title","mode","as","concat","Documents","debug","routerPanesState","groupIndex","handleEditReference","schema","useSchema","loading","error","data","arguments","undefined","options","setLoading","useState","setError","setData","subscription","useRef","documentStore","useDocumentStore","useEffect","current","listenQuery","pipe","distinctUntilChanged","catchError","err","console","subscribe","documents","unsubscribe","useListeningQuery","handleClick","useCallback","type","_a","childParams","pathFromString","fromString","align","Spinner","muted","doc","get","_type","onClick","_id","Preview","value","DefaultPreview","media","WarningOutlineIcon","subtitle","resolveParams","document","resolvedParams","useDraft","displayed","published","Object","keys","reduce","acc","key","defaultResolver","values","includes","module","exports","initialValueTemplatesResolver","paramValues","resolver","resolveInitialValueTemplates"],"mappings":"AAGA,aAAA,IAAAA,EAAAC,QAAA,qBAAAC,EAAAD,QAAA,cAAAE,EAAAF,QAAA,SAAAG,EAAAH,QAAA,sBAAAI,EAAAJ,QAAA,UAAAK,EAAAL,QAAA,eAAAM,EAAAN,QAAA,iBAAAO,EAAAP,QAAA,kBAAAQ,EAAAR,QAAA,sBAAAS,EAAAT,QAAA,gBAAAU,EAAAV,QAAA,OAAA,SAAAW,EAAAC,GAAA,OAAAA,GAAA,iBAAAA,GAAA,YAAAA,EAAAA,EAAA,CAAAC,QAAAD,EAAA,CAAA,IAAAE,EAAAH,EAAAH,GAAAO,EAAAJ,EAAAD,GAAA,SAAwBM,EAAMC,GAAoE,IAApEC,MAACA,EAAOC,OAAAA,GAA4DF,EAE9F,OAAAG,EAAAA,KAAAC,EAAAA,SAAA,CACEC,SAAA,CAACF,EAAAA,KAAAG,EAAAA,MAAA,CAAMC,MAAO,EACZF,SAAA,CAACG,EAAAA,IAAAC,EAAAA,IAAA,CACCJ,SAACG,EAAAA,IAAAE,QAAA,CAAML,SAAA,YAERG,EAAAA,IAAAC,EAAAA,IAAA,CACCJ,SAACG,EAAAA,IAAAG,OAAA,CAAMN,SAAAJ,SAGVC,GACEC,EAAAA,KAAAG,QAAA,CAAMC,MAAO,EACZF,SAAA,CAACG,EAAAA,IAAAC,EAAAA,IAAA,CACCJ,SAACG,EAAAA,IAAAE,QAAA,CAAML,SAAA,aAERG,EAAAA,IAAAC,EAAAA,IAAA,CACCJ,SAACG,EAAAA,IAAAG,OAAA,CAAMN,SAAAO,KAAKC,UAAUX,YAMlC,CCjBA,SAAwBY,EAASC,GAC/B,MAAMV,SAACA,EAAAW,KAAUA,EAAO,WAAaD,EAErC,OACGP,EAAAA,IAAAS,EAAAA,KAAA,CAAKC,QAAS,EAAGC,OAAQ,EAAGC,OAAQ,EAAGJ,OACtCX,SAACG,EAAAA,IAAAa,OAAA,CAAKC,KAAM,EAAIjB,cAGtB,CCKA,MAAMkB,EAAiB,CAAA,EACjBC,EAAkB,CAACC,WAAA,eCZzB,SAAwBC,EAAYX,GAClC,MAAMY,sBAACA,EAAwB,IAAMZ,GAC/Ba,mBAACA,GAAsBC,EAAAA,gBAE7B,OAAKF,EAAsBG,OAGxBtB,EAAAA,IAAAS,EAAAA,KAAA,CAAKc,cAAc,EAAMb,QAAS,EACjCb,SAACG,EAAAA,IAAAwB,OAAA,CAAKC,QAAQ,WAAWC,IAAK,EAC3B7B,SAAAsB,EAAsBQ,KAAKC,GACrBA,EAASA,SAIX5B,EAAAA,IAAAoB,EAAA,CACCS,WAAY7C,EAAAA,OACZ8C,aAAcF,EAASG,WACvBH,SAAU,CAACI,GAAIJ,EAASA,SAAUlC,OAAQkC,EAASK,YACnDC,cAAe,GAGfrC,SAACG,EAAAA,IAAAmC,SAAA,CAAOC,WAAOC,EAAYA,YAAA,IAAIC,KAAMV,EAASW,MAAOC,KAAK,QAAQC,GAAG,UAAOC,GAAAA,OAFpEd,EAASG,WAAcW,KAAAA,OAAAd,EAASA,WARnC,WAPyB,IAwB5C,CCnBA,SAAwBe,EAAUpC,GAChC,MAAMd,MAACA,EAAAC,OAAOA,EAAQkD,MAAAA,EAAAzB,sBAAOA,GAAyBZ,GAChDsC,iBAACA,EAAAC,WAAkBA,EAAYC,oBAAAA,GAAuB1B,EAAcA,gBACpE2B,EAASC,EAAAA,aAETC,QAACA,EAASC,MAAAA,EAAAC,KAAOA,GFAzB,SACE3D,GAGa,IAFbC,EAAiB2D,UAAA/B,OAAA,QAAAgC,IAAAD,UAAA,GAAAA,UAAA,GAAAtC,EACjBwC,yDAA8BvC,EAE9B,MAAOkC,EAASM,GAAcC,YAAS,IAChCN,EAAOO,GAAYD,YAAS,IAC5BL,EAAMO,GAAWF,WAAkC,MACpDG,EAAeC,SAA0B,MACzCC,EAAgBC,EAAAA,mBA6Bf,OA3BPC,EAAAA,WAAU,KACJvE,IACFmE,EAAaK,QAAUH,EACpBI,YAAYzE,EAAOC,EAAQ6D,GAC3BY,KACCC,EAAAA,qBAAqBrF,EAAAA,SACrBsF,EAAAA,YAAYC,IACVC,QAAQpB,MAAMmB,GACdZ,EAASY,GACTd,GAAW,GACXG,EAAQ,MAEDW,MAGVE,WAAWC,IACVd,GAASM,GAAalF,UAAQkF,EAASQ,GAAaR,EAAUQ,IAC9DjB,GAAW,GACXE,GAAS,EAAK,KAIb,IACEE,EAAaK,QAAUL,EAAaK,QAAQS,mBAAgB,IAEpE,CAACjF,EAAOC,EAAQ6D,EAASO,IAErB,CAACZ,UAASC,QAAOC,OAC1B,CEvCiCuB,CAAkBlF,EAAOC,GAElDkF,EAAcC,EAAAA,aAClB,CAAC7C,EAAY8C,KA5BjB,IAAAC,EA6BM,MAAMC,GAAc,OAAAD,EAAiBlC,EAAAC,EAAa,SAAK,EAAAiC,EAAA,GAAGrF,SAAU,CAAA,GAC9DwC,cAACA,GAAiB8C,EAEJjC,EAAA,CAClBf,KACA8C,OAEA5C,cAAeA,EAAgB+C,EAAAC,WAAehD,GAAiB,CAAG,IAClEN,SAAU,CAACI,OACZ,GAEH,CAACa,EAAkBC,EAAYC,IAGjC,OAAIG,EAEClD,EAAAA,IAAAC,EAAAA,IAAA,CAAIS,QAAS,EACZb,SAACG,EAAAA,IAAAwB,OAAA,CAAKC,QAAQ,SAAS0D,MAAM,SAC3BtF,SAACG,EAAAA,IAAAoF,UAAA,CAAQC,OAAK,QAMlBlC,EAECxD,EAAAA,KAAAG,EAAAA,MAAA,CAAMY,QAAS,EAAGX,MAAO,EACxBF,SAAA,CAACG,EAAAA,IAAAM,EAAA,CAAST,SAAA,6CACT+C,GAAU5C,EAAAA,IAAAT,EAAA,CAAME,QAAcC,qBAKhC0D,WAAM9B,QAaT3B,EAAAA,KAAAC,EAAAA,SAAA,CACEC,SAAA,CAACG,EAAAA,IAAAkB,EAAA,CAAYC,0BACZnB,EAAAA,IAAAF,EAAAA,MAAA,CAAMY,QAAS,EAAGX,MAAO,EACvBF,SAAAuD,EAAKzB,KAAK2D,IACT,MAAMvD,EAAaiB,EAAOuC,IAAID,EAAIE,OAElC,OAAOzD,EACJ/B,EAAAA,IAAAmC,SAAA,CAECsD,QAASA,IAAMb,EAAYU,EAAII,IAAKJ,EAAIE,OACxC9E,QAAS,EACT8B,KAAK,QAEL3C,SAACG,EAAAA,IAAA2F,UAAA,CAAQC,MAAON,EAAKvD,gBALhBuD,EAAII,KAQV1F,EAAAA,IAAAS,EAAAA,KAAA,CAAKE,OAAQ,EAAGH,KAAK,UAAU,UAAQ,QAAQE,QAAS,EACvDb,SAACG,EAAAA,IAAA6F,iBAAA,CACCC,YAAQC,EAAmBA,mBAAA,IAC3BxD,MAAM,4BACNyD,SAAAtD,qBAAAA,OAA+B4C,EAAIE,MAAA,2CAJ0BF,EAAII,IAMrE,SAjCN/F,EAAAA,KAAAC,EAAAA,SAAA,CACEC,SAAA,CAACG,EAAAA,IAAAkB,EAAA,CAAYC,0BACZxB,EAAAA,KAAAG,EAAAA,MAAA,CAAMY,QAAS,EAAGX,MAAO,EACxBF,SAAA,CAACG,EAAAA,IAAAM,EAAA,CAAST,SAAA,uBACT+C,GAAU5C,EAAAA,IAAAT,EAAA,CAAME,QAAcC,gBAmCzC,CCxEA,SAAwBuG,EAAc1C,GAC9B,MAAA7D,OAACA,EAAQwG,SAAAA,GAAY3C,EAErB4C,EAAkC,mBAAVzG,EAAuBA,EAAO,CAACwG,aAvB/D,SAAyB3C,GAGvB,MAAM7D,OAACA,EAAAwG,SAAQA,EAAUE,SAAAA,GAAY7C,EAGrC,IAAK7D,EAAQ,MAAO,GAGpB,MAAM4F,EAAMc,EAAWF,EAASG,UAAYH,EAASI,UAE9C,OAAAC,OAAOC,KAAK9G,GAAQ+G,QACzB,CAACC,EAAKC,KAAS,IACVD,EACHC,CAACA,GAAM1H,EAAMG,QAAAkG,EAAK5F,EAAOiH,OAE3B,CAAC,EAEL,CAK4EC,CAAgBrD,GAI1F,IAAIgD,OAAOM,OAAOV,GAAgBW,cAAS,GAIpC,OAAAX,CACT,CCgBAY,OAAAC,QAjDA,SAAsCzG,GAC9B,MAAA2F,SAACA,EAAU3C,QAAAA,GAAWhD,GACtBd,MACJA,EAAAC,OACAA,EAAA0G,SACAA,GAAW,EAAAxD,MACXA,GAAQ,EACRzB,sBAAuB8F,GACrB1D,EAEA,GAAA6C,GAA8B,mBAAX1G,EACrB,OACGC,EAAAA,KAAAG,EAAAA,MAAA,CAAMY,QAAS,EAAGX,MAAO,EACxBF,SAAA,CAACF,EAAAA,KAAAW,EAAA,CACCT,SAAA,CAACG,EAAAA,IAAA,OAAA,CAAKH,SAAA,aAAe,kBAAgBG,EAAAA,IAAA,OAAA,CAAKH,SAAA,SAAW,iCACpDG,EAAAA,IAAA,OAAA,CAAKH,SAAA,cAEP+C,GAAU5C,EAAAA,IAAAT,EAAA,CAAME,aAKvB,MAAMyH,EAAcjB,EAAc,CAACC,WAAUxG,SAAQ0G,aAE/CjF,ECvBR,SACEoC,GAEA,MAAM4D,SAACA,EAAAjB,SAAUA,GAAY3C,GAAW,CAAA,EAExC,OAAK4D,EAEEA,EAAS,CAACjB,aAFK,EAGxB,CDegCkB,CAA6B,CACzDD,SAAUF,EACVf,aAGF,OAAKgB,EAaFlH,EAAAA,IAAA2C,EAAA,CACClD,QACAC,OAAQwH,EACRtE,QACAzB,0BAfCxB,EAAAA,KAAAG,EAAAA,MAAA,CAAMY,QAAS,EAAGX,MAAO,EACxBF,SAAA,CAACG,EAAAA,IAAAM,EAAA,CAAST,SAAA,qHAIT+C,GAAU5C,EAAAA,IAAAT,EAAA,CAAME,YAazB"}
|
package/lib/src/index.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import {default as React_2} from 'react'
|
|
3
2
|
import {SanityDocument} from '@sanity/client'
|
|
4
3
|
|
|
5
|
-
declare function DocumentsPane(props: DocumentsPaneProps): JSX.Element
|
|
4
|
+
declare function DocumentsPane(props: DocumentsPaneProps): React_2.JSX.Element
|
|
6
5
|
export default DocumentsPane
|
|
7
6
|
|
|
8
7
|
declare interface DocumentsPaneInitialValueTemplate {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sanity-plugin-documents-pane",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"description": "Displays the results of a GROQ query in a View Pane",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -65,9 +65,9 @@
|
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"@commitlint/cli": "^17.2.0",
|
|
67
67
|
"@commitlint/config-conventional": "^17.2.0",
|
|
68
|
-
"@sanity/pkg-utils": "^
|
|
68
|
+
"@sanity/pkg-utils": "^2.0.0",
|
|
69
69
|
"@sanity/plugin-kit": "^2.1.5",
|
|
70
|
-
"@sanity/semantic-release-preset": "^
|
|
70
|
+
"@sanity/semantic-release-preset": "^4.1.4",
|
|
71
71
|
"@types/dlv": "^1.1.2",
|
|
72
72
|
"@types/react": "^18",
|
|
73
73
|
"@types/react-dom": "^18",
|
|
@@ -85,9 +85,10 @@
|
|
|
85
85
|
"prettier-plugin-packagejson": "^2.3.0",
|
|
86
86
|
"react": "^18",
|
|
87
87
|
"react-dom": "^18",
|
|
88
|
-
"rimraf": "^
|
|
88
|
+
"rimraf": "^5.0.0",
|
|
89
89
|
"sanity": "^3.0.0",
|
|
90
|
-
"
|
|
90
|
+
"semantic-release": "^21.1.1",
|
|
91
|
+
"typescript": "^5.0.0"
|
|
91
92
|
},
|
|
92
93
|
"peerDependencies": {
|
|
93
94
|
"react": "^18",
|
package/src/Documents.tsx
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React, {useCallback} from 'react'
|
|
2
|
-
import {Box, Button, Stack, Flex, Spinner} from '@sanity/ui'
|
|
2
|
+
import {Box, Button, Stack, Flex, Spinner, Card} from '@sanity/ui'
|
|
3
3
|
import {fromString as pathFromString} from '@sanity/util/paths'
|
|
4
|
-
import {Preview, useSchema} from 'sanity'
|
|
4
|
+
import {Preview, useSchema, DefaultPreview} from 'sanity'
|
|
5
5
|
import {usePaneRouter} from 'sanity/desk'
|
|
6
|
+
import {WarningOutlineIcon} from '@sanity/icons'
|
|
6
7
|
|
|
7
8
|
import Debug from './Debug'
|
|
8
9
|
import Feedback from './Feedback'
|
|
@@ -77,10 +78,8 @@ export default function Documents(props: DocumentsProps) {
|
|
|
77
78
|
<Stack padding={2} space={1}>
|
|
78
79
|
{data.map((doc) => {
|
|
79
80
|
const schemaType = schema.get(doc._type)
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
return (
|
|
81
|
+
|
|
82
|
+
return schemaType ? (
|
|
84
83
|
<Button
|
|
85
84
|
key={doc._id}
|
|
86
85
|
onClick={() => handleClick(doc._id, doc._type)}
|
|
@@ -89,6 +88,14 @@ export default function Documents(props: DocumentsProps) {
|
|
|
89
88
|
>
|
|
90
89
|
<Preview value={doc} schemaType={schemaType} />
|
|
91
90
|
</Button>
|
|
91
|
+
) : (
|
|
92
|
+
<Card radius={2} tone="caution" data-ui="Alert" padding={2} key={doc._id}>
|
|
93
|
+
<DefaultPreview
|
|
94
|
+
media={<WarningOutlineIcon />}
|
|
95
|
+
title="Unknown schema type found"
|
|
96
|
+
subtitle={`Encountered type "${doc._type}" that is not defined in the schema.`}
|
|
97
|
+
/>
|
|
98
|
+
</Card>
|
|
92
99
|
)
|
|
93
100
|
})}
|
|
94
101
|
</Stack>
|