@sanity/document-internationalization 0.3.6 → 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'
@@ -1841,45 +1851,6 @@ function getLanguageFromDocument(doc, config) {
1841
1851
  return (doc === null || doc === void 0 ? void 0 : doc[config.fieldNames.lang]) || config.base || null;
1842
1852
  }
1843
1853
 
1844
- var BATCH_SIZE = 50;
1845
- function batch(_x, _x2) {
1846
- return _batch.apply(this, arguments);
1847
- }
1848
-
1849
- function _batch() {
1850
- _batch = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(input, fn) {
1851
- var batched, i;
1852
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
1853
- while (1) {
1854
- switch (_context.prev = _context.next) {
1855
- case 0:
1856
- batched = ___default["default"].chunk(input, BATCH_SIZE);
1857
- i = 0;
1858
-
1859
- case 2:
1860
- if (!(i < batched.length)) {
1861
- _context.next = 8;
1862
- break;
1863
- }
1864
-
1865
- _context.next = 5;
1866
- return fn(batched[i]);
1867
-
1868
- case 5:
1869
- i++;
1870
- _context.next = 2;
1871
- break;
1872
-
1873
- case 8:
1874
- case "end":
1875
- return _context.stop();
1876
- }
1877
- }
1878
- }, _callee);
1879
- }));
1880
- return _batch.apply(this, arguments);
1881
- }
1882
-
1883
1854
  var MaintenanceTabTypeSelector = function MaintenanceTabTypeSelector(_ref) {
1884
1855
  var value = _ref.value,
1885
1856
  onChange = _ref.onChange,
@@ -1987,7 +1958,7 @@ var useDocumentsInformation = function useDocumentsInformation(schema) {
1987
1958
  case 0:
1988
1959
  setPending(true);
1989
1960
  _context.next = 3;
1990
- 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.**'))]", {
1991
1962
  type: selectedSchema
1992
1963
  })]);
1993
1964
 
