sanity-plugin-dashboard-widget-document-list 3.0.0-v3-studio.3 → 3.0.0-v3-studio.4

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/lib/cjs/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  var $dyHF6$reactjsxruntime = require("react/jsx-runtime");
2
2
  var $dyHF6$react = require("react");
3
- var $dyHF6$sanity_unstable = require("sanity/_unstable");
4
3
  var $dyHF6$sanity = require("sanity");
5
4
  var $dyHF6$lodash = require("lodash");
6
5
  var $dyHF6$sanityui = require("@sanity/ui");
@@ -25,7 +24,6 @@ $parcel$export(module.exports, "documentListWidget", () => $329a1cedcedb1349$exp
25
24
 
26
25
 
27
26
 
28
-
29
27
  const $6c42894abb5630df$var$draftId = (nonDraftDoc)=>`drafts.${nonDraftDoc._id}`;
30
28
  function $6c42894abb5630df$var$prepareDocumentList(incoming, client) {
31
29
  if (!incoming) return Promise.resolve([]);
@@ -66,6 +64,7 @@ function $6c42894abb5630df$export$161e8c29756c0df4(query, params, client) {
66
64
 
67
65
 
68
66
 
67
+
69
68
  const $e42088711c73f0c3$var$defaultProps = {
70
69
  title: "Last created",
71
70
  order: "_createdAt desc",
@@ -133,7 +132,7 @@ function $e42088711c73f0c3$export$65a803c9e13a7e5b(props) {
133
132
  ]);
134
133
  return /*#__PURE__*/ (0, $dyHF6$reactjsxruntime.jsx)((0, $dyHF6$sanitydashboard.DashboardWidgetContainer), {
135
134
  header: title,
136
- footer: types && types.length === 1 && showCreateButton && /*#__PURE__*/ (0, $dyHF6$reactjsxruntime.jsx)((0, $dyHF6$sanity_unstable.IntentButton), {
135
+ footer: types && types.length === 1 && showCreateButton && /*#__PURE__*/ (0, $dyHF6$reactjsxruntime.jsx)((0, $dyHF6$sanity.IntentButton), {
137
136
  mode: "bleed",
138
137
  style: {
139
138
  width: "100%"
@@ -180,7 +179,7 @@ function $e42088711c73f0c3$var$MenuEntry({ doc: doc }) {
180
179
  const type = schema.get(doc._type);
181
180
  return /*#__PURE__*/ (0, $dyHF6$reactjsxruntime.jsx)((0, $dyHF6$sanityui.Card), {
182
181
  flex: 1,
183
- children: /*#__PURE__*/ (0, $dyHF6$reactjsxruntime.jsx)((0, $dyHF6$sanity_unstable.IntentButton), {
182
+ children: /*#__PURE__*/ (0, $dyHF6$reactjsxruntime.jsx)((0, $dyHF6$sanity.IntentButton), {
184
183
  intent: "edit",
185
184
  mode: "bleed",
186
185
  padding: 1,
@@ -192,7 +191,7 @@ function $e42088711c73f0c3$var$MenuEntry({ doc: doc }) {
192
191
  style: {
193
192
  width: "100%"
194
193
  },
195
- children: /*#__PURE__*/ (0, $dyHF6$reactjsxruntime.jsx)((0, $dyHF6$sanity_unstable.SanityPreview), {
194
+ children: /*#__PURE__*/ (0, $dyHF6$reactjsxruntime.jsx)((0, $dyHF6$sanity.SanityPreview), {
196
195
  layout: "default",
197
196
  schemaType: type,
198
197
  value: doc
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;;AAAA;ACAA;;;;;ACAA;;;AAMA,MAAM,6BAAO,GAAG,CAAC,WAA2B,GAAK,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;AAE5E,SAAS,yCAAmB,CAC1B,QAA2C,EAC3C,MAAoB,EACO;IAC3B,IAAI,CAAC,QAAQ,EACX,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAE5B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG;QAAC,QAAQ;KAAC;IAEjE,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,GAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,6BAAO,CAAC;IAElF,OAAO,MAAM,CACV,KAAK,CAAC,gBAAgB,EAAE;aAAC,GAAG;KAAC,CAAC,CAC9B,IAAI,CAAC,CAAC,MAAM,GAAK;QAChB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAK;YACtC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,GAAK,KAAK,CAAC,GAAG,KAAK,6BAAO,CAAC,GAAG,CAAC,CAAC;YACrE,OAAO,UAAU,IAAI,GAAG,CAAA;SACzB,CAAC;QACF,OAAO,CAAA,GAAA,6CAAM,CAAA,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;KAC/B,CAAC,CACD,KAAK,CAAC,CAAC,KAAK,GAAK;QAChB,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KAC1E,CAAC,CAAA;CACL;AAEM,SAAS,yCAAe,CAC7B,KAAa,EACb,MAA2B,EAC3B,MAAoB,EACU;IAC9B,OAAO,MAAM,CACV,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE;QACrB,MAAM,EAAE;YAAC,SAAS;YAAE,UAAU;SAAC;QAC/B,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,OAAO;KACpB,CAAC,CACD,IAAI,CACH,CAAA,GAAA,8BAAS,CAAA,CAAC,CAAC,KAAK,GAAK;QACnB,OAAO,CAAA,GAAA,cAAY,CAAA,CAAC,CAAC,CAAC,CAAC,IAAI,CACzB,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,CAAA,GAAA,wBAAG,CAAA,EAAE,GAAG,CAAA,GAAA,0BAAK,CAAA,CAAC,IAAI,CAAC,EAC9C,CAAA,GAAA,6BAAQ,CAAA,CAAC,IACP,MAAM,CACH,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CACpB,IAAI,CAAC,CAAC,QAAQ,GAAK;gBAClB,OAAO,yCAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;aAC7C,CAAC,CACD,KAAK,CAAC,CAAC,KAAK,GAAK;gBAChB,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,EACpD,MAAM,KAAK,CAAA;gBAEb,MAAM,IAAI,KAAK,CACb,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAC/E,CAAA;aACF,CAAC,CACL,CACF,CAAA;KACF,CAAC,CACH,CAAA;CACJ;;;;;AD7CD,MAAM,kCAAY,GAAG;IACnB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,EAAE;IACT,WAAW,EAAE,EAAE;IACf,gBAAgB,EAAE,IAAI;IACtB,UAAU,EAAE,IAAI;CACjB;AAEM,SAAS,yCAAY,CAAC,KAAyB,EAAE;IACtD,MAAM,SACJ,KAAK,CAAA,SACL,KAAK,CAAA,cACL,UAAU,CAAA,eACV,WAAW,CAAA,SACX,KAAK,CAAA,SACL,KAAK,CAAA,SACL,KAAK,CAAA,oBACL,gBAAgB,CAAA,oBAChB,gBAAgB,CAAA,IACjB,GAAG;QACF,GAAG,kCAAY;QACf,GAAG,KAAK;KACT;IAED,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAA,GAAA,qBAAQ,CAAA,EAAgC;IAC1E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAA,GAAA,qBAAQ,CAAA,CAAU,IAAI,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAA,GAAA,qBAAQ,CAAA,EAAqB;IAEvD,MAAM,eAAe,GAAG,CAAA,GAAA,uBAAS,CAAA,CAAC;oBAAC,UAAU;KAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAA,GAAA,uBAAS,CAAA,EAAE;IAE1B,MAAM,kBAAC,cAAc,CAAA,UAAE,MAAM,CAAA,EAAC,GAAG,CAAA,GAAA,oBAAO,CAAA,CAAC,IAAM;QAC7C,IAAI,KAAK,EACP,OAAO;YAAC,cAAc,EAAE,KAAK;YAAE,MAAM,EAAE,WAAW;SAAC,CAAA;QAGrD,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAK;YAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvC,OAAO,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAA;SAC9D,CAAC;QAEF,OAAO;YACL,cAAc,EAAE,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACzE,MAAM,EAAE;gBAAC,KAAK,EAAE,KAAK,GAAG,CAAA,GAAA,0BAAY,CAAA,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,aAAa;aAAC;SAC5E,CAAA;KACF,EAAE;QAAC,MAAM;QAAE,KAAK;QAAE,WAAW;QAAE,KAAK;QAAE,KAAK;QAAE,KAAK;KAAC,CAAC;IAErD,CAAA,GAAA,sBAAS,CAAA,CAAC,IAAM;QACd,IAAI,CAAC,cAAc,EACjB,OAAM;QAGR,MAAM,YAAY,GAAG,CAAA,GAAA,yCAAe,CAAA,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,SAAS,CAAC;YACtF,IAAI,EAAE,CAAC,CAAC,GAAK;gBACX,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC/B,UAAU,CAAC,KAAK,CAAC;aAClB;YACD,KAAK,EAAE,CAAC,CAAC,GAAK;gBACZ,QAAQ,CAAC,CAAC,CAAC;gBACX,UAAU,CAAC,KAAK,CAAC;aAClB;SACF,CAAC;QACF,6CAA6C;QAC7C,OAAO,IAAM;YACX,YAAY,CAAC,WAAW,EAAE;SAC3B,CAAA;KACF,EAAE;QAAC,KAAK;QAAE,eAAe;QAAE,cAAc;QAAE,MAAM;KAAC,CAAC;IAEpD,qBACE,gCAAC,CAAA,GAAA,+CAAwB,CAAA;QACvB,MAAM,EAAE,KAAK;QACb,MAAM,EACJ,KAAK,IACL,KAAK,CAAC,MAAM,KAAK,CAAC,IAClB,gBAAgB,kBACd,gCAAC,CAAA,GAAA,mCAAY,CAAA;YACX,IAAI,EAAC,OAAO;YACZ,KAAK,EAAE;gBAAC,KAAK,EAAE,MAAM;aAAC;YACtB,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,IAAI,EAAC,SAAS;YACd,IAAI,EAAC,QAAQ;YACb,MAAM,EAAC,QAAQ;YACf,MAAM,EAAE;gBAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;aAAC;YACxB,IAAI,EAAE,gBAAgB,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;UAClD,AACH;kBAGH,cAAA,iCAAC,CAAA,GAAA,oBAAI,CAAA;;gBACF,KAAK,kBAAI,gCAAC,KAAG;8BAAE,KAAK,CAAC,OAAO;kBAAO;gBACnC,CAAC,KAAK,IAAI,OAAO,kBAChB,gCAAC,CAAA,GAAA,oBAAI,CAAA;oBAAC,OAAO,EAAE,CAAC;8BACd,cAAA,gCAAC,CAAA,GAAA,oBAAI,CAAA;wBAAC,OAAO,EAAC,QAAQ;kCACpB,cAAA,gCAAC,CAAA,GAAA,uBAAO,CAAA;4BAAC,KAAK;0BAAG;sBACZ;kBACF,AACR;gBACA,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,kBAAI,gCAAC,KAAG;8BAAC,mCAAiC;kBAAM;8BACjF,gCAAC,CAAA,GAAA,qBAAK,CAAA;oBAAC,KAAK,EAAE,CAAC;8BACZ,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAK,gCAAC,+BAAS;4BAAe,GAAG,EAAE,GAAG;2BAAjB,GAAG,CAAC,GAAG,CAAc,CAAC;kBACrE;;UACH;MACkB,CAC5B;CACF;AAED,SAAS,+BAAS,CAAC,OAAC,GAAG,CAAA,EAAwB,EAAE;IAC/C,MAAM,MAAM,GAAG,CAAA,GAAA,uBAAS,CAAA,EAAE;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC,qBACE,gCAAC,CAAA,GAAA,oBAAI,CAAA;QAAC,IAAI,EAAE,CAAC;kBACX,cAAA,gCAAC,CAAA,GAAA,mCAAY,CAAA;YACX,MAAM,EAAC,MAAM;YACb,IAAI,EAAC,OAAO;YACZ,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG,CAAC,KAAK;gBACf,EAAE,EAAE,CAAA,GAAA,4BAAc,CAAA,CAAC,GAAG,CAAC,GAAG,CAAC;aAC5B;YACD,KAAK,EAAE;gBAAC,KAAK,EAAE,MAAM;aAAC;sBAEtB,cAAA,gCAAC,CAAA,GAAA,oCAAa,CAAA;gBAAC,MAAM,EAAC,SAAS;gBAAC,UAAU,EAAE,IAAI;gBAAE,KAAK,EAAE,GAAG;eAAO,GAAG,CAAC,GAAG,CAAI;UACjE;MACV,CACR;CACF;IAED,wCAA2B,GAAZ,yCAAY;;;;AD/IpB,SAAS,wCAAkB,CAAC,MAAgC,EAAmB;IACpF,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,SAAS,EAAE,SAAS,SAAS,GAAG;YAC9B,qBAAO,gCAAC,CAAA,GAAA,wCAAY,CAAA;gBAAE,GAAG,MAAM;cAAI,CAAA;SACpC;QACD,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAA;CACF","sources":["src/index.tsx","src/DocumentList.tsx","src/sanityConnector.ts"],"sourcesContent":["import DocumentList, {DocumentListConfig} from './DocumentList'\nimport React from 'react'\nimport {LayoutConfig, DashboardWidget} from '@sanity/dashboard'\n\nexport interface DocumentListWidgetConfig extends DocumentListConfig {\n layout?: LayoutConfig\n}\n\nexport function documentListWidget(config: DocumentListWidgetConfig): DashboardWidget {\n return {\n name: 'document-list-widget',\n component: function component() {\n return <DocumentList {...config} />\n },\n layout: config.layout,\n }\n}\n","import React, {useEffect, useMemo, useState} from 'react'\nimport {IntentButton, SanityPreview} from 'sanity/_unstable'\nimport {getPublishedId, useClient, useSchema} from 'sanity'\nimport {intersection} from 'lodash'\nimport {getSubscription} from './sanityConnector'\nimport {SanityDocument} from 'sanity'\nimport {Card, Flex, Spinner, Stack} from '@sanity/ui'\nimport {DashboardWidgetContainer} from '@sanity/dashboard'\n\nexport interface DocumentListConfig {\n title?: string\n types?: string[]\n query?: string\n queryParams?: Record<string, any>\n order?: string\n limit?: number\n showCreateButton?: boolean\n createButtonText?: string\n apiVersion?: string\n}\n\nconst defaultProps = {\n title: 'Last created',\n order: '_createdAt desc',\n limit: 10,\n queryParams: {},\n showCreateButton: true,\n apiVersion: 'v1',\n}\n\nexport function DocumentList(props: DocumentListConfig) {\n const {\n query,\n limit,\n apiVersion,\n queryParams,\n types,\n order,\n title,\n showCreateButton,\n createButtonText,\n } = {\n ...defaultProps,\n ...props,\n }\n\n const [documents, setDocuments] = useState<SanityDocument[] | undefined>()\n const [loading, setLoading] = useState<boolean>(true)\n const [error, setError] = useState<Error | undefined>()\n\n const versionedClient = useClient({apiVersion})\n const schema = useSchema()\n\n const {assembledQuery, params} = useMemo(() => {\n if (query) {\n return {assembledQuery: query, params: queryParams}\n }\n\n const documentTypes = schema.getTypeNames().filter((typeName) => {\n const schemaType = schema.get(typeName)\n return schemaType.type && schemaType.type.name === 'document'\n })\n\n return {\n assembledQuery: `*[_type in $types] | order(${order}) [0...${limit * 2}]`,\n params: {types: types ? intersection(types, documentTypes) : documentTypes},\n }\n }, [schema, query, queryParams, order, limit, types])\n\n useEffect(() => {\n if (!assembledQuery) {\n return\n }\n\n const subscription = getSubscription(assembledQuery, params, versionedClient).subscribe({\n next: (d) => {\n setDocuments(d.slice(0, limit))\n setLoading(false)\n },\n error: (e) => {\n setError(e)\n setLoading(false)\n },\n })\n // eslint-disable-next-line consistent-return\n return () => {\n subscription.unsubscribe()\n }\n }, [limit, versionedClient, assembledQuery, params])\n\n return (\n <DashboardWidgetContainer\n header={title}\n footer={\n types &&\n types.length === 1 &&\n showCreateButton && (\n <IntentButton\n mode=\"bleed\"\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n tone=\"primary\"\n type=\"button\"\n intent=\"create\"\n params={{type: types[0]}}\n text={createButtonText || `Create new ${types[0]}`}\n />\n )\n }\n >\n <Card>\n {error && <div>{error.message}</div>}\n {!error && loading && (\n <Card padding={4}>\n <Flex justify=\"center\">\n <Spinner muted />\n </Flex>\n </Card>\n )}\n {!error && !documents && !loading && <div>Could not locate any documents :/</div>}\n <Stack space={2}>\n {documents && documents.map((doc) => <MenuEntry key={doc._id} doc={doc} />)}\n </Stack>\n </Card>\n </DashboardWidgetContainer>\n )\n}\n\nfunction MenuEntry({doc}: {doc: SanityDocument}) {\n const schema = useSchema()\n const type = schema.get(doc._type)\n return (\n <Card flex={1}>\n <IntentButton\n intent=\"edit\"\n mode=\"bleed\"\n padding={1}\n radius={0}\n params={{\n type: doc._type,\n id: getPublishedId(doc._id),\n }}\n style={{width: '100%'}}\n >\n <SanityPreview layout=\"default\" schemaType={type} value={doc} key={doc._id} />\n </IntentButton>\n </Card>\n )\n}\n\nexport default DocumentList\n","import {Observable, of as observableOf} from 'rxjs'\nimport {delay, mergeMap, switchMap, tap} from 'rxjs/operators'\nimport uniqBy from 'lodash/uniqBy'\nimport {SanityClient} from '@sanity/client'\nimport {SanityDocument} from 'sanity'\n\nconst draftId = (nonDraftDoc: SanityDocument) => `drafts.${nonDraftDoc._id}`\n\nfunction prepareDocumentList(\n incoming: SanityDocument | SanityDocument[],\n client: SanityClient\n): Promise<SanityDocument[]> {\n if (!incoming) {\n return Promise.resolve([])\n }\n const documents = Array.isArray(incoming) ? incoming : [incoming]\n\n const ids = documents.filter((doc) => !doc._id.startsWith('drafts.')).map(draftId)\n\n return client\n .fetch('*[_id in $ids]', {ids})\n .then((drafts) => {\n const outgoing = documents.map((doc) => {\n const foundDraft = drafts.find((draft) => draft._id === draftId(doc))\n return foundDraft || doc\n })\n return uniqBy(outgoing, '_id')\n })\n .catch((error) => {\n throw new Error(`Problems fetching docs ${ids}. Error: ${error.message}`)\n })\n}\n\nexport function getSubscription(\n query: string,\n params: Record<string, any>,\n client: SanityClient\n): Observable<SanityDocument[]> {\n return client\n .listen(query, params, {\n events: ['welcome', 'mutation'],\n includeResult: false,\n visibility: 'query',\n })\n .pipe(\n switchMap((event) => {\n return observableOf(1).pipe(\n event.type === 'welcome' ? tap() : delay(1000),\n mergeMap(() =>\n client\n .fetch(query, params)\n .then((incoming) => {\n return prepareDocumentList(incoming, client)\n })\n .catch((error) => {\n if (error.message.startsWith('Problems fetching docs')) {\n throw error\n }\n throw new Error(\n `Query failed ${query} and ${JSON.stringify(params)}. Error: ${error.message}`\n )\n })\n )\n )\n })\n )\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}
1
+ {"mappings":";;;;;;;;;;;;;;;;;;AAAA;ACAA;;;;ACAA;;;AAMA,MAAM,6BAAO,GAAG,CAAC,WAA2B,GAAK,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;AAE5E,SAAS,yCAAmB,CAC1B,QAA2C,EAC3C,MAAoB,EACO;IAC3B,IAAI,CAAC,QAAQ,EACX,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAE5B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG;QAAC,QAAQ;KAAC;IAEjE,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,GAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,6BAAO,CAAC;IAElF,OAAO,MAAM,CACV,KAAK,CAAC,gBAAgB,EAAE;aAAC,GAAG;KAAC,CAAC,CAC9B,IAAI,CAAC,CAAC,MAAM,GAAK;QAChB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAK;YACtC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,GAAK,KAAK,CAAC,GAAG,KAAK,6BAAO,CAAC,GAAG,CAAC,CAAC;YACrE,OAAO,UAAU,IAAI,GAAG,CAAA;SACzB,CAAC;QACF,OAAO,CAAA,GAAA,6CAAM,CAAA,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;KAC/B,CAAC,CACD,KAAK,CAAC,CAAC,KAAK,GAAK;QAChB,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KAC1E,CAAC,CAAA;CACL;AAEM,SAAS,yCAAe,CAC7B,KAAa,EACb,MAA2B,EAC3B,MAAoB,EACU;IAC9B,OAAO,MAAM,CACV,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE;QACrB,MAAM,EAAE;YAAC,SAAS;YAAE,UAAU;SAAC;QAC/B,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,OAAO;KACpB,CAAC,CACD,IAAI,CACH,CAAA,GAAA,8BAAS,CAAA,CAAC,CAAC,KAAK,GAAK;QACnB,OAAO,CAAA,GAAA,cAAY,CAAA,CAAC,CAAC,CAAC,CAAC,IAAI,CACzB,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,CAAA,GAAA,wBAAG,CAAA,EAAE,GAAG,CAAA,GAAA,0BAAK,CAAA,CAAC,IAAI,CAAC,EAC9C,CAAA,GAAA,6BAAQ,CAAA,CAAC,IACP,MAAM,CACH,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CACpB,IAAI,CAAC,CAAC,QAAQ,GAAK;gBAClB,OAAO,yCAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;aAC7C,CAAC,CACD,KAAK,CAAC,CAAC,KAAK,GAAK;gBAChB,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,EACpD,MAAM,KAAK,CAAA;gBAEb,MAAM,IAAI,KAAK,CACb,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAC/E,CAAA;aACF,CAAC,CACL,CACF,CAAA;KACF,CAAC,CACH,CAAA;CACJ;;;;;;AD9CD,MAAM,kCAAY,GAAG;IACnB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,EAAE;IACT,WAAW,EAAE,EAAE;IACf,gBAAgB,EAAE,IAAI;IACtB,UAAU,EAAE,IAAI;CACjB;AAEM,SAAS,yCAAY,CAAC,KAAyB,EAAE;IACtD,MAAM,SACJ,KAAK,CAAA,SACL,KAAK,CAAA,cACL,UAAU,CAAA,eACV,WAAW,CAAA,SACX,KAAK,CAAA,SACL,KAAK,CAAA,SACL,KAAK,CAAA,oBACL,gBAAgB,CAAA,oBAChB,gBAAgB,CAAA,IACjB,GAAG;QACF,GAAG,kCAAY;QACf,GAAG,KAAK;KACT;IAED,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAA,GAAA,qBAAQ,CAAA,EAAgC;IAC1E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAA,GAAA,qBAAQ,CAAA,CAAU,IAAI,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAA,GAAA,qBAAQ,CAAA,EAAqB;IAEvD,MAAM,eAAe,GAAG,CAAA,GAAA,uBAAS,CAAA,CAAC;oBAAC,UAAU;KAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAA,GAAA,uBAAS,CAAA,EAAE;IAE1B,MAAM,kBAAC,cAAc,CAAA,UAAE,MAAM,CAAA,EAAC,GAAG,CAAA,GAAA,oBAAO,CAAA,CAAC,IAAM;QAC7C,IAAI,KAAK,EACP,OAAO;YAAC,cAAc,EAAE,KAAK;YAAE,MAAM,EAAE,WAAW;SAAC,CAAA;QAGrD,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAK;YAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvC,OAAO,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAA;SAC9D,CAAC;QAEF,OAAO;YACL,cAAc,EAAE,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACzE,MAAM,EAAE;gBAAC,KAAK,EAAE,KAAK,GAAG,CAAA,GAAA,0BAAY,CAAA,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,aAAa;aAAC;SAC5E,CAAA;KACF,EAAE;QAAC,MAAM;QAAE,KAAK;QAAE,WAAW;QAAE,KAAK;QAAE,KAAK;QAAE,KAAK;KAAC,CAAC;IAErD,CAAA,GAAA,sBAAS,CAAA,CAAC,IAAM;QACd,IAAI,CAAC,cAAc,EACjB,OAAM;QAGR,MAAM,YAAY,GAAG,CAAA,GAAA,yCAAe,CAAA,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,SAAS,CAAC;YACtF,IAAI,EAAE,CAAC,CAAC,GAAK;gBACX,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC/B,UAAU,CAAC,KAAK,CAAC;aAClB;YACD,KAAK,EAAE,CAAC,CAAC,GAAK;gBACZ,QAAQ,CAAC,CAAC,CAAC;gBACX,UAAU,CAAC,KAAK,CAAC;aAClB;SACF,CAAC;QACF,6CAA6C;QAC7C,OAAO,IAAM;YACX,YAAY,CAAC,WAAW,EAAE;SAC3B,CAAA;KACF,EAAE;QAAC,KAAK;QAAE,eAAe;QAAE,cAAc;QAAE,MAAM;KAAC,CAAC;IAEpD,qBACE,gCAAC,CAAA,GAAA,+CAAwB,CAAA;QACvB,MAAM,EAAE,KAAK;QACb,MAAM,EACJ,KAAK,IACL,KAAK,CAAC,MAAM,KAAK,CAAC,IAClB,gBAAgB,kBACd,gCAAC,CAAA,GAAA,0BAAY,CAAA;YACX,IAAI,EAAC,OAAO;YACZ,KAAK,EAAE;gBAAC,KAAK,EAAE,MAAM;aAAC;YACtB,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,IAAI,EAAC,SAAS;YACd,IAAI,EAAC,QAAQ;YACb,MAAM,EAAC,QAAQ;YACf,MAAM,EAAE;gBAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;aAAC;YACxB,IAAI,EAAE,gBAAgB,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;UAClD,AACH;kBAGH,cAAA,iCAAC,CAAA,GAAA,oBAAI,CAAA;;gBACF,KAAK,kBAAI,gCAAC,KAAG;8BAAE,KAAK,CAAC,OAAO;kBAAO;gBACnC,CAAC,KAAK,IAAI,OAAO,kBAChB,gCAAC,CAAA,GAAA,oBAAI,CAAA;oBAAC,OAAO,EAAE,CAAC;8BACd,cAAA,gCAAC,CAAA,GAAA,oBAAI,CAAA;wBAAC,OAAO,EAAC,QAAQ;kCACpB,cAAA,gCAAC,CAAA,GAAA,uBAAO,CAAA;4BAAC,KAAK;0BAAG;sBACZ;kBACF,AACR;gBACA,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,kBAAI,gCAAC,KAAG;8BAAC,mCAAiC;kBAAM;8BACjF,gCAAC,CAAA,GAAA,qBAAK,CAAA;oBAAC,KAAK,EAAE,CAAC;8BACZ,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAK,gCAAC,+BAAS;4BAAe,GAAG,EAAE,GAAG;2BAAjB,GAAG,CAAC,GAAG,CAAc,CAAC;kBACrE;;UACH;MACkB,CAC5B;CACF;AAED,SAAS,+BAAS,CAAC,OAAC,GAAG,CAAA,EAAwB,EAAE;IAC/C,MAAM,MAAM,GAAG,CAAA,GAAA,uBAAS,CAAA,EAAE;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC,qBACE,gCAAC,CAAA,GAAA,oBAAI,CAAA;QAAC,IAAI,EAAE,CAAC;kBACX,cAAA,gCAAC,CAAA,GAAA,0BAAY,CAAA;YACX,MAAM,EAAC,MAAM;YACb,IAAI,EAAC,OAAO;YACZ,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG,CAAC,KAAK;gBACf,EAAE,EAAE,CAAA,GAAA,4BAAc,CAAA,CAAC,GAAG,CAAC,GAAG,CAAC;aAC5B;YACD,KAAK,EAAE;gBAAC,KAAK,EAAE,MAAM;aAAC;sBAEtB,cAAA,gCAAC,CAAA,GAAA,2BAAa,CAAA;gBAAC,MAAM,EAAC,SAAS;gBAAC,UAAU,EAAE,IAAI;gBAAE,KAAK,EAAE,GAAG;eAAO,GAAG,CAAC,GAAG,CAAI;UACjE;MACV,CACR;CACF;IAED,wCAA2B,GAAZ,yCAAY;;;;AD9IpB,SAAS,wCAAkB,CAAC,MAAgC,EAAmB;IACpF,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,SAAS,EAAE,SAAS,SAAS,GAAG;YAC9B,qBAAO,gCAAC,CAAA,GAAA,wCAAY,CAAA;gBAAE,GAAG,MAAM;cAAI,CAAA;SACpC;QACD,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAA;CACF","sources":["src/index.tsx","src/DocumentList.tsx","src/sanityConnector.ts"],"sourcesContent":["import DocumentList, {DocumentListConfig} from './DocumentList'\nimport React from 'react'\nimport {LayoutConfig, DashboardWidget} from '@sanity/dashboard'\n\nexport interface DocumentListWidgetConfig extends DocumentListConfig {\n layout?: LayoutConfig\n}\n\nexport function documentListWidget(config: DocumentListWidgetConfig): DashboardWidget {\n return {\n name: 'document-list-widget',\n component: function component() {\n return <DocumentList {...config} />\n },\n layout: config.layout,\n }\n}\n","import React, {useEffect, useMemo, useState} from 'react'\nimport {getPublishedId, useClient, useSchema} from 'sanity'\nimport {intersection} from 'lodash'\nimport {getSubscription} from './sanityConnector'\nimport {SanityDocument, IntentButton, SanityPreview} from 'sanity'\nimport {Card, Flex, Spinner, Stack} from '@sanity/ui'\nimport {DashboardWidgetContainer} from '@sanity/dashboard'\n\nexport interface DocumentListConfig {\n title?: string\n types?: string[]\n query?: string\n queryParams?: Record<string, any>\n order?: string\n limit?: number\n showCreateButton?: boolean\n createButtonText?: string\n apiVersion?: string\n}\n\nconst defaultProps = {\n title: 'Last created',\n order: '_createdAt desc',\n limit: 10,\n queryParams: {},\n showCreateButton: true,\n apiVersion: 'v1',\n}\n\nexport function DocumentList(props: DocumentListConfig) {\n const {\n query,\n limit,\n apiVersion,\n queryParams,\n types,\n order,\n title,\n showCreateButton,\n createButtonText,\n } = {\n ...defaultProps,\n ...props,\n }\n\n const [documents, setDocuments] = useState<SanityDocument[] | undefined>()\n const [loading, setLoading] = useState<boolean>(true)\n const [error, setError] = useState<Error | undefined>()\n\n const versionedClient = useClient({apiVersion})\n const schema = useSchema()\n\n const {assembledQuery, params} = useMemo(() => {\n if (query) {\n return {assembledQuery: query, params: queryParams}\n }\n\n const documentTypes = schema.getTypeNames().filter((typeName) => {\n const schemaType = schema.get(typeName)\n return schemaType.type && schemaType.type.name === 'document'\n })\n\n return {\n assembledQuery: `*[_type in $types] | order(${order}) [0...${limit * 2}]`,\n params: {types: types ? intersection(types, documentTypes) : documentTypes},\n }\n }, [schema, query, queryParams, order, limit, types])\n\n useEffect(() => {\n if (!assembledQuery) {\n return\n }\n\n const subscription = getSubscription(assembledQuery, params, versionedClient).subscribe({\n next: (d) => {\n setDocuments(d.slice(0, limit))\n setLoading(false)\n },\n error: (e) => {\n setError(e)\n setLoading(false)\n },\n })\n // eslint-disable-next-line consistent-return\n return () => {\n subscription.unsubscribe()\n }\n }, [limit, versionedClient, assembledQuery, params])\n\n return (\n <DashboardWidgetContainer\n header={title}\n footer={\n types &&\n types.length === 1 &&\n showCreateButton && (\n <IntentButton\n mode=\"bleed\"\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n tone=\"primary\"\n type=\"button\"\n intent=\"create\"\n params={{type: types[0]}}\n text={createButtonText || `Create new ${types[0]}`}\n />\n )\n }\n >\n <Card>\n {error && <div>{error.message}</div>}\n {!error && loading && (\n <Card padding={4}>\n <Flex justify=\"center\">\n <Spinner muted />\n </Flex>\n </Card>\n )}\n {!error && !documents && !loading && <div>Could not locate any documents :/</div>}\n <Stack space={2}>\n {documents && documents.map((doc) => <MenuEntry key={doc._id} doc={doc} />)}\n </Stack>\n </Card>\n </DashboardWidgetContainer>\n )\n}\n\nfunction MenuEntry({doc}: {doc: SanityDocument}) {\n const schema = useSchema()\n const type = schema.get(doc._type)\n return (\n <Card flex={1}>\n <IntentButton\n intent=\"edit\"\n mode=\"bleed\"\n padding={1}\n radius={0}\n params={{\n type: doc._type,\n id: getPublishedId(doc._id),\n }}\n style={{width: '100%'}}\n >\n <SanityPreview layout=\"default\" schemaType={type} value={doc} key={doc._id} />\n </IntentButton>\n </Card>\n )\n}\n\nexport default DocumentList\n","import {Observable, of as observableOf} from 'rxjs'\nimport {delay, mergeMap, switchMap, tap} from 'rxjs/operators'\nimport uniqBy from 'lodash/uniqBy'\nimport {SanityClient} from '@sanity/client'\nimport {SanityDocument} from 'sanity'\n\nconst draftId = (nonDraftDoc: SanityDocument) => `drafts.${nonDraftDoc._id}`\n\nfunction prepareDocumentList(\n incoming: SanityDocument | SanityDocument[],\n client: SanityClient\n): Promise<SanityDocument[]> {\n if (!incoming) {\n return Promise.resolve([])\n }\n const documents = Array.isArray(incoming) ? incoming : [incoming]\n\n const ids = documents.filter((doc) => !doc._id.startsWith('drafts.')).map(draftId)\n\n return client\n .fetch('*[_id in $ids]', {ids})\n .then((drafts) => {\n const outgoing = documents.map((doc) => {\n const foundDraft = drafts.find((draft) => draft._id === draftId(doc))\n return foundDraft || doc\n })\n return uniqBy(outgoing, '_id')\n })\n .catch((error) => {\n throw new Error(`Problems fetching docs ${ids}. Error: ${error.message}`)\n })\n}\n\nexport function getSubscription(\n query: string,\n params: Record<string, any>,\n client: SanityClient\n): Observable<SanityDocument[]> {\n return client\n .listen(query, params, {\n events: ['welcome', 'mutation'],\n includeResult: false,\n visibility: 'query',\n })\n .pipe(\n switchMap((event) => {\n return observableOf(1).pipe(\n event.type === 'welcome' ? tap() : delay(1000),\n mergeMap(() =>\n client\n .fetch(query, params)\n .then((incoming) => {\n return prepareDocumentList(incoming, client)\n })\n .catch((error) => {\n if (error.message.startsWith('Problems fetching docs')) {\n throw error\n }\n throw new Error(\n `Query failed ${query} and ${JSON.stringify(params)}. Error: ${error.message}`\n )\n })\n )\n )\n })\n )\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}
package/lib/esm/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import {jsx as $7XdDa$jsx, jsxs as $7XdDa$jsxs} from "react/jsx-runtime";
2
2
  import {useState as $7XdDa$useState, useMemo as $7XdDa$useMemo, useEffect as $7XdDa$useEffect} from "react";
3
- import {IntentButton as $7XdDa$IntentButton, SanityPreview as $7XdDa$SanityPreview} from "sanity/_unstable";
4
- import {useClient as $7XdDa$useClient, useSchema as $7XdDa$useSchema, getPublishedId as $7XdDa$getPublishedId} from "sanity";
3
+ import {useClient as $7XdDa$useClient, useSchema as $7XdDa$useSchema, IntentButton as $7XdDa$IntentButton, getPublishedId as $7XdDa$getPublishedId, SanityPreview as $7XdDa$SanityPreview} from "sanity";
5
4
  import {intersection as $7XdDa$intersection} from "lodash";
6
5
  import {Card as $7XdDa$Card, Flex as $7XdDa$Flex, Spinner as $7XdDa$Spinner, Stack as $7XdDa$Stack} from "@sanity/ui";
7
6
  import {DashboardWidgetContainer as $7XdDa$DashboardWidgetContainer} from "@sanity/dashboard";
@@ -17,7 +16,6 @@ import $7XdDa$lodashuniqBy from "lodash/uniqBy";
17
16
 
18
17
 
19
18
 
20
-
21
19
  const $914647a7a6d7825a$var$draftId = (nonDraftDoc)=>`drafts.${nonDraftDoc._id}`;
22
20
  function $914647a7a6d7825a$var$prepareDocumentList(incoming, client) {
23
21
  if (!incoming) return Promise.resolve([]);
@@ -58,6 +56,7 @@ function $914647a7a6d7825a$export$161e8c29756c0df4(query, params, client) {
58
56
 
59
57
 
60
58
 
59
+
61
60
  const $5f7d6b06745a3b7d$var$defaultProps = {
62
61
  title: "Last created",
63
62
  order: "_createdAt desc",
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/index.tsx","src/DocumentList.tsx","src/sanityConnector.ts"],"sourcesContent":["import DocumentList, {DocumentListConfig} from './DocumentList'\nimport React from 'react'\nimport {LayoutConfig, DashboardWidget} from '@sanity/dashboard'\n\nexport interface DocumentListWidgetConfig extends DocumentListConfig {\n layout?: LayoutConfig\n}\n\nexport function documentListWidget(config: DocumentListWidgetConfig): DashboardWidget {\n return {\n name: 'document-list-widget',\n component: function component() {\n return <DocumentList {...config} />\n },\n layout: config.layout,\n }\n}\n","import React, {useEffect, useMemo, useState} from 'react'\nimport {IntentButton, SanityPreview} from 'sanity/_unstable'\nimport {getPublishedId, useClient, useSchema} from 'sanity'\nimport {intersection} from 'lodash'\nimport {getSubscription} from './sanityConnector'\nimport {SanityDocument} from 'sanity'\nimport {Card, Flex, Spinner, Stack} from '@sanity/ui'\nimport {DashboardWidgetContainer} from '@sanity/dashboard'\n\nexport interface DocumentListConfig {\n title?: string\n types?: string[]\n query?: string\n queryParams?: Record<string, any>\n order?: string\n limit?: number\n showCreateButton?: boolean\n createButtonText?: string\n apiVersion?: string\n}\n\nconst defaultProps = {\n title: 'Last created',\n order: '_createdAt desc',\n limit: 10,\n queryParams: {},\n showCreateButton: true,\n apiVersion: 'v1',\n}\n\nexport function DocumentList(props: DocumentListConfig) {\n const {\n query,\n limit,\n apiVersion,\n queryParams,\n types,\n order,\n title,\n showCreateButton,\n createButtonText,\n } = {\n ...defaultProps,\n ...props,\n }\n\n const [documents, setDocuments] = useState<SanityDocument[] | undefined>()\n const [loading, setLoading] = useState<boolean>(true)\n const [error, setError] = useState<Error | undefined>()\n\n const versionedClient = useClient({apiVersion})\n const schema = useSchema()\n\n const {assembledQuery, params} = useMemo(() => {\n if (query) {\n return {assembledQuery: query, params: queryParams}\n }\n\n const documentTypes = schema.getTypeNames().filter((typeName) => {\n const schemaType = schema.get(typeName)\n return schemaType.type && schemaType.type.name === 'document'\n })\n\n return {\n assembledQuery: `*[_type in $types] | order(${order}) [0...${limit * 2}]`,\n params: {types: types ? intersection(types, documentTypes) : documentTypes},\n }\n }, [schema, query, queryParams, order, limit, types])\n\n useEffect(() => {\n if (!assembledQuery) {\n return\n }\n\n const subscription = getSubscription(assembledQuery, params, versionedClient).subscribe({\n next: (d) => {\n setDocuments(d.slice(0, limit))\n setLoading(false)\n },\n error: (e) => {\n setError(e)\n setLoading(false)\n },\n })\n // eslint-disable-next-line consistent-return\n return () => {\n subscription.unsubscribe()\n }\n }, [limit, versionedClient, assembledQuery, params])\n\n return (\n <DashboardWidgetContainer\n header={title}\n footer={\n types &&\n types.length === 1 &&\n showCreateButton && (\n <IntentButton\n mode=\"bleed\"\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n tone=\"primary\"\n type=\"button\"\n intent=\"create\"\n params={{type: types[0]}}\n text={createButtonText || `Create new ${types[0]}`}\n />\n )\n }\n >\n <Card>\n {error && <div>{error.message}</div>}\n {!error && loading && (\n <Card padding={4}>\n <Flex justify=\"center\">\n <Spinner muted />\n </Flex>\n </Card>\n )}\n {!error && !documents && !loading && <div>Could not locate any documents :/</div>}\n <Stack space={2}>\n {documents && documents.map((doc) => <MenuEntry key={doc._id} doc={doc} />)}\n </Stack>\n </Card>\n </DashboardWidgetContainer>\n )\n}\n\nfunction MenuEntry({doc}: {doc: SanityDocument}) {\n const schema = useSchema()\n const type = schema.get(doc._type)\n return (\n <Card flex={1}>\n <IntentButton\n intent=\"edit\"\n mode=\"bleed\"\n padding={1}\n radius={0}\n params={{\n type: doc._type,\n id: getPublishedId(doc._id),\n }}\n style={{width: '100%'}}\n >\n <SanityPreview layout=\"default\" schemaType={type} value={doc} key={doc._id} />\n </IntentButton>\n </Card>\n )\n}\n\nexport default DocumentList\n","import {Observable, of as observableOf} from 'rxjs'\nimport {delay, mergeMap, switchMap, tap} from 'rxjs/operators'\nimport uniqBy from 'lodash/uniqBy'\nimport {SanityClient} from '@sanity/client'\nimport {SanityDocument} from 'sanity'\n\nconst draftId = (nonDraftDoc: SanityDocument) => `drafts.${nonDraftDoc._id}`\n\nfunction prepareDocumentList(\n incoming: SanityDocument | SanityDocument[],\n client: SanityClient\n): Promise<SanityDocument[]> {\n if (!incoming) {\n return Promise.resolve([])\n }\n const documents = Array.isArray(incoming) ? incoming : [incoming]\n\n const ids = documents.filter((doc) => !doc._id.startsWith('drafts.')).map(draftId)\n\n return client\n .fetch('*[_id in $ids]', {ids})\n .then((drafts) => {\n const outgoing = documents.map((doc) => {\n const foundDraft = drafts.find((draft) => draft._id === draftId(doc))\n return foundDraft || doc\n })\n return uniqBy(outgoing, '_id')\n })\n .catch((error) => {\n throw new Error(`Problems fetching docs ${ids}. Error: ${error.message}`)\n })\n}\n\nexport function getSubscription(\n query: string,\n params: Record<string, any>,\n client: SanityClient\n): Observable<SanityDocument[]> {\n return client\n .listen(query, params, {\n events: ['welcome', 'mutation'],\n includeResult: false,\n visibility: 'query',\n })\n .pipe(\n switchMap((event) => {\n return observableOf(1).pipe(\n event.type === 'welcome' ? tap() : delay(1000),\n mergeMap(() =>\n client\n .fetch(query, params)\n .then((incoming) => {\n return prepareDocumentList(incoming, client)\n })\n .catch((error) => {\n if (error.message.startsWith('Problems fetching docs')) {\n throw error\n }\n throw new Error(\n `Query failed ${query} and ${JSON.stringify(params)}. Error: ${error.message}`\n )\n })\n )\n )\n })\n )\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}
1
+ {"mappings":";;;;;;;;;;AAAA;ACAA;;;;ACAA;;;AAMA,MAAM,6BAAO,GAAG,CAAC,WAA2B,GAAK,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;AAE5E,SAAS,yCAAmB,CAC1B,QAA2C,EAC3C,MAAoB,EACO;IAC3B,IAAI,CAAC,QAAQ,EACX,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAE5B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG;QAAC,QAAQ;KAAC;IAEjE,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,GAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,6BAAO,CAAC;IAElF,OAAO,MAAM,CACV,KAAK,CAAC,gBAAgB,EAAE;aAAC,GAAG;KAAC,CAAC,CAC9B,IAAI,CAAC,CAAC,MAAM,GAAK;QAChB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,GAAK;YACtC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,GAAK,KAAK,CAAC,GAAG,KAAK,6BAAO,CAAC,GAAG,CAAC,CAAC;YACrE,OAAO,UAAU,IAAI,GAAG,CAAA;SACzB,CAAC;QACF,OAAO,CAAA,GAAA,mBAAM,CAAA,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;KAC/B,CAAC,CACD,KAAK,CAAC,CAAC,KAAK,GAAK;QAChB,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;KAC1E,CAAC,CAAA;CACL;AAEM,SAAS,yCAAe,CAC7B,KAAa,EACb,MAA2B,EAC3B,MAAoB,EACU;IAC9B,OAAO,MAAM,CACV,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE;QACrB,MAAM,EAAE;YAAC,SAAS;YAAE,UAAU;SAAC;QAC/B,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,OAAO;KACpB,CAAC,CACD,IAAI,CACH,CAAA,GAAA,gBAAS,CAAA,CAAC,CAAC,KAAK,GAAK;QACnB,OAAO,CAAA,GAAA,SAAY,CAAA,CAAC,CAAC,CAAC,CAAC,IAAI,CACzB,KAAK,CAAC,IAAI,KAAK,SAAS,GAAG,CAAA,GAAA,UAAG,CAAA,EAAE,GAAG,CAAA,GAAA,YAAK,CAAA,CAAC,IAAI,CAAC,EAC9C,CAAA,GAAA,eAAQ,CAAA,CAAC,IACP,MAAM,CACH,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CACpB,IAAI,CAAC,CAAC,QAAQ,GAAK;gBAClB,OAAO,yCAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;aAC7C,CAAC,CACD,KAAK,CAAC,CAAC,KAAK,GAAK;gBAChB,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,wBAAwB,CAAC,EACpD,MAAM,KAAK,CAAA;gBAEb,MAAM,IAAI,KAAK,CACb,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAC/E,CAAA;aACF,CAAC,CACL,CACF,CAAA;KACF,CAAC,CACH,CAAA;CACJ;;;;;;AD9CD,MAAM,kCAAY,GAAG;IACnB,KAAK,EAAE,cAAc;IACrB,KAAK,EAAE,iBAAiB;IACxB,KAAK,EAAE,EAAE;IACT,WAAW,EAAE,EAAE;IACf,gBAAgB,EAAE,IAAI;IACtB,UAAU,EAAE,IAAI;CACjB;AAEM,SAAS,yCAAY,CAAC,KAAyB,EAAE;IACtD,MAAM,SACJ,KAAK,CAAA,SACL,KAAK,CAAA,cACL,UAAU,CAAA,eACV,WAAW,CAAA,SACX,KAAK,CAAA,SACL,KAAK,CAAA,SACL,KAAK,CAAA,oBACL,gBAAgB,CAAA,oBAChB,gBAAgB,CAAA,IACjB,GAAG;QACF,GAAG,kCAAY;QACf,GAAG,KAAK;KACT;IAED,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,CAAA,GAAA,eAAQ,CAAA,EAAgC;IAC1E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAA,GAAA,eAAQ,CAAA,CAAU,IAAI,CAAC;IACrD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAA,GAAA,eAAQ,CAAA,EAAqB;IAEvD,MAAM,eAAe,GAAG,CAAA,GAAA,gBAAS,CAAA,CAAC;oBAAC,UAAU;KAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAA,GAAA,gBAAS,CAAA,EAAE;IAE1B,MAAM,kBAAC,cAAc,CAAA,UAAE,MAAM,CAAA,EAAC,GAAG,CAAA,GAAA,cAAO,CAAA,CAAC,IAAM;QAC7C,IAAI,KAAK,EACP,OAAO;YAAC,cAAc,EAAE,KAAK;YAAE,MAAM,EAAE,WAAW;SAAC,CAAA;QAGrD,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,QAAQ,GAAK;YAC/D,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvC,OAAO,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAA;SAC9D,CAAC;QAEF,OAAO;YACL,cAAc,EAAE,CAAC,2BAA2B,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACzE,MAAM,EAAE;gBAAC,KAAK,EAAE,KAAK,GAAG,CAAA,GAAA,mBAAY,CAAA,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,aAAa;aAAC;SAC5E,CAAA;KACF,EAAE;QAAC,MAAM;QAAE,KAAK;QAAE,WAAW;QAAE,KAAK;QAAE,KAAK;QAAE,KAAK;KAAC,CAAC;IAErD,CAAA,GAAA,gBAAS,CAAA,CAAC,IAAM;QACd,IAAI,CAAC,cAAc,EACjB,OAAM;QAGR,MAAM,YAAY,GAAG,CAAA,GAAA,yCAAe,CAAA,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC,SAAS,CAAC;YACtF,IAAI,EAAE,CAAC,CAAC,GAAK;gBACX,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAC/B,UAAU,CAAC,KAAK,CAAC;aAClB;YACD,KAAK,EAAE,CAAC,CAAC,GAAK;gBACZ,QAAQ,CAAC,CAAC,CAAC;gBACX,UAAU,CAAC,KAAK,CAAC;aAClB;SACF,CAAC;QACF,6CAA6C;QAC7C,OAAO,IAAM;YACX,YAAY,CAAC,WAAW,EAAE;SAC3B,CAAA;KACF,EAAE;QAAC,KAAK;QAAE,eAAe;QAAE,cAAc;QAAE,MAAM;KAAC,CAAC;IAEpD,qBACE,gBAAC,CAAA,GAAA,+BAAwB,CAAA;QACvB,MAAM,EAAE,KAAK;QACb,MAAM,EACJ,KAAK,IACL,KAAK,CAAC,MAAM,KAAK,CAAC,IAClB,gBAAgB,kBACd,gBAAC,CAAA,GAAA,mBAAY,CAAA;YACX,IAAI,EAAC,OAAO;YACZ,KAAK,EAAE;gBAAC,KAAK,EAAE,MAAM;aAAC;YACtB,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,IAAI,EAAC,SAAS;YACd,IAAI,EAAC,QAAQ;YACb,MAAM,EAAC,QAAQ;YACf,MAAM,EAAE;gBAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;aAAC;YACxB,IAAI,EAAE,gBAAgB,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;UAClD,AACH;kBAGH,cAAA,iBAAC,CAAA,GAAA,WAAI,CAAA;;gBACF,KAAK,kBAAI,gBAAC,KAAG;8BAAE,KAAK,CAAC,OAAO;kBAAO;gBACnC,CAAC,KAAK,IAAI,OAAO,kBAChB,gBAAC,CAAA,GAAA,WAAI,CAAA;oBAAC,OAAO,EAAE,CAAC;8BACd,cAAA,gBAAC,CAAA,GAAA,WAAI,CAAA;wBAAC,OAAO,EAAC,QAAQ;kCACpB,cAAA,gBAAC,CAAA,GAAA,cAAO,CAAA;4BAAC,KAAK;0BAAG;sBACZ;kBACF,AACR;gBACA,CAAC,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,kBAAI,gBAAC,KAAG;8BAAC,mCAAiC;kBAAM;8BACjF,gBAAC,CAAA,GAAA,YAAK,CAAA;oBAAC,KAAK,EAAE,CAAC;8BACZ,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,iBAAK,gBAAC,+BAAS;4BAAe,GAAG,EAAE,GAAG;2BAAjB,GAAG,CAAC,GAAG,CAAc,CAAC;kBACrE;;UACH;MACkB,CAC5B;CACF;AAED,SAAS,+BAAS,CAAC,OAAC,GAAG,CAAA,EAAwB,EAAE;IAC/C,MAAM,MAAM,GAAG,CAAA,GAAA,gBAAS,CAAA,EAAE;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;IAClC,qBACE,gBAAC,CAAA,GAAA,WAAI,CAAA;QAAC,IAAI,EAAE,CAAC;kBACX,cAAA,gBAAC,CAAA,GAAA,mBAAY,CAAA;YACX,MAAM,EAAC,MAAM;YACb,IAAI,EAAC,OAAO;YACZ,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,MAAM,EAAE;gBACN,IAAI,EAAE,GAAG,CAAC,KAAK;gBACf,EAAE,EAAE,CAAA,GAAA,qBAAc,CAAA,CAAC,GAAG,CAAC,GAAG,CAAC;aAC5B;YACD,KAAK,EAAE;gBAAC,KAAK,EAAE,MAAM;aAAC;sBAEtB,cAAA,gBAAC,CAAA,GAAA,oBAAa,CAAA;gBAAC,MAAM,EAAC,SAAS;gBAAC,UAAU,EAAE,IAAI;gBAAE,KAAK,EAAE,GAAG;eAAO,GAAG,CAAC,GAAG,CAAI;UACjE;MACV,CACR;CACF;IAED,wCAA2B,GAAZ,yCAAY;;;;AD9IpB,SAAS,wCAAkB,CAAC,MAAgC,EAAmB;IACpF,OAAO;QACL,IAAI,EAAE,sBAAsB;QAC5B,SAAS,EAAE,SAAS,SAAS,GAAG;YAC9B,qBAAO,gBAAC,CAAA,GAAA,wCAAY,CAAA;gBAAE,GAAG,MAAM;cAAI,CAAA;SACpC;QACD,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAA;CACF","sources":["src/index.tsx","src/DocumentList.tsx","src/sanityConnector.ts"],"sourcesContent":["import DocumentList, {DocumentListConfig} from './DocumentList'\nimport React from 'react'\nimport {LayoutConfig, DashboardWidget} from '@sanity/dashboard'\n\nexport interface DocumentListWidgetConfig extends DocumentListConfig {\n layout?: LayoutConfig\n}\n\nexport function documentListWidget(config: DocumentListWidgetConfig): DashboardWidget {\n return {\n name: 'document-list-widget',\n component: function component() {\n return <DocumentList {...config} />\n },\n layout: config.layout,\n }\n}\n","import React, {useEffect, useMemo, useState} from 'react'\nimport {getPublishedId, useClient, useSchema} from 'sanity'\nimport {intersection} from 'lodash'\nimport {getSubscription} from './sanityConnector'\nimport {SanityDocument, IntentButton, SanityPreview} from 'sanity'\nimport {Card, Flex, Spinner, Stack} from '@sanity/ui'\nimport {DashboardWidgetContainer} from '@sanity/dashboard'\n\nexport interface DocumentListConfig {\n title?: string\n types?: string[]\n query?: string\n queryParams?: Record<string, any>\n order?: string\n limit?: number\n showCreateButton?: boolean\n createButtonText?: string\n apiVersion?: string\n}\n\nconst defaultProps = {\n title: 'Last created',\n order: '_createdAt desc',\n limit: 10,\n queryParams: {},\n showCreateButton: true,\n apiVersion: 'v1',\n}\n\nexport function DocumentList(props: DocumentListConfig) {\n const {\n query,\n limit,\n apiVersion,\n queryParams,\n types,\n order,\n title,\n showCreateButton,\n createButtonText,\n } = {\n ...defaultProps,\n ...props,\n }\n\n const [documents, setDocuments] = useState<SanityDocument[] | undefined>()\n const [loading, setLoading] = useState<boolean>(true)\n const [error, setError] = useState<Error | undefined>()\n\n const versionedClient = useClient({apiVersion})\n const schema = useSchema()\n\n const {assembledQuery, params} = useMemo(() => {\n if (query) {\n return {assembledQuery: query, params: queryParams}\n }\n\n const documentTypes = schema.getTypeNames().filter((typeName) => {\n const schemaType = schema.get(typeName)\n return schemaType.type && schemaType.type.name === 'document'\n })\n\n return {\n assembledQuery: `*[_type in $types] | order(${order}) [0...${limit * 2}]`,\n params: {types: types ? intersection(types, documentTypes) : documentTypes},\n }\n }, [schema, query, queryParams, order, limit, types])\n\n useEffect(() => {\n if (!assembledQuery) {\n return\n }\n\n const subscription = getSubscription(assembledQuery, params, versionedClient).subscribe({\n next: (d) => {\n setDocuments(d.slice(0, limit))\n setLoading(false)\n },\n error: (e) => {\n setError(e)\n setLoading(false)\n },\n })\n // eslint-disable-next-line consistent-return\n return () => {\n subscription.unsubscribe()\n }\n }, [limit, versionedClient, assembledQuery, params])\n\n return (\n <DashboardWidgetContainer\n header={title}\n footer={\n types &&\n types.length === 1 &&\n showCreateButton && (\n <IntentButton\n mode=\"bleed\"\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n tone=\"primary\"\n type=\"button\"\n intent=\"create\"\n params={{type: types[0]}}\n text={createButtonText || `Create new ${types[0]}`}\n />\n )\n }\n >\n <Card>\n {error && <div>{error.message}</div>}\n {!error && loading && (\n <Card padding={4}>\n <Flex justify=\"center\">\n <Spinner muted />\n </Flex>\n </Card>\n )}\n {!error && !documents && !loading && <div>Could not locate any documents :/</div>}\n <Stack space={2}>\n {documents && documents.map((doc) => <MenuEntry key={doc._id} doc={doc} />)}\n </Stack>\n </Card>\n </DashboardWidgetContainer>\n )\n}\n\nfunction MenuEntry({doc}: {doc: SanityDocument}) {\n const schema = useSchema()\n const type = schema.get(doc._type)\n return (\n <Card flex={1}>\n <IntentButton\n intent=\"edit\"\n mode=\"bleed\"\n padding={1}\n radius={0}\n params={{\n type: doc._type,\n id: getPublishedId(doc._id),\n }}\n style={{width: '100%'}}\n >\n <SanityPreview layout=\"default\" schemaType={type} value={doc} key={doc._id} />\n </IntentButton>\n </Card>\n )\n}\n\nexport default DocumentList\n","import {Observable, of as observableOf} from 'rxjs'\nimport {delay, mergeMap, switchMap, tap} from 'rxjs/operators'\nimport uniqBy from 'lodash/uniqBy'\nimport {SanityClient} from '@sanity/client'\nimport {SanityDocument} from 'sanity'\n\nconst draftId = (nonDraftDoc: SanityDocument) => `drafts.${nonDraftDoc._id}`\n\nfunction prepareDocumentList(\n incoming: SanityDocument | SanityDocument[],\n client: SanityClient\n): Promise<SanityDocument[]> {\n if (!incoming) {\n return Promise.resolve([])\n }\n const documents = Array.isArray(incoming) ? incoming : [incoming]\n\n const ids = documents.filter((doc) => !doc._id.startsWith('drafts.')).map(draftId)\n\n return client\n .fetch('*[_id in $ids]', {ids})\n .then((drafts) => {\n const outgoing = documents.map((doc) => {\n const foundDraft = drafts.find((draft) => draft._id === draftId(doc))\n return foundDraft || doc\n })\n return uniqBy(outgoing, '_id')\n })\n .catch((error) => {\n throw new Error(`Problems fetching docs ${ids}. Error: ${error.message}`)\n })\n}\n\nexport function getSubscription(\n query: string,\n params: Record<string, any>,\n client: SanityClient\n): Observable<SanityDocument[]> {\n return client\n .listen(query, params, {\n events: ['welcome', 'mutation'],\n includeResult: false,\n visibility: 'query',\n })\n .pipe(\n switchMap((event) => {\n return observableOf(1).pipe(\n event.type === 'welcome' ? tap() : delay(1000),\n mergeMap(() =>\n client\n .fetch(query, params)\n .then((incoming) => {\n return prepareDocumentList(incoming, client)\n })\n .catch((error) => {\n if (error.message.startsWith('Problems fetching docs')) {\n throw error\n }\n throw new Error(\n `Query failed ${query} and ${JSON.stringify(params)}. Error: ${error.message}`\n )\n })\n )\n )\n })\n )\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}
@@ -1 +1 @@
1
- {"mappings":";ACSA;IACE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;ACfD,yCAA0C,SAAQ,kBAAkB;IAClE,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB;AAED,mCAAmC,MAAM,EAAE,wBAAwB,GAAG,eAAe,CAQpF","sources":["src/src/sanityConnector.ts","src/src/DocumentList.tsx","src/src/index.tsx","src/index.tsx"],"sourcesContent":[null,null,null,"import DocumentList, {DocumentListConfig} from './DocumentList'\nimport React from 'react'\nimport {LayoutConfig, DashboardWidget} from '@sanity/dashboard'\n\nexport interface DocumentListWidgetConfig extends DocumentListConfig {\n layout?: LayoutConfig\n}\n\nexport function documentListWidget(config: DocumentListWidgetConfig): DashboardWidget {\n return {\n name: 'document-list-widget',\n component: function component() {\n return <DocumentList {...config} />\n },\n layout: config.layout,\n }\n}\n"],"names":[],"version":3,"file":"index.d.ts.map","sourceRoot":"../../"}
1
+ {"mappings":";ACQA;IACE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;ACdD,yCAA0C,SAAQ,kBAAkB;IAClE,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB;AAED,mCAAmC,MAAM,EAAE,wBAAwB,GAAG,eAAe,CAQpF","sources":["src/src/sanityConnector.ts","src/src/DocumentList.tsx","src/src/index.tsx","src/index.tsx"],"sourcesContent":[null,null,null,"import DocumentList, {DocumentListConfig} from './DocumentList'\nimport React from 'react'\nimport {LayoutConfig, DashboardWidget} from '@sanity/dashboard'\n\nexport interface DocumentListWidgetConfig extends DocumentListConfig {\n layout?: LayoutConfig\n}\n\nexport function documentListWidget(config: DocumentListWidgetConfig): DashboardWidget {\n return {\n name: 'document-list-widget',\n component: function component() {\n return <DocumentList {...config} />\n },\n layout: config.layout,\n }\n}\n"],"names":[],"version":3,"file":"index.d.ts.map","sourceRoot":"../../"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "public": true,
3
3
  "name": "sanity-plugin-dashboard-widget-document-list",
4
- "version": "3.0.0-v3-studio.3",
4
+ "version": "3.0.0-v3-studio.4",
5
5
  "author": "Sanity.io <hello@sanity.io>",
6
6
  "description": "Example dashboard widget for Sanity Content Studio",
7
7
  "homepage": "https://github.com/sanity-io/dashboard-widget-document-list#readme",
@@ -58,7 +58,7 @@
58
58
  "@sanity/dashboard": "^3.0.0-v3-studio.3",
59
59
  "@sanity/plugin-kit": "^1.1.0-ecosystem-preset.5",
60
60
  "@sanity/semantic-release-preset": "^2.0.1",
61
- "@types/react": "^17.0.0 || ^18.0.0",
61
+ "@types/react": "^18.0.0",
62
62
  "@typescript-eslint/eslint-plugin": "^5.12.0",
63
63
  "@typescript-eslint/parser": "^5.12.0",
64
64
  "eslint": "^8.7.0",
@@ -71,19 +71,19 @@
71
71
  "lint-staged": "^13.0.3",
72
72
  "parcel": "^2.6.0",
73
73
  "prettier": "^2.6.2",
74
- "react": "^17.0.0 || ^18.0.0",
74
+ "react": "^18.0.0",
75
75
  "rimraf": "^3.0.2",
76
- "sanity": "3.0.0-dev-preview.17",
76
+ "sanity": "3.0.0-dev-preview.21",
77
77
  "typescript": "4.7.3"
78
78
  },
79
79
  "peerDependencies": {
80
- "react": "^17.0.0 || ^18.0.0",
80
+ "react": "^18.0.0",
81
81
  "sanity": "dev-preview",
82
82
  "@sanity/dashboard": "studio-v3"
83
83
  },
84
84
  "dependencies": {
85
+ "@sanity/incompatible-plugin": "^1.0.4",
85
86
  "@sanity/ui": "^0.38.0",
86
- "@sanity/incompatible-plugin": "^1.0.1",
87
87
  "lodash": "^4.17.15",
88
88
  "rxjs": "^6.0.0"
89
89
  },
@@ -1,9 +1,8 @@
1
1
  import React, {useEffect, useMemo, useState} from 'react'
2
- import {IntentButton, SanityPreview} from 'sanity/_unstable'
3
2
  import {getPublishedId, useClient, useSchema} from 'sanity'
4
3
  import {intersection} from 'lodash'
5
4
  import {getSubscription} from './sanityConnector'
6
- import {SanityDocument} from 'sanity'
5
+ import {SanityDocument, IntentButton, SanityPreview} from 'sanity'
7
6
  import {Card, Flex, Spinner, Stack} from '@sanity/ui'
8
7
  import {DashboardWidgetContainer} from '@sanity/dashboard'
9
8