@sanity/document-internationalization 0.3.5 → 0.3.7

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.
@@ -21,7 +21,9 @@ var _possibleConstructorReturn = require('@babel/runtime/helpers/possibleConstru
21
21
  var _getPrototypeOf = require('@babel/runtime/helpers/getPrototypeOf');
22
22
  var React = require('react');
23
23
  var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
24
+ var _taggedTemplateLiteral = require('@babel/runtime/helpers/taggedTemplateLiteral');
24
25
  var ui = require('@sanity/ui');
26
+ var styled = require('styled-components');
25
27
  var Preview = require('part:@sanity/base/preview');
26
28
  var _typeof = require('@babel/runtime/helpers/typeof');
27
29
 
@@ -43,6 +45,8 @@ var _possibleConstructorReturn__default = /*#__PURE__*/_interopDefaultLegacy(_po
43
45
  var _getPrototypeOf__default = /*#__PURE__*/_interopDefaultLegacy(_getPrototypeOf);
44
46
  var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
45
47
  var _slicedToArray__default = /*#__PURE__*/_interopDefaultLegacy(_slicedToArray);
48
+ var _taggedTemplateLiteral__default = /*#__PURE__*/_interopDefaultLegacy(_taggedTemplateLiteral);
49
+ var styled__default = /*#__PURE__*/_interopDefaultLegacy(styled);
46
50
  var Preview__default = /*#__PURE__*/_interopDefaultLegacy(Preview);
47
51
  var _typeof__default = /*#__PURE__*/_interopDefaultLegacy(_typeof);
48
52
 
@@ -1540,7 +1544,13 @@ var UiMessages = {
1540
1544
  orphanDocuments: 'orphaned translation document(s)',
1541
1545
  referenceBehaviorMismatch: 'document(s) with mismatched reference behaviors',
1542
1546
  baseLanguageMismatch: 'base document(s) with mismatched language field',
1543
- fix: 'Fix'
1547
+ fix: 'Fix',
1548
+ pendingTransactionDialog: {
1549
+ header: 'Confirm pending transaction',
1550
+ caution: 'Before continuing please review the transactions. Keep in mind, the translation maintenance functionality may remove or update many documents at once. It is recommended to back-up your dataset before performing data maintenance',
1551
+ cancel: 'Cancel',
1552
+ confirm: 'Confirm operation'
1553
+ }
1544
1554
  },
1545
1555
  errors: {
1546
1556
  baseDocumentNotPublished: 'It looks like you have not published your base translation yet. When using strong references it is required to publish the base document before publishing any translated entries'
@@ -1837,43 +1847,8 @@ function createSanityReference(id) {
1837
1847
  } : {});
1838
1848
  }
1839
1849
 
1840
- var BATCH_SIZE = 50;
1841
- function batch(_x, _x2) {
1842
- return _batch.apply(this, arguments);
1843
- }
1844
-
1845
- function _batch() {
1846
- _batch = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(input, fn) {
1847
- var batched, i;
1848
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
1849
- while (1) {
1850
- switch (_context.prev = _context.next) {
1851
- case 0:
1852
- batched = ___default["default"].chunk(input, BATCH_SIZE);
1853
- i = 0;
1854
-
1855
- case 2:
1856
- if (!(i < batched.length)) {
1857
- _context.next = 8;
1858
- break;
1859
- }
1860
-
1861
- _context.next = 5;
1862
- return fn(batched[i]);
1863
-
1864
- case 5:
1865
- i++;
1866
- _context.next = 2;
1867
- break;
1868
-
1869
- case 8:
1870
- case "end":
1871
- return _context.stop();
1872
- }
1873
- }
1874
- }, _callee);
1875
- }));
1876
- return _batch.apply(this, arguments);
1850
+ function getLanguageFromDocument(doc, config) {
1851
+ return (doc === null || doc === void 0 ? void 0 : doc[config.fieldNames.lang]) || config.base || null;
1877
1852
  }
1878
1853
 