@@ -2011,7 +1982,7 @@ var useDocumentsInformation = function useDocumentsInformation(schema) {
2011
1982
  return function (_x) {
2012
1983
  return _ref.apply(this, arguments);
2013
1984
  };
2014
- }(), [pending, config, documents, sanityClientRef.current]);
1985
+ }(), [config]);
2015
1986
  var documentsSummaryInformation = React__default["default"].useMemo(function () {
2016
1987
  var _config$fieldNames, _config$fieldNames2, _config$fieldNames3;
2017
1988
 
@@ -2136,302 +2107,132 @@ function split(arr, n) {
2136
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; }
2137
2108
 
2138
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; }
2139
- var fixIdStructureMismatchDocuments = /*#__PURE__*/function () {
2140
- var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(schema, documents) {
2141
- var config, sanityClient, refsFieldName, existingBaseDocumentIds, removeOldRefsTransaction;
2142
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2143
- while (1) {
2144
- switch (_context2.prev = _context2.next) {
2145
- case 0:
2146
- config = getConfig();
2147
- sanityClient = getSanityClient();
2148
- refsFieldName = config.fieldNames.references; // remove old refs
2149
-
2150
- existingBaseDocumentIds = new Set(documents.map(function (d) {
2151
- return getBaseIdFromId(d._id);
2152
- }));
2153
- removeOldRefsTransaction = sanityClient.transaction();
2154
- existingBaseDocumentIds.forEach(function (id) {
2155
- removeOldRefsTransaction.patch(id, {
2156
- set: _defineProperty__default["default"]({}, refsFieldName, [])
2157
- });
2158
- });
2159
- _context2.next = 8;
2160
- return removeOldRefsTransaction.commit();
2161
-
2162
- case 8:
2163
- _context2.next = 10;
2164
- return Promise.all(arraySplit(documents.filter(function (d) {
2165
- return d._id !== getBaseIdFromId(d._id);
2166
- }), 100).map( /*#__PURE__*/function () {
2167
- var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(documentsChunk) {
2168
- var transaction;
2169
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2170
- while (1) {
2171
- switch (_context.prev = _context.next) {
2172
- case 0:
2173
- transaction = sanityClient.transaction();
2174
- documentsChunk.forEach(function (d) {
2175
- var baseId = getBaseIdFromId(d._id);
2176
- var lang = getLanguageFromDocument(d, config);
2177
-
2178
- if (lang) {
2179
- var newId = buildDocId(baseId, lang);
2180
- transaction.createIfNotExists(_objectSpread$1(_objectSpread$1({}, d), {}, {
2181
- _id: newId,
2182
- _type: schema
2183
- }));
2184
- transaction["delete"](d._id); // patch base document with updated refs
2185
-
2186
- // patch base document with updated refs
2187
- if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {
2188
- transaction.patch(baseId, {
2189
- setIfMissing: _defineProperty__default["default"]({}, refsFieldName, [])
2190
- });
2191
- transaction.patch(baseId, {
2192
- insert: {
2193
- after: "".concat(refsFieldName, "[-1]"),
2194
- items: [_objectSpread$1({
2195
- _key: lang
2196
- }, createSanityReference(newId, config.referenceBehavior === ReferenceBehavior.WEAK))]
2197
- }
2198
- });
2199
- }
2200
- }
2201
- });
2202
- _context.next = 4;
2203
- return transaction.commit();
2204
-
2205
- case 4:
2206
- case "end":
2207
- return _context.stop();
2208
- }
2209
- }
2210
- }, _callee);
2211
- }));
2212
-
2213
- return function (_x3) {
2214
- return _ref2.apply(this, arguments);
2215
- };
2216
- }()));
2110
+ var fixIdStructureMismatchDocuments = function fixIdStructureMismatchDocuments(schema, documents) {
2111
+ var config = getConfig();
2112
+ var sanityClient = getSanityClient();
2113
+ var refsFieldName = config.fieldNames.references; // remove old refs
2217
2114
 
2218
- case 10:
2219
- case "end":
2220
- return _context2.stop();
2221
- }
2222
- }
2223
- }, _callee2);
2115
+ var existingBaseDocumentIds = new Set(documents.map(function (d) {
2116
+ return getBaseIdFromId(d._id);
2224
2117
  }));
2225
-
2226
- return function fixIdStructureMismatchDocuments(_x, _x2) {
2227
- return _ref.apply(this, arguments);
2228
- };
2229
- }();
2230
-
2231
- var fixLanguageFields = /*#__PURE__*/function () {
2232
- var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(schema, documents) {
2233
- var _config$fieldNames;
2234
-
2235
- var sanityClient, config, langFieldName;
2236
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2237
- while (1) {
2238
- switch (_context2.prev = _context2.next) {
2239
- case 0:
2240
- sanityClient = getSanityClient();
2241
- config = getConfig(schema);
2242
- langFieldName = (_config$fieldNames = config.fieldNames) === null || _config$fieldNames === void 0 ? void 0 : _config$fieldNames.lang;
2243
- _context2.next = 5;
2244
- return Promise.all(documents.map( /*#__PURE__*/function () {
2245
- var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(d) {
2246
- var schemaObject, base, language;
2247
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2248
- while (1) {
2249
- switch (_context.prev = _context.next) {
2250
- case 0:
2251
- schemaObject = getSchema(d._type);
2252
- base = (_typeof__default["default"](schemaObject.i18n) === 'object' ? schemaObject.i18n.base : undefined) || config.base;
2253
-
2254
- if (d[langFieldName]) {
2255
- _context.next = 6;
2256
- break;
2257
- }
2258
-
2259
- // @README keep the language from ID behavior
2260
- // because in this case we expect the language field not to be available
2261
- language = getLanguageFromId(d._id) || base;
2262
- _context.next = 6;
2263
- return sanityClient.patch(d._id, {
2264
- set: _defineProperty__default["default"]({}, langFieldName, language)
2265
- }).commit();
2266
-
2267
- case 6:
2268
- case "end":
2269
- return _context.stop();
2270
- }
2271
- }
2272
- }, _callee);
2273
- }));
2274
-
2275
- return function (_x3) {
2276
- return _ref2.apply(this, arguments);
2277
- };
2278
- }()));
2279
-
2280
- case 5:
2281
- case "end":
2282
- 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
+ });
2283
2153
  }
