@sanity/document-internationalization 1.0.0 → 1.0.2

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.
Files changed (114) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +89 -47
  3. package/lib/index.esm.js +2 -0
  4. package/lib/index.esm.js.map +1 -0
  5. package/lib/index.js +2 -0
  6. package/lib/index.js.map +1 -0
  7. package/lib/src/index.d.ts +200 -0
  8. package/package.json +99 -43
  9. package/src/actions/DeleteWithi18nAction.tsx +118 -0
  10. package/src/actions/DuplicateWithi18nAction.tsx +77 -0
  11. package/src/actions/PublishWithi18nAction.ts +118 -0
  12. package/src/actions/index.ts +42 -0
  13. package/src/badges/LanguageBadge.tsx +22 -0
  14. package/src/constants/I18nDelimiter.ts +1 -0
  15. package/src/constants/I18nPrefix.ts +1 -0
  16. package/src/constants/IdStructure.ts +4 -0
  17. package/src/constants/LanguageCultures.ts +902 -0
  18. package/src/constants/ReferenceBehavior.ts +5 -0
  19. package/src/constants/SupportedEmojiFlagCodes.ts +251 -0
  20. package/src/constants/UiMessages.ts +56 -0
  21. package/src/constants/index.ts +7 -0
  22. package/src/documentI18n.tsx +33 -0
  23. package/src/hooks/index.ts +2 -0
  24. package/src/hooks/useConfig.ts +22 -0
  25. package/src/hooks/useDelayedFlag.ts +31 -0
  26. package/src/index.ts +6 -1
  27. package/src/language-select/components/LanguageSelect/LanguageConfigContext.tsx +4 -0
  28. package/src/language-select/components/LanguageSelect/LanguageSelect.tsx +188 -0
  29. package/src/language-select/components/LanguageSelect/LanguageSelectContext.ts +16 -0
  30. package/src/language-select/components/LanguageSelect/LanguageSelectLabel.tsx +12 -0
  31. package/src/language-select/components/LanguageSelect/LanguageSelectList.tsx +84 -0
  32. package/src/language-select/components/LanguageSelect/LanguageSelectListItem.tsx +251 -0
  33. package/src/language-select/components/LanguageSelect/index.tsx +25 -0
  34. package/src/language-select/components/SingleFlag/SingleFlag.tsx +44 -0
  35. package/src/language-select/components/SingleFlag/allEmojiFlagCodes.ts +251 -0
  36. package/src/language-select/components/SingleFlag/index.ts +1 -0
  37. package/src/language-select/components/SplitPaneIcon/SplitPaneIcon.tsx +25 -0
  38. package/src/language-select/components/SplitPaneIcon/index.ts +1 -0
  39. package/src/language-select/components/index.ts +2 -0
  40. package/src/language-select/hooks/index.ts +1 -0
  41. package/src/language-select/hooks/useLanguages.ts +37 -0
  42. package/src/language-select/hooks/useListeningQuery.ts +66 -0
  43. package/src/structure/IDefaultDocumentNodeStructureProps.ts +4 -0
  44. package/src/structure/components/MaintenanceTab/MaintenanceTab.tsx +13 -0
  45. package/src/structure/components/MaintenanceTab/MaintenanceTabContent.tsx +259 -0
  46. package/src/structure/components/MaintenanceTab/index.ts +1 -0
  47. package/src/structure/components/MaintenanceTabResult/MaintenanceTabResult.tsx +44 -0
  48. package/src/structure/components/MaintenanceTabResult/index.ts +1 -0
  49. package/src/structure/components/MaintenanceTabTypeSelector/MaintenanceTabTypeSelector.tsx +56 -0
  50. package/src/structure/components/MaintenanceTabTypeSelector/index.ts +1 -0
  51. package/src/structure/hooks/index.ts +1 -0
  52. package/src/structure/hooks/useDocumentsInformation.ts +110 -0
  53. package/src/structure/index.tsx +120 -0
  54. package/src/structure/utils/fixBaseDocumentRefs.ts +30 -0
  55. package/src/structure/utils/fixBaseLanguageMismatch.ts +21 -0
  56. package/src/structure/utils/fixIdStructureMismatchDocuments.ts +72 -0
  57. package/src/structure/utils/fixLanguageFields.ts +32 -0
  58. package/src/structure/utils/fixOrphanedDocuments.ts +22 -0
  59. package/src/structure/utils/fixTranslationRefs.ts +50 -0
  60. package/src/structure/utils/index.ts +6 -0
  61. package/src/types/IEditState.ts +6 -0
  62. package/src/types/IExtendedLanguageObject.ts +6 -0
  63. package/src/types/ILanguageObject.ts +4 -0
  64. package/src/types/ILanguageQuery.ts +13 -0
  65. package/src/types/IResolverProps.ts +10 -0
  66. package/src/types/ITranslationRef.ts +6 -0
  67. package/src/types/IType.ts +40 -0
  68. package/src/types/IUseDocumentOperationResult.ts +11 -0
  69. package/src/types/TFieldNamesConfig.ts +5 -0
  70. package/src/types/TLanguage.ts +3 -0
  71. package/src/types/TLanguagesOption.ts +4 -0
  72. package/src/types/TSchema.ts +6 -0
  73. package/src/types/Ti18nConfig.ts +33 -0
  74. package/src/types/Ti18nDocument.ts +14 -0
  75. package/src/types/Ti18nSchema.ts +13 -0
  76. package/src/types/index.ts +15 -0
  77. package/src/utils/applyConfig.ts +43 -0
  78. package/src/utils/baseToTop.ts +5 -0
  79. package/src/utils/buildDocId.ts +8 -0
  80. package/src/utils/createSanityReference.ts +11 -0
  81. package/src/utils/getBaseIdFromId.ts +20 -0
  82. package/src/utils/getBaseLanguage.ts +6 -0
  83. package/src/utils/getFlag.ts +38 -0
  84. package/src/utils/getLanguageFromDocument.ts +9 -0
  85. package/src/utils/getLanguageFromId.ts +13 -0
  86. package/src/utils/getLanguagesFromOption.ts +40 -0
  87. package/src/utils/getTranslationsForId.ts +39 -0
  88. package/src/utils/index.ts +14 -0
  89. package/src/utils/makeObjectKey.ts +3 -0
  90. package/src/utils/normalizeLanguageList.ts +26 -0
  91. package/src/utils/serializePath.ts +11 -0
  92. package/src/utils/updateIntlFieldsForDocument.ts +79 -0
  93. package/src/utils/useSanityClient.ts +6 -0
  94. package/src/validators/index.ts +1 -0
  95. package/src/validators/isSlugUnique.ts +56 -0
  96. package/src/withDocumentI18nPlugin.ts +24 -0
  97. package/v2-incompatible.js +1 -1
  98. package/lib/cjs/index.js +0 -539
  99. package/lib/cjs/index.js.map +0 -1
  100. package/lib/esm/index.js +0 -532
  101. package/lib/esm/index.js.map +0 -1
  102. package/lib/types/index.d.ts +0 -12
  103. package/lib/types/index.d.ts.map +0 -1
  104. package/src/LanguageManage.tsx +0 -25
  105. package/src/LanguageOption.tsx +0 -158
  106. package/src/LanguagePatch.tsx +0 -61
  107. package/src/MenuButton.tsx +0 -101
  108. package/src/badges/index.tsx +0 -23
  109. package/src/constants.ts +0 -1
  110. package/src/hooks/useLanguageMetadata.tsx +0 -21
  111. package/src/hooks/useOpenInNewPane.tsx +0 -27
  112. package/src/plugin.tsx +0 -104
  113. package/src/schema/translation/metadata.ts +0 -42
  114. package/src/types.ts +0 -24