1879
1854
  var MaintenanceTabTypeSelector = function MaintenanceTabTypeSelector(_ref) {
@@ -1983,7 +1958,7 @@ var useDocumentsInformation = function useDocumentsInformation(schema) {
1983
1958
  case 0:
1984
1959
  setPending(true);
1985
1960
  _context.next = 3;
1986
- return Promise.all([getLanguagesFromOption(config.languages), sanityClientRef.current.fetch("*[_type == $type && !(_id in path('drafts.**'))]{\n _id,\n _type,\n ".concat(config.fieldNames.lang, ",\n ").concat(config.fieldNames.references, ",\n ").concat(config.fieldNames.baseReference, "\n }"), {
1961
+ return Promise.all([getLanguagesFromOption(config.languages), sanityClientRef.current.fetch("*[_type == $type && !(_id in path('drafts.**'))]", {
1987
1962
  type: selectedSchema
1988
1963
  })]);
1989
1964
 
@@ -2007,7 +1982,7 @@ var useDocumentsInformation = function useDocumentsInformation(schema) {
2007
1982
  return function (_x) {
2008
1983
  return _ref.apply(this, arguments);
2009
1984
  };
2010
- }(), [pending, config, documents, sanityClientRef.current]);
1985
+ }(), [config]);
2011
1986
  var documentsSummaryInformation = React__default["default"].useMemo(function () {
2012
1987
  var _config$fieldNames, _config$fieldNames2, _config$fieldNames3;
2013
1988
 
@@ -2132,300 +2107,132 @@ function split(arr, n) {
2132
2107
  function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2133
2108
 
2134
2109
  function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2135
- var fixIdStructureMismatchDocuments = /*#__PURE__*/function () {
2136
- var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(schema, documents) {
2137
- var config, sanityClient, refsFieldName, existingBaseDocumentIds, removeOldRefsTransaction;
2138
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2139
- while (1) {
2140
- switch (_context2.prev = _context2.next) {
2141
- case 0:
2142
- config = getConfig();
2143
- sanityClient = getSanityClient();
2144
- refsFieldName = config.fieldNames.references; // remove old refs
2145
-
2146
- existingBaseDocumentIds = new Set(documents.map(function (d) {
2147
- return getBaseIdFromId(d._id);
2148
- }));
2149
- removeOldRefsTransaction = sanityClient.transaction();
2150
- existingBaseDocumentIds.forEach(function (id) {
2151
- removeOldRefsTransaction.patch(id, {
2152
- set: _defineProperty__default["default"]({}, refsFieldName, [])
2153
- });
2154
- });
2155
- _context2.next = 8;
2156
- return removeOldRefsTransaction.commit();
2157
-
2158
- case 8:
2159
- _context2.next = 10;
2160
- return Promise.all(arraySplit(documents.filter(function (d) {
2161
- return d._id !== getBaseIdFromId(d._id);
2162
- }), 100).map( /*#__PURE__*/function () {
2163
- var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(documentsChunk) {
2164
- var transaction;
2165
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2166
- while (1) {
2167
- switch (_context.prev = _context.next) {
2168
- case 0:
2169
- transaction = sanityClient.transaction();
2170
- documentsChunk.forEach(function (d) {
2171
- var baseId = getBaseIdFromId(d._id);
2172
- var lang = getLanguageFromId(d._id);
2173
-
2174
- if (lang) {
2175
- var newId = buildDocId(baseId, lang);
2176
- transaction.createIfNotExists(_objectSpread$1(_objectSpread$1({}, d), {}, {
2177
- _id: newId,
2178
- _type: schema
2179
- }));
2180
- transaction["delete"](d._id); // patch base document with updated refs
2181
-
2182
- // patch base document with updated refs
2183
- if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {
2184
- transaction.patch(baseId, {
2185
- setIfMissing: _defineProperty__default["default"]({}, refsFieldName, [])
2186
- });
2187
- transaction.patch(baseId, {
2188
- insert: {
2189
- after: "".concat(refsFieldName, "[-1]"),
2190
- items: [_objectSpread$1({
2191
- _key: lang
2192
- }, createSanityReference(newId, config.referenceBehavior === ReferenceBehavior.WEAK))]
2193
- }
2194
- });
2195
- }
2196
- }
2197
- });
2198
- _context.next = 4;
2199
- return transaction.commit();
2200
-
2201
- case 4:
2202
- case "end":
2203
- return _context.stop();
2204
- }
2205
- }
2206
- }, _callee);
2207
- }));
2208
-
2209
- return function (_x3) {
2210
- return _ref2.apply(this, arguments);
2211
- };
2212
- }()));
2110
+ var fixIdStructureMismatchDocuments = function fixIdStructureMismatchDocuments(schema, documents) {
2111
+ var config = getConfig();
2112
+ var sanityClient = getSanityClient();
2113
+ var refsFieldName = config.fieldNames.references; // remove old refs
2213
2114
 
2214
- case 10:
2215
- case "end":
2216
- return _context2.stop();
2217
- }
2218
- }
2219
- }, _callee2);
2115
+ var existingBaseDocumentIds = new Set(documents.map(function (d) {
2116
+ return getBaseIdFromId(d._id);
2220
2117
  }));
2221
-
2222
- return function fixIdStructureMismatchDocuments(_x, _x2) {
2223
- return _ref.apply(this, arguments);
2224
- };
2225
- }();
2226
-
2227
- var fixLanguageFields = /*#__PURE__*/function () {
2228
- var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(schema, documents) {
2229
- var _config$fieldNames;
2230
-
2231
- var sanityClient, config, langFieldName;
2232
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2233
- while (1) {
2234
- switch (_context2.prev = _context2.next) {
2235
- case 0:
2236
- sanityClient = getSanityClient();
2237
- config = getConfig(schema);
2238
- langFieldName = (_config$fieldNames = config.fieldNames) === null || _config$fieldNames === void 0 ? void 0 : _config$fieldNames.lang;
2239
- _context2.next = 5;
2240
- return Promise.all(documents.map( /*#__PURE__*/function () {
2241
- var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(d) {
2242
- var schemaObject, base, language;
2243
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2244
- while (1) {
2245
- switch (_context.prev = _context.next) {
2246
- case 0:
2247
- schemaObject = getSchema(d._type);
2248
- base = (_typeof__default["default"](schemaObject.i18n) === 'object' ? schemaObject.i18n.base : undefined) || config.base;
2249
-
2250
- if (d[langFieldName]) {
2251
- _context.next = 6;
2252
- break;
2253
- }
2254
-
2255
- language = getLanguageFromId(d._id) || base;
2256
- _context.next = 6;
2257
- return sanityClient.patch(d._id, {
2258
- set: _defineProperty__default["default"]({}, langFieldName, language)
2259
- }).commit();
2260
-
2261
- case 6:
2262
- case "end":
2263
- return _context.stop();
2264
- }
2265
- }
2266
- }, _callee);
2267
- }));
2268
-
2269
- return function (_x3) {
2270
- return _ref2.apply(this, arguments);
2271
- };
2272
- }()));
2273
-
2274
- case 5:
2275
- case "end":
2276
- return _context2.stop();
2118
+ var removeOldRefsTransaction = sanityClient.transaction();
2119
+ existingBaseDocumentIds.forEach(function (id) {
2120
+ removeOldRefsTransaction.patch(id, {
2121
+ set: _defineProperty__default["default"]({}, refsFieldName, [])
2122
+ });
2123
+ }); // create new document ids
2124
+
2125
+ var newDocumentTransactions = arraySplit(documents.filter(function (d) {
2126
+ return d._id !== getBaseIdFromId(d._id);
2127
+ }), 100).map(function (documentsChunk) {
2128
+ var transaction = sanityClient.transaction();
2129
+ documentsChunk.forEach(function (d) {
2130
+ var baseId = getBaseIdFromId(d._id);
2131
+ var lang = getLanguageFromDocument(d, config);
2132
+
2133
+ if (lang) {
2134
+ var newId = buildDocId(baseId, lang);
2135
+ transaction.createIfNotExists(_objectSpread$1(_objectSpread$1({}, d), {}, {
2136
+ _id: newId,
2137
+ _type: schema
2138
+ }));
2139
+ transaction["delete"](d._id); // patch base document with updated refs
2140
+
2141
+ if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {
2142
+ transaction.patch(baseId, {
2143
+ setIfMissing: _defineProperty__default["default"]({}, refsFieldName, [])
2144
+ });
2145
+ transaction.patch(baseId, {
2146
+ insert: {
2147
+ after: "".concat(refsFieldName, "[-1]"),
2148
+ items: [_objectSpread$1({
2149
+ _key: lang
2150
+ }, createSanityReference(newId, config.referenceBehavior === ReferenceBehavior.WEAK))]
2151
+ }
2152
+ });
2277
2153
  }
2278
2154
  }
2279
- }, _callee2);
2280
- }));
2155
+ });
2156
+ return transaction;
2157
+ });
2158
+ return [removeOldRefsTransaction].concat(_toConsumableArray__default["default"](newDocumentTransactions));
2159
+ };
2281
2160
 
