sanity-plugin-documents-pane 3.0.2 → 4.1.0

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.
@@ -0,0 +1,32 @@
1
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
2
+ import { ComponentProps } from "react";
3
+ import { ListenQueryOptions } from "sanity";
4
+ import { UserViewComponent } from "sanity/structure";
5
+ type DocumentVersionsCollection = ComponentProps<UserViewComponent>['document'];
6
+ type DocumentsPaneQueryParamsObject = Record<string, string>;
7
+ type DocumentsPaneQueryParamsFn = (params: {
8
+ document: DocumentVersionsCollection;
9
+ }) => Record<string, string> | null | undefined;
10
+ type DocumentsPaneQueryParams = DocumentsPaneQueryParamsObject | DocumentsPaneQueryParamsFn;
11
+ interface DocumentsPaneInitialValueTemplate {
12
+ schemaType: string;
13
+ template?: string;
14
+ parameters?: Record<string, string | number | boolean>;
15
+ title: string;
16
+ }
17
+ type DocumentsPaneInitialValueTemplateResolver = (params: {
18
+ document: DocumentVersionsCollection;
19
+ }) => DocumentsPaneInitialValueTemplate[];
20
+ type DocumentsPaneOptions = {
21
+ query: string;
22
+ params?: DocumentsPaneQueryParams;
23
+ debug?: boolean;
24
+ useDraft?: boolean;
25
+ initialValueTemplates?: DocumentsPaneInitialValueTemplateResolver;
26
+ options?: ListenQueryOptions;
27
+ duplicate?: boolean;
28
+ };
29
+ type DocumentsPaneProps = ComponentProps<UserViewComponent<DocumentsPaneOptions>>;
30
+ declare function DocumentsPane(props: DocumentsPaneProps): _$react_jsx_runtime0.JSX.Element;
31
+ export { DocumentsPane as default };
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/DocumentsPane.tsx"],"mappings":";;;;KAIY,0BAAA,GAA6B,cAAA,CAAe,iBAAA;AAAA,KAE5C,8BAAA,GAAiC,MAAA;AAAA,KAEjC,0BAAA,IAA8B,MAAA;EACxC,QAAA,EAAU,0BAAA;AAAA,MACN,MAAA;AAAA,KAEM,wBAAA,GAA2B,8BAAA,GAAiC,0BAAA;AAAA,UAEvD,iCAAA;EACf,UAAA;EACA,QAAA;EACA,UAAA,GAAa,MAAA;EACb,KAAA;AAAA;AAAA,KAGU,yCAAA,IAA6C,MAAA;EACvD,QAAA,EAAU,0BAAA;AAAA,MACN,iCAAA;AAAA,KAEM,oBAAA;EACV,KAAA;EACA,MAAA,GAAS,wBAAA;EACT,KAAA;EACA,QAAA;EACA,qBAAA,GAAwB,yCAAA;EACxB,OAAA,GAAU,kBAAA;EACV,SAAA;AAAA;AAAA,KAGU,kBAAA,GAAqB,cAAA,CAAe,iBAAA,CAAkB,oBAAA;AAAA,iBC1B1C,aAAA,CAAc,KAAA,EAAO,kBAAA,GAAkB,oBAAA,CAAA,GAAA,CAAA,OAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,335 @@
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import { c } from "react/compiler-runtime";
3
+ import { Stack, Box, Label, Code, Tooltip, Text, Button, Card, Flex, Spinner } from "@sanity/ui";
4
+ import { useListeningQuery, Feedback } from "sanity-plugin-utils";
5
+ import { CopyIcon, ComposeIcon, WarningOutlineIcon } from "@sanity/icons";
6
+ import { fromString } from "@sanity/util/paths";
7
+ import { useDocumentStore, useDocumentOperation, useDocumentPairPermissions, useTranslation, useSchema, Preview, getPublishedId, DefaultPreview } from "sanity";
8
+ import { usePaneRouter, structureLocaleNamespace } from "sanity/structure";
9
+ import { uuid } from "@sanity/uuid";
10
+ import { useState } from "react";
11
+ import { firstValueFrom, filter } from "rxjs";
12
+ import delve from "dlv";
13
+ function Debug(t0) {
14
+ const $ = c(8), {
15
+ query,
16
+ params
17
+ } = t0;
18
+ let t1;
19
+ $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Label, { children: "Query" }) }), $[0] = t1) : t1 = $[0];
20
+ let t2;
21
+ $[1] !== query ? (t2 = /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
22
+ t1,
23
+ /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Code, { children: query }) })
24
+ ] }), $[1] = query, $[2] = t2) : t2 = $[2];
25
+ let t3;
26
+ $[3] !== params ? (t3 = params ? /* @__PURE__ */ jsxs(Stack, { gap: 4, children: [
27
+ /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Label, { children: "Params" }) }),
28
+ /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Code, { children: JSON.stringify(params) }) })
29
+ ] }) : null, $[3] = params, $[4] = t3) : t3 = $[4];
30
+ let t4;
31
+ return $[5] !== t2 || $[6] !== t3 ? (t4 = /* @__PURE__ */ jsxs(Fragment, { children: [
32
+ t2,
33
+ t3
34
+ ] }), $[5] = t2, $[6] = t3, $[7] = t4) : t4 = $[7], t4;
35
+ }
36
+ function DuplicateDocument(props) {
37
+ const $ = c(25), {
38
+ id,
39
+ type
40
+ } = props, documentStore = useDocumentStore(), {
41
+ duplicate
42
+ } = useDocumentOperation(id, type), {
43
+ routerPanesState,
44
+ groupIndex,
45
+ handleEditReference
46
+ } = usePaneRouter(), [isDuplicating, setDuplicating] = useState(!1);
47
+ let t0;
48
+ $[0] !== id || $[1] !== type ? (t0 = {
49
+ id,
50
+ type,
51
+ permission: "duplicate"
52
+ }, $[0] = id, $[1] = type, $[2] = t0) : t0 = $[2];
53
+ const [permissions, isPermissionsLoading] = useDocumentPairPermissions(t0), {
54
+ t
55
+ } = useTranslation(structureLocaleNamespace);
56
+ let t1;
57
+ $[3] !== documentStore.pair || $[4] !== duplicate || $[5] !== groupIndex || $[6] !== handleEditReference || $[7] !== id || $[8] !== routerPanesState || $[9] !== type ? (t1 = async (event) => {
58
+ event.stopPropagation();
59
+ const dupeId = uuid();
60
+ setDuplicating(!0);
61
+ const duplicateSuccess = firstValueFrom(documentStore.pair.operationEvents(id, type).pipe(filter(_temp)));
62
+ duplicate.execute(dupeId), await duplicateSuccess, setDuplicating(!1);
63
+ const childParams = routerPanesState[groupIndex + 1]?.[0]?.params || {}, {
64
+ parentRefPath
65
+ } = childParams;
66
+ handleEditReference({
67
+ id: dupeId,
68
+ type,
69
+ parentRefPath: parentRefPath ? fromString(parentRefPath) : [""],
70
+ template: {
71
+ id: dupeId
72
+ }
73
+ });
74
+ }, $[3] = documentStore.pair, $[4] = duplicate, $[5] = groupIndex, $[6] = handleEditReference, $[7] = id, $[8] = routerPanesState, $[9] = type, $[10] = t1) : t1 = $[10];
75
+ const handle = t1;
76
+ if (isPermissionsLoading || !permissions?.granted)
77
+ return null;
78
+ let t2;
79
+ $[11] !== t ? (t2 = t("action.duplicate.label"), $[11] = t, $[12] = t2) : t2 = $[12];
80
+ let t3;
81
+ $[13] !== t2 ? (t3 = /* @__PURE__ */ jsx(Box, { children: /* @__PURE__ */ jsx(Text, { muted: !0, size: 1, children: t2 }) }), $[13] = t2, $[14] = t3) : t3 = $[14];
82
+ let t4;
83
+ $[15] !== t ? (t4 = t("action.duplicate.label"), $[15] = t, $[16] = t4) : t4 = $[16];
84
+ const t5 = isDuplicating || !!duplicate.disabled || isPermissionsLoading;
85
+ let t6;
86
+ $[17] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t6 = {
87
+ cursor: "pointer"
88
+ }, $[17] = t6) : t6 = $[17];
89
+ let t7;
90
+ $[18] !== handle || $[19] !== t4 || $[20] !== t5 ? (t7 = /* @__PURE__ */ jsx(Button, { "aria-label": t4, as: Box, disabled: t5, fontSize: 1, icon: CopyIcon, mode: "ghost", onClick: handle, padding: 2, style: t6, tone: "default" }), $[18] = handle, $[19] = t4, $[20] = t5, $[21] = t7) : t7 = $[21];
91
+ let t8;
92
+ return $[22] !== t3 || $[23] !== t7 ? (t8 = /* @__PURE__ */ jsx(Tooltip, { content: t3, placement: "left", portal: !0, children: t7 }), $[22] = t3, $[23] = t7, $[24] = t8) : t8 = $[24], t8;
93
+ }
94
+ function _temp(e) {
95
+ return e.op === "duplicate" && e.type === "success";
96
+ }
97
+ function NewDocument(props) {
98
+ const $ = c(7), {
99
+ initialValueTemplates
100
+ } = props, {
101
+ ReferenceChildLink
102
+ } = usePaneRouter();
103
+ if (!initialValueTemplates.length)
104
+ return null;
105
+ let t0;
106
+ if ($[0] !== ReferenceChildLink || $[1] !== initialValueTemplates) {
107
+ let t12;
108
+ $[3] !== ReferenceChildLink ? (t12 = (template) => template.template ? /* @__PURE__ */ jsx(ReferenceChildLink, { documentId: uuid(), documentType: template.schemaType, parentRefPath: [], template: {
109
+ id: template.template,
110
+ params: template.parameters ?? {}
111
+ }, children: /* @__PURE__ */ jsx(Button, { as: "span", icon: ComposeIcon, mode: "bleed", text: template.title }) }, `${template.schemaType}-${template.template}`) : null, $[3] = ReferenceChildLink, $[4] = t12) : t12 = $[4], t0 = initialValueTemplates.map(t12), $[0] = ReferenceChildLink, $[1] = initialValueTemplates, $[2] = t0;
112
+ } else
113
+ t0 = $[2];
114
+ let t1;
115
+ return $[5] !== t0 ? (t1 = /* @__PURE__ */ jsx(Card, { borderBottom: !0, padding: 2, children: /* @__PURE__ */ jsx(Flex, { gap: 1, justify: "flex-end", children: t0 }) }), $[5] = t0, $[6] = t1) : t1 = $[6], t1;
116
+ }
117
+ function Documents(props) {
118
+ const $ = c(50), {
119
+ query,
120
+ params,
121
+ options,
122
+ debug,
123
+ initialValueTemplates,
124
+ duplicate
125
+ } = props, {
126
+ routerPanesState,
127
+ groupIndex,
128
+ handleEditReference
129
+ } = usePaneRouter(), schema = useSchema();
130
+ let t0;
131
+ $[0] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t0 = [], $[0] = t0) : t0 = $[0];
132
+ let t1;
133
+ $[1] !== options || $[2] !== params ? (t1 = {
134
+ params,
135
+ initialValue: t0,
136
+ options
137
+ }, $[1] = options, $[2] = params, $[3] = t1) : t1 = $[3];
138
+ const {
139
+ loading,
140
+ error,
141
+ data: _data
142
+ } = useListeningQuery(query, t1);
143
+ let t2;
144
+ $[4] !== _data ? (t2 = _data ?? [], $[4] = _data, $[5] = t2) : t2 = $[5];
145
+ const data = t2;
146
+ let t3;
147
+ $[6] !== groupIndex || $[7] !== handleEditReference || $[8] !== routerPanesState ? (t3 = (id, type) => {
148
+ const childParams = routerPanesState[groupIndex + 1]?.[0]?.params || {}, {
149
+ parentRefPath
150
+ } = childParams;
151
+ handleEditReference({
152
+ id,
153
+ type,
154
+ parentRefPath: parentRefPath ? fromString(parentRefPath) : [""],
155
+ template: {
156
+ id
157
+ }
158
+ });
159
+ }, $[6] = groupIndex, $[7] = handleEditReference, $[8] = routerPanesState, $[9] = t3) : t3 = $[9];
160
+ const handleClick = t3;
161
+ if (loading) {
162
+ let t42;
163
+ return $[10] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t42 = /* @__PURE__ */ jsx(Box, { padding: 4, children: /* @__PURE__ */ jsx(Flex, { align: "center", justify: "center", children: /* @__PURE__ */ jsx(Spinner, { muted: !0 }) }) }), $[10] = t42) : t42 = $[10], t42;
164
+ }
165
+ if (error) {
166
+ let t42;
167
+ $[11] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t42 = /* @__PURE__ */ jsx(Feedback, { children: "There was an error performing this query" }), $[11] = t42) : t42 = $[11];
168
+ let t52;
169
+ $[12] !== debug || $[13] !== params || $[14] !== query ? (t52 = debug ? /* @__PURE__ */ jsx(Debug, { params, query }) : null, $[12] = debug, $[13] = params, $[14] = query, $[15] = t52) : t52 = $[15];
170
+ let t62;
171
+ return $[16] !== t52 ? (t62 = /* @__PURE__ */ jsxs(Stack, { gap: 5, padding: 4, children: [
172
+ t42,
173
+ t52
174
+ ] }), $[16] = t52, $[17] = t62) : t62 = $[17], t62;
175
+ }
176
+ if (!data.length) {
177
+ let t42;
178
+ $[18] !== initialValueTemplates ? (t42 = /* @__PURE__ */ jsx(NewDocument, { initialValueTemplates }), $[18] = initialValueTemplates, $[19] = t42) : t42 = $[19];
179
+ let t52, t62;
180
+ $[20] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t52 = /* @__PURE__ */ jsx(DocumentsCount, { count: 0 }), t62 = /* @__PURE__ */ jsx(Feedback, { children: "No Documents found" }), $[20] = t52, $[21] = t62) : (t52 = $[20], t62 = $[21]);
181
+ let t72;
182
+ $[22] !== debug || $[23] !== params || $[24] !== query ? (t72 = debug ? /* @__PURE__ */ jsx(Debug, { params, query }) : null, $[22] = debug, $[23] = params, $[24] = query, $[25] = t72) : t72 = $[25];
183
+ let t82;
184
+ $[26] !== t72 ? (t82 = /* @__PURE__ */ jsxs(Stack, { gap: 4, padding: 4, children: [
185
+ t52,
186
+ t62,
187
+ t72
188
+ ] }), $[26] = t72, $[27] = t82) : t82 = $[27];
189
+ let t9;
190
+ return $[28] !== t42 || $[29] !== t82 ? (t9 = /* @__PURE__ */ jsxs(Fragment, { children: [
191
+ t42,
192
+ t82
193
+ ] }), $[28] = t42, $[29] = t82, $[30] = t9) : t9 = $[30], t9;
194
+ }
195
+ let t4;
196
+ $[31] !== initialValueTemplates ? (t4 = /* @__PURE__ */ jsx(NewDocument, { initialValueTemplates }), $[31] = initialValueTemplates, $[32] = t4) : t4 = $[32];
197
+ let t5;
198
+ $[33] !== data.length ? (t5 = /* @__PURE__ */ jsx(Box, { paddingX: 3, paddingTop: 3, paddingBottom: 1, children: /* @__PURE__ */ jsx(Box, { paddingLeft: 1, children: /* @__PURE__ */ jsx(DocumentsCount, { count: data.length }) }) }), $[33] = data.length, $[34] = t5) : t5 = $[34];
199
+ let t6;
200
+ if ($[35] !== data || $[36] !== duplicate || $[37] !== handleClick || $[38] !== schema) {
201
+ let t72;
202
+ $[40] !== duplicate || $[41] !== handleClick || $[42] !== schema ? (t72 = (doc) => {
203
+ const schemaType = schema.get(doc._type), originalId = doc._originalId, previewValue = typeof originalId == "string" ? {
204
+ ...doc,
205
+ _id: originalId
206
+ } : doc;
207
+ return schemaType ? /* @__PURE__ */ jsx(Button, { mode: "bleed", onClick: () => handleClick(doc._id, doc._type), padding: 2, children: /* @__PURE__ */ jsx(Preview, { actions: duplicate ? /* @__PURE__ */ jsx(DuplicateDocument, { id: getPublishedId(doc._id), type: doc._type }) : null, layout: "block", schemaType, value: previewValue }) }, doc._id) : /* @__PURE__ */ jsx(Card, { "data-ui": "Alert", padding: 2, radius: 2, tone: "caution", children: /* @__PURE__ */ jsx(DefaultPreview, { media: /* @__PURE__ */ jsx(WarningOutlineIcon, {}), subtitle: `Encountered type "${doc._type}" that is not defined in the schema.`, title: "Unknown schema type found" }) }, doc._id);
208
+ }, $[40] = duplicate, $[41] = handleClick, $[42] = schema, $[43] = t72) : t72 = $[43], t6 = data.map(t72), $[35] = data, $[36] = duplicate, $[37] = handleClick, $[38] = schema, $[39] = t6;
209
+ } else
210
+ t6 = $[39];
211
+ let t7;
212
+ $[44] !== t6 ? (t7 = /* @__PURE__ */ jsx(Stack, { gap: 1, padding: 2, children: t6 }), $[44] = t6, $[45] = t7) : t7 = $[45];
213
+ let t8;
214
+ return $[46] !== t4 || $[47] !== t5 || $[48] !== t7 ? (t8 = /* @__PURE__ */ jsxs(Fragment, { children: [
215
+ t4,
216
+ t5,
217
+ t7
218
+ ] }), $[46] = t4, $[47] = t5, $[48] = t7, $[49] = t8) : t8 = $[49], t8;
219
+ }
220
+ function DocumentsCount(t0) {
221
+ const $ = c(3), {
222
+ count
223
+ } = t0, label = count === 1 ? "document" : "documents";
224
+ let t1;
225
+ return $[0] !== count || $[1] !== label ? (t1 = /* @__PURE__ */ jsxs(Text, { muted: !0, size: 1, children: [
226
+ count,
227
+ " ",
228
+ label
229
+ ] }), $[0] = count, $[1] = label, $[2] = t1) : t1 = $[2], t1;
230
+ }
231
+ function resolveInitialValueTemplates(options) {
232
+ const {
233
+ resolver,
234
+ document
235
+ } = options;
236
+ return resolver ? resolver({
237
+ document
238
+ }) : [];
239
+ }
240
+ function defaultResolver(options) {
241
+ const {
242
+ params,
243
+ document,
244
+ useDraft
245
+ } = options;
246
+ if (!params || typeof params == "function")
247
+ return {};
248
+ const doc = useDraft ? document.displayed : document.published;
249
+ if (!doc)
250
+ return;
251
+ const resolved = {};
252
+ for (const [key, path] of Object.entries(params))
253
+ resolved[key] = delve(doc, path);
254
+ return resolved;
255
+ }
256
+ function resolveParams(options) {
257
+ const {
258
+ params,
259
+ document
260
+ } = options, resolvedParams = typeof params == "function" ? params({
261
+ document
262
+ }) : defaultResolver(options);
263
+ if (!resolvedParams)
264
+ return;
265
+ const entries = Object.entries(resolvedParams);
266
+ if (!entries.some(([, value]) => value === void 0))
267
+ return Object.fromEntries(entries.filter((entry) => entry[1] !== void 0));
268
+ }
269
+ function DocumentsPane(props) {
270
+ const $ = c(30), {
271
+ document
272
+ } = props, {
273
+ query,
274
+ params,
275
+ useDraft: t0,
276
+ debug: t1,
277
+ initialValueTemplates: initialValueTemplatesResolver,
278
+ options: t2,
279
+ duplicate: t3
280
+ } = props.options, useDraft = t0 === void 0 ? !1 : t0, debug = t1 === void 0 ? !1 : t1;
281
+ let t4;
282
+ $[0] !== t2 ? (t4 = t2 === void 0 ? {} : t2, $[0] = t2, $[1] = t4) : t4 = $[1];
283
+ const options = t4, duplicate = t3 === void 0 ? !1 : t3;
284
+ if (useDraft && typeof params == "function") {
285
+ let t52;
286
+ $[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t52 = /* @__PURE__ */ jsx("code", { children: "useDraft" }), $[2] = t52) : t52 = $[2];
287
+ let t62;
288
+ $[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t62 = /* @__PURE__ */ jsx("code", { children: "true" }), $[3] = t62) : t62 = $[3];
289
+ let t72;
290
+ $[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t72 = /* @__PURE__ */ jsxs(Feedback, { children: [
291
+ t52,
292
+ " should not be ",
293
+ t62,
294
+ " when supplying a function for",
295
+ /* @__PURE__ */ jsx("code", { children: "params" })
296
+ ] }), $[4] = t72) : t72 = $[4];
297
+ let t8;
298
+ $[5] !== debug || $[6] !== query ? (t8 = debug ? /* @__PURE__ */ jsx(Debug, { query }) : null, $[5] = debug, $[6] = query, $[7] = t8) : t8 = $[7];
299
+ let t9;
300
+ return $[8] !== t8 ? (t9 = /* @__PURE__ */ jsxs(Stack, { gap: 5, padding: 4, children: [
301
+ t72,
302
+ t8
303
+ ] }), $[8] = t8, $[9] = t9) : t9 = $[9], t9;
304
+ }
305
+ let t5;
306
+ $[10] !== document || $[11] !== params || $[12] !== useDraft ? (t5 = resolveParams({
307
+ document,
308
+ params,
309
+ useDraft
310
+ }), $[10] = document, $[11] = params, $[12] = useDraft, $[13] = t5) : t5 = $[13];
311
+ const paramValues = t5;
312
+ let t6;
313
+ $[14] !== document || $[15] !== initialValueTemplatesResolver ? (t6 = resolveInitialValueTemplates({
314
+ resolver: initialValueTemplatesResolver,
315
+ document
316
+ }), $[14] = document, $[15] = initialValueTemplatesResolver, $[16] = t6) : t6 = $[16];
317
+ const initialValueTemplates = t6;
318
+ if (!paramValues) {
319
+ let t72;
320
+ $[17] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t72 = /* @__PURE__ */ jsx(Feedback, { children: "Parameters for this query could not be resolved. This may mean the document does not yet exist, or is incomplete." }), $[17] = t72) : t72 = $[17];
321
+ let t8;
322
+ $[18] !== debug || $[19] !== query ? (t8 = debug ? /* @__PURE__ */ jsx(Debug, { query }) : null, $[18] = debug, $[19] = query, $[20] = t8) : t8 = $[20];
323
+ let t9;
324
+ return $[21] !== t8 ? (t9 = /* @__PURE__ */ jsxs(Stack, { gap: 5, padding: 4, children: [
325
+ t72,
326
+ t8
327
+ ] }), $[21] = t8, $[22] = t9) : t9 = $[22], t9;
328
+ }
329
+ let t7;
330
+ return $[23] !== debug || $[24] !== duplicate || $[25] !== initialValueTemplates || $[26] !== options || $[27] !== paramValues || $[28] !== query ? (t7 = /* @__PURE__ */ jsx(Documents, { query, params: paramValues, options, debug, initialValueTemplates, duplicate }), $[23] = debug, $[24] = duplicate, $[25] = initialValueTemplates, $[26] = options, $[27] = paramValues, $[28] = query, $[29] = t7) : t7 = $[29], t7;
331
+ }
332
+ export {
333
+ DocumentsPane as default
334
+ };
335
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/Debug.tsx","../src/DuplicateDocument.tsx","../src/NewDocument.tsx","../src/Documents.tsx","../src/resolveInitialValueTemplates.ts","../src/resolveParams.ts","../src/DocumentsPane.tsx"],"sourcesContent":["import {Box, Code, Label, Stack} from '@sanity/ui'\n\nexport default function Debug({query, params}: {query: string; params?: Record<string, string>}) {\n return (\n <>\n <Stack gap={4}>\n <Box>\n <Label>Query</Label>\n </Box>\n <Box>\n <Code>{query}</Code>\n </Box>\n </Stack>\n {params ? (\n <Stack gap={4}>\n <Box>\n <Label>Params</Label>\n </Box>\n <Box>\n <Code>{JSON.stringify(params)}</Code>\n </Box>\n </Stack>\n ) : null}\n </>\n )\n}\n","import {CopyIcon} from '@sanity/icons'\nimport {Box, Button, Text, Tooltip} from '@sanity/ui'\nimport {fromString as pathFromString} from '@sanity/util/paths'\nimport {uuid} from '@sanity/uuid'\nimport {useCallback, useState, type MouseEvent} from 'react'\nimport {filter, firstValueFrom} from 'rxjs'\nimport {\n useDocumentOperation,\n useDocumentPairPermissions,\n useDocumentStore,\n useTranslation,\n} from 'sanity'\nimport {structureLocaleNamespace} from 'sanity/structure'\nimport {usePaneRouter} from 'sanity/structure'\n\ninterface DuplicateDocumentProps {\n id: string\n type: string\n}\n\nexport default function DuplicateDocument(props: DuplicateDocumentProps) {\n const {id, type} = props\n\n const documentStore = useDocumentStore()\n const {duplicate} = useDocumentOperation(id, type)\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const [isDuplicating, setDuplicating] = useState(false)\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'duplicate',\n })\n\n const {t} = useTranslation(structureLocaleNamespace)\n\n const handle = useCallback(\n async (event: MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n const dupeId = uuid()\n\n setDuplicating(true)\n\n const duplicateSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(id, type)\n .pipe(filter((e) => e.op === 'duplicate' && e.type === 'success')),\n )\n duplicate.execute(dupeId)\n\n await duplicateSuccess\n setDuplicating(false)\n\n const childParams = routerPanesState[groupIndex + 1]?.[0]?.params || {}\n const {parentRefPath} = childParams\n\n handleEditReference({\n id: dupeId,\n type,\n parentRefPath: parentRefPath ? pathFromString(parentRefPath) : [''],\n template: {id: dupeId},\n })\n },\n [documentStore.pair, duplicate, groupIndex, handleEditReference, id, routerPanesState, type],\n )\n\n if (isPermissionsLoading || !permissions?.granted) {\n return null\n }\n\n return (\n <Tooltip\n content={\n <Box>\n <Text muted size={1}>\n {t('action.duplicate.label')}\n </Text>\n </Box>\n }\n placement=\"left\"\n portal\n >\n <Button\n aria-label={t('action.duplicate.label')}\n as={Box}\n disabled={isDuplicating || Boolean(duplicate.disabled) || isPermissionsLoading}\n fontSize={1}\n icon={CopyIcon}\n mode=\"ghost\"\n onClick={handle}\n padding={2}\n style={{cursor: 'pointer'}}\n tone=\"default\"\n />\n </Tooltip>\n )\n}\n","import {ComposeIcon} from '@sanity/icons'\nimport {Button, Card, Flex} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {usePaneRouter} from 'sanity/structure'\n\nimport type {DocumentsPaneInitialValueTemplate} from './types'\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 padding={2}>\n <Flex gap={1} justify=\"flex-end\">\n {initialValueTemplates.map((template) => {\n if (!template.template) {\n return null\n }\n return (\n <ReferenceChildLink\n documentId={uuid()}\n documentType={template.schemaType}\n key={`${template.schemaType}-${template.template}`}\n parentRefPath={[]}\n template={{\n id: template.template,\n params: template.parameters ?? {},\n }}\n >\n <Button as=\"span\" icon={ComposeIcon} mode=\"bleed\" text={template.title} />\n </ReferenceChildLink>\n )\n })}\n </Flex>\n </Card>\n )\n}\n","import {WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Button, Card, Flex, Spinner, Stack, Text} from '@sanity/ui'\nimport {fromString as pathFromString} from '@sanity/util/paths'\nimport {useCallback} from 'react'\nimport {\n DefaultPreview,\n getPublishedId,\n Preview,\n useSchema,\n type ListenQueryOptions,\n type SanityDocument,\n} from 'sanity'\nimport {Feedback, useListeningQuery} from 'sanity-plugin-utils'\nimport {usePaneRouter} from 'sanity/structure'\n\nimport Debug from './Debug'\nimport DuplicateDocument from './DuplicateDocument'\nimport NewDocument from './NewDocument'\nimport type {DocumentsPaneInitialValueTemplate} from './types'\n\ntype DocumentsProps = {\n query: string\n params: Record<string, string>\n debug: boolean\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n options: ListenQueryOptions\n duplicate: boolean\n}\n\nexport default function Documents(props: DocumentsProps) {\n const {query, params, options, debug, initialValueTemplates, duplicate} = props\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const schema = useSchema()\n\n const {\n loading,\n error,\n data: _data,\n } = useListeningQuery<SanityDocument[]>(query, {\n params,\n initialValue: [],\n options,\n })\n const data = _data ?? []\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 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 align=\"center\" justify=\"center\">\n <Spinner muted />\n </Flex>\n </Box>\n )\n }\n\n if (error) {\n return (\n <Stack gap={5} padding={4}>\n <Feedback>There was an error performing this query</Feedback>\n {debug ? <Debug params={params} query={query} /> : null}\n </Stack>\n )\n }\n\n if (!data.length) {\n return (\n <>\n <NewDocument initialValueTemplates={initialValueTemplates} />\n <Stack gap={4} padding={4}>\n <DocumentsCount count={0} />\n <Feedback>No Documents found</Feedback>\n {debug ? <Debug params={params} query={query} /> : null}\n </Stack>\n </>\n )\n }\n\n return (\n <>\n <NewDocument initialValueTemplates={initialValueTemplates} />\n <Box paddingX={3} paddingTop={3} paddingBottom={1}>\n <Box paddingLeft={1}>\n <DocumentsCount count={data.length} />\n </Box>\n </Box>\n <Stack gap={1} padding={2}>\n {data.map((doc) => {\n const schemaType = schema.get(doc._type)\n const originalId = doc['_originalId']\n const previewValue = typeof originalId === 'string' ? {...doc, _id: originalId} : doc\n\n return schemaType ? (\n <Button\n key={doc._id}\n mode=\"bleed\"\n onClick={() => handleClick(doc._id, doc._type)}\n padding={2}\n >\n <Preview\n actions={\n duplicate ? (\n <DuplicateDocument id={getPublishedId(doc._id)} type={doc._type} />\n ) : null\n }\n layout=\"block\"\n schemaType={schemaType}\n value={previewValue}\n />\n </Button>\n ) : (\n <Card data-ui=\"Alert\" key={doc._id} padding={2} radius={2} tone=\"caution\">\n <DefaultPreview\n media={<WarningOutlineIcon />}\n subtitle={`Encountered type \"${doc._type}\" that is not defined in the schema.`}\n title=\"Unknown schema type found\"\n />\n </Card>\n )\n })}\n </Stack>\n </>\n )\n}\n\nfunction DocumentsCount({count}: {count: number}) {\n const label = count === 1 ? 'document' : 'documents'\n\n return (\n <Text muted size={1}>\n {count} {label}\n </Text>\n )\n}\n","import type {\n DocumentVersionsCollection,\n DocumentsPaneInitialValueTemplate,\n DocumentsPaneInitialValueTemplateResolver,\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","import delve from 'dlv'\n\nimport type {DocumentVersionsCollection, DocumentsPaneQueryParams} from './types'\n\ninterface ResolveParamsOptions {\n params?: DocumentsPaneQueryParams\n document: DocumentVersionsCollection\n useDraft: boolean\n}\n\ntype ResolveParamsReturn = undefined | Record<string, string>\n\nfunction defaultResolver(\n options: ResolveParamsOptions,\n): Record<string, string | undefined> | undefined {\n const {params, document, useDraft} = options\n\n if (!params || typeof params === 'function') {\n return {}\n }\n\n const doc = useDraft ? document.displayed : document.published\n\n if (!doc) {\n return undefined\n }\n\n const resolved: Record<string, string | undefined> = {}\n\n for (const [key, path] of Object.entries(params)) {\n resolved[key] = delve(doc, path)\n }\n\n return resolved\n}\n\nexport default function resolveParams(options: ResolveParamsOptions): ResolveParamsReturn {\n const {params, document} = options\n\n const resolvedParams =\n typeof params === 'function' ? params({document}) : defaultResolver(options)\n\n if (!resolvedParams) {\n return undefined\n }\n\n const entries = Object.entries(resolvedParams)\n\n if (entries.some(([, value]) => value === undefined)) {\n return undefined\n }\n\n return Object.fromEntries(\n entries.filter((entry): entry is [string, string] => entry[1] !== undefined),\n )\n}\n","import {Stack} from '@sanity/ui'\nimport {Feedback} from 'sanity-plugin-utils'\n\nimport Debug from './Debug'\nimport Documents from './Documents'\nimport resolveInitialValueTemplates from './resolveInitialValueTemplates'\nimport resolveParams from './resolveParams'\nimport type {DocumentsPaneProps} from './types'\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 duplicate = false,\n } = props.options\n\n if (useDraft && typeof params === 'function') {\n return (\n <Stack gap={5} padding={4}>\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} /> : null}\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 gap={5} padding={4}>\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} /> : null}\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 duplicate={duplicate}\n />\n )\n}\n"],"names":["Debug","t0","$","_c","query","params","t1","Symbol","for","t2","t3","JSON","stringify","t4","DuplicateDocument","props","id","type","documentStore","useDocumentStore","duplicate","useDocumentOperation","routerPanesState","groupIndex","handleEditReference","usePaneRouter","isDuplicating","setDuplicating","useState","permission","permissions","isPermissionsLoading","useDocumentPairPermissions","t","useTranslation","structureLocaleNamespace","pair","event","stopPropagation","dupeId","uuid","duplicateSuccess","firstValueFrom","operationEvents","pipe","filter","_temp","execute","childParams","parentRefPath","pathFromString","template","handle","granted","t5","Boolean","disabled","t6","cursor","t7","Box","CopyIcon","t8","e","op","NewDocument","initialValueTemplates","ReferenceChildLink","length","schemaType","parameters","ComposeIcon","title","map","Documents","options","debug","schema","useSchema","initialValue","loading","error","data","_data","useListeningQuery","handleClick","t9","doc","get","_type","originalId","_originalId","previewValue","_id","getPublishedId","DocumentsCount","count","label","resolveInitialValueTemplates","resolver","document","defaultResolver","useDraft","displayed","published","resolved","key","path","Object","entries","delve","resolveParams","resolvedParams","some","value","undefined","fromEntries","entry","DocumentsPane","initialValueTemplatesResolver","paramValues"],"mappings":"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"}
package/package.json CHANGED
@@ -1,108 +1,64 @@
1
1
  {
2
2
  "name": "sanity-plugin-documents-pane",
3
- "version": "3.0.2",
3
+ "version": "4.1.0",
4
4
  "description": "Displays the results of a GROQ query in a View Pane",
5
5
  "keywords": [
6
6
  "sanity",
7
7
  "sanity-plugin"
8
8
  ],
9
- "homepage": "https://github.com/sanity-io/sanity-plugin-documents-pane#readme",
9
+ "homepage": "https://github.com/sanity-io/plugins/tree/main/plugins/sanity-plugin-documents-pane#readme",
10
10
  "bugs": {
11
- "url": "https://github.com/sanity-io/sanity-plugin-documents-pane/issues"
12
- },
13
- "repository": {
14
- "type": "git",
15
- "url": "git@github.com:sanity-io/sanity-plugin-documents-pane.git"
11
+ "url": "https://github.com/sanity-io/plugins/issues"
16
12
  },
17
13
  "license": "MIT",
18
14
  "author": "Sanity.io <hello@sanity.io>",
19
- "exports": {
20
- ".": {
21
- "types": "./lib/src/index.d.ts",
22
- "source": "./src/index.ts",
23
- "import": "./lib/index.esm.js",
24
- "require": "./lib/index.js",
25
- "default": "./lib/index.esm.js"
26
- },
27
- "./package.json": "./package.json"
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+ssh://git@github.com/sanity-io/plugins.git",
18
+ "directory": "plugins/sanity-plugin-documents-pane"
28
19
  },
29
- "main": "./lib/index.js",
30
- "module": "./lib/index.esm.js",
31
- "source": "./src/index.ts",
32
- "types": "./lib/src/index.d.ts",
33
20
  "files": [
34
- "src",
35
- "lib",
36
- "v2-incompatible.js",
37
- "sanity.json"
21
+ "dist"
38
22
  ],
39
- "scripts": {
40
- "prebuild": "npm run clean && plugin-kit verify-package --silent && pkg-utils",
41
- "build": "pkg-utils build --strict",
42
- "clean": "rimraf lib",
43
- "compile": "tsc --noEmit",
44
- "link-watch": "plugin-kit link-watch",
45
- "lint": "eslint .",
46
- "prepare": "husky install",
47
- "prepublishOnly": "npm run compile && npm run build",
48
- "watch": "pkg-utils watch"
49
- },
50
- "husky": {
51
- "hooks": {
52
- "pre-commit": "npm run lint:fix"
53
- }
23
+ "type": "module",
24
+ "types": "./dist/index.d.ts",
25
+ "exports": {
26
+ ".": "./dist/index.js",
27
+ "./package.json": "./package.json"
54
28
  },
55
29
  "dependencies": {
56
- "@sanity/icons": "^3.7.0",
57
- "@sanity/incompatible-plugin": "^1.0.5",
58
- "@sanity/ui": "^3.1.0",
59
- "@sanity/util": "^3.78.1",
30
+ "@sanity/icons": "^3.7.4",
31
+ "@sanity/ui": "^3.2.0",
32
+ "@sanity/util": "^5.21.0",
60
33
  "@sanity/uuid": "^3.0.2",
61
34
  "dlv": "^1.1.3",
62
- "react-fast-compare": "^3.2.2",
63
35
  "rxjs": "^7.8.2",
64
- "sanity-plugin-utils": "^1.7.0"
36
+ "sanity-plugin-utils": "2.0.0"
65
37
  },
66
38
  "devDependencies": {
67
- "@commitlint/cli": "^17.2.0",
68
- "@commitlint/config-conventional": "^17.2.0",
69
- "@sanity/pkg-utils": "^2.0.0",
70
- "@sanity/plugin-kit": "^2.1.5",
71
- "@sanity/semantic-release-preset": "^4.1.4",
72
- "@types/dlv": "^1.1.2",
73
- "@types/react": "^18",
74
- "@types/react-dom": "^18",
75
- "@typescript-eslint/eslint-plugin": "^5.42.0",
76
- "@typescript-eslint/parser": "^5.42.0",
77
- "eslint": "^8.26.0",
78
- "eslint-config-prettier": "^8.5.0",
79
- "eslint-config-sanity": "^6.0.0",
80
- "eslint-plugin-prettier": "^4.2.1",
81
- "eslint-plugin-react": "^7.31.10",
82
- "eslint-plugin-react-hooks": "^4.6.0",
83
- "husky": "^8.0.1",
84
- "lint-staged": "^13.0.3",
85
- "prettier": "^2.7.1",
86
- "prettier-plugin-packagejson": "^2.3.0",
87
- "react": "^18",
88
- "react-dom": "^18",
89
- "rimraf": "^5.0.0",
90
- "sanity": "^3.0.0",
91
- "semantic-release": "^21.1.1",
92
- "typescript": "^5.0.0"
39
+ "@sanity/pkg-utils": "^10.5.0",
40
+ "@types/dlv": "^1.1.5",
41
+ "@types/react": "^19.2.14",
42
+ "@types/react-dom": "^19.2.3",
43
+ "babel-plugin-react-compiler": "^1.0.0",
44
+ "babel-plugin-styled-components": "^2.3.0",
45
+ "react": "^19.2.5",
46
+ "react-dom": "^19.2.5",
47
+ "sanity": "^5.21.0",
48
+ "styled-components": "^6.4.2",
49
+ "@repo/tsconfig": "0.0.0",
50
+ "@repo/package.config": "0.0.0"
93
51
  },
94
52
  "peerDependencies": {
95
- "react": "^18.3 || ^19",
96
- "react-dom": "^18.3 || ^19",
97
- "sanity": "^3.24.1 || ^4.0.0-0 || ^5.0.0",
53
+ "react": "^19.2",
54
+ "react-dom": "^19.2",
55
+ "sanity": "^5 || ^6.0.0-0",
98
56
  "styled-components": "^6.1"
99
57
  },
100
58
  "engines": {
101
- "node": ">=18"
59
+ "node": ">=20.19 <22 || >=22.12"
102
60
  },
103
- "sanityPlugin": {
104
- "verifyPackage": {
105
- "nodeEngine": false
106
- }
61
+ "scripts": {
62
+ "build": "pkg build --strict --check --clean"
107
63
  }
108
- }
64
+ }
package/lib/index.esm.js DELETED
@@ -1 +0,0 @@
1
- import{jsxs as e,Fragment as t,jsx as n}from"react/jsx-runtime";import{Stack as i,Box as r,Label as a,Code as o,Card as d,Flex as l,Button as c,Tooltip as p,Text as s,Spinner as u}from"@sanity/ui";import{useListeningQuery as m,Feedback as h}from"sanity-plugin-utils";import{useState as f,useCallback as y}from"react";import{fromString as g}from"@sanity/util/paths";import{useDocumentStore as b,useDocumentOperation as v,useDocumentPairPermissions as T,useTranslation as _,useSchema as q,Preview as P,getPublishedId as x,DefaultPreview as R}from"sanity";import{usePaneRouter as V,structureLocaleNamespace as j}from"sanity/structure";import{ComposeIcon as k,CopyIcon as I,WarningOutlineIcon as D}from"@sanity/icons";import{uuid as w}from"@sanity/uuid";import{firstValueFrom as E,filter as S}from"rxjs";import C from"dlv";function O(d){let{query:l,params:c}=d;return e(t,{children:[e(i,{space:4,children:[n(r,{children:n(a,{children:"Query"})}),n(r,{children:n(o,{children:l})})]}),c&&e(i,{space:4,children:[n(r,{children:n(a,{children:"Params"})}),n(r,{children:n(o,{children:JSON.stringify(c)})})]})]})}function z(e){const{initialValueTemplates:t=[]}=e,{ReferenceChildLink:i}=V();return t.length?n(d,{borderBottom:!0,padding:2,children:n(l,{justify:"flex-end",gap:1,children:t.map((e=>e.template?n(i,{documentId:w(),documentType:e.schemaType,template:{id:e.template,params:e.parameters},parentRefPath:[],children:n(c,{icon:n(k,{}),text:e.title,mode:"bleed",as:"span"})},"".concat(e.schemaType,"-").concat(e.template)):null))})}):null}function B(e){const{id:i,type:a}=e,o=b(),{duplicate:d}=v(i,a),{routerPanesState:l,groupIndex:u,handleEditReference:m}=V(),[h,q]=f(!1),[P,x]=T({id:i,type:a,permission:"duplicate"}),{t:R}=_(j),k=y((async e=>{var t;e.stopPropagation();const n=w();q(!0);const r=E(o.pair.operationEvents(i,a).pipe(S((e=>"duplicate"===e.op&&"success"===e.type))));d.execute(n),await r,q(!1);const c=(null==(t=l[u+1])?void 0:t[0].params)||{},{parentRefPath:p}=c;m({id:n,type:a,parentRefPath:p?g(p):[""],template:{id:n}})}),[o.pair,d,u,m,i,l,a]);return x||!(null==P?void 0:P.granted)?n(t,{}):n(p,{content:n(r,{children:n(s,{muted:!0,size:1,children:R("action.duplicate.label")})}),placement:"left",portal:!0,children:n(c,{onClick:k,padding:2,fontSize:1,as:r,icon:n(I,{}),mode:"ghost",tone:"default","aria-label":R("action.duplicate.label"),style:{cursor:"pointer"},disabled:h||Boolean(d.disabled)||x})})}function N(a){const{query:o,params:p,options:s,debug:f,initialValueTemplates:b,duplicate:v}=a,{routerPanesState:T,groupIndex:_,handleEditReference:j}=V(),k=q(),{loading:I,error:w,data:E}=m(o,{params:p,initialValue:[],options:s}),S=E,C=y(((e,t)=>{var n;const i=(null==(n=T[_+1])?void 0:n[0].params)||{},{parentRefPath:r}=i;j({id:e,type:t,parentRefPath:r?g(r):[""],template:{id:e}})}),[T,_,j]);return I?n(r,{padding:4,children:n(l,{justify:"center",align:"center",children:n(u,{muted:!0})})}):w?e(i,{padding:4,space:5,children:[n(h,{children:"There was en error performing this query"}),f&&n(O,{query:o,params:p})]}):(null==S?void 0:S.length)?e(t,{children:[n(z,{initialValueTemplates:b}),n(i,{padding:2,space:1,children:S.map((e=>{const t=k.get(e._type);return"_originalId"in e&&"string"==typeof e._originalId&&(e._id=e._originalId),t?n(c,{onClick:()=>C(e._id,e._type),padding:2,mode:"bleed",children:n(P,{value:e,schemaType:t,actions:v&&n(B,{id:x(e._id),type:e._type}),layout:"block"})},e._id):n(d,{radius:2,tone:"caution","data-ui":"Alert",padding:2,children:n(R,{media:n(D,{}),title:"Unknown schema type found",subtitle:'Encountered type "'.concat(e._type,'" that is not defined in the schema.')})},e._id)}))})]}):e(t,{children:[n(z,{initialValueTemplates:b}),e(i,{padding:4,space:5,children:[n(h,{children:"No Documents found"}),f&&n(O,{query:o,params:p})]})]})}function A(e){const{params:t,document:n}=e,i="function"==typeof t?t({document:n}):function(e){const{params:t,document:n,useDraft:i}=e;if(!t)return{};const r=i?n.displayed:n.published;return r?Object.keys(t).reduce(((e,n)=>({...e,[n]:C(r,t[n])})),{}):{}}(e);if(!Object.values(i).includes(void 0))return i}function J(t){const{document:r}=t,{query:a,params:o,useDraft:d=!1,debug:l=!1,initialValueTemplates:c,options:p={},duplicate:s=!1}=t.options;if(d&&"function"==typeof o)return e(i,{padding:4,space:5,children:[e(h,{children:[n("code",{children:"useDraft"})," should not be ",n("code",{children:"true"})," when supplying a function for",n("code",{children:"params"})]}),l&&n(O,{query:a})]});const u=A({document:r,params:o,useDraft:d}),m=function(e){const{resolver:t,document:n}=e||{};return t?t({document:n}):[]}({resolver:c,document:r});return u?n(N,{query:a,params:u,options:p,debug:l,initialValueTemplates:m,duplicate:s}):e(i,{padding:4,space:5,children:[n(h,{children:"Parameters for this query could not be resolved. This may mean the document does not yet exist, or is incomplete."}),l&&n(O,{query:a})]})}export{J as default};//# sourceMappingURL=index.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/Debug.tsx","../src/NewDocument.tsx","../src/DuplicateDocument.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/structure'\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 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 {Box, Button, Tooltip, Text} from '@sanity/ui'\nimport React, {useState, useCallback} from 'react'\nimport {filter, firstValueFrom} from 'rxjs'\nimport {CopyIcon} from '@sanity/icons'\nimport {\n useDocumentOperation,\n useDocumentPairPermissions,\n useDocumentStore,\n useTranslation,\n} from 'sanity'\nimport {usePaneRouter} from 'sanity/structure'\nimport {uuid} from '@sanity/uuid'\nimport {fromString as pathFromString} from '@sanity/util/paths'\n\nimport {structureLocaleNamespace} from 'sanity/structure'\n\ninterface NewDocumentProps {\n id: string\n type: string\n}\n\nexport default function DuplicateDocument(props: NewDocumentProps) {\n const {id, type} = props\n\n const documentStore = useDocumentStore()\n const {duplicate} = useDocumentOperation(id, type)\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const [isDuplicating, setDuplicating] = useState(false)\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'duplicate',\n })\n\n const {t} = useTranslation(structureLocaleNamespace)\n\n const handle = useCallback(\n async (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n const dupeId = uuid()\n\n setDuplicating(true)\n\n // set up the listener before executing\n const duplicateSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(id, type)\n .pipe(filter((e) => e.op === 'duplicate' && e.type === 'success'))\n )\n duplicate.execute(dupeId)\n\n // only navigate to the duplicated document when the operation is successful\n await duplicateSuccess\n setDuplicating(false)\n\n const childParams = routerPanesState[groupIndex + 1]?.[0].params || {}\n const {parentRefPath} = childParams\n\n handleEditReference({\n id: dupeId,\n type,\n parentRefPath: parentRefPath ? pathFromString(parentRefPath) : [``],\n template: {id: dupeId},\n })\n },\n [documentStore.pair, duplicate, groupIndex, handleEditReference, id, routerPanesState, type]\n )\n\n if (isPermissionsLoading || !permissions?.granted) {\n return <></>\n }\n\n return (\n <Tooltip\n content={\n <Box>\n <Text muted size={1}>\n {t('action.duplicate.label')}\n </Text>\n </Box>\n }\n placement=\"left\"\n portal\n >\n <Button\n onClick={handle}\n padding={2}\n fontSize={1}\n as={Box}\n icon={<CopyIcon />}\n mode=\"ghost\"\n tone=\"default\"\n aria-label={t('action.duplicate.label')}\n style={{cursor: 'pointer'}}\n disabled={isDuplicating || Boolean(duplicate.disabled) || isPermissionsLoading}\n />\n </Tooltip>\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 {\n Preview,\n useSchema,\n DefaultPreview,\n SanityDocument,\n ListenQueryOptions,\n getPublishedId,\n} 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'\nimport DuplicateDocument from './DuplicateDocument'\n\ntype DocumentsProps = {\n query: string\n params: {[key: string]: string}\n debug: boolean\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n options: ListenQueryOptions\n duplicate: boolean\n}\n\nexport default function Documents(props: DocumentsProps) {\n const {query, params, options, debug, initialValueTemplates, duplicate} = props\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const schema = useSchema()\n\n const {\n loading,\n error,\n data: _data,\n } = useListeningQuery<SanityDocument[]>(query, {\n params,\n initialValue: [],\n options,\n })\n const data = _data as SanityDocument[]\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 // eslint-disable-next-line react/jsx-no-bind\n onClick={() => handleClick(doc._id, doc._type)}\n padding={2}\n mode=\"bleed\"\n >\n <Preview\n value={doc}\n schemaType={schemaType}\n actions={\n duplicate && <DuplicateDocument id={getPublishedId(doc._id)} type={doc._type} />\n }\n layout=\"block\"\n />\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 duplicate = false,\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 duplicate={duplicate}\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","Tooltip","Text","Spinner","useListeningQuery","Feedback","useState","useCallback","fromString","useDocumentStore","useDocumentOperation","useDocumentPairPermissions","useTranslation","useSchema","Preview","getPublishedId","DefaultPreview","usePaneRouter","structureLocaleNamespace","ComposeIcon","CopyIcon","WarningOutlineIcon","uuid","firstValueFrom","filter","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","DuplicateDocument","type","documentStore","duplicate","routerPanesState","groupIndex","handleEditReference","isDuplicating","setDuplicating","permissions","isPermissionsLoading","permission","t","handle","async","_a","event","stopPropagation","dupeId","duplicateSuccess","pair","operationEvents","pipe","e","op","execute","childParams","pathFromString","granted","content","muted","size","placement","portal","onClick","fontSize","tone","style","cursor","disabled","Boolean","Documents","options","debug","schema","loading","error","data","_data","initialValue","handleClick","align","doc","get","_type","_originalId","_id","value","actions","layout","radius","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 DELETED
@@ -1 +0,0 @@
1
- "use strict";var e=require("react/jsx-runtime"),t=require("@sanity/ui"),n=require("sanity-plugin-utils"),i=require("react"),a=require("@sanity/util/paths"),r=require("sanity"),s=require("sanity/structure"),o=require("@sanity/icons"),d=require("@sanity/uuid"),u=require("rxjs");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=c(require("dlv"));function p(n){let{query:i,params:a}=n;return e.jsxs(e.Fragment,{children:[e.jsxs(t.Stack,{space:4,children:[e.jsx(t.Box,{children:e.jsx(t.Label,{children:"Query"})}),e.jsx(t.Box,{children:e.jsx(t.Code,{children:i})})]}),a&&e.jsxs(t.Stack,{space:4,children:[e.jsx(t.Box,{children:e.jsx(t.Label,{children:"Params"})}),e.jsx(t.Box,{children:e.jsx(t.Code,{children:JSON.stringify(a)})})]})]})}function m(n){const{initialValueTemplates:i=[]}=n,{ReferenceChildLink:a}=s.usePaneRouter();return i.length?e.jsx(t.Card,{borderBottom:!0,padding:2,children:e.jsx(t.Flex,{justify:"flex-end",gap:1,children:i.map((n=>n.template?e.jsx(a,{documentId:d.uuid(),documentType:n.schemaType,template:{id:n.template,params:n.parameters},parentRefPath:[],children:e.jsx(t.Button,{icon:e.jsx(o.ComposeIcon,{}),text:n.title,mode:"bleed",as:"span"})},"".concat(n.schemaType,"-").concat(n.template)):null))})}):null}function x(n){const{id:c,type:l}=n,p=r.useDocumentStore(),{duplicate:m}=r.useDocumentOperation(c,l),{routerPanesState:x,groupIndex:h,handleEditReference:j}=s.usePaneRouter(),[f,y]=i.useState(!1),[g,b]=r.useDocumentPairPermissions({id:c,type:l,permission:"duplicate"}),{t:q}=r.useTranslation(s.structureLocaleNamespace),k=i.useCallback((async e=>{var t;e.stopPropagation();const n=d.uuid();y(!0);const i=u.firstValueFrom(p.pair.operationEvents(c,l).pipe(u.filter((e=>"duplicate"===e.op&&"success"===e.type))));m.execute(n),await i,y(!1);const r=(null==(t=x[h+1])?void 0:t[0].params)||{},{parentRefPath:s}=r;j({id:n,type:l,parentRefPath:s?a.fromString(s):[""],template:{id:n}})}),[p.pair,m,h,j,c,x,l]);return b||!(null==g?void 0:g.granted)?e.jsx(e.Fragment,{}):e.jsx(t.Tooltip,{content:e.jsx(t.Box,{children:e.jsx(t.Text,{muted:!0,size:1,children:q("action.duplicate.label")})}),placement:"left",portal:!0,children:e.jsx(t.Button,{onClick:k,padding:2,fontSize:1,as:t.Box,icon:e.jsx(o.CopyIcon,{}),mode:"ghost",tone:"default","aria-label":q("action.duplicate.label"),style:{cursor:"pointer"},disabled:f||Boolean(m.disabled)||b})})}function h(d){const{query:u,params:c,options:l,debug:h,initialValueTemplates:j,duplicate:f}=d,{routerPanesState:y,groupIndex:g,handleEditReference:b}=s.usePaneRouter(),q=r.useSchema(),{loading:k,error:v,data:P}=n.useListeningQuery(u,{params:c,initialValue:[],options:l}),S=P,T=i.useCallback(((e,t)=>{var n;const i=(null==(n=y[g+1])?void 0:n[0].params)||{},{parentRefPath:r}=i;b({id:e,type:t,parentRefPath:r?a.fromString(r):[""],template:{id:e}})}),[y,g,b]);return k?e.jsx(t.Box,{padding:4,children:e.jsx(t.Flex,{justify:"center",align:"center",children:e.jsx(t.Spinner,{muted:!0})})}):v?e.jsxs(t.Stack,{padding:4,space:5,children:[e.jsx(n.Feedback,{children:"There was en error performing this query"}),h&&e.jsx(p,{query:u,params:c})]}):(null==S?void 0:S.length)?e.jsxs(e.Fragment,{children:[e.jsx(m,{initialValueTemplates:j}),e.jsx(t.Stack,{padding:2,space:1,children:S.map((n=>{const i=q.get(n._type);return"_originalId"in n&&"string"==typeof n._originalId&&(n._id=n._originalId),i?e.jsx(t.Button,{onClick:()=>T(n._id,n._type),padding:2,mode:"bleed",children:e.jsx(r.Preview,{value:n,schemaType:i,actions:f&&e.jsx(x,{id:r.getPublishedId(n._id),type:n._type}),layout:"block"})},n._id):e.jsx(t.Card,{radius:2,tone:"caution","data-ui":"Alert",padding:2,children:e.jsx(r.DefaultPreview,{media:e.jsx(o.WarningOutlineIcon,{}),title:"Unknown schema type found",subtitle:'Encountered type "'.concat(n._type,'" that is not defined in the schema.')})},n._id)}))})]}):e.jsxs(e.Fragment,{children:[e.jsx(m,{initialValueTemplates:j}),e.jsxs(t.Stack,{padding:4,space:5,children:[e.jsx(n.Feedback,{children:"No Documents found"}),h&&e.jsx(p,{query:u,params:c})]})]})}function j(e){const{params:t,document:n}=e,i="function"==typeof t?t({document:n}):function(e){const{params:t,document:n,useDraft:i}=e;if(!t)return{};const a=i?n.displayed:n.published;return a?Object.keys(t).reduce(((e,n)=>({...e,[n]:l.default(a,t[n])})),{}):{}}(e);if(!Object.values(i).includes(void 0))return i}module.exports=function(i){const{document:a}=i,{query:r,params:s,useDraft:o=!1,debug:d=!1,initialValueTemplates:u,options:c={},duplicate:l=!1}=i.options;if(o&&"function"==typeof s)return e.jsxs(t.Stack,{padding:4,space:5,children:[e.jsxs(n.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"})]}),d&&e.jsx(p,{query:r})]});const m=j({document:a,params:s,useDraft:o}),x=function(e){const{resolver:t,document:n}=e||{};return t?t({document:n}):[]}({resolver:u,document:a});return m?e.jsx(h,{query:r,params:m,options:c,debug:d,initialValueTemplates:x,duplicate:l}):e.jsxs(t.Stack,{padding:4,space:5,children:[e.jsx(n.Feedback,{children:"Parameters for this query could not be resolved. This may mean the document does not yet exist, or is incomplete."}),d&&e.jsx(p,{query:r})]})};//# sourceMappingURL=index.js.map
package/lib/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../src/Debug.tsx","../src/NewDocument.tsx","../src/DuplicateDocument.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/structure'\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 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 {Box, Button, Tooltip, Text} from '@sanity/ui'\nimport React, {useState, useCallback} from 'react'\nimport {filter, firstValueFrom} from 'rxjs'\nimport {CopyIcon} from '@sanity/icons'\nimport {\n useDocumentOperation,\n useDocumentPairPermissions,\n useDocumentStore,\n useTranslation,\n} from 'sanity'\nimport {usePaneRouter} from 'sanity/structure'\nimport {uuid} from '@sanity/uuid'\nimport {fromString as pathFromString} from '@sanity/util/paths'\n\nimport {structureLocaleNamespace} from 'sanity/structure'\n\ninterface NewDocumentProps {\n id: string\n type: string\n}\n\nexport default function DuplicateDocument(props: NewDocumentProps) {\n const {id, type} = props\n\n const documentStore = useDocumentStore()\n const {duplicate} = useDocumentOperation(id, type)\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const [isDuplicating, setDuplicating] = useState(false)\n const [permissions, isPermissionsLoading] = useDocumentPairPermissions({\n id,\n type,\n permission: 'duplicate',\n })\n\n const {t} = useTranslation(structureLocaleNamespace)\n\n const handle = useCallback(\n async (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation()\n const dupeId = uuid()\n\n setDuplicating(true)\n\n // set up the listener before executing\n const duplicateSuccess = firstValueFrom(\n documentStore.pair\n .operationEvents(id, type)\n .pipe(filter((e) => e.op === 'duplicate' && e.type === 'success'))\n )\n duplicate.execute(dupeId)\n\n // only navigate to the duplicated document when the operation is successful\n await duplicateSuccess\n setDuplicating(false)\n\n const childParams = routerPanesState[groupIndex + 1]?.[0].params || {}\n const {parentRefPath} = childParams\n\n handleEditReference({\n id: dupeId,\n type,\n parentRefPath: parentRefPath ? pathFromString(parentRefPath) : [``],\n template: {id: dupeId},\n })\n },\n [documentStore.pair, duplicate, groupIndex, handleEditReference, id, routerPanesState, type]\n )\n\n if (isPermissionsLoading || !permissions?.granted) {\n return <></>\n }\n\n return (\n <Tooltip\n content={\n <Box>\n <Text muted size={1}>\n {t('action.duplicate.label')}\n </Text>\n </Box>\n }\n placement=\"left\"\n portal\n >\n <Button\n onClick={handle}\n padding={2}\n fontSize={1}\n as={Box}\n icon={<CopyIcon />}\n mode=\"ghost\"\n tone=\"default\"\n aria-label={t('action.duplicate.label')}\n style={{cursor: 'pointer'}}\n disabled={isDuplicating || Boolean(duplicate.disabled) || isPermissionsLoading}\n />\n </Tooltip>\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 {\n Preview,\n useSchema,\n DefaultPreview,\n SanityDocument,\n ListenQueryOptions,\n getPublishedId,\n} 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'\nimport DuplicateDocument from './DuplicateDocument'\n\ntype DocumentsProps = {\n query: string\n params: {[key: string]: string}\n debug: boolean\n initialValueTemplates: DocumentsPaneInitialValueTemplate[]\n options: ListenQueryOptions\n duplicate: boolean\n}\n\nexport default function Documents(props: DocumentsProps) {\n const {query, params, options, debug, initialValueTemplates, duplicate} = props\n const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()\n const schema = useSchema()\n\n const {\n loading,\n error,\n data: _data,\n } = useListeningQuery<SanityDocument[]>(query, {\n params,\n initialValue: [],\n options,\n })\n const data = _data as SanityDocument[]\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 // eslint-disable-next-line react/jsx-no-bind\n onClick={() => handleClick(doc._id, doc._type)}\n padding={2}\n mode=\"bleed\"\n >\n <Preview\n value={doc}\n schemaType={schemaType}\n actions={\n duplicate && <DuplicateDocument id={getPublishedId(doc._id)} type={doc._type} />\n }\n layout=\"block\"\n />\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 duplicate = false,\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 duplicate={duplicate}\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","uuid","rxjs","_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","DuplicateDocument","type","documentStore","useDocumentStore","duplicate","useDocumentOperation","routerPanesState","groupIndex","handleEditReference","isDuplicating","setDuplicating","useState","permissions","isPermissionsLoading","useDocumentPairPermissions","permission","t","useTranslation","structureLocaleNamespace","handle","useCallback","async","_a","event","stopPropagation","dupeId","duplicateSuccess","firstValueFrom","pair","operationEvents","pipe","filter","op","execute","childParams","pathFromString","granted","Tooltip","content","Text","muted","size","placement","portal","onClick","fontSize","CopyIcon","tone","style","cursor","disabled","Boolean","Documents","options","debug","schema","useSchema","loading","error","data","_data","useListeningQuery","initialValue","handleClick","align","Spinner","Feedback","doc","get","_type","_originalId","_id","Preview","value","actions","getPublishedId","layout","radius","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,43 +0,0 @@
1
- import {ListenQueryOptions} from 'sanity'
2
- import {default as React_2} from 'react'
3
- import {UserViewComponent} from 'sanity/structure'
4
-
5
- declare function DocumentsPane(props: DocumentsPaneProps): React_2.JSX.Element
6
- export default DocumentsPane
7
-
8
- declare interface DocumentsPaneInitialValueTemplate {
9
- schemaType: string
10
- template?: string
11
- parameters?: {
12
- [key: string]: any
13
- }
14
- title: string
15
- }
16
-
17
- declare type DocumentsPaneInitialValueTemplateResolver = (params: {
18
- document: DocumentVersionsCollection
19
- }) => DocumentsPaneInitialValueTemplate[]
20
-
21
- declare type DocumentsPaneOptions = {
22
- query: string
23
- params?: DocumentsPaneQueryParams
24
- debug?: boolean
25
- useDraft?: boolean
26
- initialValueTemplates?: DocumentsPaneInitialValueTemplateResolver
27
- options?: ListenQueryOptions
28
- duplicate?: boolean
29
- }
30
-
31
- declare type DocumentsPaneProps = React_2.ComponentProps<UserViewComponent<DocumentsPaneOptions>>
32
-
33
- declare type DocumentsPaneQueryParams = (params: {document: DocumentVersionsCollection}) =>
34
- | {
35
- [key: string]: string
36
- }
37
- | {
38
- [key: string]: string
39
- }
40
-
41
- declare type DocumentVersionsCollection = React_2.ComponentProps<UserViewComponent>['document']
42
-
43
- export {}
package/sanity.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "parts": [
3
- {
4
- "implements": "part:@sanity/base/sanity-root",
5
- "path": "./v2-incompatible.js"
6
- }
7
- ]
8
- }
package/src/Debug.tsx DELETED
@@ -1,27 +0,0 @@
1
- import React from 'react'
2
- import {Code, Box, Label, Stack} from '@sanity/ui'
3
-
4
- export default function Debug({query, params}: {query: string; params?: {[key: string]: string}}) {
5
- return (
6
- <>
7
- <Stack space={4}>
8
- <Box>
9
- <Label>Query</Label>
10
- </Box>
11
- <Box>
12
- <Code>{query}</Code>
13
- </Box>
14
- </Stack>
15
- {params && (
16
- <Stack space={4}>
17
- <Box>
18
- <Label>Params</Label>
19
- </Box>
20
- <Box>
21
- <Code>{JSON.stringify(params)}</Code>
22
- </Box>
23
- </Stack>
24
- )}
25
- </>
26
- )
27
- }
package/src/Documents.tsx DELETED
@@ -1,135 +0,0 @@
1
- import React, {useCallback} from 'react'
2
- import {Box, Button, Stack, Flex, Spinner, Card} from '@sanity/ui'
3
- import {fromString as pathFromString} from '@sanity/util/paths'
4
- import {
5
- Preview,
6
- useSchema,
7
- DefaultPreview,
8
- SanityDocument,
9
- ListenQueryOptions,
10
- getPublishedId,
11
- } from 'sanity'
12
- import {usePaneRouter} from 'sanity/structure'
13
- import {WarningOutlineIcon} from '@sanity/icons'
14
- import {Feedback, useListeningQuery} from 'sanity-plugin-utils'
15
-
16
- import Debug from './Debug'
17
- import {DocumentsPaneInitialValueTemplate} from './types'
18
- import NewDocument from './NewDocument'
19
- import DuplicateDocument from './DuplicateDocument'
20
-
21
- type DocumentsProps = {
22
- query: string
23
- params: {[key: string]: string}
24
- debug: boolean
25
- initialValueTemplates: DocumentsPaneInitialValueTemplate[]
26
- options: ListenQueryOptions
27
- duplicate: boolean
28
- }
29
-
30
- export default function Documents(props: DocumentsProps) {
31
- const {query, params, options, debug, initialValueTemplates, duplicate} = props
32
- const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()
33
- const schema = useSchema()
34
-
35
- const {
36
- loading,
37
- error,
38
- data: _data,
39
- } = useListeningQuery<SanityDocument[]>(query, {
40
- params,
41
- initialValue: [],
42
- options,
43
- })
44
- const data = _data as SanityDocument[]
45
-
46
- const handleClick = useCallback(
47
- (id: string, type: string) => {
48
- const childParams = routerPanesState[groupIndex + 1]?.[0].params || {}
49
- const {parentRefPath} = childParams
50
-
51
- handleEditReference({
52
- id,
53
- type,
54
- // Uncertain that this works as intended
55
- parentRefPath: parentRefPath ? pathFromString(parentRefPath) : [``],
56
- template: {id},
57
- })
58
- },
59
- [routerPanesState, groupIndex, handleEditReference]
60
- )
61
-
62
- if (loading) {
63
- return (
64
- <Box padding={4}>
65
- <Flex justify="center" align="center">
66
- <Spinner muted />
67
- </Flex>
68
- </Box>
69
- )
70
- }
71
-
72
- if (error) {
73
- return (
74
- <Stack padding={4} space={5}>
75
- <Feedback>There was en error performing this query</Feedback>
76
- {debug && <Debug query={query} params={params} />}
77
- </Stack>
78
- )
79
- }
80
-
81
- if (!data?.length) {
82
- return (
83
- <>
84
- <NewDocument initialValueTemplates={initialValueTemplates} />
85
- <Stack padding={4} space={5}>
86
- <Feedback>No Documents found</Feedback>
87
- {debug && <Debug query={query} params={params} />}
88
- </Stack>
89
- </>
90
- )
91
- }
92
-
93
- return (
94
- <>
95
- <NewDocument initialValueTemplates={initialValueTemplates} />
96
- <Stack padding={2} space={1}>
97
- {data.map((doc) => {
98
- const schemaType = schema.get(doc._type)
99
-
100
- // Fixes display issue with document preview when perspective is 'previewDrafts'
101
- if ('_originalId' in doc && typeof doc._originalId === 'string') {
102
- doc._id = doc._originalId
103
- }
104
-
105
- return schemaType ? (
106
- <Button
107
- key={doc._id}
108
- // eslint-disable-next-line react/jsx-no-bind
109
- onClick={() => handleClick(doc._id, doc._type)}
110
- padding={2}
111
- mode="bleed"
112
- >
113
- <Preview
114
- value={doc}
115
- schemaType={schemaType}
116
- actions={
117
- duplicate && <DuplicateDocument id={getPublishedId(doc._id)} type={doc._type} />
118
- }
119
- layout="block"
120
- />
121
- </Button>
122
- ) : (
123
- <Card radius={2} tone="caution" data-ui="Alert" padding={2} key={doc._id}>
124
- <DefaultPreview
125
- media={<WarningOutlineIcon />}
126
- title="Unknown schema type found"
127
- subtitle={`Encountered type "${doc._type}" that is not defined in the schema.`}
128
- />
129
- </Card>
130
- )
131
- })}
132
- </Stack>
133
- </>
134
- )
135
- }
@@ -1,64 +0,0 @@
1
- import React from 'react'
2
- import {Stack} from '@sanity/ui'
3
- import {Feedback} from 'sanity-plugin-utils'
4
-
5
- import Documents from './Documents'
6
- import Debug from './Debug'
7
- import {DocumentsPaneProps} from './types'
8
- import resolveParams from './resolveParams'
9
- import resolveInitialValueTemplates from './resolveInitialValueTemplates'
10
-
11
- export default function DocumentsPane(props: DocumentsPaneProps) {
12
- const {document} = props
13
- const {
14
- query,
15
- params,
16
- useDraft = false,
17
- debug = false,
18
- initialValueTemplates: initialValueTemplatesResolver,
19
- options = {},
20
- duplicate = false,
21
- } = props.options
22
-
23
- if (useDraft && typeof params === 'function') {
24
- return (
25
- <Stack padding={4} space={5}>
26
- <Feedback>
27
- <code>useDraft</code> should not be <code>true</code> when supplying a function for
28
- <code>params</code>
29
- </Feedback>
30
- {debug && <Debug query={query} />}
31
- </Stack>
32
- )
33
- }
34
-
35
- const paramValues = resolveParams({document, params, useDraft})
36
-
37
- const initialValueTemplates = resolveInitialValueTemplates({
38
- resolver: initialValueTemplatesResolver,
39
- document,
40
- })
41
-
42
- if (!paramValues) {
43
- return (
44
- <Stack padding={4} space={5}>
45
- <Feedback>
46
- Parameters for this query could not be resolved. This may mean the document does not yet
47
- exist, or is incomplete.
48
- </Feedback>
49
- {debug && <Debug query={query} />}
50
- </Stack>
51
- )
52
- }
53
-
54
- return (
55
- <Documents
56
- query={query}
57
- params={paramValues}
58
- options={options}
59
- debug={debug}
60
- initialValueTemplates={initialValueTemplates}
61
- duplicate={duplicate}
62
- />
63
- )
64
- }
@@ -1,99 +0,0 @@
1
- import {Box, Button, Tooltip, Text} from '@sanity/ui'
2
- import React, {useState, useCallback} from 'react'
3
- import {filter, firstValueFrom} from 'rxjs'
4
- import {CopyIcon} from '@sanity/icons'
5
- import {
6
- useDocumentOperation,
7
- useDocumentPairPermissions,
8
- useDocumentStore,
9
- useTranslation,
10
- } from 'sanity'
11
- import {usePaneRouter} from 'sanity/structure'
12
- import {uuid} from '@sanity/uuid'
13
- import {fromString as pathFromString} from '@sanity/util/paths'
14
-
15
- import {structureLocaleNamespace} from 'sanity/structure'
16
-
17
- interface NewDocumentProps {
18
- id: string
19
- type: string
20
- }
21
-
22
- export default function DuplicateDocument(props: NewDocumentProps) {
23
- const {id, type} = props
24
-
25
- const documentStore = useDocumentStore()
26
- const {duplicate} = useDocumentOperation(id, type)
27
- const {routerPanesState, groupIndex, handleEditReference} = usePaneRouter()
28
- const [isDuplicating, setDuplicating] = useState(false)
29
- const [permissions, isPermissionsLoading] = useDocumentPairPermissions({
30
- id,
31
- type,
32
- permission: 'duplicate',
33
- })
34
-
35
- const {t} = useTranslation(structureLocaleNamespace)
36
-
37
- const handle = useCallback(
38
- async (event: React.MouseEvent<HTMLElement>) => {
39
- event.stopPropagation()
40
- const dupeId = uuid()
41
-
42
- setDuplicating(true)
43
-
44
- // set up the listener before executing
45
- const duplicateSuccess = firstValueFrom(
46
- documentStore.pair
47
- .operationEvents(id, type)
48
- .pipe(filter((e) => e.op === 'duplicate' && e.type === 'success'))
49
- )
50
- duplicate.execute(dupeId)
51
-
52
- // only navigate to the duplicated document when the operation is successful
53
- await duplicateSuccess
54
- setDuplicating(false)
55
-
56
- const childParams = routerPanesState[groupIndex + 1]?.[0].params || {}
57
- const {parentRefPath} = childParams
58
-
59
- handleEditReference({
60
- id: dupeId,
61
- type,
62
- parentRefPath: parentRefPath ? pathFromString(parentRefPath) : [``],
63
- template: {id: dupeId},
64
- })
65
- },
66
- [documentStore.pair, duplicate, groupIndex, handleEditReference, id, routerPanesState, type]
67
- )
68
-
69
- if (isPermissionsLoading || !permissions?.granted) {
70
- return <></>
71
- }
72
-
73
- return (
74
- <Tooltip
75
- content={
76
- <Box>
77
- <Text muted size={1}>
78
- {t('action.duplicate.label')}
79
- </Text>
80
- </Box>
81
- }
82
- placement="left"
83
- portal
84
- >
85
- <Button
86
- onClick={handle}
87
- padding={2}
88
- fontSize={1}
89
- as={Box}
90
- icon={<CopyIcon />}
91
- mode="ghost"
92
- tone="default"
93
- aria-label={t('action.duplicate.label')}
94
- style={{cursor: 'pointer'}}
95
- disabled={isDuplicating || Boolean(duplicate.disabled) || isPermissionsLoading}
96
- />
97
- </Tooltip>
98
- )
99
- }
@@ -1,40 +0,0 @@
1
- import {Button, Card, Flex} from '@sanity/ui'
2
- import React from 'react'
3
- import {DocumentsPaneInitialValueTemplate} from './types'
4
- import {ComposeIcon} from '@sanity/icons'
5
- import {usePaneRouter} from 'sanity/structure'
6
- import {uuid} from '@sanity/uuid'
7
-
8
- interface NewDocumentProps {
9
- initialValueTemplates: DocumentsPaneInitialValueTemplate[]
10
- }
11
-
12
- export default function NewDocument(props: NewDocumentProps) {
13
- const {initialValueTemplates = []} = props
14
- const {ReferenceChildLink} = usePaneRouter()
15
-
16
- if (!initialValueTemplates.length) return null
17
-
18
- return (
19
- <Card borderBottom padding={2}>
20
- <Flex justify="flex-end" gap={1}>
21
- {initialValueTemplates.map((template) => {
22
- if (!template.template) {
23
- return null
24
- }
25
- return (
26
- <ReferenceChildLink
27
- documentId={uuid()}
28
- documentType={template.schemaType}
29
- template={{id: template.template, params: template.parameters}}
30
- parentRefPath={[]}
31
- key={`${template.schemaType}-${template.template}`}
32
- >
33
- <Button icon={<ComposeIcon />} text={template.title} mode="bleed" as="span" />
34
- </ReferenceChildLink>
35
- )
36
- })}
37
- </Flex>
38
- </Card>
39
- )
40
- }
package/src/index.ts DELETED
@@ -1,3 +0,0 @@
1
- import DocumentsPane from './DocumentsPane'
2
-
3
- export default DocumentsPane
@@ -1,20 +0,0 @@
1
- import {
2
- DocumentsPaneInitialValueTemplate,
3
- DocumentsPaneInitialValueTemplateResolver,
4
- DocumentVersionsCollection,
5
- } from './types'
6
-
7
- interface ResolveInitialValueTemplatesOptions {
8
- resolver: DocumentsPaneInitialValueTemplateResolver | undefined
9
- document: DocumentVersionsCollection
10
- }
11
-
12
- export default function resolveInitialValueTemplates(
13
- options: ResolveInitialValueTemplatesOptions
14
- ): DocumentsPaneInitialValueTemplate[] {
15
- const {resolver, document} = options || {}
16
-
17
- if (!resolver) return []
18
-
19
- return resolver({document})
20
- }
@@ -1,50 +0,0 @@
1
- import {DocumentsPaneQueryParams, DocumentVersionsCollection} from './types'
2
- import delve from 'dlv'
3
-
4
- interface ResolveParamsOptions {
5
- params?: DocumentsPaneQueryParams
6
- document: DocumentVersionsCollection
7
- useDraft: boolean
8
- }
9
-
10
- type ResolveParamsReturn = undefined | {[key: string]: string}
11
-
12
- function defaultResolver(options: ResolveParamsOptions): {
13
- [key: string]: string | undefined
14
- } {
15
- const {params, document, useDraft} = options
16
-
17
- // params is optional
18
- if (!params) {
19
- return {}
20
- }
21
-
22
- // legacy useDraft behaviour
23
- const doc = useDraft ? document.displayed : document.published
24
-
25
- if (!doc) {
26
- return {}
27
- }
28
-
29
- return Object.keys(params).reduce(
30
- (acc, key) => ({
31
- ...acc,
32
- [key]: delve(doc, params[key as keyof DocumentsPaneQueryParams]),
33
- }),
34
- {}
35
- )
36
- }
37
-
38
- export default function resolveParams(options: ResolveParamsOptions): ResolveParamsReturn {
39
- const {params, document} = options
40
-
41
- const resolvedParams = typeof params == 'function' ? params({document}) : defaultResolver(options)
42
-
43
- // if any of the parameters are undefined, the query will error
44
- // so return undefined so the UI can show a more appropriate message
45
- if (Object.values(resolvedParams).includes(undefined)) return undefined
46
-
47
- // Typescript can't tell that we've guarded against any value being undefined,
48
- // so forcing the type
49
- return resolvedParams as {[key: string]: string}
50
- }
package/src/types.ts DELETED
@@ -1,34 +0,0 @@
1
- import React from 'react'
2
- import {ListenQueryOptions} from 'sanity'
3
- import {UserViewComponent} from 'sanity/structure'
4
-
5
- export type DocumentVersionsCollection = React.ComponentProps<UserViewComponent>['document']
6
-
7
- // eslint-disable-next-line prettier/prettier
8
- export type DocumentsPaneQueryParams = (params: {
9
- document: DocumentVersionsCollection
10
- }) => {[key: string]: string} | {[key: string]: string}
11
-
12
- export interface DocumentsPaneInitialValueTemplate {
13
- schemaType: string
14
- template?: string
15
- parameters?: {[key: string]: any}
16
- title: string
17
- }
18
-
19
- // eslint-disable-next-line prettier/prettier
20
- export type DocumentsPaneInitialValueTemplateResolver = (params: {
21
- document: DocumentVersionsCollection
22
- }) => DocumentsPaneInitialValueTemplate[]
23
-
24
- export type DocumentsPaneOptions = {
25
- query: string
26
- params?: DocumentsPaneQueryParams
27
- debug?: boolean
28
- useDraft?: boolean
29
- initialValueTemplates?: DocumentsPaneInitialValueTemplateResolver
30
- options?: ListenQueryOptions
31
- duplicate?: boolean
32
- }
33
-
34
- export type DocumentsPaneProps = React.ComponentProps<UserViewComponent<DocumentsPaneOptions>>
@@ -1,10 +0,0 @@
1
- const {showIncompatiblePluginDialog} = require('@sanity/incompatible-plugin')
2
- const {name, version} = require('./package.json')
3
-
4
- export default showIncompatiblePluginDialog({
5
- name: name,
6
- versions: {
7
- v3: version,
8
- v2: '^1.1.0',
9
- },
10
- })