sanity-plugin-documents-pane 3.0.2 → 4.0.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.
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +320 -0
- package/dist/index.js.map +1 -0
- package/package.json +36 -80
- package/lib/index.esm.js +0 -1
- package/lib/index.esm.js.map +0 -1
- package/lib/index.js +0 -1
- package/lib/index.js.map +0 -1
- package/lib/src/index.d.ts +0 -43
- package/sanity.json +0 -8
- package/src/Debug.tsx +0 -27
- package/src/Documents.tsx +0 -135
- package/src/DocumentsPane.tsx +0 -64
- package/src/DuplicateDocument.tsx +0 -99
- package/src/NewDocument.tsx +0 -40
- package/src/index.ts +0 -3
- package/src/resolveInitialValueTemplates.ts +0 -20
- package/src/resolveParams.ts +0 -50
- package/src/types.ts +0 -34
- package/v2-incompatible.js +0 -10
package/dist/index.d.ts
ADDED
|
@@ -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,320 @@
|
|
|
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(46), {
|
|
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;
|
|
180
|
+
$[20] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t52 = /* @__PURE__ */ jsx(Feedback, { children: "No Documents found" }), $[20] = t52) : t52 = $[20];
|
|
181
|
+
let t62;
|
|
182
|
+
$[21] !== debug || $[22] !== params || $[23] !== query ? (t62 = debug ? /* @__PURE__ */ jsx(Debug, { params, query }) : null, $[21] = debug, $[22] = params, $[23] = query, $[24] = t62) : t62 = $[24];
|
|
183
|
+
let t72;
|
|
184
|
+
$[25] !== t62 ? (t72 = /* @__PURE__ */ jsxs(Stack, { gap: 5, padding: 4, children: [
|
|
185
|
+
t52,
|
|
186
|
+
t62
|
|
187
|
+
] }), $[25] = t62, $[26] = t72) : t72 = $[26];
|
|
188
|
+
let t8;
|
|
189
|
+
return $[27] !== t42 || $[28] !== t72 ? (t8 = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
190
|
+
t42,
|
|
191
|
+
t72
|
|
192
|
+
] }), $[27] = t42, $[28] = t72, $[29] = t8) : t8 = $[29], t8;
|
|
193
|
+
}
|
|
194
|
+
let t4;
|
|
195
|
+
$[30] !== initialValueTemplates ? (t4 = /* @__PURE__ */ jsx(NewDocument, { initialValueTemplates }), $[30] = initialValueTemplates, $[31] = t4) : t4 = $[31];
|
|
196
|
+
let t5;
|
|
197
|
+
if ($[32] !== data || $[33] !== duplicate || $[34] !== handleClick || $[35] !== schema) {
|
|
198
|
+
let t62;
|
|
199
|
+
$[37] !== duplicate || $[38] !== handleClick || $[39] !== schema ? (t62 = (doc) => {
|
|
200
|
+
const schemaType = schema.get(doc._type), originalId = doc._originalId, previewValue = typeof originalId == "string" ? {
|
|
201
|
+
...doc,
|
|
202
|
+
_id: originalId
|
|
203
|
+
} : doc;
|
|
204
|
+
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);
|
|
205
|
+
}, $[37] = duplicate, $[38] = handleClick, $[39] = schema, $[40] = t62) : t62 = $[40], t5 = data.map(t62), $[32] = data, $[33] = duplicate, $[34] = handleClick, $[35] = schema, $[36] = t5;
|
|
206
|
+
} else
|
|
207
|
+
t5 = $[36];
|
|
208
|
+
let t6;
|
|
209
|
+
$[41] !== t5 ? (t6 = /* @__PURE__ */ jsx(Stack, { gap: 1, padding: 2, children: t5 }), $[41] = t5, $[42] = t6) : t6 = $[42];
|
|
210
|
+
let t7;
|
|
211
|
+
return $[43] !== t4 || $[44] !== t6 ? (t7 = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
212
|
+
t4,
|
|
213
|
+
t6
|
|
214
|
+
] }), $[43] = t4, $[44] = t6, $[45] = t7) : t7 = $[45], t7;
|
|
215
|
+
}
|
|
216
|
+
function resolveInitialValueTemplates(options) {
|
|
217
|
+
const {
|
|
218
|
+
resolver,
|
|
219
|
+
document
|
|
220
|
+
} = options;
|
|
221
|
+
return resolver ? resolver({
|
|
222
|
+
document
|
|
223
|
+
}) : [];
|
|
224
|
+
}
|
|
225
|
+
function defaultResolver(options) {
|
|
226
|
+
const {
|
|
227
|
+
params,
|
|
228
|
+
document,
|
|
229
|
+
useDraft
|
|
230
|
+
} = options;
|
|
231
|
+
if (!params || typeof params == "function")
|
|
232
|
+
return {};
|
|
233
|
+
const doc = useDraft ? document.displayed : document.published;
|
|
234
|
+
if (!doc)
|
|
235
|
+
return;
|
|
236
|
+
const resolved = {};
|
|
237
|
+
for (const [key, path] of Object.entries(params))
|
|
238
|
+
resolved[key] = delve(doc, path);
|
|
239
|
+
return resolved;
|
|
240
|
+
}
|
|
241
|
+
function resolveParams(options) {
|
|
242
|
+
const {
|
|
243
|
+
params,
|
|
244
|
+
document
|
|
245
|
+
} = options, resolvedParams = typeof params == "function" ? params({
|
|
246
|
+
document
|
|
247
|
+
}) : defaultResolver(options);
|
|
248
|
+
if (!resolvedParams)
|
|
249
|
+
return;
|
|
250
|
+
const entries = Object.entries(resolvedParams);
|
|
251
|
+
if (!entries.some(([, value]) => value === void 0))
|
|
252
|
+
return Object.fromEntries(entries.filter((entry) => entry[1] !== void 0));
|
|
253
|
+
}
|
|
254
|
+
function DocumentsPane(props) {
|
|
255
|
+
const $ = c(30), {
|
|
256
|
+
document
|
|
257
|
+
} = props, {
|
|
258
|
+
query,
|
|
259
|
+
params,
|
|
260
|
+
useDraft: t0,
|
|
261
|
+
debug: t1,
|
|
262
|
+
initialValueTemplates: initialValueTemplatesResolver,
|
|
263
|
+
options: t2,
|
|
264
|
+
duplicate: t3
|
|
265
|
+
} = props.options, useDraft = t0 === void 0 ? !1 : t0, debug = t1 === void 0 ? !1 : t1;
|
|
266
|
+
let t4;
|
|
267
|
+
$[0] !== t2 ? (t4 = t2 === void 0 ? {} : t2, $[0] = t2, $[1] = t4) : t4 = $[1];
|
|
268
|
+
const options = t4, duplicate = t3 === void 0 ? !1 : t3;
|
|
269
|
+
if (useDraft && typeof params == "function") {
|
|
270
|
+
let t52;
|
|
271
|
+
$[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t52 = /* @__PURE__ */ jsx("code", { children: "useDraft" }), $[2] = t52) : t52 = $[2];
|
|
272
|
+
let t62;
|
|
273
|
+
$[3] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t62 = /* @__PURE__ */ jsx("code", { children: "true" }), $[3] = t62) : t62 = $[3];
|
|
274
|
+
let t72;
|
|
275
|
+
$[4] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t72 = /* @__PURE__ */ jsxs(Feedback, { children: [
|
|
276
|
+
t52,
|
|
277
|
+
" should not be ",
|
|
278
|
+
t62,
|
|
279
|
+
" when supplying a function for",
|
|
280
|
+
/* @__PURE__ */ jsx("code", { children: "params" })
|
|
281
|
+
] }), $[4] = t72) : t72 = $[4];
|
|
282
|
+
let t8;
|
|
283
|
+
$[5] !== debug || $[6] !== query ? (t8 = debug ? /* @__PURE__ */ jsx(Debug, { query }) : null, $[5] = debug, $[6] = query, $[7] = t8) : t8 = $[7];
|
|
284
|
+
let t9;
|
|
285
|
+
return $[8] !== t8 ? (t9 = /* @__PURE__ */ jsxs(Stack, { gap: 5, padding: 4, children: [
|
|
286
|
+
t72,
|
|
287
|
+
t8
|
|
288
|
+
] }), $[8] = t8, $[9] = t9) : t9 = $[9], t9;
|
|
289
|
+
}
|
|
290
|
+
let t5;
|
|
291
|
+
$[10] !== document || $[11] !== params || $[12] !== useDraft ? (t5 = resolveParams({
|
|
292
|
+
document,
|
|
293
|
+
params,
|
|
294
|
+
useDraft
|
|
295
|
+
}), $[10] = document, $[11] = params, $[12] = useDraft, $[13] = t5) : t5 = $[13];
|
|
296
|
+
const paramValues = t5;
|
|
297
|
+
let t6;
|
|
298
|
+
$[14] !== document || $[15] !== initialValueTemplatesResolver ? (t6 = resolveInitialValueTemplates({
|
|
299
|
+
resolver: initialValueTemplatesResolver,
|
|
300
|
+
document
|
|
301
|
+
}), $[14] = document, $[15] = initialValueTemplatesResolver, $[16] = t6) : t6 = $[16];
|
|
302
|
+
const initialValueTemplates = t6;
|
|
303
|
+
if (!paramValues) {
|
|
304
|
+
let t72;
|
|
305
|
+
$[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];
|
|
306
|
+
let t8;
|
|
307
|
+
$[18] !== debug || $[19] !== query ? (t8 = debug ? /* @__PURE__ */ jsx(Debug, { query }) : null, $[18] = debug, $[19] = query, $[20] = t8) : t8 = $[20];
|
|
308
|
+
let t9;
|
|
309
|
+
return $[21] !== t8 ? (t9 = /* @__PURE__ */ jsxs(Stack, { gap: 5, padding: 4, children: [
|
|
310
|
+
t72,
|
|
311
|
+
t8
|
|
312
|
+
] }), $[21] = t8, $[22] = t9) : t9 = $[22], t9;
|
|
313
|
+
}
|
|
314
|
+
let t7;
|
|
315
|
+
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;
|
|
316
|
+
}
|
|
317
|
+
export {
|
|
318
|
+
DocumentsPane as default
|
|
319
|
+
};
|
|
320
|
+
//# 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} 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={5} padding={4}>\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 <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","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","doc","get","_type","originalId","_originalId","previewValue","_id","getPublishedId","resolveInitialValueTemplates","resolver","document","defaultResolver","useDraft","displayed","published","resolved","key","path","Object","entries","delve","resolveParams","resolvedParams","some","value","undefined","fromEntries","entry","DocumentsPane","initialValueTemplatesResolver","t9","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
|
+
"version": "4.0.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/
|
|
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
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
"
|
|
35
|
-
"lib",
|
|
36
|
-
"v2-incompatible.js",
|
|
37
|
-
"sanity.json"
|
|
21
|
+
"dist"
|
|
38
22
|
],
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
"
|
|
43
|
-
"
|
|
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.
|
|
57
|
-
"@sanity/
|
|
58
|
-
"@sanity/
|
|
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": "
|
|
36
|
+
"sanity-plugin-utils": "2.0.0"
|
|
65
37
|
},
|
|
66
38
|
"devDependencies": {
|
|
67
|
-
"@
|
|
68
|
-
"@
|
|
69
|
-
"@
|
|
70
|
-
"@
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
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/package.config": "0.0.0",
|
|
50
|
+
"@repo/tsconfig": "0.0.0"
|
|
93
51
|
},
|
|
94
52
|
"peerDependencies": {
|
|
95
|
-
"react": "^
|
|
96
|
-
"react-dom": "^
|
|
97
|
-
"sanity": "^
|
|
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": ">=
|
|
59
|
+
"node": ">=20.19 <22 || >=22.12"
|
|
102
60
|
},
|
|
103
|
-
"
|
|
104
|
-
"
|
|
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
|
package/lib/index.esm.js.map
DELETED
|
@@ -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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"}
|
package/lib/src/index.d.ts
DELETED
|
@@ -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
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
|
-
}
|
package/src/DocumentsPane.tsx
DELETED
|
@@ -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
|
-
}
|
package/src/NewDocument.tsx
DELETED
|
@@ -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,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
|
-
}
|
package/src/resolveParams.ts
DELETED
|
@@ -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>>
|
package/v2-incompatible.js
DELETED