2282
- return function fixLanguageFields(_x, _x2) {
2283
- return _ref.apply(this, arguments);
2284
- };
2285
- }();
2161
+ var fixLanguageFields = function fixLanguageFields(schema, documents) {
2162
+ var _config$fieldNames;
2163
+
2164
+ var sanityClient = getSanityClient();
2165
+ var config = getConfig(schema);
2166
+ var langFieldName = (_config$fieldNames = config.fieldNames) === null || _config$fieldNames === void 0 ? void 0 : _config$fieldNames.lang;
2167
+ var transaction = sanityClient.transaction();
2168
+ documents.forEach(function (d) {
2169
+ var schemaObject = getSchema(d._type);
2170
+ var base = (_typeof__default["default"](schemaObject.i18n) === 'object' ? schemaObject.i18n.base : undefined) || config.base;
2171
+
2172
+ if (!d[langFieldName]) {
2173
+ // @README keep the language from ID behavior
2174
+ // because in this case we expect the language field not to be available
2175
+ var language = getLanguageFromId(d._id) || base;
2176
+ transaction.patch(d._id, {
2177
+ set: _defineProperty__default["default"]({}, langFieldName, language)
2178
+ });
2179
+ }
2180
+ });
2181
+ return transaction;
2182
+ };
2286
2183
 
2287
2184
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2288
2185
 