package/lib/cjs/index.js DELETED
@@ -1,539 +0,0 @@
1
- var $k7rGe$reactjsxruntime = require("react/jsx-runtime");
2
- var $k7rGe$react = require("react");
3
- var $k7rGe$sanity = require("sanity");
4
- var $k7rGe$sanityplugininternationalizedarray = require("sanity-plugin-internationalized-array");
5
- var $k7rGe$sanityicons = require("@sanity/icons");
6
- var $k7rGe$sanityui = require("@sanity/ui");
7
- var $k7rGe$sanityuuid = require("@sanity/uuid");
8
- var $k7rGe$sanitydesk = require("sanity/desk");
9
- var $k7rGe$sanity_unstable = require("sanity/_unstable");
10
- var $k7rGe$sanitypluginutils = require("sanity-plugin-utils");
11
-
12
- function $parcel$export(e, n, v, s) {
13
- Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
14
- }
15
- function $parcel$interopDefault(a) {
16
- return a && a.__esModule ? a.default : a;
17
- }
18
-
19
- $parcel$export(module.exports, "documentInternationalization", () => $45e3093e7de8dca2$export$5307c6793c6dc4ff);
20
-
21
-
22
-
23
-
24
-
25
-
26
- const $e61b1b1e89e0ba82$export$6d130f1fba85def = `translation.metadata`;
27
-
28
-
29
- var $c26c4ed90598f17e$export$2e2bcd8739ae039 = (0, $k7rGe$sanity.defineType)({
30
- type: "document",
31
- name: (0, $e61b1b1e89e0ba82$export$6d130f1fba85def),
32
- title: "Translation metadata",
33
- icon: (0, $k7rGe$sanityicons.TranslateIcon),
34
- liveEdit: true,
35
- fields: [
36
- (0, $k7rGe$sanity.defineField)({
37
- name: "translations",
38
- type: "internationalizedArrayReference"
39
- }),
40
- (0, $k7rGe$sanity.defineField)({
41
- name: "schemaType",
42
- type: "string",
43
- readOnly: true
44
- }),
45
- ],
46
- preview: {
47
- select: {
48
- translations: "translations",
49
- schemaType: "schemaType"
50
- },
51
- prepare (selection) {
52
- const { translations: translations , schemaType: schemaType } = selection;
53
- const title = translations.length === 1 ? `1 Translation` : `${translations.length} Translations`;
54
- const languageKeys = translations.length ? translations.map((t)=>t._key.toUpperCase()).join(", ") : ``;
55
- return {
56
- title: title,
57
- subtitle: `${schemaType?.toUpperCase()}: ${languageKeys}`
58
- };
59
- }
60
- }
61
- });
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
- function $84bf20e0930cf6cb$export$c0b236b71cb1c62b(id, type) {
80
- const routerContext = (0, ($parcel$interopDefault($k7rGe$react))).useContext((0, $k7rGe$sanity_unstable.RouterContext));
81
- const { routerPanesState: routerPanesState , groupIndex: groupIndex } = (0, $k7rGe$sanitydesk.usePaneRouter)();
82
- const openInNewPane = (0, ($parcel$interopDefault($k7rGe$react))).useCallback(()=>{
83
- if (!routerContext || !id || !type) return;
84
- const panes = [
85
- ...routerPanesState
86
- ];
87
- panes.splice(groupIndex + 1, 0, [
88
- {
89
- id: id,
90
- params: {
91
- type: type
92
- }
93
- },
94
- ]);
95
- const href = routerContext.resolvePathFromState({
96
- panes: panes
97
- });
98
- routerContext.navigateUrl({
99
- path: href
100
- });
101
- }, [
102
- id,
103
- type,
104
- routerContext,
105
- routerPanesState,
106
- groupIndex
107
- ]);
108
- return openInNewPane;
109
- }
110
-
111
-
112
- function $e86f8cded37e7324$var$createReference(key, ref, type) {
113
- return {
114
- _key: key,
115
- value: {
116
- _type: "reference",
117
- _ref: ref,
118
- _weak: true,
119
- _strengthenOnPublish: {
120
- type: type
121
- }
122
- }
123
- };
124
- }
125
- function $e86f8cded37e7324$export$2e2bcd8739ae039(props) {
126
- const { index: index , language: language , languageField: languageField , schemaType: schemaType , documentId: documentId , disabled: disabled , current: current , sourceId: sourceId , sourceLanguageId: sourceLanguageId , metadata: metadata , translation: translation , } = props;
127
- const client = (0, $k7rGe$sanity.useClient)();
128
- const toast = (0, $k7rGe$sanityui.useToast)();
129
- const open = (0, $84bf20e0930cf6cb$export$c0b236b71cb1c62b)(translation?.value?._ref, schemaType);
130
- const handleOpen = (0, $k7rGe$react.useCallback)(()=>open(), [
131
- open
132
- ]);
133
- const handleCreate = (0, $k7rGe$react.useCallback)(async ()=>{
134
- const metadataExists = Boolean(metadata?._id);
135
- const transaction = client.transaction();
136
- // 1. Duplicate current document
137
- // 2. Update language
138
- // 3. Add to translation metadata
139
- const documentIds = documentId.startsWith(`drafts.`) ? [
140
- documentId,
141
- documentId.replace(`drafts.`, ``)
142
- ] : [
143
- documentId,
144
- `drafts.${documentId}`
145
- ];
146
- const latestDocument = await client.fetch(`*[_id in $ids]|order(_updatedAt desc)[0]`, {
147
- ids: documentIds
148
- });
149
- const newTranslationDocument = {
150
- ...latestDocument,
151
- _id: `drafts.${(0, $k7rGe$sanityuuid.uuid)()}`,
152
- [languageField]: language.id
153
- };
154
- transaction.create(newTranslationDocument);
155
- const metadataId = metadata?._id ?? `translation.${(0, $k7rGe$sanityuuid.uuid)()}`;
156
- const newTranslationReference = $e86f8cded37e7324$var$createReference(language.id, newTranslationDocument._id.replace(`drafts.`, ``), schemaType);
157
- // Create translation metadata document if it doesn't already exist
158
- if (metadataExists) {
159
- console.log(`Adding translation to existing metadata document`);
160
- // const path = `translations[_key == "${id}"]`
161
- const path = `translations[${index - 1}]`;
162
- const metadataPatch = client.patch(metadataId).setIfMissing({
163
- translations: []
164
- }).insert(`before`, path, [
165
- newTranslationReference
166
- ]);
167
- transaction.patch(metadataPatch);
168
- } else {
169
- console.log(`Creating translation metadata document with source + new translation`);
170
- // Source language relies on a field named `language` on the document
171
- const sourceReference = sourceLanguageId ? $e86f8cded37e7324$var$createReference(sourceLanguageId, sourceId, schemaType) : null;
172
- transaction.createIfNotExists({
173
- _id: metadataId,
174
- _type: (0, $e61b1b1e89e0ba82$export$6d130f1fba85def),
175
- schemaType: schemaType,
176
- translations: [
177
- newTranslationReference,
178
- sourceReference
179
- ].filter(Boolean)
180
- });
181
- }
182
- transaction.commit().then(()=>{
183
- // openDocumentInSidePane(metadataId, `translation.metadata`)
184
- return toast.push({
185
- status: "success",
186
- title: `Created ${language.title} translation`,
187
- description: metadataExists ? `Updated Translations Metadata` : `Created Translations Metadata`
188
- });
189
- }).catch((err)=>{
190
- console.error(err);
191
- return toast.push({
192
- status: "error",
193
- title: `Error creating translation`,
194
- description: err.message
195
- });
196
- });
197
- }, [
198
- client,
199
- documentId,
200
- index,
201
- language,
202
- metadata,
203
- schemaType,
204
- sourceId,
205
- sourceLanguageId,
206
- toast
207
- ]);
208
- return /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Button), {
209
- onClick: translation ? handleOpen : handleCreate,
210
- mode: current ? `default` : `bleed`,
211
- disabled: disabled || current,
212
- children: /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsxs)((0, $k7rGe$sanityui.Flex), {
213
- gap: 3,
214
- align: "center",
215
- children: [
216
- disabled ? /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Spinner), {}) : /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Text), {
217
- size: 2,
218
- children: translation ? /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityicons.SplitVerticalIcon), {}) : current ? /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityicons.CheckmarkIcon), {}) : /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityicons.AddIcon), {})
219
- }),
220
- /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Box), {
221
- flex: 1,
222
- children: /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Text), {
223
- children: language.title
224
- })
225
- }),
226
- /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Badge), {
227
- tone: disabled || current ? `default` : `primary`,
228
- children: language.id
229
- })
230
- ]
231
- })
232
- });
233
- }
234
-
235
-
236
-
237
-
238
-
239
- function $e7da84a7b19404a5$export$1cb269715fc4503a(id, schemaType) {
240
- const query = `*[_type == $translationSchema && $id in translations[].value._ref][0]`;
241
- const { data: data , loading: loading , error: error } = (0, $k7rGe$sanitypluginutils.useListeningQuery)(query, {
242
- params: {
243
- id: id,
244
- translationSchema: (0, $e61b1b1e89e0ba82$export$6d130f1fba85def)
245
- }
246
- });
247
- return {
248
- data: data,
249
- loading: loading,
250
- error: error
251
- };
252
- }
253
-
254
-
255
-
256
-
257
-
258
-
259
-
260
-
261
- function $f3182cfdd416704b$export$2e2bcd8739ae039(props) {
262
- const { id: id } = props;
263
- const open = (0, $84bf20e0930cf6cb$export$c0b236b71cb1c62b)(id, (0, $e61b1b1e89e0ba82$export$6d130f1fba85def));
264
- return /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Button), {
265
- disabled: !id,
266
- mode: "ghost",
267
- text: "Manage Translations",
268
- icon: (0, $k7rGe$sanityicons.CogIcon),
269
- onClick: ()=>open()
270
- });
271
- }
272
-
273
-
274
-
275
-
276
-
277
-
278
-
279
- function $dd281fad6159a5d5$export$2e2bcd8739ae039(props) {
280
- const { language: language , languageField: languageField , documentId: documentId , schemaType: schemaType , source: source } = props;
281
- const client = (0, $k7rGe$sanity.useClient)();
282
- const toast = (0, $k7rGe$sanityui.useToast)();
283
- const handleClick = (0, ($parcel$interopDefault($k7rGe$react))).useCallback(()=>{
284
- const currentId = source ? source._id : `draft.${documentId}`;
285
- const transaction = client.transaction();
286
- if (!source) transaction.createIfNotExists({
287
- _id: currentId,
288
- _type: schemaType
289
- });
290
- const patch = client.patch(currentId).set({
291
- [languageField]: language.id
292
- });
293
- transaction.patch(patch);
294
- transaction.commit().then(()=>{
295
- toast.push({
296
- title: `Set document language to ${language.title}`,
297
- status: `success`
298
- });
299
- }).catch((err)=>{
300
- console.error(err);
301
- return toast.push({
302
- title: `Failed to set document language to ${language.title}`,
303
- status: `error`
304
- });
305
- });
306
- }, [
307
- source,
308
- documentId,
309
- client,
310
- languageField,
311
- language,
312
- schemaType,
313
- toast
314
- ]);
315
- return /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Button), {
316
- mode: "ghost",
317
- text: language.title,
318
- icon: (0, $k7rGe$sanityicons.ChevronRightIcon),
319
- onClick: ()=>handleClick()
320
- });
321
- }
322
-
323
-
324
- function $1a091a0050c5c21e$export$2e2bcd8739ae039(props) {
325
- const { supportedLanguages: supportedLanguages , schemaType: schemaType , documentId: documentId , languageField: languageField } = props;
326
- const [open, setOpen] = (0, $k7rGe$react.useState)(false);
327
- const handleClick = (0, $k7rGe$react.useCallback)(()=>setOpen((o)=>!o), []);
328
- const [button, setButton] = (0, $k7rGe$react.useState)(null);
329
- const [popover, setPopover] = (0, $k7rGe$react.useState)(null);
330
- const handleClickOutside = (0, $k7rGe$react.useCallback)(()=>setOpen(false), []);
331
- (0, $k7rGe$sanityui.useClickOutside)(handleClickOutside, [
332
- button,
333
- popover
334
- ]);
335
- const { data: metadata , loading: loading , error: error } = (0, $e7da84a7b19404a5$export$1cb269715fc4503a)(documentId, schemaType);
336
- const { draft: draft , published: published } = (0, $k7rGe$sanity.useEditState)(documentId, schemaType);
337
- const source = draft || published;
338
- const sourceLanguageId = source?.[languageField];
339
- const content = /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Box), {
340
- overflow: "auto",
341
- children: error ? /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Card), {
342
- tone: "critical",
343
- padding: 2,
344
- children: /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsxs)((0, $k7rGe$sanityui.Text), {
345
- children: [
346
- "Error: ",
347
- error
348
- ]
349
- })
350
- }) : /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsxs)((0, $k7rGe$sanityui.Stack), {
351
- padding: 1,
352
- space: 1,
353
- children: [
354
- supportedLanguages.length > 0 ? /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsxs)((0, $k7rGe$reactjsxruntime.Fragment), {
355
- children: [
356
- supportedLanguages.map((language, langIndex)=>!loading && sourceLanguageId ? /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $e86f8cded37e7324$export$2e2bcd8739ae039), {
357
- index: langIndex,
358
- language: language,
359
- languageField: languageField,
360
- schemaType: schemaType,
361
- documentId: documentId,
362
- disabled: loading,
363
- current: language.id === sourceLanguageId,
364
- metadata: metadata,
365
- sourceId: documentId,
366
- sourceLanguageId: sourceLanguageId,
367
- translation: metadata?.translations.find((t)=>t._key === language.id)
368
- }, language.id) : /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $dd281fad6159a5d5$export$2e2bcd8739ae039), {
369
- languageField: languageField,
370
- source: source,
371
- documentId: documentId,
372
- schemaType: schemaType,
373
- language: language
374
- }, language.id)),
375
- !loading && !sourceLanguageId ? /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Box), {
376
- padding: 3,
377
- children: /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsxs)((0, $k7rGe$sanityui.Text), {
378
- size: 1,
379
- align: "center",
380
- children: [
381
- "Choose a language to ",
382
- /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)("br", {}),
383
- "apply to ",
384
- /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)("strong", {
385
- children: "this"
386
- }),
387
- " Document"
388
- ]
389
- })
390
- }) : null
391
- ]
392
- }) : null,
393
- /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $f3182cfdd416704b$export$2e2bcd8739ae039), {
394
- id: metadata?._id
395
- })
396
- ]
397
- })
398
- });
399
- return /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Popover), {
400
- constrainSize: true,
401
- content: content,
402
- open: open,
403
- portal: true,
404
- ref: setPopover,
405
- children: /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanityui.Button), {
406
- text: "Translations",
407
- mode: "bleed",
408
- disabled: !source,
409
- tone: !source || !loading && sourceLanguageId ? undefined : `caution`,
410
- icon: (0, $k7rGe$sanityicons.TranslateIcon),
411
- onClick: handleClick,
412
- ref: setButton,
413
- selected: open
414
- })
415
- });
416
- }
417
-
418
-
419
- function $43ea10120cc4b152$export$c1130eba9f5e41c0(props, supportedLanguages, languageField) {
420
- const source = props?.draft || props?.published;
421
- const languageId = source?.[languageField];
422
- const language = supportedLanguages.find((l)=>l.id === languageId);
423
- if (!language) return null;
424
- return {
425
- label: language.id,
426
- title: language.title,
427
- color: `primary`
428
- };
429
- }
430
-
431
-
432
- const $45e3093e7de8dca2$var$DEFAULT_CONFIG = {
433
- supportedLanguages: [],
434
- schemaTypes: [],
435
- languageField: `language`
436
- };
437
- const $45e3093e7de8dca2$export$5307c6793c6dc4ff = (0, $k7rGe$sanity.createPlugin)((config)=>{
438
- const { supportedLanguages: supportedLanguages , schemaTypes: schemaTypes , languageField: languageField } = {
439
- ...$45e3093e7de8dca2$var$DEFAULT_CONFIG,
440
- ...config
441
- };
442
- const renderLanguageFilter = (schemaType, documentId)=>{
443
- return /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $1a091a0050c5c21e$export$2e2bcd8739ae039), {
444
- supportedLanguages: supportedLanguages,
445
- schemaType: schemaType,
446
- documentId: documentId ?? ``,
447
- languageField: languageField
448
- });
449
- };
450
- return {
451
- name: "@sanity/document-internationalization",
452
- document: {
453
- unstable_languageFilter: (prev, ctx)=>{
454
- const { schemaType: schemaType , documentId: documentId } = ctx;
455
- // TODO: Memoize this function
456
- // IWBN: If we could get the current document value here
457
- return schemaTypes.includes(schemaType) ? [
458
- ...prev,
459
- ()=>renderLanguageFilter(schemaType, documentId)
460
- ] : prev;
461
- },
462
- badges: (prev, context)=>{
463
- if (!schemaTypes.includes(context.schemaType)) return prev;
464
- return [
465
- (props)=>(0, $43ea10120cc4b152$export$c1130eba9f5e41c0)(props, supportedLanguages, languageField),
466
- ...prev
467
- ];
468
- }
469
- },
470
- schema: {
471
- // Create the metadata document type
472
- types: [
473
- (0, $c26c4ed90598f17e$export$2e2bcd8739ae039)
474
- ],
475
- // For every schema type this plugin is enabled on
476
- // Create an initial value template to set the language
477
- templates: (prev, { schema: schema })=>{
478
- const pluginTemplates = schemaTypes.map((schemaType)=>({
479
- id: `${schemaType}-with-language`,
480
- title: `${schema?.get(schemaType)?.title ?? schemaType}: with Language`,
481
- schemaType: schemaType,
482
- parameters: [
483
- {
484
- name: `languageId`,
485
- title: `Language ID`,
486
- type: `string`
487
- }
488
- ],
489
- value: ({ languageId: languageId })=>({
490
- [languageField]: languageId
491
- })
492
- }));
493
- return [
494
- ...prev,
495
- ...pluginTemplates
496
- ];
497
- }
498
- },
499
- plugins: [
500
- // Translation metadata stores its references using this plugin
501
- // It cuts down on attribute usage and gives UI conveniences
502
- // To add new languages
503
- (0, $k7rGe$sanityplugininternationalizedarray.internationalizedArray)({
504
- languages: supportedLanguages,
505
- fieldTypes: [
506
- (0, $k7rGe$sanity.defineField)({
507
- name: "reference",
508
- type: "reference",
509
- to: schemaTypes.map((type)=>({
510
- type: type
511
- })),
512
- // initialValue: (iv) => {
513
- // console.log(`iv`, iv)
514
- // return {[languageField]: `nah`}
515
- // },
516
- options: {
517
- collapsed: false,
518
- // @ts-ignore
519
- filter: ({ parent: parent })=>{
520
- if (!parent?._key) return null;
521
- return {
522
- filter: `${languageField} == $language`,
523
- params: {
524
- language: parent._key
525
- }
526
- };
527
- }
528
- }
529
- }),
530
- ]
531
- }),
532
- ]
533
- };
534
- });
535
-
536
-
537
-
538
-
539
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["src/index.ts","src/plugin.tsx","src/schema/translation/metadata.ts","src/constants.ts","src/MenuButton.tsx","src/LanguageOption.tsx","src/hooks/useOpenInNewPane.tsx","src/hooks/useLanguageMetadata.tsx","src/LanguageManage.tsx","src/LanguagePatch.tsx","src/badges/index.tsx"],"sourcesContent":["export {documentInternationalization} from './plugin'\n","import React from 'react'\nimport {createPlugin, defineField} from 'sanity'\nimport {internationalizedArray} from 'sanity-plugin-internationalized-array'\n\nimport metadata from './schema/translation/metadata'\nimport MenuButton from './MenuButton'\nimport {PluginConfig} from './types'\nimport {LanguageBadge} from './badges'\n\nconst DEFAULT_CONFIG = {\n supportedLanguages: [],\n schemaTypes: [],\n languageField: `language`,\n}\n\nexport const documentInternationalization = createPlugin<PluginConfig>((config) => {\n const {supportedLanguages, schemaTypes, languageField} = {...DEFAULT_CONFIG, ...config}\n\n const renderLanguageFilter = (schemaType: string, documentId?: string) => {\n return (\n <MenuButton\n supportedLanguages={supportedLanguages}\n schemaType={schemaType}\n documentId={documentId ?? ``}\n languageField={languageField}\n />\n )\n }\n\n return {\n name: '@sanity/document-internationalization',\n document: {\n unstable_languageFilter: (prev, ctx) => {\n const {schemaType, documentId} = ctx\n\n // TODO: Memoize this function\n // IWBN: If we could get the current document value here\n return schemaTypes.includes(schemaType)\n ? [...prev, () => renderLanguageFilter(schemaType, documentId)]\n : prev\n },\n badges: (prev, context) => {\n if (!schemaTypes.includes(context.schemaType)) {\n return prev\n }\n\n return [(props) => LanguageBadge(props, supportedLanguages, languageField), ...prev]\n },\n },\n schema: {\n // Create the metadata document type\n types: [metadata],\n\n // For every schema type this plugin is enabled on\n // Create an initial value template to set the language\n templates: (prev, {schema}) => {\n const pluginTemplates = schemaTypes.map((schemaType) => ({\n id: `${schemaType}-with-language`,\n title: `${schema?.get(schemaType)?.title ?? schemaType}: with Language`,\n schemaType,\n parameters: [{name: `languageId`, title: `Language ID`, type: `string`}],\n value: ({languageId}: {languageId: string}) => ({\n [languageField]: languageId,\n }),\n }))\n\n return [...prev, ...pluginTemplates]\n },\n },\n plugins: [\n // Translation metadata stores its references using this plugin\n // It cuts down on attribute usage and gives UI conveniences\n // To add new languages\n internationalizedArray({\n languages: supportedLanguages,\n fieldTypes: [\n defineField({\n name: 'reference',\n type: 'reference',\n to: schemaTypes.map((type) => ({type})),\n // initialValue: (iv) => {\n // console.log(`iv`, iv)\n // return {[languageField]: `nah`}\n // },\n options: {\n collapsed: false,\n // @ts-ignore\n filter: ({parent}: {parent: {_key: string}}) => {\n if (!parent?._key) {\n return null\n }\n\n return {\n filter: `${languageField} == $language`,\n params: {language: parent._key},\n }\n },\n },\n }),\n ],\n }),\n ],\n }\n})\n","import {defineType, defineField} from 'sanity'\nimport {TranslateIcon} from '@sanity/icons'\n\nimport {METADATA_SCHEMA_NAME} from '../../constants'\n\nexport default defineType({\n type: 'document',\n name: METADATA_SCHEMA_NAME,\n title: 'Translation metadata',\n icon: TranslateIcon,\n liveEdit: true,\n fields: [\n defineField({\n name: 'translations',\n type: 'internationalizedArrayReference',\n }),\n defineField({\n name: 'schemaType',\n type: 'string',\n readOnly: true,\n }),\n ],\n preview: {\n select: {\n translations: 'translations',\n schemaType: 'schemaType',\n },\n prepare(selection: any) {\n const {translations, schemaType} = selection\n const title =\n translations.length === 1 ? `1 Translation` : `${translations.length} Translations`\n const languageKeys = translations.length\n ? translations.map((t: {_key: string}) => t._key.toUpperCase()).join(', ')\n : ``\n\n return {\n title,\n subtitle: `${schemaType?.toUpperCase()}: ${languageKeys}`,\n }\n },\n },\n})\n","export const METADATA_SCHEMA_NAME = `translation.metadata`\n","import React, {useCallback, useState} from 'react'\nimport {Text, Card, useClickOutside, Stack, Popover, Button, Box} from '@sanity/ui'\nimport {TranslateIcon} from '@sanity/icons'\nimport {useEditState} from 'sanity'\n\nimport {Language} from './types'\nimport LanguageOption from './LanguageOption'\nimport {useTranslationMetadata} from './hooks/useLanguageMetadata'\nimport LanguageManage from './LanguageManage'\nimport LanguagePatch from './LanguagePatch'\n\ntype MenuButtonProps = {\n supportedLanguages: Language[]\n schemaType: string\n documentId: string\n languageField: string\n}\n\nexport default function MenuButton(props: MenuButtonProps) {\n const {supportedLanguages, schemaType, documentId, languageField} = props\n\n const [open, setOpen] = useState(false)\n const handleClick = useCallback(() => setOpen((o) => !o), [])\n const [button, setButton] = useState<HTMLElement | null>(null)\n const [popover, setPopover] = useState<HTMLElement | null>(null)\n const handleClickOutside = useCallback(() => setOpen(false), [])\n useClickOutside(handleClickOutside, [button, popover])\n const {data: metadata, loading, error} = useTranslationMetadata(documentId, schemaType)\n const {draft, published} = useEditState(documentId, schemaType)\n const source = draft || published\n\n const sourceLanguageId = source?.[languageField] as string | undefined\n\n const content = (\n <Box overflow=\"auto\">\n {error ? (\n <Card tone=\"critical\" padding={2}>\n <Text>Error: {error}</Text>\n </Card>\n ) : (\n <Stack padding={1} space={1}>\n {supportedLanguages.length > 0 ? (\n <>\n {supportedLanguages.map((language, langIndex) =>\n !loading && sourceLanguageId ? (\n <LanguageOption\n key={language.id}\n index={langIndex}\n language={language}\n languageField={languageField}\n schemaType={schemaType}\n documentId={documentId}\n disabled={loading}\n current={language.id === sourceLanguageId}\n metadata={metadata}\n sourceId={documentId}\n sourceLanguageId={sourceLanguageId}\n translation={metadata?.translations.find((t) => t._key === language.id)}\n />\n ) : (\n <LanguagePatch\n key={language.id}\n languageField={languageField}\n source={source}\n documentId={documentId}\n schemaType={schemaType}\n language={language}\n />\n )\n )}\n {!loading && !sourceLanguageId ? (\n <Box padding={3}>\n <Text size={1} align=\"center\">\n Choose a language to <br />\n apply to <strong>this</strong> Document\n </Text>\n </Box>\n ) : null}\n </>\n ) : null}\n <LanguageManage id={metadata?._id} />\n </Stack>\n )}\n </Box>\n )\n\n return (\n <Popover constrainSize content={content} open={open} portal ref={setPopover}>\n <Button\n text=\"Translations\"\n mode=\"bleed\"\n disabled={!source}\n tone={!source || (!loading && sourceLanguageId) ? undefined : `caution`}\n icon={TranslateIcon}\n onClick={handleClick}\n ref={setButton}\n selected={open}\n />\n </Popover>\n )\n}\n","import React, {useCallback} from 'react'\nimport {useClient} from 'sanity'\nimport {Button, Badge, Box, Flex, Text, useToast, Spinner} from '@sanity/ui'\nimport {uuid} from '@sanity/uuid'\nimport {SplitVerticalIcon, AddIcon, CheckmarkIcon} from '@sanity/icons'\n\nimport {Language, Metadata, TranslationReference} from './types'\nimport {METADATA_SCHEMA_NAME} from './constants'\nimport {useOpenInNewPane} from './hooks/useOpenInNewPane'\n\ntype LanguageOptionProps = {\n language: Language\n languageField: string\n index: number\n schemaType: string\n documentId: string\n disabled: boolean\n current: boolean\n sourceId: string\n sourceLanguageId?: string\n metadata?: Metadata | null\n translation?: TranslationReference\n}\n\nfunction createReference(key: string, ref: string, type: string) {\n return {\n _key: key,\n value: {\n _type: 'reference',\n _ref: ref,\n _weak: true,\n _strengthenOnPublish: {\n type,\n },\n },\n }\n}\n\nexport default function LanguageOption(props: LanguageOptionProps) {\n const {\n index,\n language,\n languageField,\n schemaType,\n documentId,\n disabled,\n current,\n sourceId,\n sourceLanguageId,\n metadata,\n translation,\n } = props\n const client = useClient()\n const toast = useToast()\n\n const open = useOpenInNewPane(translation?.value?._ref, schemaType)\n const handleOpen = useCallback(() => open(), [open])\n\n const handleCreate = useCallback(async () => {\n const metadataExists = Boolean(metadata?._id)\n const transaction = client.transaction()\n\n // 1. Duplicate current document\n // 2. Update language\n // 3. Add to translation metadata\n const documentIds = documentId.startsWith(`drafts.`)\n ? [documentId, documentId.replace(`drafts.`, ``)]\n : [documentId, `drafts.${documentId}`]\n const latestDocument = await client.fetch(`*[_id in $ids]|order(_updatedAt desc)[0]`, {\n ids: documentIds,\n })\n const newTranslationDocument = {\n ...latestDocument,\n _id: `drafts.${uuid()}`,\n [languageField]: language.id,\n }\n\n transaction.create(newTranslationDocument)\n\n const metadataId = metadata?._id ?? `translation.${uuid()}`\n const newTranslationReference = createReference(\n language.id,\n newTranslationDocument._id.replace(`drafts.`, ``),\n schemaType\n )\n\n // Create translation metadata document if it doesn't already exist\n if (metadataExists) {\n console.log(`Adding translation to existing metadata document`)\n // const path = `translations[_key == \"${id}\"]`\n const path = `translations[${index - 1}]`\n const metadataPatch = client\n .patch(metadataId)\n .setIfMissing({translations: []})\n .insert(`before`, path, [newTranslationReference])\n\n transaction.patch(metadataPatch)\n } else {\n console.log(`Creating translation metadata document with source + new translation`)\n // Source language relies on a field named `language` on the document\n const sourceReference = sourceLanguageId\n ? createReference(sourceLanguageId, sourceId, schemaType)\n : null\n\n transaction.createIfNotExists({\n _id: metadataId,\n _type: METADATA_SCHEMA_NAME,\n schemaType,\n translations: [newTranslationReference, sourceReference].filter(Boolean),\n })\n }\n\n transaction\n .commit()\n .then(() => {\n // openDocumentInSidePane(metadataId, `translation.metadata`)\n return toast.push({\n status: 'success',\n title: `Created ${language.title} translation`,\n description: metadataExists\n ? `Updated Translations Metadata`\n : `Created Translations Metadata`,\n })\n })\n .catch((err) => {\n console.error(err)\n\n return toast.push({\n status: 'error',\n title: `Error creating translation`,\n description: err.message,\n })\n })\n }, [client, documentId, index, language, metadata, schemaType, sourceId, sourceLanguageId, toast])\n\n return (\n <Button\n onClick={translation ? handleOpen : handleCreate}\n mode={current ? `default` : `bleed`}\n disabled={disabled || current}\n >\n <Flex gap={3} align=\"center\">\n {disabled ? (\n <Spinner />\n ) : (\n <Text size={2}>\n {/* eslint-disable-next-line no-nested-ternary */}\n {translation ? <SplitVerticalIcon /> : current ? <CheckmarkIcon /> : <AddIcon />}\n </Text>\n )}\n <Box flex={1}>\n <Text>{language.title}</Text>\n </Box>\n <Badge tone={disabled || current ? `default` : `primary`}>{language.id}</Badge>\n </Flex>\n </Button>\n )\n}\n","import React from 'react'\nimport {usePaneRouter} from 'sanity/desk'\nimport {RouterContext} from 'sanity/_unstable'\n\nexport function useOpenInNewPane(id?: string, type?: string) {\n const routerContext = React.useContext(RouterContext)\n const {routerPanesState, groupIndex} = usePaneRouter()\n\n const openInNewPane = React.useCallback(() => {\n if (!routerContext || !id || !type) {\n return\n }\n\n const panes = [...routerPanesState]\n panes.splice(groupIndex + 1, 0, [\n {\n id: id,\n params: {type},\n },\n ])\n\n const href = routerContext.resolvePathFromState({panes})\n routerContext.navigateUrl({path: href})\n }, [id, type, routerContext, routerPanesState, groupIndex])\n\n return openInNewPane\n}\n","import React from 'react'\nimport {useListeningQuery} from 'sanity-plugin-utils'\nimport {METADATA_SCHEMA_NAME} from '../constants'\n\nimport {Metadata} from '../types'\n\nexport function useTranslationMetadata(\n id: string,\n schemaType: string\n): {\n data: Metadata | null\n loading: boolean\n error: boolean\n} {\n const query = `*[_type == $translationSchema && $id in translations[].value._ref][0]`\n const {data, loading, error} = useListeningQuery<Metadata>(query, {\n params: {id, translationSchema: METADATA_SCHEMA_NAME},\n })\n\n return {data, loading, error}\n}\n","import React from 'react'\nimport {CogIcon} from '@sanity/icons'\nimport {useOpenInNewPane} from './hooks/useOpenInNewPane'\nimport {Button} from '@sanity/ui'\n\nimport {METADATA_SCHEMA_NAME} from './constants'\n\ntype LanguageManageProps = {\n id?: string\n}\n\nexport default function LanguageManage(props: LanguageManageProps) {\n const {id} = props\n const open = useOpenInNewPane(id, METADATA_SCHEMA_NAME)\n\n return (\n <Button\n disabled={!id}\n mode=\"ghost\"\n text=\"Manage Translations\"\n icon={CogIcon}\n onClick={() => open()}\n />\n )\n}\n","import React from 'react'\nimport {ChevronRightIcon} from '@sanity/icons'\nimport {Button, useToast} from '@sanity/ui'\nimport {SanityDocument, useClient} from 'sanity'\n\nimport {Language} from './types'\n\ntype LanguagePatchProps = {\n language: Language\n languageField: string\n documentId: string\n schemaType: string\n source: SanityDocument | null\n}\n\nexport default function LanguagePatch(props: LanguagePatchProps) {\n const {language, languageField, documentId, schemaType, source} = props\n const client = useClient()\n const toast = useToast()\n\n const handleClick = React.useCallback(() => {\n const currentId = source ? source._id : `draft.${documentId}`\n const transaction = client.transaction()\n\n if (!source) {\n transaction.createIfNotExists({\n _id: currentId,\n _type: schemaType,\n })\n }\n\n const patch = client.patch(currentId).set({[languageField]: language.id})\n transaction.patch(patch)\n\n transaction\n .commit()\n .then(() => {\n toast.push({\n title: `Set document language to ${language.title}`,\n status: `success`,\n })\n })\n .catch((err) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to set document language to ${language.title}`,\n status: `error`,\n })\n })\n }, [source, documentId, client, languageField, language, schemaType, toast])\n\n return (\n <Button\n mode=\"ghost\"\n text={language.title}\n icon={ChevronRightIcon}\n onClick={() => handleClick()}\n />\n )\n}\n","import {DocumentBadgeDescription, DocumentBadgeProps} from 'sanity'\n\nimport {Language} from '../types'\n\nexport function LanguageBadge(\n props: DocumentBadgeProps,\n supportedLanguages: Language[],\n languageField: string\n): DocumentBadgeDescription | null {\n const source = props?.draft || props?.published\n const languageId = source?.[languageField]\n const language = supportedLanguages.find((l) => l.id === languageId)\n\n if (!language) {\n return null\n }\n\n return {\n label: language.id,\n title: language.title,\n color: `primary`,\n }\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}