2284
2154
  }
2285
- }, _callee2);
2286
- }));
2155
+ });
2156
+ return transaction;
2157
+ });
2158
+ return [removeOldRefsTransaction].concat(_toConsumableArray__default["default"](newDocumentTransactions));
2159
+ };
2287
2160
 
2288
- return function fixLanguageFields(_x, _x2) {
2289
- return _ref.apply(this, arguments);
2290
- };
2291
- }();
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
+ };
2292
2183
 
2293
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; }
2294
2185
 
2295
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; }
2296
- var fixTranslationRefs = /*#__PURE__*/function () {
2297
- var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee3(schema, baseDocuments, translatedDocuments) {
2298
- var sanityClient, config, refsFieldName;
2299
- return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
2300
- while (1) {
2301
- switch (_context3.prev = _context3.next) {
2302
- case 0:
2303
- sanityClient = getSanityClient();
2304
- config = getConfig(schema);
2305
- refsFieldName = config.fieldNames.references;
2306
- _context3.next = 5;
2307
- return batch(baseDocuments, /*#__PURE__*/function () {
2308
- var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(chunk) {
2309
- var transaction;
2310
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2311
- while (1) {
2312
- switch (_context2.prev = _context2.next) {
2313
- case 0:
2314
- transaction = sanityClient.transaction();
2315
- chunk.map( /*#__PURE__*/function () {
2316
- var _ref3 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(d) {
2317
- var translatedRefs, relevantTranslations;
2318
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2319
- while (1) {
2320
- switch (_context.prev = _context.next) {
2321
- case 0:
2322
- translatedRefs = [];
2323
- relevantTranslations = translatedDocuments.filter(function (dx) {
2324
- return getBaseIdFromId(dx._id) === d._id;
2325
- });
2326
-
2327
- if (config.referenceBehavior !== ReferenceBehavior.DISABLED) {
2328
- translatedRefs = ___default["default"].compact(relevantTranslations.map(function (doc) {
2329
- var lang = getLanguageFromDocument(doc, config);
2330
- if (!lang) return null;
2331
- return _objectSpread({
2332
- _key: lang
2333
- }, createSanityReference(doc._id, config.referenceBehavior === ReferenceBehavior.WEAK));
2334
- }, {}));
2335
- }
2336
-
2337
- transaction.patch(d._id, {
2338
- set: _defineProperty__default["default"]({}, refsFieldName, translatedRefs)
2339
- });
2340
-
2341
- case 4:
2342
- case "end":
2343
- return _context.stop();
2344
- }
2345
- }
2346
- }, _callee);
2347
- }));
2348
-
2349
- return function (_x5) {
2350
- return _ref3.apply(this, arguments);
2351
- };
2352
- }());
2353
- _context2.next = 4;
2354
- return transaction.commit();
2355
-
2356
- case 4:
2357
- case "end":
2358
- return _context2.stop();
2359
- }
2360
- }
2361
- }, _callee2);
2362
- }));
2363
-
2364
- return function (_x4) {
2365
- return _ref2.apply(this, arguments);
2366
- };
2367
- }());
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
+ });
2368
2199
 
2369
- case 5:
2370
- case "end":
2371
- return _context3.stop();
2372
- }
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
+ }, {}));
2373
2208
  }
2374
- }, _callee3);
2375
- }));
2376
2209
 