2289
2186
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
2290
- var fixTranslationRefs = /*#__PURE__*/function () {
2291
- var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3(schema, baseDocuments, translatedDocuments) {
2292
- var sanityClient, config, refsFieldName;
2293
- return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
2294
- while (1) {
2295
- switch (_context3.prev = _context3.next) {
2296
- case 0:
2297
- sanityClient = getSanityClient();
2298
- config = getConfig(schema);
2299
- refsFieldName = config.fieldNames.references;
2300
- _context3.next = 5;
2301
- return batch(baseDocuments, /*#__PURE__*/function () {
2302
- var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(chunk) {
2303
- var transaction;
2304
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2305
- while (1) {
2306
- switch (_context2.prev = _context2.next) {
2307
- case 0:
2308
- transaction = sanityClient.transaction();
2309
- chunk.map( /*#__PURE__*/function () {
2310
- var _ref3 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(d) {
2311
- var translatedRefs, relevantTranslations;
2312
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2313
- while (1) {
2314
- switch (_context.prev = _context.next) {
2315
- case 0:
2316
- translatedRefs = [];
2317
- relevantTranslations = translatedDocuments.filter(function (dx) {
2318
- return getBaseIdFromId(dx._id) === d._id;
2319
- });
2320
-
2321
- if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {
2322
- translatedRefs = ___default["default"].compact(relevantTranslations.map(function (doc) {
2323
- var lang = getLanguageFromId(doc._id);
2324
- if (!lang) return null;
2325
- return _objectSpread({
2326
- _key: lang
2327
- }, createSanityReference(doc._id, config.referenceBehavior === ReferenceBehavior.WEAK));
2328
- }, {}));
2329
- }
2330
-
2331
- transaction.patch(d._id, {
2332
- set: _defineProperty__default["default"]({}, refsFieldName, translatedRefs)
2333
- });
2334
-
2335
- case 4:
2336
- case "end":
2337
- return _context.stop();
2338
- }
2339
- }
2340
- }, _callee);
2341
- }));
2342
-
2343
- return function (_x5) {
2344
- return _ref3.apply(this, arguments);
2345
- };
2346
- }());
2347
- _context2.next = 4;
2348
- return transaction.commit();
2349
-
2350
- case 4:
2351
- case "end":
2352
- return _context2.stop();
2353
- }
2354
- }
2355
- }, _callee2);
2356
- }));
2357
-
2358
- return function (_x4) {
2359
- return _ref2.apply(this, arguments);
2360
- };
2361
- }());
2187
+ var fixTranslationRefs = function fixTranslationRefs(schema, baseDocuments, translatedDocuments) {
2188
+ var sanityClient = getSanityClient();
2189
+ var config = getConfig(schema);
2190
+ var refsFieldName = config.fieldNames.references;
2191
+
2192
+ var transactions = ___default["default"].chunk(baseDocuments, 50).map(function (chunk) {
2193
+ var transaction = sanityClient.transaction();
2194
+ chunk.forEach(function (d) {
2195
+ var translatedRefs = [];
2196
+ var relevantTranslations = translatedDocuments.filter(function (dx) {
2197
+ return getBaseIdFromId(dx._id) === d._id;
2198
+ });
2362
2199
 
2363
- case 5:
2364
- case "end":
2365
- return _context3.stop();
2366
- }
2200
+ if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {
2201
+ translatedRefs = ___default["default"].compact(relevantTranslations.map(function (doc) {
2202
+ var lang = getLanguageFromDocument(doc, config);
2203
+ if (!lang) return null;
2204
+ return _objectSpread({
2205
+ _key: lang
2206
+ }, createSanityReference(doc._id, config.referenceBehavior === ReferenceBehavior.WEAK));
2207
+ }, {}));
2367
2208
  }
2368
- }, _callee3);
2369
- }));
2370
-
2371
- return function fixTranslationRefs(_x, _x2, _x3) {
2372
- return _ref.apply(this, arguments);
2373
- };
2374
- }();
2375
2209
 
2376
- var fixOrphanedDocuments = /*#__PURE__*/function () {
2377
- var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(basedocuments, translatedDocuments) {
2378
- var sanityClient;
2379
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2380
- while (1) {
2381
- switch (_context2.prev = _context2.next) {
2382
- case 0:
2383
- sanityClient = getSanityClient();
2384
- _context2.next = 3;
2385
- return Promise.all(translatedDocuments.map( /*#__PURE__*/function () {
2386
- var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(d) {
2387
- var base;
2388
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2389
- while (1) {
2390
- switch (_context.prev = _context.next) {
2391
- case 0:
2392
- base = basedocuments.find(function (doc) {
2393
- return d._id.startsWith(doc._id);
2394
- });
2395
-
2396
- if (base) {
2397
- _context.next = 4;
2398
- break;
2399
- }
2400
-
2401
- _context.next = 4;
2402
- return sanityClient["delete"](d._id);
2403
-
2404
- case 4:
2405
- case "end":
2406
- return _context.stop();
2407
- }
2408
- }
2409
- }, _callee);
2410
- }));
2411
-
2412
- return function (_x3) {
2413
- return _ref2.apply(this, arguments);
2414
- };
2415
- }()));
2210
+ transaction.patch(d._id, {
2211
+ set: _defineProperty__default["default"]({}, refsFieldName, translatedRefs)
2212
+ });
2213
+ });
2214
+ return transaction;
2215
+ });
2416
2216
 
2417
- case 3:
2418
- case "end":
2419
- return _context2.stop();
2420
- }
2421
- }
2422
- }, _callee2);
2423
- }));
2217
+ return transactions;
2218
+ };
2424
2219
 
2425
- return function fixOrphanedDocuments(_x, _x2) {
2426
- return _ref.apply(this, arguments);
2427
- };
2428
- }();
2220
+ var fixOrphanedDocuments = function fixOrphanedDocuments(basedocuments, translatedDocuments) {
2221
+ var sanityClient = getSanityClient();
2222
+ var transaction = sanityClient.transaction();
2223
+ translatedDocuments.forEach(function (d) {
2224
+ var config = getConfig(d._type);
2225
+ var base = basedocuments.find(function (doc) {
2226
+ var _d$config$fieldNames$, _d$config$fieldNames$2;
2227
+
2228
+ return Array.isArray(d === null || d === void 0 ? void 0 : d[config.fieldNames.references]) && (d === null || d === void 0 ? void 0 : (_d$config$fieldNames$ = d[config.fieldNames.references]) === null || _d$config$fieldNames$ === void 0 ? void 0 : _d$config$fieldNames$.some(function (ref) {
2229
+ return ref._ref === d._id;
2230
+ })) || doc._id === (d === null || d === void 0 ? void 0 : (_d$config$fieldNames$2 = d[config.fieldNames.baseReference]) === null || _d$config$fieldNames$2 === void 0 ? void 0 : _d$config$fieldNames$2._ref);
2231
+ });
2232
+ if (!base) transaction["delete"](d._id);
2233
+ });
2234
+ return transaction;
2235
+ };
2429
2236
 
