@easyling/sanity-connector 0.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.
- package/LICENSE +21 -0
- package/README.md +482 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/actions/bulkTranslate.d.ts +7 -0
- package/dist/actions/bulkTranslate.d.ts.map +1 -0
- package/dist/actions/bulkTranslate.js +543 -0
- package/dist/actions/bulkTranslate.js.map +1 -0
- package/dist/actions/manageDNTFields.d.ts +12 -0
- package/dist/actions/manageDNTFields.d.ts.map +1 -0
- package/dist/actions/manageDNTFields.js +100 -0
- package/dist/actions/manageDNTFields.js.map +1 -0
- package/dist/actions/translateDocument.d.ts +7 -0
- package/dist/actions/translateDocument.d.ts.map +1 -0
- package/dist/actions/translateDocument.js +256 -0
- package/dist/actions/translateDocument.js.map +1 -0
- package/dist/components/RadioWithDefault.d.ts +17 -0
- package/dist/components/RadioWithDefault.d.ts.map +1 -0
- package/dist/components/RadioWithDefault.js +29 -0
- package/dist/components/RadioWithDefault.js.map +1 -0
- package/dist/components/auth/AuthNavbar.d.ts +18 -0
- package/dist/components/auth/AuthNavbar.d.ts.map +1 -0
- package/dist/components/auth/AuthNavbar.js +15 -0
- package/dist/components/auth/AuthNavbar.js.map +1 -0
- package/dist/components/auth/AuthStatus.d.ts +27 -0
- package/dist/components/auth/AuthStatus.d.ts.map +1 -0
- package/dist/components/auth/AuthStatus.js +82 -0
- package/dist/components/auth/AuthStatus.js.map +1 -0
- package/dist/components/auth/AuthStatusWrapper.d.ts +15 -0
- package/dist/components/auth/AuthStatusWrapper.d.ts.map +1 -0
- package/dist/components/auth/AuthStatusWrapper.js +39 -0
- package/dist/components/auth/AuthStatusWrapper.js.map +1 -0
- package/dist/components/auth/MigrationPrompt.d.ts +20 -0
- package/dist/components/auth/MigrationPrompt.d.ts.map +1 -0
- package/dist/components/auth/MigrationPrompt.js +16 -0
- package/dist/components/auth/MigrationPrompt.js.map +1 -0
- package/dist/components/auth/MigrationPromptWrapper.d.ts +14 -0
- package/dist/components/auth/MigrationPromptWrapper.d.ts.map +1 -0
- package/dist/components/auth/MigrationPromptWrapper.js +16 -0
- package/dist/components/auth/MigrationPromptWrapper.js.map +1 -0
- package/dist/components/auth/OAuthCallback.d.ts +20 -0
- package/dist/components/auth/OAuthCallback.d.ts.map +1 -0
- package/dist/components/auth/OAuthCallback.js +12 -0
- package/dist/components/auth/OAuthCallback.js.map +1 -0
- package/dist/components/auth/index.d.ts +15 -0
- package/dist/components/auth/index.d.ts.map +1 -0
- package/dist/components/auth/index.js +12 -0
- package/dist/components/auth/index.js.map +1 -0
- package/dist/components/config/LocaleConfigTool.d.ts +17 -0
- package/dist/components/config/LocaleConfigTool.d.ts.map +1 -0
- package/dist/components/config/LocaleConfigTool.js +186 -0
- package/dist/components/config/LocaleConfigTool.js.map +1 -0
- package/dist/components/config/LocaleConfigToolWrapper.d.ts +13 -0
- package/dist/components/config/LocaleConfigToolWrapper.d.ts.map +1 -0
- package/dist/components/config/LocaleConfigToolWrapper.js +26 -0
- package/dist/components/config/LocaleConfigToolWrapper.js.map +1 -0
- package/dist/components/config/OAuthConfig.d.ts +26 -0
- package/dist/components/config/OAuthConfig.d.ts.map +1 -0
- package/dist/components/config/OAuthConfig.js +152 -0
- package/dist/components/config/OAuthConfig.js.map +1 -0
- package/dist/components/config/OAuthConfigWrapper.d.ts +13 -0
- package/dist/components/config/OAuthConfigWrapper.d.ts.map +1 -0
- package/dist/components/config/OAuthConfigWrapper.js +41 -0
- package/dist/components/config/OAuthConfigWrapper.js.map +1 -0
- package/dist/components/config/PasswordInput.d.ts +14 -0
- package/dist/components/config/PasswordInput.d.ts.map +1 -0
- package/dist/components/config/PasswordInput.js +23 -0
- package/dist/components/config/PasswordInput.js.map +1 -0
- package/dist/components/config/index.d.ts +9 -0
- package/dist/components/config/index.d.ts.map +1 -0
- package/dist/components/config/index.js +8 -0
- package/dist/components/config/index.js.map +1 -0
- package/dist/components/config/localeConfigToolDefinition.d.ts +13 -0
- package/dist/components/config/localeConfigToolDefinition.d.ts.map +1 -0
- package/dist/components/config/localeConfigToolDefinition.js +19 -0
- package/dist/components/config/localeConfigToolDefinition.js.map +1 -0
- package/dist/components/config/oauthConfigToolDefinition.d.ts +13 -0
- package/dist/components/config/oauthConfigToolDefinition.d.ts.map +1 -0
- package/dist/components/config/oauthConfigToolDefinition.js +19 -0
- package/dist/components/config/oauthConfigToolDefinition.js.map +1 -0
- package/dist/components/dialogs/ConfirmationDialog.d.ts +21 -0
- package/dist/components/dialogs/ConfirmationDialog.d.ts.map +1 -0
- package/dist/components/dialogs/ConfirmationDialog.js +28 -0
- package/dist/components/dialogs/ConfirmationDialog.js.map +1 -0
- package/dist/components/dialogs/ErrorDialog.d.ts +21 -0
- package/dist/components/dialogs/ErrorDialog.d.ts.map +1 -0
- package/dist/components/dialogs/ErrorDialog.js +28 -0
- package/dist/components/dialogs/ErrorDialog.js.map +1 -0
- package/dist/components/dialogs/LocaleSelectionDialog.d.ts +41 -0
- package/dist/components/dialogs/LocaleSelectionDialog.d.ts.map +1 -0
- package/dist/components/dialogs/LocaleSelectionDialog.js +117 -0
- package/dist/components/dialogs/LocaleSelectionDialog.js.map +1 -0
- package/dist/components/dialogs/SuccessDialog.d.ts +19 -0
- package/dist/components/dialogs/SuccessDialog.d.ts.map +1 -0
- package/dist/components/dialogs/SuccessDialog.js +37 -0
- package/dist/components/dialogs/SuccessDialog.js.map +1 -0
- package/dist/components/dialogs/index.d.ts +12 -0
- package/dist/components/dialogs/index.d.ts.map +1 -0
- package/dist/components/dialogs/index.js +8 -0
- package/dist/components/dialogs/index.js.map +1 -0
- package/dist/components/dnt/DNTFieldBadge.d.ts +16 -0
- package/dist/components/dnt/DNTFieldBadge.d.ts.map +1 -0
- package/dist/components/dnt/DNTFieldBadge.js +56 -0
- package/dist/components/dnt/DNTFieldBadge.js.map +1 -0
- package/dist/components/dnt/DNTFieldComponent.d.ts +17 -0
- package/dist/components/dnt/DNTFieldComponent.d.ts.map +1 -0
- package/dist/components/dnt/DNTFieldComponent.js +21 -0
- package/dist/components/dnt/DNTFieldComponent.js.map +1 -0
- package/dist/components/dnt/DNTFieldInput.d.ts +14 -0
- package/dist/components/dnt/DNTFieldInput.d.ts.map +1 -0
- package/dist/components/dnt/DNTFieldInput.js +76 -0
- package/dist/components/dnt/DNTFieldInput.js.map +1 -0
- package/dist/components/dnt/index.d.ts +7 -0
- package/dist/components/dnt/index.d.ts.map +1 -0
- package/dist/components/dnt/index.js +7 -0
- package/dist/components/dnt/index.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/pluginConfig.d.ts +163 -0
- package/dist/config/pluginConfig.d.ts.map +1 -0
- package/dist/config/pluginConfig.js +548 -0
- package/dist/config/pluginConfig.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +3 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +137 -0
- package/dist/plugin.js.map +1 -0
- package/dist/services/authStateManager.d.ts +94 -0
- package/dist/services/authStateManager.d.ts.map +1 -0
- package/dist/services/authStateManager.js +208 -0
- package/dist/services/authStateManager.js.map +1 -0
- package/dist/services/contentExtractor.d.ts +95 -0
- package/dist/services/contentExtractor.d.ts.map +1 -0
- package/dist/services/contentExtractor.js +516 -0
- package/dist/services/contentExtractor.js.map +1 -0
- package/dist/services/dialogService.d.ts +96 -0
- package/dist/services/dialogService.d.ts.map +1 -0
- package/dist/services/dialogService.js +244 -0
- package/dist/services/dialogService.js.map +1 -0
- package/dist/services/dntServiceManager.d.ts +44 -0
- package/dist/services/dntServiceManager.d.ts.map +1 -0
- package/dist/services/dntServiceManager.js +74 -0
- package/dist/services/dntServiceManager.js.map +1 -0
- package/dist/services/dntStorageAdapter.d.ts +73 -0
- package/dist/services/dntStorageAdapter.d.ts.map +1 -0
- package/dist/services/dntStorageAdapter.js +192 -0
- package/dist/services/dntStorageAdapter.js.map +1 -0
- package/dist/services/documentCreationService.d.ts +139 -0
- package/dist/services/documentCreationService.d.ts.map +1 -0
- package/dist/services/documentCreationService.js +938 -0
- package/dist/services/documentCreationService.js.map +1 -0
- package/dist/services/localeService.d.ts +160 -0
- package/dist/services/localeService.d.ts.map +1 -0
- package/dist/services/localeService.js +300 -0
- package/dist/services/localeService.js.map +1 -0
- package/dist/services/localeStorageAdapter.d.ts +42 -0
- package/dist/services/localeStorageAdapter.d.ts.map +1 -0
- package/dist/services/localeStorageAdapter.js +107 -0
- package/dist/services/localeStorageAdapter.js.map +1 -0
- package/dist/services/oauthConfigStorage.d.ts +46 -0
- package/dist/services/oauthConfigStorage.d.ts.map +1 -0
- package/dist/services/oauthConfigStorage.js +122 -0
- package/dist/services/oauthConfigStorage.js.map +1 -0
- package/dist/services/oauthService.d.ts +48 -0
- package/dist/services/oauthService.d.ts.map +1 -0
- package/dist/services/oauthService.js +71 -0
- package/dist/services/oauthService.js.map +1 -0
- package/dist/services/oauthServiceManager.d.ts +189 -0
- package/dist/services/oauthServiceManager.d.ts.map +1 -0
- package/dist/services/oauthServiceManager.js +380 -0
- package/dist/services/oauthServiceManager.js.map +1 -0
- package/dist/services/tokenStorage.d.ts +54 -0
- package/dist/services/tokenStorage.d.ts.map +1 -0
- package/dist/services/tokenStorage.js +140 -0
- package/dist/services/tokenStorage.js.map +1 -0
- package/dist/services/translationService.d.ts +374 -0
- package/dist/services/translationService.d.ts.map +1 -0
- package/dist/services/translationService.js +687 -0
- package/dist/services/translationService.js.map +1 -0
- package/dist/services/unifiedConfigStorage.d.ts +124 -0
- package/dist/services/unifiedConfigStorage.d.ts.map +1 -0
- package/dist/services/unifiedConfigStorage.js +304 -0
- package/dist/services/unifiedConfigStorage.js.map +1 -0
- package/dist/test-utils.d.ts +9 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/test-utils.js +13 -0
- package/dist/test-utils.js.map +1 -0
- package/dist/types/dialog.d.ts +107 -0
- package/dist/types/dialog.d.ts.map +1 -0
- package/dist/types/dialog.js +6 -0
- package/dist/types/dialog.js.map +1 -0
- package/dist/types/dnt.d.ts +84 -0
- package/dist/types/dnt.d.ts.map +1 -0
- package/dist/types/dnt.js +5 -0
- package/dist/types/dnt.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/locale.d.ts +116 -0
- package/dist/types/locale.d.ts.map +1 -0
- package/dist/types/locale.js +189 -0
- package/dist/types/locale.js.map +1 -0
- package/dist/types/oauth.d.ts +90 -0
- package/dist/types/oauth.d.ts.map +1 -0
- package/dist/types/oauth.js +62 -0
- package/dist/types/oauth.js.map +1 -0
- package/dist/types/pluginConfig.d.ts +45 -0
- package/dist/types/pluginConfig.d.ts.map +1 -0
- package/dist/types/pluginConfig.js +6 -0
- package/dist/types/pluginConfig.js.map +1 -0
- package/dist/types/translation.d.ts +122 -0
- package/dist/types/translation.d.ts.map +1 -0
- package/dist/types/translation.js +6 -0
- package/dist/types/translation.js.map +1 -0
- package/dist/utils/htmlFormatter.d.ts +66 -0
- package/dist/utils/htmlFormatter.d.ts.map +1 -0
- package/dist/utils/htmlFormatter.js +191 -0
- package/dist/utils/htmlFormatter.js.map +1 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +16 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +105 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +229 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/oauthErrorFeedback.d.ts +76 -0
- package/dist/utils/oauthErrorFeedback.d.ts.map +1 -0
- package/dist/utils/oauthErrorFeedback.js +134 -0
- package/dist/utils/oauthErrorFeedback.js.map +1 -0
- package/dist/utils/oauthLogger.d.ts +176 -0
- package/dist/utils/oauthLogger.d.ts.map +1 -0
- package/dist/utils/oauthLogger.js +282 -0
- package/dist/utils/oauthLogger.js.map +1 -0
- package/dist/utils/validator.d.ts +67 -0
- package/dist/utils/validator.d.ts.map +1 -0
- package/dist/utils/validator.js +390 -0
- package/dist/utils/validator.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulkTranslate.d.ts","sourceRoot":"","sources":["../../src/actions/bulkTranslate.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAA6B,MAAM,QAAQ,CAAC;AA8lCzD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,IAK/B,CAAC"}
|
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
3
|
+
import { useClient } from 'sanity';
|
|
4
|
+
import { TranslateIcon, CheckmarkIcon, CloseIcon, WarningOutlineIcon, RefreshIcon, ChevronDownIcon, ChevronRightIcon } from '@sanity/icons';
|
|
5
|
+
import { Card, Stack, Text, Button, Flex, Box, Spinner, Badge, Checkbox } from '@sanity/ui';
|
|
6
|
+
import { ContentExtractor } from '../services/contentExtractor';
|
|
7
|
+
import { DocumentCreationService } from '../services/documentCreationService';
|
|
8
|
+
import { LocaleService } from '../services/localeService';
|
|
9
|
+
import { SanityLocaleStorageAdapter } from '../services/localeStorageAdapter';
|
|
10
|
+
import { useDialogService } from '../services/dialogService';
|
|
11
|
+
import { OAuthServiceManager } from '../services/oauthServiceManager';
|
|
12
|
+
/**
|
|
13
|
+
* Bulk Translation Tool Component
|
|
14
|
+
* Requirements: 2.2, 2.4, 3.1, 3.4, 4.1, 4.3
|
|
15
|
+
*/
|
|
16
|
+
const BulkTranslateTool = () => {
|
|
17
|
+
const client = useClient();
|
|
18
|
+
const dialogService = useDialogService();
|
|
19
|
+
const [state, setState] = useState({
|
|
20
|
+
isProcessing: false,
|
|
21
|
+
isLoadingDocuments: false,
|
|
22
|
+
selectedDocuments: [],
|
|
23
|
+
availableDocuments: {},
|
|
24
|
+
selectedTypes: new Set(),
|
|
25
|
+
selectedDocumentIds: new Set(),
|
|
26
|
+
expandedTypes: new Set(),
|
|
27
|
+
summary: null,
|
|
28
|
+
error: null,
|
|
29
|
+
processingStatus: [],
|
|
30
|
+
currentProcessingIndex: -1,
|
|
31
|
+
createDocuments: false,
|
|
32
|
+
documentCreationResult: null,
|
|
33
|
+
selectedLocales: null
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Fetch all documents from Sanity, grouped by type and ordered by creation date
|
|
37
|
+
*/
|
|
38
|
+
const fetchDocuments = useCallback(async () => {
|
|
39
|
+
setState(prev => ({ ...prev, isLoadingDocuments: true, error: null }));
|
|
40
|
+
try {
|
|
41
|
+
// Query all documents, excluding system documents, Sanity internal documents, and plugin internal types (EL_*)
|
|
42
|
+
const query = `*[!(_id in path("_.**")) && !(_type match "sanity.**") && !(_type match "EL_*")] | order(_createdAt desc) {
|
|
43
|
+
_id,
|
|
44
|
+
_type,
|
|
45
|
+
_createdAt,
|
|
46
|
+
_updatedAt,
|
|
47
|
+
_rev,
|
|
48
|
+
title,
|
|
49
|
+
name,
|
|
50
|
+
heading,
|
|
51
|
+
label,
|
|
52
|
+
...
|
|
53
|
+
}`;
|
|
54
|
+
console.log('Fetching documents from Sanity...');
|
|
55
|
+
const documents = await client.fetch(query);
|
|
56
|
+
console.log(`Fetched ${documents.length} documents`);
|
|
57
|
+
// Group documents by type
|
|
58
|
+
const documentsByType = {};
|
|
59
|
+
documents.forEach(doc => {
|
|
60
|
+
if (!documentsByType[doc._type]) {
|
|
61
|
+
documentsByType[doc._type] = [];
|
|
62
|
+
}
|
|
63
|
+
documentsByType[doc._type].push(doc);
|
|
64
|
+
});
|
|
65
|
+
// Log the grouping for debugging
|
|
66
|
+
Object.keys(documentsByType).forEach(type => {
|
|
67
|
+
console.log(`Type "${type}": ${documentsByType[type].length} documents`);
|
|
68
|
+
});
|
|
69
|
+
setState(prev => ({
|
|
70
|
+
...prev,
|
|
71
|
+
availableDocuments: documentsByType,
|
|
72
|
+
isLoadingDocuments: false
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.error('Failed to fetch documents:', error);
|
|
77
|
+
setState(prev => ({
|
|
78
|
+
...prev,
|
|
79
|
+
error: error instanceof Error ? error.message : 'Failed to fetch documents',
|
|
80
|
+
isLoadingDocuments: false
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
}, [client]);
|
|
84
|
+
// Load documents on component mount
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
fetchDocuments();
|
|
87
|
+
}, [fetchDocuments]);
|
|
88
|
+
/**
|
|
89
|
+
* Handle document type selection (select/deselect all documents of a type)
|
|
90
|
+
*/
|
|
91
|
+
const handleTypeSelection = useCallback((type, selected) => {
|
|
92
|
+
setState(prev => {
|
|
93
|
+
const newSelectedTypes = new Set(prev.selectedTypes);
|
|
94
|
+
const newSelectedDocumentIds = new Set(prev.selectedDocumentIds);
|
|
95
|
+
if (selected) {
|
|
96
|
+
newSelectedTypes.add(type);
|
|
97
|
+
// Add all documents of this type to selected documents
|
|
98
|
+
if (prev.availableDocuments[type]) {
|
|
99
|
+
prev.availableDocuments[type].forEach(doc => {
|
|
100
|
+
newSelectedDocumentIds.add(doc._id);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
newSelectedTypes.delete(type);
|
|
106
|
+
// Remove all documents of this type from selected documents
|
|
107
|
+
if (prev.availableDocuments[type]) {
|
|
108
|
+
prev.availableDocuments[type].forEach(doc => {
|
|
109
|
+
newSelectedDocumentIds.delete(doc._id);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Update selected documents array based on selected IDs
|
|
114
|
+
const newSelectedDocuments = Object.values(prev.availableDocuments)
|
|
115
|
+
.flat()
|
|
116
|
+
.filter(doc => newSelectedDocumentIds.has(doc._id));
|
|
117
|
+
// Create processing status for selected documents
|
|
118
|
+
const processingStatus = newSelectedDocuments.map(doc => ({
|
|
119
|
+
documentId: doc._id,
|
|
120
|
+
title: getDocumentTitle(doc),
|
|
121
|
+
status: 'pending'
|
|
122
|
+
}));
|
|
123
|
+
return {
|
|
124
|
+
...prev,
|
|
125
|
+
selectedTypes: newSelectedTypes,
|
|
126
|
+
selectedDocumentIds: newSelectedDocumentIds,
|
|
127
|
+
selectedDocuments: newSelectedDocuments,
|
|
128
|
+
processingStatus,
|
|
129
|
+
summary: null,
|
|
130
|
+
error: null,
|
|
131
|
+
currentProcessingIndex: -1
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
}, []);
|
|
135
|
+
/**
|
|
136
|
+
* Handle individual document selection
|
|
137
|
+
*/
|
|
138
|
+
const handleDocumentSelection = useCallback((document, selected) => {
|
|
139
|
+
setState(prev => {
|
|
140
|
+
const newSelectedDocumentIds = new Set(prev.selectedDocumentIds);
|
|
141
|
+
const newSelectedTypes = new Set(prev.selectedTypes);
|
|
142
|
+
if (selected) {
|
|
143
|
+
newSelectedDocumentIds.add(document._id);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
newSelectedDocumentIds.delete(document._id);
|
|
147
|
+
// If no documents of this type are selected, remove the type from selectedTypes
|
|
148
|
+
const typeDocuments = prev.availableDocuments[document._type] || [];
|
|
149
|
+
const hasOtherSelectedInType = typeDocuments.some(doc => doc._id !== document._id && newSelectedDocumentIds.has(doc._id));
|
|
150
|
+
if (!hasOtherSelectedInType) {
|
|
151
|
+
newSelectedTypes.delete(document._type);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Check if all documents of this type are now selected
|
|
155
|
+
const typeDocuments = prev.availableDocuments[document._type] || [];
|
|
156
|
+
const allTypeDocumentsSelected = typeDocuments.every(doc => newSelectedDocumentIds.has(doc._id));
|
|
157
|
+
if (allTypeDocumentsSelected && typeDocuments.length > 0) {
|
|
158
|
+
newSelectedTypes.add(document._type);
|
|
159
|
+
}
|
|
160
|
+
// Update selected documents array
|
|
161
|
+
const newSelectedDocuments = Object.values(prev.availableDocuments)
|
|
162
|
+
.flat()
|
|
163
|
+
.filter(doc => newSelectedDocumentIds.has(doc._id));
|
|
164
|
+
// Create processing status for selected documents
|
|
165
|
+
const processingStatus = newSelectedDocuments.map(doc => ({
|
|
166
|
+
documentId: doc._id,
|
|
167
|
+
title: getDocumentTitle(doc),
|
|
168
|
+
status: 'pending'
|
|
169
|
+
}));
|
|
170
|
+
return {
|
|
171
|
+
...prev,
|
|
172
|
+
selectedTypes: newSelectedTypes,
|
|
173
|
+
selectedDocumentIds: newSelectedDocumentIds,
|
|
174
|
+
selectedDocuments: newSelectedDocuments,
|
|
175
|
+
processingStatus,
|
|
176
|
+
summary: null,
|
|
177
|
+
error: null,
|
|
178
|
+
currentProcessingIndex: -1
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
}, []);
|
|
182
|
+
/**
|
|
183
|
+
* Toggle expansion of document type to show individual documents
|
|
184
|
+
*/
|
|
185
|
+
const handleTypeExpansion = useCallback((type) => {
|
|
186
|
+
setState(prev => {
|
|
187
|
+
const newExpandedTypes = new Set(prev.expandedTypes);
|
|
188
|
+
if (newExpandedTypes.has(type)) {
|
|
189
|
+
newExpandedTypes.delete(type);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
newExpandedTypes.add(type);
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
...prev,
|
|
196
|
+
expandedTypes: newExpandedTypes
|
|
197
|
+
};
|
|
198
|
+
});
|
|
199
|
+
}, []);
|
|
200
|
+
/**
|
|
201
|
+
* Select all documents of all types
|
|
202
|
+
*/
|
|
203
|
+
const handleSelectAll = useCallback(() => {
|
|
204
|
+
const allTypes = Object.keys(state.availableDocuments);
|
|
205
|
+
const allDocuments = Object.values(state.availableDocuments).flat();
|
|
206
|
+
const allDocumentIds = new Set(allDocuments.map(doc => doc._id));
|
|
207
|
+
const processingStatus = allDocuments.map(doc => ({
|
|
208
|
+
documentId: doc._id,
|
|
209
|
+
title: getDocumentTitle(doc),
|
|
210
|
+
status: 'pending'
|
|
211
|
+
}));
|
|
212
|
+
setState(prev => ({
|
|
213
|
+
...prev,
|
|
214
|
+
selectedTypes: new Set(allTypes),
|
|
215
|
+
selectedDocumentIds: allDocumentIds,
|
|
216
|
+
selectedDocuments: allDocuments,
|
|
217
|
+
processingStatus,
|
|
218
|
+
summary: null,
|
|
219
|
+
error: null,
|
|
220
|
+
currentProcessingIndex: -1,
|
|
221
|
+
documentCreationResult: null
|
|
222
|
+
}));
|
|
223
|
+
}, [state.availableDocuments]);
|
|
224
|
+
/**
|
|
225
|
+
* Clear all selections
|
|
226
|
+
*/
|
|
227
|
+
const handleClearSelection = useCallback(() => {
|
|
228
|
+
setState(prev => ({
|
|
229
|
+
...prev,
|
|
230
|
+
selectedTypes: new Set(),
|
|
231
|
+
selectedDocumentIds: new Set(),
|
|
232
|
+
selectedDocuments: [],
|
|
233
|
+
processingStatus: [],
|
|
234
|
+
summary: null,
|
|
235
|
+
error: null,
|
|
236
|
+
currentProcessingIndex: -1,
|
|
237
|
+
documentCreationResult: null
|
|
238
|
+
}));
|
|
239
|
+
}, []);
|
|
240
|
+
/**
|
|
241
|
+
* Get document title from various possible fields
|
|
242
|
+
*/
|
|
243
|
+
const getDocumentTitle = (doc) => {
|
|
244
|
+
const titleFields = ['title', 'name', 'heading', 'label'];
|
|
245
|
+
for (const field of titleFields) {
|
|
246
|
+
if (doc[field] && typeof doc[field] === 'string') {
|
|
247
|
+
return doc[field];
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return `${doc._type} (${doc._id})`;
|
|
251
|
+
};
|
|
252
|
+
const handleBulkTranslate = useCallback(async () => {
|
|
253
|
+
if (state.selectedDocuments.length === 0) {
|
|
254
|
+
await dialogService.showError({
|
|
255
|
+
title: 'No Documents Selected',
|
|
256
|
+
message: 'Please select at least one document to translate.',
|
|
257
|
+
error: new Error('No documents selected for translation')
|
|
258
|
+
});
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
try {
|
|
262
|
+
// Get OAuth service manager and check authentication
|
|
263
|
+
// Requirements: 4.1, 4.2, 4.3, 10.5
|
|
264
|
+
const serviceManager = OAuthServiceManager.getInstance(client);
|
|
265
|
+
const authStateManager = serviceManager.getAuthStateManager();
|
|
266
|
+
const authState = authStateManager.getState();
|
|
267
|
+
// If OAuth is configured but not authenticated, prompt user to authenticate
|
|
268
|
+
if (serviceManager.isOAuthConfigured() && authState.state !== 'authenticated') {
|
|
269
|
+
await dialogService.showError({
|
|
270
|
+
title: 'Authentication Required',
|
|
271
|
+
message: 'You need to configure your Easyling credentials to use translation services.',
|
|
272
|
+
error: new Error('Please go to the Easyling Configuration tool to enter your access token and project ID.')
|
|
273
|
+
});
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
// Initialize locale service
|
|
277
|
+
const storageAdapter = new SanityLocaleStorageAdapter(client);
|
|
278
|
+
const localeService = new LocaleService(storageAdapter);
|
|
279
|
+
// Load locale configuration
|
|
280
|
+
await localeService.loadConfig();
|
|
281
|
+
const enabledLocales = localeService.getEnabledLocales();
|
|
282
|
+
// Check if locales are configured
|
|
283
|
+
if (enabledLocales.length === 0) {
|
|
284
|
+
await dialogService.showError({
|
|
285
|
+
title: 'No Locales Configured',
|
|
286
|
+
message: 'Please configure target locales before translating documents.',
|
|
287
|
+
error: new Error('No translation locales have been configured. Please use the Locale Configuration tool to add target languages.')
|
|
288
|
+
});
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
// Show locale selection dialog
|
|
292
|
+
const selectedLocalesResult = await dialogService.showLocaleSelection({
|
|
293
|
+
title: 'Select Target Locales',
|
|
294
|
+
message: `Choose the languages to translate ${state.selectedDocuments.length} document${state.selectedDocuments.length !== 1 ? 's' : ''} into:`,
|
|
295
|
+
availableLocales: enabledLocales,
|
|
296
|
+
selectedLocales: [],
|
|
297
|
+
selectedDocuments: state.selectedDocuments,
|
|
298
|
+
mode: 'bulk',
|
|
299
|
+
allowMultiple: true,
|
|
300
|
+
required: true,
|
|
301
|
+
showCreationModeOption: true,
|
|
302
|
+
defaultCreationMode: 'draft'
|
|
303
|
+
});
|
|
304
|
+
// User cancelled locale selection
|
|
305
|
+
if (!selectedLocalesResult || !selectedLocalesResult.locales || selectedLocalesResult.locales.length === 0) {
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
const selectedLocales = selectedLocalesResult.locales;
|
|
309
|
+
const creationMode = selectedLocalesResult.creationMode || 'draft';
|
|
310
|
+
// Ask user if they want to create new documents
|
|
311
|
+
const shouldCreateDocuments = await dialogService.showConfirmation({
|
|
312
|
+
title: 'Confirm Bulk Translation',
|
|
313
|
+
message: `Translate ${state.selectedDocuments.length} document${state.selectedDocuments.length !== 1 ? 's' : ''} to ${selectedLocales.length} locale${selectedLocales.length !== 1 ? 's' : ''}?`,
|
|
314
|
+
details: `This will:\n• Send translation requests for all selected documents\n• Create new documents with translated content for successful translations\n• Preserve the original document structures\n\nTarget locales: ${selectedLocales.join(', ')}`,
|
|
315
|
+
confirmText: 'Translate & Create Documents',
|
|
316
|
+
cancelText: 'Cancel',
|
|
317
|
+
tone: 'primary'
|
|
318
|
+
});
|
|
319
|
+
// User cancelled confirmation
|
|
320
|
+
if (!shouldCreateDocuments) {
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
setState(prev => ({
|
|
324
|
+
...prev,
|
|
325
|
+
isProcessing: true,
|
|
326
|
+
error: null,
|
|
327
|
+
summary: null,
|
|
328
|
+
currentProcessingIndex: 0,
|
|
329
|
+
createDocuments: shouldCreateDocuments,
|
|
330
|
+
documentCreationResult: null,
|
|
331
|
+
selectedLocales
|
|
332
|
+
}));
|
|
333
|
+
// Initialize services
|
|
334
|
+
const contentExtractor = new ContentExtractor();
|
|
335
|
+
const translationService = serviceManager.getTranslationService();
|
|
336
|
+
const documentCreationService = new DocumentCreationService(client);
|
|
337
|
+
console.log(`Starting bulk translation for ${state.selectedDocuments.length} documents`);
|
|
338
|
+
// Extract content from all selected documents
|
|
339
|
+
const extractedContents = await contentExtractor.extractBulkStructuredContent(state.selectedDocuments);
|
|
340
|
+
// Filter out documents with no content and update status
|
|
341
|
+
const validContents = extractedContents.filter(content => {
|
|
342
|
+
const hasContent = content.htmlContent && content.htmlContent.trim().length > 0;
|
|
343
|
+
if (!hasContent) {
|
|
344
|
+
// Update status for documents with no content
|
|
345
|
+
setState(prev => ({
|
|
346
|
+
...prev,
|
|
347
|
+
processingStatus: prev.processingStatus.map(status => status.documentId === content.documentId
|
|
348
|
+
? { ...status, status: 'failed', error: 'No translatable content found' }
|
|
349
|
+
: status)
|
|
350
|
+
}));
|
|
351
|
+
}
|
|
352
|
+
return hasContent;
|
|
353
|
+
});
|
|
354
|
+
if (validContents.length === 0) {
|
|
355
|
+
throw new Error('No translatable content found in selected documents');
|
|
356
|
+
}
|
|
357
|
+
console.log(`Processing ${validContents.length} documents with valid content`);
|
|
358
|
+
// Process documents one by one with progress updates
|
|
359
|
+
const summary = {
|
|
360
|
+
totalDocuments: state.selectedDocuments.length,
|
|
361
|
+
processedDocuments: 0,
|
|
362
|
+
failedDocuments: 0,
|
|
363
|
+
requests: [],
|
|
364
|
+
responses: []
|
|
365
|
+
};
|
|
366
|
+
for (let i = 0; i < validContents.length; i++) {
|
|
367
|
+
const content = validContents[i];
|
|
368
|
+
// Update current processing index and document status
|
|
369
|
+
setState(prev => ({
|
|
370
|
+
...prev,
|
|
371
|
+
currentProcessingIndex: i,
|
|
372
|
+
processingStatus: prev.processingStatus.map(status => status.documentId === content.documentId
|
|
373
|
+
? { ...status, status: 'processing' }
|
|
374
|
+
: status)
|
|
375
|
+
}));
|
|
376
|
+
try {
|
|
377
|
+
// Prepare and send translation request with selected locales
|
|
378
|
+
const request = translationService.prepareTranslationRequest(content, undefined, // documentType - use default
|
|
379
|
+
undefined, // sourceLanguage - use default
|
|
380
|
+
undefined, // targetLanguage - not used for multi-locale
|
|
381
|
+
selectedLocales // targetLocales array
|
|
382
|
+
);
|
|
383
|
+
const response = await translationService.sendTranslationRequest(request);
|
|
384
|
+
// Update summary
|
|
385
|
+
summary.requests.push(request);
|
|
386
|
+
summary.responses.push(response);
|
|
387
|
+
if (response.success) {
|
|
388
|
+
summary.processedDocuments++;
|
|
389
|
+
// Update document status to completed
|
|
390
|
+
setState(prev => ({
|
|
391
|
+
...prev,
|
|
392
|
+
processingStatus: prev.processingStatus.map(status => status.documentId === content.documentId
|
|
393
|
+
? { ...status, status: 'completed', response }
|
|
394
|
+
: status)
|
|
395
|
+
}));
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
summary.failedDocuments++;
|
|
399
|
+
// Update document status to failed
|
|
400
|
+
setState(prev => ({
|
|
401
|
+
...prev,
|
|
402
|
+
processingStatus: prev.processingStatus.map(status => status.documentId === content.documentId
|
|
403
|
+
? { ...status, status: 'failed', error: response.error, response }
|
|
404
|
+
: status)
|
|
405
|
+
}));
|
|
406
|
+
}
|
|
407
|
+
// Add a small delay to make progress visible
|
|
408
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
console.error(`Failed to process document ${content.documentId}:`, error);
|
|
412
|
+
summary.failedDocuments++;
|
|
413
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
|
|
414
|
+
summary.responses.push({
|
|
415
|
+
success: false,
|
|
416
|
+
error: errorMessage
|
|
417
|
+
});
|
|
418
|
+
// Update document status to failed
|
|
419
|
+
setState(prev => ({
|
|
420
|
+
...prev,
|
|
421
|
+
processingStatus: prev.processingStatus.map(status => status.documentId === content.documentId
|
|
422
|
+
? { ...status, status: 'failed', error: errorMessage }
|
|
423
|
+
: status)
|
|
424
|
+
}));
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
// Create documents if user requested and we have successful translations
|
|
428
|
+
let documentCreationResult = null;
|
|
429
|
+
if (shouldCreateDocuments && summary.processedDocuments > 0) {
|
|
430
|
+
console.log('Creating new documents from successful translations...');
|
|
431
|
+
// Get successful translations and their corresponding original documents
|
|
432
|
+
const successfulResponses = summary.responses.filter(response => response.success);
|
|
433
|
+
const successfulDocuments = state.selectedDocuments.filter(doc => {
|
|
434
|
+
const responseIndex = summary.responses.findIndex((_, index) => {
|
|
435
|
+
const request = summary.requests[index];
|
|
436
|
+
return request && request.documentId === doc._id;
|
|
437
|
+
});
|
|
438
|
+
return responseIndex >= 0 && summary.responses[responseIndex].success;
|
|
439
|
+
});
|
|
440
|
+
if (successfulDocuments.length > 0 && successfulResponses.length > 0) {
|
|
441
|
+
documentCreationResult = await documentCreationService.createBulkDocumentsFromTranslations(successfulDocuments, successfulResponses, {
|
|
442
|
+
targetLanguage: 'translated',
|
|
443
|
+
createAsVariant: true,
|
|
444
|
+
creationMode: creationMode
|
|
445
|
+
});
|
|
446
|
+
console.log('Document Creation Summary:', {
|
|
447
|
+
totalDocuments: documentCreationResult.totalDocuments,
|
|
448
|
+
successfulCreations: documentCreationResult.successfulCreations,
|
|
449
|
+
failedCreations: documentCreationResult.failedCreations,
|
|
450
|
+
errors: documentCreationResult.errors
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// Log bulk operation summary
|
|
455
|
+
console.log('Bulk Translation Summary:', {
|
|
456
|
+
timestamp: new Date().toISOString(),
|
|
457
|
+
totalDocuments: summary.totalDocuments,
|
|
458
|
+
processedDocuments: summary.processedDocuments,
|
|
459
|
+
failedDocuments: summary.failedDocuments,
|
|
460
|
+
successRate: summary.totalDocuments > 0
|
|
461
|
+
? ((summary.processedDocuments / summary.totalDocuments) * 100).toFixed(2) + '%'
|
|
462
|
+
: '0%'
|
|
463
|
+
});
|
|
464
|
+
setState(prev => ({
|
|
465
|
+
...prev,
|
|
466
|
+
summary,
|
|
467
|
+
documentCreationResult,
|
|
468
|
+
isProcessing: false,
|
|
469
|
+
currentProcessingIndex: -1
|
|
470
|
+
}));
|
|
471
|
+
console.log('Bulk translation completed:', summary);
|
|
472
|
+
// Show completion message to user
|
|
473
|
+
if (shouldCreateDocuments && documentCreationResult) {
|
|
474
|
+
dialogService.showSuccess({
|
|
475
|
+
title: 'Bulk Translation Completed',
|
|
476
|
+
message: `Successfully translated ${summary.processedDocuments} of ${summary.totalDocuments} documents to ${selectedLocales.length} locale${selectedLocales.length !== 1 ? 's' : ''}`,
|
|
477
|
+
details: `Translations: ${summary.processedDocuments}/${summary.totalDocuments} successful\nDocuments created: ${documentCreationResult.successfulCreations}/${documentCreationResult.totalDocuments} successful\nTarget locales: ${selectedLocales.join(', ')}\n\nCheck the console for detailed results and new document structures.`
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
dialogService.showSuccess({
|
|
482
|
+
title: 'Bulk Translation Completed',
|
|
483
|
+
message: `Successfully translated ${summary.processedDocuments} of ${summary.totalDocuments} documents`,
|
|
484
|
+
details: `Translations: ${summary.processedDocuments}/${summary.totalDocuments} successful\nTarget locales: ${selectedLocales.join(', ')}\n\nTranslation responses have been logged to the console for verification.`
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
catch (error) {
|
|
489
|
+
console.error('Bulk translation failed:', error);
|
|
490
|
+
// Show error dialog
|
|
491
|
+
await dialogService.showError({
|
|
492
|
+
title: 'Bulk Translation Failed',
|
|
493
|
+
message: 'An error occurred during bulk translation.',
|
|
494
|
+
error: error instanceof Error ? error : new Error('An unexpected error occurred')
|
|
495
|
+
});
|
|
496
|
+
setState(prev => ({
|
|
497
|
+
...prev,
|
|
498
|
+
error: error instanceof Error ? error.message : 'An unexpected error occurred',
|
|
499
|
+
isProcessing: false,
|
|
500
|
+
currentProcessingIndex: -1
|
|
501
|
+
}));
|
|
502
|
+
}
|
|
503
|
+
}, [state.selectedDocuments, client, dialogService]);
|
|
504
|
+
return (_jsx(Card, { padding: 4, children: _jsxs(Stack, { space: 4, children: [_jsx(Text, { size: 2, weight: "semibold", children: "Bulk Document Translation" }), _jsx(Text, { size: 1, muted: true, children: "Select multiple documents to translate them in batch. Translation requests will be logged to the console for verification." }), _jsx(Card, { padding: 3, border: true, children: _jsxs(Stack, { space: 3, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, weight: "medium", children: "Document Selection" }), _jsxs(Flex, { gap: 2, children: [_jsx(Button, { text: "Refresh", icon: RefreshIcon, onClick: fetchDocuments, disabled: state.isLoadingDocuments, mode: "ghost", fontSize: 1 }), state.selectedDocuments.length > 0 && (_jsx(Button, { text: "Clear All", tone: "critical", mode: "ghost", onClick: handleClearSelection, fontSize: 1 }))] })] }), state.isLoadingDocuments ? (_jsxs(Flex, { align: "center", gap: 2, children: [_jsx(Spinner, { size: 1 }), _jsx(Text, { size: 1, muted: true, children: "Loading documents..." })] })) : Object.keys(state.availableDocuments).length === 0 ? (_jsx(Text, { size: 1, muted: true, children: "No documents found" })) : (_jsxs(Stack, { space: 3, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Text, { size: 1, children: ["Selected: ", state.selectedDocuments.length, " documents from ", state.selectedTypes.size, " types"] }), _jsx(Button, { text: "Select All Types", onClick: handleSelectAll, mode: "ghost", fontSize: 1 })] }), _jsxs(Stack, { space: 2, children: [_jsx(Text, { size: 1, weight: "medium", children: "Document Types" }), Object.entries(state.availableDocuments)
|
|
505
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
506
|
+
.map(([type, documents]) => {
|
|
507
|
+
const isExpanded = state.expandedTypes.has(type);
|
|
508
|
+
const selectedInType = documents.filter(doc => state.selectedDocumentIds.has(doc._id)).length;
|
|
509
|
+
const isPartiallySelected = selectedInType > 0 && selectedInType < documents.length;
|
|
510
|
+
const isFullySelected = selectedInType === documents.length;
|
|
511
|
+
return (_jsx(Card, { padding: 2, border: true, children: _jsxs(Stack, { space: 2, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Flex, { align: "center", gap: 2, children: [_jsx(Checkbox, { checked: isFullySelected, indeterminate: isPartiallySelected, onChange: (event) => handleTypeSelection(type, event.currentTarget.checked) }), _jsx(Button, { icon: isExpanded ? ChevronDownIcon : ChevronRightIcon, mode: "ghost", onClick: () => handleTypeExpansion(type), style: { minWidth: 'auto', padding: '4px' } }), _jsxs(Box, { children: [_jsx(Text, { size: 1, weight: "medium", children: type }), _jsxs(Text, { size: 0, muted: true, children: [selectedInType, "/", documents.length, " selected \u2022 Latest: ", new Date(documents[0]._createdAt).toLocaleDateString()] })] })] }), _jsx(Badge, { tone: selectedInType > 0 ? "positive" : "primary", fontSize: 0, children: selectedInType > 0 ? `${selectedInType}/${documents.length}` : documents.length })] }), isExpanded && (_jsx(Box, { style: { marginLeft: '32px' }, children: _jsx(Stack, { space: 1, children: documents.map((doc) => (_jsx(Card, { padding: 2, tone: "transparent", border: true, children: _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Flex, { align: "center", gap: 2, children: [_jsx(Checkbox, { checked: state.selectedDocumentIds.has(doc._id), onChange: (event) => handleDocumentSelection(doc, event.currentTarget.checked) }), _jsxs(Box, { children: [_jsx(Text, { size: 1, children: getDocumentTitle(doc) }), _jsxs(Text, { size: 0, muted: true, children: [doc._id, " \u2022 ", new Date(doc._createdAt).toLocaleDateString()] })] })] }), state.selectedDocumentIds.has(doc._id) && (_jsx(Badge, { tone: "positive", fontSize: 0, children: "Selected" }))] }) }, doc._id))) }) }))] }) }, type));
|
|
512
|
+
})] }), state.selectedDocuments.length > 0 && (_jsxs(Stack, { space: 2, children: [_jsxs(Text, { size: 1, weight: "medium", children: ["Selected Documents (", state.selectedDocuments.length, ")"] }), _jsx(Box, { style: { maxHeight: '200px', overflowY: 'auto' }, children: _jsxs(Stack, { space: 1, children: [state.selectedDocuments.slice(0, 10).map((doc) => (_jsx(Card, { padding: 2, tone: "primary", children: _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Box, { children: [_jsx(Text, { size: 1, weight: "medium", children: getDocumentTitle(doc) }), _jsxs(Text, { size: 0, muted: true, children: [doc._type, " \u2022 ", new Date(doc._createdAt).toLocaleDateString()] })] }), _jsx(Badge, { tone: "primary", fontSize: 0, children: doc._type })] }) }, doc._id))), state.selectedDocuments.length > 10 && (_jsxs(Text, { size: 0, muted: true, style: { textAlign: 'center', padding: '8px' }, children: ["... and ", state.selectedDocuments.length - 10, " more documents"] }))] }) })] }))] }))] }) }), state.selectedDocuments.length > 0 && (_jsx(Card, { padding: 3, border: true, children: _jsxs(Stack, { space: 3, children: [_jsx(Text, { size: 1, weight: "medium", children: "Translation Action" }), state.selectedLocales && state.selectedLocales.length > 0 && (_jsx(Card, { padding: 2, tone: "primary", children: _jsxs(Text, { size: 1, children: ["Target Locales: ", state.selectedLocales.join(', ')] }) })), _jsx(Button, { text: state.isProcessing ? 'Processing...' : `Translate ${state.selectedDocuments.length} Documents`, icon: state.isProcessing ? Spinner : TranslateIcon, onClick: handleBulkTranslate, tone: "primary", disabled: state.isProcessing })] }) })), state.isProcessing && state.processingStatus.length > 0 && (_jsx(Card, { padding: 3, border: true, children: _jsxs(Stack, { space: 3, children: [_jsx(Text, { size: 1, weight: "medium", children: "Translation Progress" }), _jsxs(Stack, { space: 2, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Text, { size: 1, children: ["Overall Progress: ", state.currentProcessingIndex + 1, " of ", state.selectedDocuments.length] }), _jsx(Text, { size: 1, muted: true, children: state.currentProcessingIndex >= 0
|
|
513
|
+
? `${Math.round(((state.currentProcessingIndex + 1) / state.selectedDocuments.length) * 100)}%`
|
|
514
|
+
: '0%' })] }), _jsx(Box, { style: {
|
|
515
|
+
width: '100%',
|
|
516
|
+
height: '8px',
|
|
517
|
+
backgroundColor: '#e0e0e0',
|
|
518
|
+
borderRadius: '4px',
|
|
519
|
+
overflow: 'hidden'
|
|
520
|
+
}, children: _jsx(Box, { style: {
|
|
521
|
+
width: `${state.currentProcessingIndex >= 0
|
|
522
|
+
? ((state.currentProcessingIndex + 1) / state.selectedDocuments.length) * 100
|
|
523
|
+
: 0}%`,
|
|
524
|
+
height: '100%',
|
|
525
|
+
backgroundColor: '#0066cc',
|
|
526
|
+
transition: 'width 0.3s ease'
|
|
527
|
+
} }) })] }), _jsxs(Stack, { space: 2, children: [_jsx(Text, { size: 1, weight: "medium", children: "Document Status" }), state.processingStatus.map((status) => (_jsx(Card, { padding: 2, border: true, children: _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Box, { flex: 1, children: [_jsx(Text, { size: 1, weight: "medium", children: status.title }), _jsxs(Text, { size: 0, muted: true, children: ["ID: ", status.documentId] }), status.error && (_jsxs(Text, { size: 0, style: { color: 'red' }, children: ["Error: ", status.error] }))] }), _jsxs(Box, { children: [status.status === 'pending' && (_jsx(Badge, { tone: "default", fontSize: 0, children: "Pending" })), status.status === 'processing' && (_jsx(Badge, { tone: "primary", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(Spinner, { size: 0 }), "Processing"] }) })), status.status === 'completed' && (_jsx(Badge, { tone: "positive", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(CheckmarkIcon, {}), "Completed"] }) })), status.status === 'failed' && (_jsx(Badge, { tone: "critical", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(CloseIcon, {}), "Failed"] }) }))] })] }) }, status.documentId)))] })] }) })), state.error && (_jsx(Card, { padding: 3, tone: "critical", border: true, children: _jsxs(Text, { size: 1, weight: "medium", children: ["Error: ", state.error] }) })), state.summary && (_jsx(Card, { padding: 3, tone: state.summary.failedDocuments === 0 ? "positive" : "caution", border: true, children: _jsxs(Stack, { space: 3, children: [_jsxs(Flex, { align: "center", gap: 2, children: [state.summary.failedDocuments === 0 ? (_jsx(CheckmarkIcon, { style: { color: 'green' } })) : (_jsx(WarningOutlineIcon, { style: { color: 'orange' } })), _jsx(Text, { size: 1, weight: "medium", children: "Translation Summary" })] }), _jsxs(Stack, { space: 2, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Total Documents:" }), _jsx(Badge, { tone: "primary", children: state.summary.totalDocuments })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Successfully Processed:" }), _jsx(Badge, { tone: "positive", children: state.summary.processedDocuments })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Failed:" }), _jsx(Badge, { tone: "critical", children: state.summary.failedDocuments })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Success Rate:" }), _jsx(Badge, { tone: state.summary.failedDocuments === 0 ? "positive" : "caution", children: state.summary.totalDocuments > 0
|
|
528
|
+
? `${((state.summary.processedDocuments / state.summary.totalDocuments) * 100).toFixed(1)}%`
|
|
529
|
+
: '0%' })] })] }), state.processingStatus.length > 0 && (_jsxs(Stack, { space: 2, children: [_jsx(Text, { size: 1, weight: "medium", children: "Detailed Results" }), state.processingStatus.map((status) => (_jsx(Card, { padding: 2, border: true, children: _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsxs(Box, { flex: 1, children: [_jsx(Text, { size: 1, weight: "medium", children: status.title }), _jsxs(Text, { size: 0, muted: true, children: ["ID: ", status.documentId] }), status.error && (_jsxs(Text, { size: 0, style: { color: 'red' }, children: ["Error: ", status.error] }))] }), _jsxs(Box, { children: [status.status === 'pending' && (_jsx(Badge, { tone: "default", fontSize: 0, children: "Pending" })), status.status === 'processing' && (_jsx(Badge, { tone: "primary", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(Spinner, { size: 0 }), "Processing"] }) })), status.status === 'completed' && (_jsx(Badge, { tone: "positive", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(CheckmarkIcon, {}), "Completed"] }) })), status.status === 'failed' && (_jsx(Badge, { tone: "critical", fontSize: 0, children: _jsxs(Flex, { align: "center", gap: 1, children: [_jsx(CloseIcon, {}), "Failed"] }) }))] })] }) }, status.documentId)))] }))] }) })), state.documentCreationResult && (_jsx(Card, { padding: 3, tone: state.documentCreationResult.failedCreations === 0 ? "positive" : "caution", border: true, children: _jsxs(Stack, { space: 3, children: [_jsxs(Flex, { align: "center", gap: 2, children: [state.documentCreationResult.failedCreations === 0 ? (_jsx(CheckmarkIcon, { style: { color: 'green' } })) : (_jsx(WarningOutlineIcon, { style: { color: 'orange' } })), _jsx(Text, { size: 1, weight: "medium", children: "Document Creation Summary" })] }), _jsxs(Stack, { space: 2, children: [_jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Documents to Create:" }), _jsx(Badge, { tone: "primary", children: state.documentCreationResult.totalDocuments })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Successfully Created:" }), _jsx(Badge, { tone: "positive", children: state.documentCreationResult.successfulCreations })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Failed to Create:" }), _jsx(Badge, { tone: "critical", children: state.documentCreationResult.failedCreations })] }), _jsxs(Flex, { align: "center", justify: "space-between", children: [_jsx(Text, { size: 1, children: "Creation Success Rate:" }), _jsx(Badge, { tone: state.documentCreationResult.failedCreations === 0 ? "positive" : "caution", children: state.documentCreationResult.totalDocuments > 0
|
|
530
|
+
? `${((state.documentCreationResult.successfulCreations / state.documentCreationResult.totalDocuments) * 100).toFixed(1)}%`
|
|
531
|
+
: '0%' })] })] }), state.documentCreationResult.errors.length > 0 && (_jsxs(Stack, { space: 2, children: [_jsx(Text, { size: 1, weight: "medium", children: "Creation Errors" }), _jsx(Box, { style: { maxHeight: '150px', overflowY: 'auto' }, children: _jsx(Stack, { space: 1, children: state.documentCreationResult.errors.map((error, index) => (_jsx(Card, { padding: 2, tone: "critical", children: _jsx(Text, { size: 0, style: { color: 'red' }, children: error }) }, index))) }) })] }))] }) }))] }) }));
|
|
532
|
+
};
|
|
533
|
+
/**
|
|
534
|
+
* Bulk Translation Tool Definition
|
|
535
|
+
* Requirements: 2.1, 2.5, 4.1, 4.2
|
|
536
|
+
*/
|
|
537
|
+
export const bulkTranslateTool = {
|
|
538
|
+
name: 'bulk-translate',
|
|
539
|
+
title: 'Bulk Translate',
|
|
540
|
+
icon: TranslateIcon,
|
|
541
|
+
component: BulkTranslateTool
|
|
542
|
+
};
|
|
543
|
+
//# sourceMappingURL=bulkTranslate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulkTranslate.js","sourceRoot":"","sources":["../../src/actions/bulkTranslate.tsx"],"names":[],"mappings":"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"}
|