2377
- return function fixTranslationRefs(_x, _x2, _x3) {
2378
- return _ref.apply(this, arguments);
2379
- };
2380
- }();
2381
-
2382
- var fixOrphanedDocuments = /*#__PURE__*/function () {
2383
- var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(basedocuments, translatedDocuments) {
2384
- var sanityClient;
2385
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2386
- while (1) {
2387
- switch (_context2.prev = _context2.next) {
2388
- case 0:
2389
- sanityClient = getSanityClient();
2390
- _context2.next = 3;
2391
- return Promise.all(translatedDocuments.map( /*#__PURE__*/function () {
2392
- var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(d) {
2393
- var base;
2394
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2395
- while (1) {
2396
- switch (_context.prev = _context.next) {
2397
- case 0:
2398
- base = basedocuments.find(function (doc) {
2399
- return d._id.startsWith(doc._id);
2400
- });
2401
-
2402
- if (base) {
2403
- _context.next = 4;
2404
- break;
2405
- }
2406
-
2407
- _context.next = 4;
2408
- return sanityClient["delete"](d._id);
2409
-
2410
- case 4:
2411
- case "end":
2412
- return _context.stop();
2413
- }
2414
- }
2415
- }, _callee);
2416
- }));
2417
-
2418
- return function (_x3) {
2419
- return _ref2.apply(this, arguments);
2420
- };
2421
- }()));
2210
+ transaction.patch(d._id, {
2211
+ set: _defineProperty__default["default"]({}, refsFieldName, translatedRefs)
2212
+ });
2213
+ });
2214
+ return transaction;
2215
+ });
2422
2216
 
2423
- case 3:
2424
- case "end":
2425
- return _context2.stop();
2426
- }
2427
- }
2428
- }, _callee2);
2429
- }));
2217
+ return transactions;
2218
+ };
2430
2219
 
2431
- return function fixOrphanedDocuments(_x, _x2) {
2432
- return _ref.apply(this, arguments);
2433
- };
2434
- }();
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
+ };
2435
2236
 
2436
2237
  var fixBaseLanguageMismatch = /*#__PURE__*/function () {
2437
2238
  var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(schema, basedocuments) {
@@ -2458,10 +2259,9 @@ var fixBaseLanguageMismatch = /*#__PURE__*/function () {
2458
2259
  });
2459
2260
  }
2460
2261
  });
2461
- _context.next = 11;
2462
- return transaction.commit();
2262
+ return _context.abrupt("return", transaction);
2463
2263
 
2464
- case 11:
2264
+ case 10:
2465
2265
  case "end":
2466
2266
  return _context.stop();
2467
2267
  }
@@ -2474,65 +2274,30 @@ var fixBaseLanguageMismatch = /*#__PURE__*/function () {
2474
2274
  };
2475
2275
  }();
2476
2276
 
2477
- var fixBaseDocumentRefs = /*#__PURE__*/function () {
2478
- var _ref = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2(schema, translatedDocuments) {
2479
- var config, sanityClient, baseRefFieldName, transaction;
2480
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2481
- while (1) {
2482
- switch (_context2.prev = _context2.next) {
2483
- case 0:
2484
- config = getConfig(schema);
2485
- sanityClient = getSanityClient();
2486
-
2487
- if (!(config.referenceBehavior !== ReferenceBehavior.DISABLED)) {
2488
- _context2.next = 8;
2489
- break;
2490
- }
2491
-
2492
- baseRefFieldName = config.fieldNames.baseReference;
2493
- transaction = sanityClient.transaction();
2494
- translatedDocuments.forEach( /*#__PURE__*/function () {
2495
- var _ref2 = _asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee(d) {
2496
- var baseId;
2497
- return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2498
- while (1) {
2499
- switch (_context.prev = _context.next) {
2500
- case 0:
2501
- if (!d[baseRefFieldName]) {
2502
- baseId = getBaseIdFromId(d._id);
2503
- transaction.patch(d._id, {
2504
- set: _defineProperty__default["default"]({}, baseRefFieldName, createSanityReference(baseId, config.referenceBehavior === ReferenceBehavior.WEAK))
2505
- });
2506
- }
2507
-
2508
- case 1:
2509
- case "end":
2510
- return _context.stop();
2511
- }
2512
- }
2513
- }, _callee);
2514
- }));
2515
-
2516
- return function (_x3) {
2517
- return _ref2.apply(this, arguments);
2518
- };
2519
- }());
2520
- _context2.next = 8;
2521
- return transaction.commit();
2522
-
2523
- case 8:
2524
- case "end":
2525
- return _context2.stop();
2526
- }
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
+ });
2527
2290
  }