2430
2237
  var fixBaseLanguageMismatch = /*#__PURE__*/function () {
2431
2238
  var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(schema, basedocuments) {
@@ -2452,10 +2259,9 @@ var fixBaseLanguageMismatch = /*#__PURE__*/function () {
2452
2259
  });
2453
2260
  }
2454
2261
  });
2455
- _context.next = 11;
2456
- return transaction.commit();
2262
+ return _context.abrupt("return", transaction);
2457
2263
 
2458
- case 11:
2264
+ case 10:
2459
2265
  case "end":
2460
2266
  return _context.stop();
2461
2267
  }
@@ -2468,65 +2274,30 @@ var fixBaseLanguageMismatch = /*#__PURE__*/function () {
2468
2274
  };
2469
2275
  }();
2470
2276
 
2471
- var fixBaseDocumentRefs = /*#__PURE__*/function () {
2472
- var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(schema, translatedDocuments) {
2473
- var config, sanityClient, baseRefFieldName, transaction;
2474
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2475
- while (1) {
2476
- switch (_context2.prev = _context2.next) {
2477
- case 0:
2478
- config = getConfig(schema);
2479
- sanityClient = getSanityClient();
2480
-
2481
- if (!(config.referenceBehavior !== ReferenceBehavior.DISABLED)) {
2482
- _context2.next = 8;
2483
- break;
2484
- }
2485
-
2486
- baseRefFieldName = config.fieldNames.baseReference;
2487
- transaction = sanityClient.transaction();
2488
- translatedDocuments.forEach( /*#__PURE__*/function () {
2489
- var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(d) {
2490
- var baseId;
2491
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2492
- while (1) {
2493
- switch (_context.prev = _context.next) {
2494
- case 0:
2495
- if (!d[baseRefFieldName]) {
2496
- baseId = getBaseIdFromId(d._id);
2497
- transaction.patch(d._id, {
2498
- set: _defineProperty__default["default"]({}, baseRefFieldName, createSanityReference(baseId, config.referenceBehavior === ReferenceBehavior.WEAK))
2499
- });
2500
- }
2501
-
2502
- case 1:
2503
- case "end":
2504
- return _context.stop();
2505
- }
2506
- }
2507
- }, _callee);
2508
- }));
2509
-
2510
- return function (_x3) {
2511
- return _ref2.apply(this, arguments);
2512
- };
2513
- }());
2514
- _context2.next = 8;
2515
- return transaction.commit();
2516
-
2517
- case 8:
2518
- case "end":
2519
- return _context2.stop();
2520
- }
2277
+ var fixBaseDocumentRefs = function fixBaseDocumentRefs(schema, translatedDocuments) {
2278
+ var config = getConfig(schema);
2279
+ var sanityClient = getSanityClient();
2280
+ var transaction = sanityClient.transaction();
2281
+
2282
+ if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {
2283
+ var baseRefFieldName = config.fieldNames.baseReference;
2284
+ translatedDocuments.forEach(function (d) {
2285
+ if (!d[baseRefFieldName]) {
2286
+ var baseId = getBaseIdFromId(d._id);
2287
+ transaction.patch(d._id, {
2288
+ set: _defineProperty__default["default"]({}, baseRefFieldName, createSanityReference(baseId, config.referenceBehavior === ReferenceBehavior.WEAK))
2289
+ });
2521
2290
  }
2522
- }, _callee2);
2523
- }));
2291
+ });
2292
+ }
2524
2293
 
2525
- return function fixBaseDocumentRefs(_x, _x2) {
2526
- return _ref.apply(this, arguments);
2527
- };
2528
- }();
2294
+ return transaction;
2295
+ };
2529
2296
 
