sanity-plugin-documents-pane 2.1.3-beta.0 → 2.2.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 Sanity.io
3
+ Copyright (c) 2024 Sanity.io
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -32,8 +32,9 @@ import DocumentsPane from 'sanity-plugin-documents-pane'
32
32
  S.view
33
33
  .component(DocumentsPane)
34
34
  .options({
35
- query: `*[!(_id in path("drafts.**")) && references($id)]`,
35
+ query: `*[references($id)]`,
36
36
  params: {id: `_id`},
37
+ options: {perspective: 'previewDrafts'}
37
38
  })
38
39
  .title('Incoming References')
39
40
  ```
@@ -47,6 +48,7 @@ The `.options()` configuration works as follows:
47
48
  - `useDraft` (bool, optional, default: `false`) When populating the `params` values, it will use the `published` version of the document by default. Not permitted if using a function for `params` as the function will determine which version of the document to use.
48
49
  - `debug` (bool, optional, default: `false`) In case of an error or the query returning no documents, setting to `true` will display the query and params that were used.
49
50
  - `initialValueTemplates` (function, optional) A function that receives the various displayed, draft, and published versions of the document, and returns a list of initial value templates. These will be used to define buttons at the top of the list so users can create new related documents.
51
+ - `options` (object, optional) An object of options passed to the listening query. Includes support for `apiVersion` and `perspective`.
50
52
 
51
53
  ## Resolving query parameters with a function and providing initial value templates
52
54
 
package/lib/index.esm.js CHANGED
@@ -1 +1 @@
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 d,Card as c,Flex as o,Button as l,Spinner as u}from"@sanity/ui";import{useListeningQuery as s,Feedback as p}from"sanity-plugin-utils";import{useCallback as m}from"react";import{fromString as h}from"@sanity/util/paths";import{useSchema as f,Preview as y,DefaultPreview as g}from"sanity";import{usePaneRouter as b}from"sanity/desk";import{ComposeIcon as T,WarningOutlineIcon as q}from"@sanity/icons";import{uuid as v}from"@sanity/uuid";import V from"dlv";function x(c){let{query:o,params:l}=c;return e(n,{children:[e(r,{space:4,children:[t(i,{children:t(a,{children:"Query"})}),t(i,{children:t(d,{children:o})})]}),l&&e(r,{space:4,children:[t(i,{children:t(a,{children:"Params"})}),t(i,{children:t(d,{children:JSON.stringify(l)})})]})]})}function P(e){const{initialValueTemplates:n=[]}=e,{ReferenceChildLink:r}=b();return n.length?t(c,{borderBottom:!0,padding:2,children:t(o,{justify:"flex-end",gap:1,children:n.map((e=>e.template?t(r,{documentId:v(),documentType:e.schemaType,template:{id:e.template,params:e.parameters},parentRefPath:[],children:t(l,{icon:t(T,{}),text:e.title,mode:"bleed",as:"span"})},"".concat(e.schemaType,"-").concat(e.template)):null))})}):null}function _(a){const{query:d,params:T,debug:v,initialValueTemplates:V}=a,{routerPanesState:_,groupIndex:j,handleEditReference:k}=b(),D=f(),{loading:R,error:w,data:O}=s(d,{params:T,initialValue:[]}),C=m(((e,n)=>{var t;const r=(null==(t=_[j+1])?void 0:t[0].params)||{},{parentRefPath:i}=r;k({id:e,type:n,parentRefPath:i?h(i):[""],template:{id:e}})}),[_,j,k]);return R?t(i,{padding:4,children:t(o,{justify:"center",align:"center",children:t(u,{muted:!0})})}):w?e(r,{padding:4,space:5,children:[t(p,{children:"There was en error performing this query"}),v&&t(x,{query:d,params:T})]}):(null==O?void 0:O.length)?e(n,{children:[t(P,{initialValueTemplates:V}),t(r,{padding:2,space:1,children:O.map((e=>{const n=D.get(e._type);return n?t(l,{onClick:()=>C(e._id,e._type),padding:2,mode:"bleed",children:t(y,{value:e,schemaType:n})},e._id):t(c,{radius:2,tone:"caution","data-ui":"Alert",padding:2,children:t(g,{media:t(q,{}),title:"Unknown schema type found",subtitle:'Encountered type "'.concat(e._type,'" that is not defined in the schema.')})},e._id)}))})]}):e(n,{children:[t(P,{initialValueTemplates:V}),e(r,{padding:4,space:5,children:[t(p,{children:"No Documents found"}),v&&t(x,{query:d,params:T})]})]})}function j(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]:V(i,n[t])})),{})}(e);if(!Object.values(r).includes(void 0))return r}function k(n){const{document:i,options:a}=n,{query:d,params:c,useDraft:o=!1,debug:l=!1,initialValueTemplates:u}=a;if(o&&"function"==typeof c)return e(r,{padding:4,space:5,children:[e(p,{children:[t("code",{children:"useDraft"})," should not be ",t("code",{children:"true"})," when supplying a function for",t("code",{children:"params"})]}),l&&t(x,{query:d})]});const s=j({document:i,params:c,useDraft:o}),m=function(e){const{resolver:n,document:t}=e||{};return n?n({document:t}):[]}({resolver:u,document:i});return s?t(_,{query:d,params:s,debug:l,initialValueTemplates:m}):e(r,{padding:4,space:5,children:[t(p,{children:"Parameters for this query could not be resolved. This may mean the document does not yet exist, or is incomplete."}),l&&t(x,{query:d})]})}export{k as default};//# sourceMappingURL=index.esm.js.map
1
+ import{jsxs as e,Fragment as n,jsx as t}from"react/jsx-runtime";import{Stack as i,Box as r,Label as a,Code as o,Card as d,Flex as c,Button as l,Spinner as s}from"@sanity/ui";import{useListeningQuery as u,Feedback as p}from"sanity-plugin-utils";import{useCallback as m}from"react";import{fromString as h}from"@sanity/util/paths";import{useSchema as f,Preview as y,DefaultPreview as g}from"sanity";import{usePaneRouter as b}from"sanity/structure";import{ComposeIcon as T,WarningOutlineIcon as q}from"@sanity/icons";import{usePaneRouter as v}from"sanity/desk";import{uuid as _}from"@sanity/uuid";import P from"dlv";function V(d){let{query:c,params:l}=d;return e(n,{children:[e(i,{space:4,children:[t(r,{children:t(a,{children:"Query"})}),t(r,{children:t(o,{children:c})})]}),l&&e(i,{space:4,children:[t(r,{children:t(a,{children:"Params"})}),t(r,{children:t(o,{children:JSON.stringify(l)})})]})]})}function x(e){const{initialValueTemplates:n=[]}=e,{ReferenceChildLink:i}=v();return n.length?t(d,{borderBottom:!0,padding:2,children:t(c,{justify:"flex-end",gap:1,children:n.map((e=>e.template?t(i,{documentId:_(),documentType:e.schemaType,template:{id:e.template,params:e.parameters},parentRefPath:[],children:t(l,{icon:t(T,{}),text:e.title,mode:"bleed",as:"span"})},"".concat(e.schemaType,"-").concat(e.template)):null))})}):null}function R(a){const{query:o,params:T,options:v,debug:_,initialValueTemplates:P}=a,{routerPanesState:R,groupIndex:j,handleEditReference:k}=b(),D=f(),{loading:I,error:w,data:O}=u(o,{params:T,initialValue:[],options:v}),C=m(((e,n)=>{var t;const i=(null==(t=R[j+1])?void 0:t[0].params)||{},{parentRefPath:r}=i;k({id:e,type:n,parentRefPath:r?h(r):[""],template:{id:e}})}),[R,j,k]);return I?t(r,{padding:4,children:t(c,{justify:"center",align:"center",children:t(s,{muted:!0})})}):w?e(i,{padding:4,space:5,children:[t(p,{children:"There was en error performing this query"}),_&&t(V,{query:o,params:T})]}):(null==O?void 0:O.length)?e(n,{children:[t(x,{initialValueTemplates:P}),t(i,{padding:2,space:1,children:O.map((e=>{const n=D.get(e._type);return"_originalId"in e&&"string"==typeof e._originalId&&(e._id=e._originalId),n?t(l,{onClick:()=>C(e._id,e._type),padding:2,mode:"bleed",children:t(y,{value:e,schemaType:n})},e._id):t(d,{radius:2,tone:"caution","data-ui":"Alert",padding:2,children:t(g,{media:t(q,{}),title:"Unknown schema type found",subtitle:'Encountered type "'.concat(e._type,'" that is not defined in the schema.')})},e._id)}))})]}):e(n,{children:[t(x,{initialValueTemplates:P}),e(i,{padding:4,space:5,children:[t(p,{children:"No Documents found"}),_&&t(V,{query:o,params:T})]})]})}function j(e){const{params:n,document:t}=e,i="function"==typeof n?n({document:t}):function(e){const{params:n,document:t,useDraft:i}=e;if(!n)return{};const r=i?t.displayed:t.published;return r?Object.keys(n).reduce(((e,t)=>({...e,[t]:P(r,n[t])})),{}):{}}(e);if(!Object.values(i).includes(void 0))return i}function k(n){const{document:r}=n,{query:a,params:o,useDraft:d=!1,debug:c=!1,initialValueTemplates:l,options:s={}}=n.options;if(d&&"function"==typeof o)return e(i,{padding:4,space:5,children:[e(p,{children:[t("code",{children:"useDraft"})," should not be ",t("code",{children:"true"})," when supplying a function for",t("code",{children:"params"})]}),c&&t(V,{query:a})]});const u=j({document:r,params:o,useDraft:d}),m=function(e){const{resolver:n,document:t}=e||{};return n?n({document:t}):[]}({resolver:l,document:r});return u?t(R,{query:a,params:u,options:s,debug:c,initialValueTemplates:m}):e(i,{padding:4,space:5,children:[t(p,{children:"Parameters for this query could not be resolved. This may mean the document does not yet exist, or is incomplete."}),c&&t(V,{query:a})]})}export{k as default};//# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/Debug.tsx","../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 {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, SanityDocument} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {Feedback, useListeningQuery} from 'sanity-plugin-utils'\n\nimport Debug from './Debug'\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<SanityDocument[]>(query, {\n params,\n initialValue: [],\n })\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'\nimport {Feedback} from 'sanity-plugin-utils'\n\nimport Documents from './Documents'\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","Flex","Button","Spinner","useListeningQuery","Feedback","useCallback","fromString","useSchema","Preview","DefaultPreview","usePaneRouter","ComposeIcon","WarningOutlineIcon","uuid","delve","Debug","_ref","query","params","children","space","JSON","stringify","NewDocument","props","initialValueTemplates","ReferenceChildLink","length","borderBottom","padding","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","initialValue","handleClick","type","_a","childParams","pathFromString","align","muted","doc","get","_type","onClick","_id","value","radius","tone","media","subtitle","resolveParams","options","document","resolvedParams","useDraft","displayed","published","Object","keys","reduce","acc","key","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/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 {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, SanityDocument, ListenQueryOptions} from 'sanity'\nimport {usePaneRouter} from 'sanity/structure'\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {Feedback, useListeningQuery} from 'sanity-plugin-utils'\n\nimport Debug from './Debug'\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 options: ListenQueryOptions\n}\n\nexport default function Documents(props: DocumentsProps) {\n const {query, params, options, debug, initialValueTemplates} = props\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const schema = useSchema()\n\n const {loading, error, data} = useListeningQuery<SanityDocument[]>(query, {\n params,\n initialValue: [],\n options,\n })\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 // Fixes display issue with document preview when perspective is 'previewDrafts'\n if ('_originalId' in doc && typeof doc._originalId === 'string') {\n doc._id = doc._originalId\n }\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) {\n return {}\n }\n\n // legacy useDraft behaviour\n const doc = useDraft ? document.displayed : document.published\n\n if (!doc) {\n return {}\n }\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'\nimport {Feedback} from 'sanity-plugin-utils'\n\nimport Documents from './Documents'\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} = props\n const {\n query,\n params,\n useDraft = false,\n debug = false,\n initialValueTemplates: initialValueTemplatesResolver,\n options = {},\n } = props.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 options={options}\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","Flex","Button","Spinner","useListeningQuery","Feedback","useCallback","fromString","useSchema","Preview","DefaultPreview","usePaneRouter$1","ComposeIcon","WarningOutlineIcon","usePaneRouter","uuid","delve","Debug","_ref","query","params","children","space","stringify","NewDocument","props","initialValueTemplates","ReferenceChildLink","length","borderBottom","padding","justify","gap","map","template","documentId","documentType","schemaType","id","parameters","parentRefPath","icon","text","title","mode","as","concat","Documents","options","debug","routerPanesState","groupIndex","handleEditReference","schema","loading","error","data","initialValue","handleClick","type","_a","childParams","pathFromString","align","muted","doc","get","_type","_originalId","_id","onClick","value","radius","tone","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 +1 @@
1
- "use strict";var e=require("react/jsx-runtime"),n=require("@sanity/ui"),t=require("sanity-plugin-utils"),r=require("react"),a=require("@sanity/util/paths"),i=require("sanity"),s=require("sanity/desk"),d=require("@sanity/icons"),c=require("@sanity/uuid");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=u(require("dlv"));function o(t){let{query:r,params:a}=t;return e.jsxs(e.Fragment,{children:[e.jsxs(n.Stack,{space:4,children:[e.jsx(n.Box,{children:e.jsx(n.Label,{children:"Query"})}),e.jsx(n.Box,{children:e.jsx(n.Code,{children:r})})]}),a&&e.jsxs(n.Stack,{space:4,children:[e.jsx(n.Box,{children:e.jsx(n.Label,{children:"Params"})}),e.jsx(n.Box,{children:e.jsx(n.Code,{children:JSON.stringify(a)})})]})]})}function p(t){const{initialValueTemplates:r=[]}=t,{ReferenceChildLink:a}=s.usePaneRouter();return r.length?e.jsx(n.Card,{borderBottom:!0,padding:2,children:e.jsx(n.Flex,{justify:"flex-end",gap:1,children:r.map((t=>t.template?e.jsx(a,{documentId:c.uuid(),documentType:t.schemaType,template:{id:t.template,params:t.parameters},parentRefPath:[],children:e.jsx(n.Button,{icon:e.jsx(d.ComposeIcon,{}),text:t.title,mode:"bleed",as:"span"})},"".concat(t.schemaType,"-").concat(t.template)):null))})}):null}function m(c){const{query:u,params:l,debug:m,initialValueTemplates:x}=c,{routerPanesState:h,groupIndex:j,handleEditReference:f}=s.usePaneRouter(),y=i.useSchema(),{loading:g,error:b,data:q}=t.useListeningQuery(u,{params:l,initialValue:[]}),k=r.useCallback(((e,n)=>{var t;const r=(null==(t=h[j+1])?void 0:t[0].params)||{},{parentRefPath:i}=r;f({id:e,type:n,parentRefPath:i?a.fromString(i):[""],template:{id:e}})}),[h,j,f]);return g?e.jsx(n.Box,{padding:4,children:e.jsx(n.Flex,{justify:"center",align:"center",children:e.jsx(n.Spinner,{muted:!0})})}):b?e.jsxs(n.Stack,{padding:4,space:5,children:[e.jsx(t.Feedback,{children:"There was en error performing this query"}),m&&e.jsx(o,{query:u,params:l})]}):(null==q?void 0:q.length)?e.jsxs(e.Fragment,{children:[e.jsx(p,{initialValueTemplates:x}),e.jsx(n.Stack,{padding:2,space:1,children:q.map((t=>{const r=y.get(t._type);return r?e.jsx(n.Button,{onClick:()=>k(t._id,t._type),padding:2,mode:"bleed",children:e.jsx(i.Preview,{value:t,schemaType:r})},t._id):e.jsx(n.Card,{radius:2,tone:"caution","data-ui":"Alert",padding:2,children:e.jsx(i.DefaultPreview,{media:e.jsx(d.WarningOutlineIcon,{}),title:"Unknown schema type found",subtitle:'Encountered type "'.concat(t._type,'" that is not defined in the schema.')})},t._id)}))})]}):e.jsxs(e.Fragment,{children:[e.jsx(p,{initialValueTemplates:x}),e.jsxs(n.Stack,{padding:4,space:5,children:[e.jsx(t.Feedback,{children:"No Documents found"}),m&&e.jsx(o,{query:u,params:l})]})]})}function x(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 a=r?t.displayed:t.published;return Object.keys(n).reduce(((e,t)=>({...e,[t]:l.default(a,n[t])})),{})}(e);if(!Object.values(r).includes(void 0))return r}module.exports=function(r){const{document:a,options:i}=r,{query:s,params:d,useDraft:c=!1,debug:u=!1,initialValueTemplates:l}=i;if(c&&"function"==typeof d)return e.jsxs(n.Stack,{padding:4,space:5,children:[e.jsxs(t.Feedback,{children:[e.jsx("code",{children:"useDraft"})," should not be ",e.jsx("code",{children:"true"})," when supplying a function for",e.jsx("code",{children:"params"})]}),u&&e.jsx(o,{query:s})]});const p=x({document:a,params:d,useDraft:c}),h=function(e){const{resolver:n,document:t}=e||{};return n?n({document:t}):[]}({resolver:l,document:a});return p?e.jsx(m,{query:s,params:p,debug:u,initialValueTemplates:h}):e.jsxs(n.Stack,{padding:4,space:5,children:[e.jsx(t.Feedback,{children:"Parameters for this query could not be resolved. This may mean the document does not yet exist, or is incomplete."}),u&&e.jsx(o,{query:s})]})};//# sourceMappingURL=index.js.map
1
+ "use strict";var e=require("react/jsx-runtime"),n=require("@sanity/ui"),t=require("sanity-plugin-utils"),r=require("react"),i=require("@sanity/util/paths"),a=require("sanity"),s=require("sanity/structure"),d=require("@sanity/icons"),u=require("sanity/desk"),c=require("@sanity/uuid");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=o(require("dlv"));function p(t){let{query:r,params:i}=t;return e.jsxs(e.Fragment,{children:[e.jsxs(n.Stack,{space:4,children:[e.jsx(n.Box,{children:e.jsx(n.Label,{children:"Query"})}),e.jsx(n.Box,{children:e.jsx(n.Code,{children:r})})]}),i&&e.jsxs(n.Stack,{space:4,children:[e.jsx(n.Box,{children:e.jsx(n.Label,{children:"Params"})}),e.jsx(n.Box,{children:e.jsx(n.Code,{children:JSON.stringify(i)})})]})]})}function m(t){const{initialValueTemplates:r=[]}=t,{ReferenceChildLink:i}=u.usePaneRouter();return r.length?e.jsx(n.Card,{borderBottom:!0,padding:2,children:e.jsx(n.Flex,{justify:"flex-end",gap:1,children:r.map((t=>t.template?e.jsx(i,{documentId:c.uuid(),documentType:t.schemaType,template:{id:t.template,params:t.parameters},parentRefPath:[],children:e.jsx(n.Button,{icon:e.jsx(d.ComposeIcon,{}),text:t.title,mode:"bleed",as:"span"})},"".concat(t.schemaType,"-").concat(t.template)):null))})}):null}function x(u){const{query:c,params:o,options:l,debug:x,initialValueTemplates:h}=u,{routerPanesState:j,groupIndex:f,handleEditReference:y}=s.usePaneRouter(),g=a.useSchema(),{loading:q,error:b,data:k}=t.useListeningQuery(c,{params:o,initialValue:[],options:l}),v=r.useCallback(((e,n)=>{var t;const r=(null==(t=j[f+1])?void 0:t[0].params)||{},{parentRefPath:a}=r;y({id:e,type:n,parentRefPath:a?i.fromString(a):[""],template:{id:e}})}),[j,f,y]);return q?e.jsx(n.Box,{padding:4,children:e.jsx(n.Flex,{justify:"center",align:"center",children:e.jsx(n.Spinner,{muted:!0})})}):b?e.jsxs(n.Stack,{padding:4,space:5,children:[e.jsx(t.Feedback,{children:"There was en error performing this query"}),x&&e.jsx(p,{query:c,params:o})]}):(null==k?void 0:k.length)?e.jsxs(e.Fragment,{children:[e.jsx(m,{initialValueTemplates:h}),e.jsx(n.Stack,{padding:2,space:1,children:k.map((t=>{const r=g.get(t._type);return"_originalId"in t&&"string"==typeof t._originalId&&(t._id=t._originalId),r?e.jsx(n.Button,{onClick:()=>v(t._id,t._type),padding:2,mode:"bleed",children:e.jsx(a.Preview,{value:t,schemaType:r})},t._id):e.jsx(n.Card,{radius:2,tone:"caution","data-ui":"Alert",padding:2,children:e.jsx(a.DefaultPreview,{media:e.jsx(d.WarningOutlineIcon,{}),title:"Unknown schema type found",subtitle:'Encountered type "'.concat(t._type,'" that is not defined in the schema.')})},t._id)}))})]}):e.jsxs(e.Fragment,{children:[e.jsx(m,{initialValueTemplates:h}),e.jsxs(n.Stack,{padding:4,space:5,children:[e.jsx(t.Feedback,{children:"No Documents found"}),x&&e.jsx(p,{query:c,params:o})]})]})}function h(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 i?Object.keys(n).reduce(((e,t)=>({...e,[t]:l.default(i,n[t])})),{}):{}}(e);if(!Object.values(r).includes(void 0))return r}module.exports=function(r){const{document:i}=r,{query:a,params:s,useDraft:d=!1,debug:u=!1,initialValueTemplates:c,options:o={}}=r.options;if(d&&"function"==typeof s)return e.jsxs(n.Stack,{padding:4,space:5,children:[e.jsxs(t.Feedback,{children:[e.jsx("code",{children:"useDraft"})," should not be ",e.jsx("code",{children:"true"})," when supplying a function for",e.jsx("code",{children:"params"})]}),u&&e.jsx(p,{query:a})]});const l=h({document:i,params:s,useDraft:d}),m=function(e){const{resolver:n,document:t}=e||{};return n?n({document:t}):[]}({resolver:c,document:i});return l?e.jsx(x,{query:a,params:l,options:o,debug:u,initialValueTemplates:m}):e.jsxs(n.Stack,{padding:4,space:5,children:[e.jsx(t.Feedback,{children:"Parameters for this query could not be resolved. This may mean the document does not yet exist, or is incomplete."}),u&&e.jsx(p,{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/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 {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, SanityDocument} from 'sanity'\nimport {usePaneRouter} from 'sanity/desk'\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {Feedback, useListeningQuery} from 'sanity-plugin-utils'\n\nimport Debug from './Debug'\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<SanityDocument[]>(query, {\n params,\n initialValue: [],\n })\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'\nimport {Feedback} from 'sanity-plugin-utils'\n\nimport Documents from './Documents'\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","sanityPluginUtils","react","paths","sanity","desk","icons","uuid","_interopDefaultCompat","e","default","delve__default","Debug","_ref","query","params","jsxs","Fragment","children","Stack","space","jsx","Box","Label","Code","JSON","stringify","NewDocument","props","initialValueTemplates","ReferenceChildLink","usePaneRouter","length","Card","borderBottom","padding","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","useListeningQuery","initialValue","handleClick","useCallback","type","_a","childParams","pathFromString","fromString","align","Spinner","muted","Feedback","doc","get","_type","onClick","_id","Preview","value","radius","tone","DefaultPreview","media","WarningOutlineIcon","subtitle","resolveParams","options","document","resolvedParams","useDraft","displayed","published","Object","keys","reduce","acc","key","delve","defaultResolver","values","includes","module","exports","initialValueTemplatesResolver","paramValues","resolver","resolveInitialValueTemplates"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/Debug.tsx","../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 {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, SanityDocument, ListenQueryOptions} from 'sanity'\nimport {usePaneRouter} from 'sanity/structure'\nimport {WarningOutlineIcon} from '@sanity/icons'\nimport {Feedback, useListeningQuery} from 'sanity-plugin-utils'\n\nimport Debug from './Debug'\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 options: ListenQueryOptions\n}\n\nexport default function Documents(props: DocumentsProps) {\n const {query, params, options, debug, initialValueTemplates} = props\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const schema = useSchema()\n\n const {loading, error, data} = useListeningQuery<SanityDocument[]>(query, {\n params,\n initialValue: [],\n options,\n })\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 // Fixes display issue with document preview when perspective is 'previewDrafts'\n if ('_originalId' in doc && typeof doc._originalId === 'string') {\n doc._id = doc._originalId\n }\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) {\n return {}\n }\n\n // legacy useDraft behaviour\n const doc = useDraft ? document.displayed : document.published\n\n if (!doc) {\n return {}\n }\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'\nimport {Feedback} from 'sanity-plugin-utils'\n\nimport Documents from './Documents'\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} = props\n const {\n query,\n params,\n useDraft = false,\n debug = false,\n initialValueTemplates: initialValueTemplatesResolver,\n options = {},\n } = props.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 options={options}\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","sanityPluginUtils","react","paths","sanity","structure","icons","desk","uuid","_interopDefaultCompat","e","default","delve__default","Debug","_ref","query","params","jsxs","Fragment","children","Stack","space","jsx","Box","Label","Code","stringify","NewDocument","props","initialValueTemplates","ReferenceChildLink","usePaneRouter","length","Card","borderBottom","padding","Flex","justify","gap","map","template","documentId","documentType","schemaType","id","parameters","parentRefPath","Button","icon","ComposeIcon","text","title","mode","as","concat","Documents","options","debug","routerPanesState","groupIndex","handleEditReference","schema","useSchema","loading","error","data","useListeningQuery","initialValue","handleClick","useCallback","type","_a","childParams","pathFromString","align","Spinner","muted","Feedback","doc","get","_type","_originalId","_id","onClick","Preview","value","radius","tone","DefaultPreview","media","WarningOutlineIcon","subtitle","resolveParams","document","resolvedParams","useDraft","displayed","published","Object","keys","reduce","acc","key","delve","defaultResolver","values","includes","module","exports","initialValueTemplatesResolver","paramValues","resolver","resolveInitialValueTemplates"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
+ import {ListenQueryOptions} from 'sanity'
1
2
  import {default as React_2} from 'react'
2
- import {SanityDocument} from '@sanity/client'
3
+ import {UserViewComponent} from 'sanity/structure'
3
4
 
4
5
  declare function DocumentsPane(props: DocumentsPaneProps): React_2.JSX.Element
5
6
  export default DocumentsPane
@@ -23,12 +24,10 @@ declare type DocumentsPaneOptions = {
23
24
  debug?: boolean
24
25
  useDraft?: boolean
25
26
  initialValueTemplates?: DocumentsPaneInitialValueTemplateResolver
27
+ options?: ListenQueryOptions
26
28
  }
27
29
 
28
- declare type DocumentsPaneProps = {
29
- document: DocumentVersionsCollection
30
- options: DocumentsPaneOptions
31
- }
30
+ declare type DocumentsPaneProps = React_2.ComponentProps<UserViewComponent<DocumentsPaneOptions>>
32
31
 
33
32
  declare type DocumentsPaneQueryParams = (params: {document: DocumentVersionsCollection}) =>
34
33
  | {
@@ -38,11 +37,6 @@ declare type DocumentsPaneQueryParams = (params: {document: DocumentVersionsColl
38
37
  [key: string]: string
39
38
  }
40
39
 
41
- declare interface DocumentVersionsCollection {
42
- displayed: SanityDocument
43
- published: SanityDocument
44
- draft: SanityDocument
45
- historical: SanityDocument
46
- }
40
+ declare type DocumentVersionsCollection = React_2.ComponentProps<UserViewComponent>['document']
47
41
 
48
42
  export {}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sanity-plugin-documents-pane",
3
- "version": "2.1.3-beta.0",
3
+ "version": "2.2.1",
4
4
  "description": "Displays the results of a GROQ query in a View Pane",
5
5
  "keywords": [
6
6
  "sanity",
@@ -55,11 +55,13 @@
55
55
  "dependencies": {
56
56
  "@sanity/icons": "^2.0.0",
57
57
  "@sanity/incompatible-plugin": "^1.0.4",
58
- "@sanity/ui": "^1.0.0",
58
+ "@sanity/ui": "^1.0 || ^2.0",
59
59
  "@sanity/util": "^3.0.0",
60
60
  "@sanity/uuid": "^3.0.1",
61
61
  "dlv": "^1.1.3",
62
- "sanity-plugin-utils": "^1.6.2"
62
+ "react-fast-compare": "^3.2.0",
63
+ "rxjs": "^7.0.0",
64
+ "sanity-plugin-utils": "^1.6.3"
63
65
  },
64
66
  "devDependencies": {
65
67
  "@commitlint/cli": "^17.2.0",
@@ -90,11 +92,18 @@
90
92
  "typescript": "^5.0.0"
91
93
  },
92
94
  "peerDependencies": {
95
+ "@sanity/ui": "^1.0 || ^2.0",
93
96
  "react": "^18",
94
97
  "react-dom": "^18",
95
- "sanity": "^3.0.0"
98
+ "sanity": "^3.0.0",
99
+ "styled-components": "^5.0 || ^6.0"
96
100
  },
97
101
  "engines": {
98
- "node": ">=14"
102
+ "node": ">=18"
103
+ },
104
+ "sanityPlugin": {
105
+ "verifyPackage": {
106
+ "nodeEngine": false
107
+ }
99
108
  }
100
109
  }
package/src/Documents.tsx CHANGED
@@ -1,8 +1,8 @@
1
1
  import React, {useCallback} from 'react'
2
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, DefaultPreview, SanityDocument} from 'sanity'
5
- import {usePaneRouter} from 'sanity/desk'
4
+ import {Preview, useSchema, DefaultPreview, SanityDocument, ListenQueryOptions} from 'sanity'
5
+ import {usePaneRouter} from 'sanity/structure'
6
6
  import {WarningOutlineIcon} from '@sanity/icons'
7
7
  import {Feedback, useListeningQuery} from 'sanity-plugin-utils'
8
8
 
@@ -15,16 +15,18 @@ type DocumentsProps = {
15
15
  params: {[key: string]: string}
16
16
  debug: boolean
17
17
  initialValueTemplates: DocumentsPaneInitialValueTemplate[]
18
+ options: ListenQueryOptions
18
19
  }
19
20
 
20
21
  export default function Documents(props: DocumentsProps) {
21
- const {query, params, debug, initialValueTemplates} = props
22
+ const {query, params, options, debug, initialValueTemplates} = props
22
23
  const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()
23
24
  const schema = useSchema()
24
25
 
25
26
  const {loading, error, data} = useListeningQuery<SanityDocument[]>(query, {
26
27
  params,
27
28
  initialValue: [],
29
+ options,
28
30
  })
29
31
 
30
32
  const handleClick = useCallback(
@@ -81,6 +83,11 @@ export default function Documents(props: DocumentsProps) {
81
83
  {data.map((doc) => {
82
84
  const schemaType = schema.get(doc._type)
83
85
 
86
+ // Fixes display issue with document preview when perspective is 'previewDrafts'
87
+ if ('_originalId' in doc && typeof doc._originalId === 'string') {
88
+ doc._id = doc._originalId
89
+ }
90
+
84
91
  return schemaType ? (
85
92
  <Button
86
93
  key={doc._id}
@@ -9,14 +9,15 @@ import resolveParams from './resolveParams'
9
9
  import resolveInitialValueTemplates from './resolveInitialValueTemplates'
10
10
 
11
11
  export default function DocumentsPane(props: DocumentsPaneProps) {
12
- const {document, options} = props
12
+ const {document} = props
13
13
  const {
14
14
  query,
15
15
  params,
16
16
  useDraft = false,
17
17
  debug = false,
18
18
  initialValueTemplates: initialValueTemplatesResolver,
19
- } = options
19
+ options = {},
20
+ } = props.options
20
21
 
21
22
  if (useDraft && typeof params === 'function') {
22
23
  return (
@@ -53,6 +54,7 @@ export default function DocumentsPane(props: DocumentsPaneProps) {
53
54
  <Documents
54
55
  query={query}
55
56
  params={paramValues}
57
+ options={options}
56
58
  debug={debug}
57
59
  initialValueTemplates={initialValueTemplates}
58
60
  />
@@ -15,11 +15,17 @@ function defaultResolver(options: ResolveParamsOptions): {
15
15
  const {params, document, useDraft} = options
16
16
 
17
17
  // params is optional
18
- if (!params) return {}
18
+ if (!params) {
19
+ return {}
20
+ }
19
21
 
20
22
  // legacy useDraft behaviour
21
23
  const doc = useDraft ? document.displayed : document.published
22
24
 
25
+ if (!doc) {
26
+ return {}
27
+ }
28
+
23
29
  return Object.keys(params).reduce(
24
30
  (acc, key) => ({
25
31
  ...acc,
package/src/types.ts CHANGED
@@ -1,11 +1,8 @@
1
- import {SanityDocument} from '@sanity/client'
1
+ import React from 'react'
2
+ import {ListenQueryOptions} from 'sanity'
3
+ import {UserViewComponent} from 'sanity/structure'
2
4
 
3
- export interface DocumentVersionsCollection {
4
- displayed: SanityDocument
5
- published: SanityDocument
6
- draft: SanityDocument
7
- historical: SanityDocument
8
- }
5
+ export type DocumentVersionsCollection = React.ComponentProps<UserViewComponent>['document']
9
6
 
10
7
  // eslint-disable-next-line prettier/prettier
11
8
  export type DocumentsPaneQueryParams = (params: {document: DocumentVersionsCollection}) => ({[key: string]: string}) | {[key: string]: string}
@@ -26,9 +23,7 @@ export type DocumentsPaneOptions = {
26
23
  debug?: boolean
27
24
  useDraft?: boolean
28
25
  initialValueTemplates?: DocumentsPaneInitialValueTemplateResolver
26
+ options?: ListenQueryOptions
29
27
  }
30
28
 
31
- export type DocumentsPaneProps = {
32
- document: DocumentVersionsCollection
33
- options: DocumentsPaneOptions
34
- }
29
+ export type DocumentsPaneProps = React.ComponentProps<UserViewComponent<DocumentsPaneOptions>>