2528
- }, _callee2);
2529
- }));
2291
+ });
2292
+ }
2530
2293
 
2531
- return function fixBaseDocumentRefs(_x, _x2) {
2532
- return _ref.apply(this, arguments);
2533
- };
2534
- }();
2294
+ return transaction;
2295
+ };
2535
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"])));
2536
2301
  var MaintenanceTabContent = function MaintenanceTabContent() {
2537
2302
  var _React$useState = React__default["default"].useState(''),
2538
2303
  _React$useState2 = _slicedToArray__default["default"](_React$useState, 2),
@@ -2548,152 +2313,145 @@ var MaintenanceTabContent = function MaintenanceTabContent() {
2548
2313
  documentsSummaryInformation = _useDocumentsInformat.documentsSummaryInformation,
2549
2314
  fetchInformation = _useDocumentsInformat.fetchInformation;
2550
2315
 
2551
- 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) {
2552
2322
  return setSelectedSchema(schemaName);
2553
- }, [selectedSchema]);
2554
- var handleOpen = React__default["default"].useCallback(function () {
2323
+ }, []);
2324
+ var handleOpen = React.useCallback(function () {
2555
2325
  return setSelectedSchema('');
2556
- }, [selectedSchema]);
2557
- 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() {
2558
2346
  return _regeneratorRuntime__default["default"].wrap(function _callee$(_context) {
2559
2347
  while (1) {
2560
2348
  switch (_context.prev = _context.next) {
2561
2349
  case 0:
2562
- setPending(true);
2350
+ _context.t0 = setPendingTransactions;
2563
2351
  _context.next = 3;
2564
- return fixIdStructureMismatchDocuments(selectedSchema, documents);
2352
+ return fixBaseLanguageMismatch(selectedSchema, baseDocuments);
2565
2353
 
2566
2354
  case 3:
2567
- _context.next = 5;
2568
- return fetchInformation(selectedSchema);
2355
+ _context.t1 = _context.sent;
2356
+ _context.t2 = [_context.t1];
2357
+ (0, _context.t0)(_context.t2);
2569
2358
 
2570
- case 5:
2359
+ case 6:
2571
2360
  case "end":
2572
2361
  return _context.stop();
2573
2362
  }
2574
2363
  }
2575
2364
  }, _callee);
2576
- })), [selectedSchema, documents, fetchInformation]);
2577
- var onFixMissingLanguageFields = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee2() {
2578
- return _regeneratorRuntime__default["default"].wrap(function _callee2$(_context2) {
2579
- while (1) {
2580
- switch (_context2.prev = _context2.next) {
2581
- case 0:
2582
- setPending(true);
2583
- _context2.next = 3;
2584
- return fixLanguageFields(selectedSchema, documents);
2585
-
2586
- case 3:
2587
- _context2.next = 5;
2588
- return fetchInformation(selectedSchema);
2589
-
2590
- case 5:
2591
- case "end":
2592
- return _context2.stop();
2593
- }
2594
- }
2595
- }, _callee2);
2596
- })), [selectedSchema, documents, fetchInformation]);
2597
- 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() {
2598
2388
  return _regeneratorRuntime__default["default"].wrap(function _callee3$(_context3) {
2599
2389
  while (1) {
2600
2390
  switch (_context3.prev = _context3.next) {
2601
2391
  case 0:
2602
2392
  setPending(true);
2603
- _context3.next = 3;
2604
- return fixTranslationRefs(selectedSchema, baseDocuments, translatedDocuments);
2393
+ _context3.prev = 1;
2394
+
2395
+ if (!pendingTransactions) {
2396
+ _context3.next = 8;
2397
+ break;
2398
+ }
2605
2399
 
2606
- case 3:
2607
2400
  _context3.next = 5;
2608
- 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;
2609
2409
 
2610
- case 5:
2611
- case "end":
2612
- return _context3.stop();
2613
- }
2614
- }
2615
- }, _callee3);
2616
- })), [selectedSchema, baseDocuments, translatedDocuments, fetchInformation]);
2617
- var onFixBaseDocumntRefs = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee4() {
2618
- return _regeneratorRuntime__default["default"].wrap(function _callee4$(_context4) {
2619
- while (1) {
2620
- switch (_context4.prev = _context4.next) {
2621
- case 0:
2622
- setPending(true);
2623
- _context4.next = 3;
2624
- return fixBaseDocumentRefs(selectedSchema, translatedDocuments);
2410
+ case 2:
2411
+ _context2.next = 4;
2412
+ return transaction.commit();
2625
2413
 
2626
- case 3:
2627
- _context4.next = 5;
2628
- return fetchInformation(selectedSchema);
2414
+ case 4:
2415
+ case "end":
2416
+ return _context2.stop();
2417
+ }
2418
+ }
2419
+ }, _callee2);
2420
+ }));
2629
2421
 