2297
+ var _templateObject, _templateObject2, _templateObject3;
2298
+ var StyledCodeCard = styled__default["default"](ui.Card)(_templateObject || (_templateObject = _taggedTemplateLiteral__default["default"](["\n grid-column-start: 1;\n grid-row-start: 1;\n"])));
2299
+ var StyledCode = styled__default["default"](ui.Code)(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral__default["default"](["\n word-break: break-word;\n white-space: break-spaces;\n"])));
2300
+ var StyledDownloadCodeFlex = styled__default["default"](ui.Flex)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral__default["default"](["\n grid-column-start: 1;\n grid-row-start: 1;\n"])));
2530
2301
  var MaintenanceTabContent = function MaintenanceTabContent() {
2531
2302
  var _React$useState = React__default["default"].useState(''),
2532
2303
  _React$useState2 = _slicedToArray__default["default"](_React$useState, 2),
@@ -2542,152 +2313,145 @@ var MaintenanceTabContent = function MaintenanceTabContent() {
2542
2313
  documentsSummaryInformation = _useDocumentsInformat.documentsSummaryInformation,
2543
2314
  fetchInformation = _useDocumentsInformat.fetchInformation;
2544
2315
 
2545
- var onSchemaTypeChange = React__default["default"].useCallback(function (schemaName) {
2316
+ var _useState = React.useState(null),
2317
+ _useState2 = _slicedToArray__default["default"](_useState, 2),
2318
+ pendingTransactions = _useState2[0],
2319
+ setPendingTransactions = _useState2[1];
2320
+
2321
+ var onSchemaTypeChange = React.useCallback(function (schemaName) {
2546
2322
  return setSelectedSchema(schemaName);
2547
- }, [selectedSchema]);
2548
- var handleOpen = React__default["default"].useCallback(function () {
2323
+ }, []);
2324
+ var handleOpen = React.useCallback(function () {
2549
2325
  return setSelectedSchema('');
2550
- }, [selectedSchema]);
2551
- var onFixIdStructureMismatchDocuments = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() {
2326
+ }, []);
2327
+ var handleFixIdStructureMismatchDocuments = React.useCallback(function () {
2328
+ setPendingTransactions(fixIdStructureMismatchDocuments(selectedSchema, documents));
2329
+ }, [selectedSchema, documents]);
2330
+ var handleFixMissingLanguageFields = React.useCallback(function () {
2331
+ setPendingTransactions([fixLanguageFields(selectedSchema, documents)]);
2332
+ }, [selectedSchema, documents]);
2333
+ var handleFixTranslationRefs = React.useCallback(function () {
2334
+ setPendingTransactions(fixTranslationRefs(selectedSchema, baseDocuments, translatedDocuments));
2335
+ }, [selectedSchema, baseDocuments, translatedDocuments]);
2336
+ var handleFixBaseDocumntRefs = React.useCallback(function () {
2337
+ setPendingTransactions([fixBaseDocumentRefs(selectedSchema, translatedDocuments)]);
2338
+ }, [selectedSchema, translatedDocuments]);
2339
+ var handleFixOrphanDocuments = React.useCallback(function () {
2340
+ setPendingTransactions([fixOrphanedDocuments(baseDocuments, translatedDocuments)]);
2341
+ }, [baseDocuments, translatedDocuments]);
2342
+ var handleFixReferenceBehaviorMismatch = React.useCallback(function () {
2343
+ setPendingTransactions(fixTranslationRefs(selectedSchema, baseDocuments, translatedDocuments));
2344
+ }, [selectedSchema, baseDocuments, translatedDocuments]);
2345
+ var handleFixBaseLanguageMismatch = React.useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee() {
2552
2346
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2553
2347
  while (1) {
2554
2348
  switch (_context.prev = _context.next) {
2555
2349
  case 0:
2556
- setPending(true);
2350
+ _context.t0 = setPendingTransactions;
2557
2351
  _context.next = 3;
2558
- return fixIdStructureMismatchDocuments(selectedSchema, documents);
2352
+ return fixBaseLanguageMismatch(selectedSchema, baseDocuments);
2559
2353
 
2560
2354
  case 3:
2561
- _context.next = 5;
2562
- return fetchInformation(selectedSchema);
2355
+ _context.t1 = _context.sent;
2356
+ _context.t2 = [_context.t1];
2357
+ (0, _context.t0)(_context.t2);
2563
2358
 
2564
- case 5:
2359
+ case 6:
2565
2360
  case "end":
2566
2361
  return _context.stop();
2567
2362
  }
2568
2363
  }
2569
2364
  }, _callee);
2570
- })), [selectedSchema, documents, fetchInformation]);
2571
- var onFixMissingLanguageFields = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2() {
2572
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2573
- while (1) {
2574
- switch (_context2.prev = _context2.next) {
2575
- case 0:
2576
- setPending(true);
2577
- _context2.next = 3;
2578
- return fixLanguageFields(selectedSchema, documents);
2579
-
2580
- case 3:
2581
- _context2.next = 5;
2582
- return fetchInformation(selectedSchema);
2583
-
2584
- case 5:
2585
- case "end":
2586
- return _context2.stop();
2587
- }
2588
- }
2589
- }, _callee2);
2590
- })), [selectedSchema, documents, fetchInformation]);
2591
- var onFixTranslationRefs = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3() {
2365
+ })), [selectedSchema, baseDocuments]);
2366
+ var handleDownloadCode = React.useCallback(function () {
2367
+ if (pendingTransactions) {
2368
+ var json = JSON.stringify(pendingTransactions.map(function (transaction) {
2369
+ return transaction.toJSON();
2370
+ }), null, 2);
2371
+ var blob = new Blob([json], {
2372
+ type: 'application/json'
2373
+ });
2374
+ var url = URL.createObjectURL(blob);
2375
+ var a = document.createElement('a');
2376
+ a.href = url;
2377
+ a.download = 'transactions.json';
2378
+ a.style.display = 'none';
2379
+ document.body.appendChild(a);
2380
+ a.click();
2381
+ URL.revokeObjectURL(url);
2382
+ }
2383
+ }, [pendingTransactions]);
2384
+ var handleCancelPendingTransaction = React.useCallback(function () {
2385
+ setPendingTransactions(null);
2386
+ }, [setPendingTransactions]);
2387
+ var handleConfirmPendingTransaction = React.useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3() {
2592
2388
  return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
2593
2389
  while (1) {
2594
2390
  switch (_context3.prev = _context3.next) {
2595
2391
  case 0:
2596
2392
  setPending(true);
2597
- _context3.next = 3;
2598
- return fixTranslationRefs(selectedSchema, baseDocuments, translatedDocuments);
2393
+ _context3.prev = 1;
2394
+
2395
+ if (!pendingTransactions) {
2396
+ _context3.next = 8;
2397
+ break;
2398
+ }
2599
2399
 
2600
- case 3:
2601
2400
  _context3.next = 5;
2602
- return fetchInformation(selectedSchema);
2401
+ return pendingTransactions.reduce( /*#__PURE__*/function () {
2402
+ var _ref3 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(prev, transaction) {
2403
+ return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2404
+ while (1) {
2405
+ switch (_context2.prev = _context2.next) {
2406
+ case 0:
2407
+ _context2.next = 2;
2408
+ return prev;
2603
2409
 
2604
- case 5:
2605
- case "end":
2606
- return _context3.stop();
2607
- }
2608
- }
2609
- }, _callee3);
2610
- })), [selectedSchema, baseDocuments, translatedDocuments, fetchInformation]);
2611
- var onFixBaseDocumntRefs = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee4() {
2612
- return _regeneratorRuntime__default["default"].wrap(function _callee4$(_context4) {
2613
- while (1) {
2614
- switch (_context4.prev = _context4.next) {
2615
- case 0:
2616
- setPending(true);
2617
- _context4.next = 3;
2618
- return fixBaseDocumentRefs(selectedSchema, translatedDocuments);
2410
+ case 2:
2411
+ _context2.next = 4;
2412
+ return transaction.commit();
2619
2413
 
2620
- case 3:
2621
- _context4.next = 5;
2622
- return fetchInformation(selectedSchema);
2414
+ case 4:
2415
+ case "end":
2416
+ return _context2.stop();
2417
+ }
2418
+ }
2419
+ }, _callee2);
2420
+ }));
2623
2421
 
