@sanity/document-internationalization 1.0.0 → 1.0.1

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