2630
- case 5:
2631
- case "end":
2632
- return _context4.stop();
2633
- }
2634
- }
2635
- }, _callee4);
2636
- })), [selectedSchema, translatedDocuments]);
2637
- var onFixOrphanDocuments = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee5() {
2638
- return _regeneratorRuntime__default["default"].wrap(function _callee5$(_context5) {
2639
- while (1) {
2640
- switch (_context5.prev = _context5.next) {
2641
- case 0:
2642
- setPending(true);
2643
- _context5.next = 3;
2644
- return fixOrphanedDocuments(baseDocuments, translatedDocuments);
2422
+ return function (_x, _x2) {
2423
+ return _ref3.apply(this, arguments);
2424
+ };
2425
+ }(), Promise.resolve());
2645
2426
 
2646
- case 3:
2647
- _context5.next = 5;
2427
+ case 5:
2428
+ _context3.next = 7;
2648
2429
  return fetchInformation(selectedSchema);
2649
2430
 
2650
- case 5:
2651
- case "end":
2652
- return _context5.stop();
2653
- }
2654
- }
2655
- }, _callee5);
2656
- })), [selectedSchema, baseDocuments, translatedDocuments, fetchInformation]);
2657
- var onFixReferenceBehaviorMismatch = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee6() {
2658
- return _regeneratorRuntime__default["default"].wrap(function _callee6$(_context6) {
2659
- while (1) {
2660
- switch (_context6.prev = _context6.next) {
2661
- case 0:
2662
- setPending(true);
2663
- _context6.next = 3;
2664
- return fixTranslationRefs(selectedSchema, baseDocuments, translatedDocuments);
2431
+ case 7:
2432
+ setPendingTransactions(null);
2665
2433
 
2666
- case 3:
2667
- _context6.next = 5;
2668
- return fetchInformation(selectedSchema);
2434
+ case 8:
2435
+ _context3.next = 13;
2436
+ break;
2669
2437
 
2670
- case 5:
2671
- case "end":
2672
- return _context6.stop();
2673
- }
2674
- }
2675
- }, _callee6);
2676
- })), [selectedSchema, baseDocuments, translatedDocuments]);
2677
- var onFixBaseLanguageMismatch = React__default["default"].useCallback( /*#__PURE__*/_asyncToGenerator__default["default"]( /*#__PURE__*/_regeneratorRuntime__default["default"].mark(function _callee7() {
2678
- return _regeneratorRuntime__default["default"].wrap(function _callee7$(_context7) {
2679
- while (1) {
2680
- switch (_context7.prev = _context7.next) {
2681
- case 0:
2682
- setPending(true);
2683
- _context7.next = 3;
2684
- 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
2685
2442
 
2686
- case 3:
2687
- _context7.next = 5;
2688
- return fetchInformation(selectedSchema);
2443
+ case 13:
2444
+ _context3.prev = 13;
2445
+ setPending(false);
2446
+ return _context3.finish(13);
2689
2447
 
2690
- case 5:
2448
+ case 16:
2691
2449
  case "end":
2692
- return _context7.stop();
2450
+ return _context3.stop();
2693
2451
  }
2694
2452
  }
2695
- }, _callee7);
2696
- })), [selectedSchema, baseDocuments, fetchInformation]);
2453
+ }, _callee3, null, [[1, 10, 13, 16]]);
2454
+ })), [setPending, fetchInformation, selectedSchema, pendingTransactions]);
2697
2455
  return /*#__PURE__*/React__default["default"].createElement(ui.Container, {
2698
2456
  width: 1
2699
2457
  }, /*#__PURE__*/React__default["default"].createElement(ui.Stack, {
@@ -2712,38 +2470,91 @@ var MaintenanceTabContent = function MaintenanceTabContent() {
2712
2470
  pending: pending,
2713
2471
  count: documentsSummaryInformation.idStructureMismatch.length,
2714
2472
  labelName: "idStructureMismatch",
2715
- onClick: onFixIdStructureMismatchDocuments
2473
+ onClick: handleFixIdStructureMismatchDocuments
2716
2474
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2717
2475
  pending: pending,
2718
2476
  count: documentsSummaryInformation.missingLanguageField.length,
2719
2477
  labelName: "missingLanguageField",
2720
- onClick: onFixMissingLanguageFields
2478
+ onClick: handleFixMissingLanguageFields
2721
2479
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2722
2480
  pending: pending,
2723
2481
  count: documentsSummaryInformation.missingDocumentRefs.length,
2724
2482
  labelName: "missingDocumentRefs",
2725
- onClick: onFixTranslationRefs
2483
+ onClick: handleFixTranslationRefs
2726
2484
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2727
2485
  pending: pending,
2728
2486
  count: documentsSummaryInformation.missingBaseDocumentRefs.length,
2729
2487
  labelName: "missingBaseDocumentRefs",
2730
- onClick: onFixBaseDocumntRefs
2488
+ onClick: handleFixBaseDocumntRefs
2731
2489
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2732
2490
  pending: pending,
2733
2491
  count: documentsSummaryInformation.orphanDocuments.length,
2734
2492
  labelName: "orphanDocuments",
2735
- onClick: onFixOrphanDocuments
2493
+ onClick: handleFixOrphanDocuments
2736
2494
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2737
2495
  pending: pending,
2738
2496
  count: documentsSummaryInformation.referenceBehaviorMismatch.length,
2739
2497
  labelName: "referenceBehaviorMismatch",
2740
- onClick: onFixReferenceBehaviorMismatch
2498
+ onClick: handleFixReferenceBehaviorMismatch
2741
2499
  }), /*#__PURE__*/React__default["default"].createElement(MaintenanceTabResult, {
2742
2500
  pending: pending,
2743
2501
  count: documentsSummaryInformation.baseLanguageMismatch.length,
2744
2502
  labelName: "baseLanguageMismatch",
2745
- onClick: onFixBaseLanguageMismatch
2746
- })))));
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
+ }))))));
2747
2558
  };
2748
2559
 
2749
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); }; }