2624
- case 5:
2625
- case "end":
2626
- return _context4.stop();
2627
- }
2628
- }
2629
- }, _callee4);
2630
- })), [selectedSchema, translatedDocuments]);
2631
- var onFixOrphanDocuments = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee5() {
2632
- return _regeneratorRuntime__default["default"].wrap(function _callee5$(_context5) {
2633
- while (1) {
2634
- switch (_context5.prev = _context5.next) {
2635
- case 0:
2636
- setPending(true);
2637
- _context5.next = 3;
2638
- return fixOrphanedDocuments(baseDocuments, translatedDocuments);
2422
+ return function (_x, _x2) {
2423
+ return _ref3.apply(this, arguments);
2424
+ };
2425
+ }(), Promise.resolve());
2639
2426
 
2640
- case 3:
2641
- _context5.next = 5;
2427
+ case 5:
2428
+ _context3.next = 7;
2642
2429
  return fetchInformation(selectedSchema);
2643
2430
 
2644
- case 5:
2645
- case "end":
2646
- return _context5.stop();
2647
- }
2648
- }
2649
- }, _callee5);
2650
- })), [selectedSchema, baseDocuments, translatedDocuments, fetchInformation]);
2651
- var onFixReferenceBehaviorMismatch = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee6() {
2652
- return _regeneratorRuntime__default["default"].wrap(function _callee6$(_context6) {
2653
- while (1) {
2654
- switch (_context6.prev = _context6.next) {
2655
- case 0:
2656
- setPending(true);
2657
- _context6.next = 3;
2658
- return fixTranslationRefs(selectedSchema, baseDocuments, translatedDocuments);
2431
+ case 7:
2432
+ setPendingTransactions(null);
2659
2433
 
2660
- case 3:
2661
- _context6.next = 5;
2662
- return fetchInformation(selectedSchema);
2434
+ case 8:
2435
+ _context3.next = 13;
2436
+ break;
2663
2437
 
2664
- case 5:
2665
- case "end":
2666
- return _context6.stop();
2667
- }
2668
- }
2669
- }, _callee6);
2670
- })), [selectedSchema, baseDocuments, translatedDocuments]);
2671
- var onFixBaseLanguageMismatch = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee7() {
2672
- return _regeneratorRuntime__default["default"].wrap(function _callee7$(_context7) {
2673
- while (1) {
2674
- switch (_context7.prev = _context7.next) {
2675
- case 0:
2676
- setPending(true);
2677
- _context7.next = 3;
2678
- return fixBaseLanguageMismatch(selectedSchema, baseDocuments);
2438
+ case 10:
2439
+ _context3.prev = 10;
2440
+ _context3.t0 = _context3["catch"](1);
2441
+ console.error(_context3.t0); // @TODO show error
2679
2442
 
2680
- case 3:
2681
- _context7.next = 5;
2682
- return fetchInformation(selectedSchema);
2443
+ case 13:
2444
+ _context3.prev = 13;
2445
+ setPending(false);
2446
+ return _context3.finish(13);
2683
2447
 
2684
- case 5:
2448
+ case 16:
2685
2449
  case "end":
2686
- return _context7.stop();
2450
+ return _context3.stop();
2687
2451
  }
2688
2452
  }
2689
- }, _callee7);
2690
- })), [selectedSchema, baseDocuments, fetchInformation]);
2453
+ }, _callee3, null, [[1, 10, 13, 16]]);
2454
+ })), [setPending, fetchInformation, selectedSchema, pendingTransactions]);
2691
2455
  return /*#__PURE__*/React__default["default"].createElement(ui.Container, {
2692
2456
  width: 1
2693
2457
  }, /*#__PURE__*/React__default["default"].createElement(ui.Stack, {
@@ -2706,38 +2470,91 @@ var MaintenanceTabContent = function MaintenanceTabContent() {
2706
2470
  pending: pending,
2707
2471
  count: documentsSummaryInformation.idStructureMismatch.length,
2708
2472
  labelName: "idStructureMismatch",
2709
- onClick: onFixIdStructureMismatchDocuments
2473
+ onClick: handleFixIdStructureMismatchDocuments
2710
2474
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2711
2475
  pending: pending,
2712
2476
  count: documentsSummaryInformation.missingLanguageField.length,
2713
2477
  labelName: "missingLanguageField",
2714
- onClick: onFixMissingLanguageFields
2478
+ onClick: handleFixMissingLanguageFields
2715
2479
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2716
2480
  pending: pending,
2717
2481
  count: documentsSummaryInformation.missingDocumentRefs.length,
2718
2482
  labelName: "missingDocumentRefs",
2719
- onClick: onFixTranslationRefs
2483
+ onClick: handleFixTranslationRefs
2720
2484
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2721
2485
  pending: pending,
2722
2486
  count: documentsSummaryInformation.missingBaseDocumentRefs.length,
2723
2487
  labelName: "missingBaseDocumentRefs",
2724
- onClick: onFixBaseDocumntRefs
2488
+ onClick: handleFixBaseDocumntRefs
2725
2489
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2726
2490
  pending: pending,
2727
2491
  count: documentsSummaryInformation.orphanDocuments.length,
2728
2492
  labelName: "orphanDocuments",
2729
- onClick: onFixOrphanDocuments
2493
+ onClick: handleFixOrphanDocuments
2730
2494
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2731
2495
  pending: pending,
2732
2496
  count: documentsSummaryInformation.referenceBehaviorMismatch.length,
2733
2497
  labelName: "referenceBehaviorMismatch",
2734
- onClick: onFixReferenceBehaviorMismatch
2498
+ onClick: handleFixReferenceBehaviorMismatch
2735
2499
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2736
2500
  pending: pending,
2737
2501
  count: documentsSummaryInformation.baseLanguageMismatch.length,
2738
2502
  labelName: "baseLanguageMismatch",
2739
- onClick: onFixBaseLanguageMismatch
2740
- })))));
2503
+ onClick: handleFixBaseLanguageMismatch
2504
+ })))), !!(pendingTransactions !== null && pendingTransactions !== void 0 && pendingTransactions.length) && /*#__PURE__*/React__default["default"].createElement(ui.Dialog, {
2505
+ id: "confirm-pending-transactions",
2506
+ width: 2,
2507
+ header: UiMessages.translationsMaintenance.pendingTransactionDialog.header,
2508
+ onClose: handleCancelPendingTransaction,
2509
+ footer: /*#__PURE__*/React__default["default"].createElement(ui.Flex, {
2510
+ padding: 3,
2511
+ justify: "flex-end"
2512
+ }, /*#__PURE__*/React__default["default"].createElement(ui.Grid, {
2513
+ autoFlow: "column",
2514
+ autoCols: "auto",
2515
+ gap: 2
2516
+ }, /*#__PURE__*/React__default["default"].createElement(ui.Button, {
2517
+ tone: "default",
2518
+ loading: pending,
2519
+ disabled: pending,
2520
+ text: UiMessages.translationsMaintenance.pendingTransactionDialog.cancel,
2521
+ onClick: handleCancelPendingTransaction
2522
+ }), /*#__PURE__*/React__default["default"].createElement(ui.Button, {
2523
+ tone: "critical",
2524
+ loading: pending,
2525
+ disabled: pending,
2526
+ text: UiMessages.translationsMaintenance.pendingTransactionDialog.confirm,
2527
+ onClick: handleConfirmPendingTransaction
2528
+ })))
2529
+ }, /*#__PURE__*/React__default["default"].createElement(ui.Stack, {
2530
+ padding: 3,
2531
+ space: 3
2532
+ }, /*#__PURE__*/React__default["default"].createElement(ui.Card, {
2533
+ padding: 3,
2534
+ radius: 2,
2535
+ shadow: 1,
2536
+ tone: "caution"
2537
+ }, /*#__PURE__*/React__default["default"].createElement(ui.Text, {
2538
+ size: 2
2539
+ }, UiMessages.translationsMaintenance.pendingTransactionDialog.caution)), /*#__PURE__*/React__default["default"].createElement(ui.Grid, {
2540
+ cols: 1
2541
+ }, /*#__PURE__*/React__default["default"].createElement(StyledCodeCard, {
2542
+ padding: 3,
2543
+ radius: 2,
2544
+ shadow: 1,
2545
+ tone: "default"
2546
+ }, /*#__PURE__*/React__default["default"].createElement(StyledCode, {
2547
+ language: "json"
2548
+ }, JSON.stringify(pendingTransactions.map(function (transaction) {
2549
+ return transaction.toJSON();
2550
+ }), null, 2))), /*#__PURE__*/React__default["default"].createElement(StyledDownloadCodeFlex, {
2551
+ padding: 2,
2552
+ justify: "flex-end",
2553
+ align: "flex-start",
2554
+ onClick: handleDownloadCode
2555
+ }, /*#__PURE__*/React__default["default"].createElement(ui.Button, {
2556
+ text: "Download"
2557
+ }))))));
2741
2558
  };
2742
2559
 
2743
2560
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }