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 +4 -5
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/index.js +2 -3
- package/lib/esm/index.js.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/DocumentList.tsx +1 -2
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$
|
|
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$
|
|
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$
|
|
194
|
+
children: /*#__PURE__*/ (0, $dyHF6$reactjsxruntime.jsx)((0, $dyHF6$sanity.SanityPreview), {
|
|
196
195
|
layout: "default",
|
|
197
196
|
schemaType: type,
|
|
198
197
|
value: doc
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -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":"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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 {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
|
|
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",
|
package/lib/esm/index.js.map
CHANGED
|
@@ -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":"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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 {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/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"mappings":";
|
|
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.
|
|
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": "^
|
|
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": "^
|
|
74
|
+
"react": "^18.0.0",
|
|
75
75
|
"rimraf": "^3.0.2",
|
|
76
|
-
"sanity": "3.0.0-dev-preview.
|
|
76
|
+
"sanity": "3.0.0-dev-preview.21",
|
|
77
77
|
"typescript": "4.7.3"
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
|
-
"react": "^
|
|
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
|
},
|
package/src/DocumentList.tsx
CHANGED
|
@@ -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
|
|