@sanity/cross-dataset-duplicator 0.3.5 → 0.3.6
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/README.md +3 -2
- package/lib/actions/DuplicateToAction.js +5 -20
- package/lib/actions/DuplicateToAction.js.map +1 -1
- package/lib/actions/index.js +2 -11
- package/lib/actions/index.js.map +1 -1
- package/lib/components/CrossDatasetDuplicator.js +9 -35
- package/lib/components/CrossDatasetDuplicator.js.map +1 -1
- package/lib/components/DuplicatorQuery.js +13 -35
- package/lib/components/DuplicatorQuery.js.map +1 -1
- package/lib/components/DuplicatorTool.js +56 -128
- package/lib/components/DuplicatorTool.js.map +1 -1
- package/lib/components/Feedback.js +2 -6
- package/lib/components/Feedback.js.map +1 -1
- package/lib/components/ResetSecret.js +0 -9
- package/lib/components/ResetSecret.js.map +1 -1
- package/lib/components/SelectButtons.js +5 -30
- package/lib/components/SelectButtons.js.map +1 -1
- package/lib/components/StatusBadge.js +1 -8
- package/lib/components/StatusBadge.js.map +1 -1
- package/lib/helpers/clientConfig.js.map +1 -1
- package/lib/helpers/constants.js.map +1 -1
- package/lib/helpers/getDocumentsInArray.js +13 -20
- package/lib/helpers/getDocumentsInArray.js.map +1 -1
- package/lib/helpers/index.js +0 -3
- package/lib/helpers/index.js.map +1 -1
- package/lib/index.js +0 -3
- package/lib/index.js.map +1 -1
- package/lib/tool/index.js +0 -6
- package/lib/tool/index.js.map +1 -1
- package/package.json +3 -3
- package/src/helpers/getDocumentsInArray.ts +8 -5
package/README.md
CHANGED
|
@@ -55,7 +55,8 @@ The plugin has some configuration options. These can be set by adding a config f
|
|
|
55
55
|
```json
|
|
56
56
|
{
|
|
57
57
|
"tool": true,
|
|
58
|
-
"types": ["article", "page"]
|
|
58
|
+
"types": ["article", "page"],
|
|
59
|
+
"filter": "_type != 'product'"
|
|
59
60
|
}
|
|
60
61
|
```
|
|
61
62
|
|
|
@@ -63,6 +64,7 @@ Options:
|
|
|
63
64
|
|
|
64
65
|
- `tool` (boolean, default: true) – Set whether the Migration Tool is enabled.
|
|
65
66
|
- `types` (Array[String], default: []) – Set which Schema Types the Migration Action should be enabled in.
|
|
67
|
+
- `filter` (String, default: undefined) - Set a predicate for documents when gathering dependencies.
|
|
66
68
|
|
|
67
69
|
### 3. Authentication Key
|
|
68
70
|
|
|
@@ -76,7 +78,6 @@ You can [create API tokens in manage](https://sanity.io/manage)
|
|
|
76
78
|
|
|
77
79
|
If you want to duplicate data across different projects, you need to enable CORS for the different hosts. This allows different projects to connect to each other through the project API. CORS origins configuration can be found in your project page, under the API tab.
|
|
78
80
|
|
|
79
|
-
|
|
80
81
|
## Importing the Document Action
|
|
81
82
|
|
|
82
83
|
In your Studio's `sanity.json` file, look for the `document-actions/resolver` part, it will look like this:
|
|
@@ -4,41 +4,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = DuplicateToAction;
|
|
7
|
-
|
|
8
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
|
|
10
8
|
var _icons = require("@sanity/icons");
|
|
11
|
-
|
|
12
9
|
var _CrossDatasetDuplicator = _interopRequireDefault(require("../components/CrossDatasetDuplicator"));
|
|
13
|
-
|
|
14
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
11
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
-
|
|
18
12
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
-
|
|
20
13
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
21
|
-
|
|
22
14
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
23
|
-
|
|
24
15
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
25
|
-
|
|
26
16
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
27
|
-
|
|
28
17
|
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
29
|
-
|
|
30
18
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
31
|
-
|
|
32
19
|
function DuplicateToAction(_ref) {
|
|
33
20
|
var draft = _ref.draft,
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
21
|
+
published = _ref.published,
|
|
22
|
+
onComplete = _ref.onComplete;
|
|
37
23
|
var _useState = (0, _react.useState)(false),
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
24
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
25
|
+
dialogOpen = _useState2[0],
|
|
26
|
+
setDialogOpen = _useState2[1];
|
|
42
27
|
return {
|
|
43
28
|
disabled: draft,
|
|
44
29
|
title: draft ? "Document must be Published to begin" : null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DuplicateToAction.js","names":["DuplicateToAction","draft","published","onComplete","useState","dialogOpen","setDialogOpen","disabled","title","label","dialog","type","content","onClose","onHandle","icon","LaunchIcon"],"sources":["../../src/actions/DuplicateToAction.tsx"],"sourcesContent":["import React, {useState} from 'react'\nimport {LaunchIcon} from '@sanity/icons'\n\nimport CrossDatasetDuplicator from '../components/CrossDatasetDuplicator'\n\nexport default function DuplicateToAction({draft, published, onComplete}) {\n const [dialogOpen, setDialogOpen] = useState(false)\n\n return {\n disabled: draft,\n title: draft ? `Document must be Published to begin` : null,\n label: 'Duplicate to...',\n dialog: dialogOpen && published && {\n type: 'modal',\n title: 'Cross Dataset Duplicator',\n content: <CrossDatasetDuplicator docs={[published]} mode=\"action\" />,\n onClose: () => onComplete(),\n },\n onHandle: () => setDialogOpen(true),\n icon: LaunchIcon,\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"DuplicateToAction.js","names":["DuplicateToAction","draft","published","onComplete","useState","dialogOpen","setDialogOpen","disabled","title","label","dialog","type","content","onClose","onHandle","icon","LaunchIcon"],"sources":["../../src/actions/DuplicateToAction.tsx"],"sourcesContent":["import React, {useState} from 'react'\nimport {LaunchIcon} from '@sanity/icons'\n\nimport CrossDatasetDuplicator from '../components/CrossDatasetDuplicator'\n\nexport default function DuplicateToAction({draft, published, onComplete}) {\n const [dialogOpen, setDialogOpen] = useState(false)\n\n return {\n disabled: draft,\n title: draft ? `Document must be Published to begin` : null,\n label: 'Duplicate to...',\n dialog: dialogOpen && published && {\n type: 'modal',\n title: 'Cross Dataset Duplicator',\n content: <CrossDatasetDuplicator docs={[published]} mode=\"action\" />,\n onClose: () => onComplete(),\n },\n onHandle: () => setDialogOpen(true),\n icon: LaunchIcon,\n }\n}\n"],"mappings":";;;;;;AAAA;AACA;AAEA;AAAyE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAE1D,SAASA,iBAAiB,OAAiC;EAAA,IAA/BC,KAAK,QAALA,KAAK;IAAEC,SAAS,QAATA,SAAS;IAAEC,UAAU,QAAVA,UAAU;EACrE,gBAAoC,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAA;IAA5CC,UAAU;IAAEC,aAAa;EAEhC,OAAO;IACLC,QAAQ,EAAEN,KAAK;IACfO,KAAK,EAAEP,KAAK,2CAA2C,IAAI;IAC3DQ,KAAK,EAAE,iBAAiB;IACxBC,MAAM,EAAEL,UAAU,IAAIH,SAAS,IAAI;MACjCS,IAAI,EAAE,OAAO;MACbH,KAAK,EAAE,0BAA0B;MACjCI,OAAO,eAAE,6BAAC,+BAAsB;QAAC,IAAI,EAAE,CAACV,SAAS,CAAE;QAAC,IAAI,EAAC;MAAQ,EAAG;MACpEW,OAAO,EAAE,MAAMV,UAAU;IAC3B,CAAC;IACDW,QAAQ,EAAE,MAAMR,aAAa,CAAC,IAAI,CAAC;IACnCS,IAAI,EAAEC;EACR,CAAC;AACH"}
|
package/lib/actions/index.js
CHANGED
|
@@ -4,35 +4,26 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = resolveDocumentActions;
|
|
7
|
-
|
|
8
7
|
var _documentActions = _interopRequireWildcard(require("part:@sanity/base/document-actions"));
|
|
9
|
-
|
|
10
8
|
var _crossDatasetDuplicator = _interopRequireDefault(require("config:@sanity/cross-dataset-duplicator"));
|
|
11
|
-
|
|
12
9
|
var _DuplicateToAction = _interopRequireDefault(require("./DuplicateToAction"));
|
|
13
|
-
|
|
14
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
11
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
-
|
|
18
12
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
19
|
-
|
|
20
13
|
function resolveDocumentActions(props) {
|
|
21
14
|
var _config$types;
|
|
22
|
-
|
|
23
15
|
var duplicatorTypes = (_config$types = _crossDatasetDuplicator.default === null || _crossDatasetDuplicator.default === void 0 ? void 0 : _crossDatasetDuplicator.default.types) !== null && _config$types !== void 0 ? _config$types : [];
|
|
24
|
-
var defaultActions = (0, _documentActions.default)(props);
|
|
16
|
+
var defaultActions = (0, _documentActions.default)(props);
|
|
25
17
|
|
|
18
|
+
// Insert 'Duplicate to...' after 'Duplicate' only on config'd types
|
|
26
19
|
if (duplicatorTypes.includes(props === null || props === void 0 ? void 0 : props.type)) {
|
|
27
20
|
return defaultActions.reduce((acc, cur) => {
|
|
28
21
|
if (cur === _documentActions.DuplicateAction) {
|
|
29
22
|
return [...acc, cur, _DuplicateToAction.default];
|
|
30
23
|
}
|
|
31
|
-
|
|
32
24
|
return [...acc, cur];
|
|
33
25
|
}, []);
|
|
34
26
|
}
|
|
35
|
-
|
|
36
27
|
return defaultActions;
|
|
37
28
|
}
|
|
38
29
|
//# sourceMappingURL=index.js.map
|
package/lib/actions/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["resolveDocumentActions","props","duplicatorTypes","config","types","defaultActions","defaultResolve","includes","type","reduce","acc","cur","DuplicateAction","DuplicateToAction"],"sources":["../../src/actions/index.ts"],"sourcesContent":["import defaultResolve, {DuplicateAction} from 'part:@sanity/base/document-actions'\nimport config from 'config:@sanity/cross-dataset-duplicator'\n\nimport DuplicateToAction from './DuplicateToAction'\n\nexport default function resolveDocumentActions(props) { \n const duplicatorTypes = config?.types ?? []\n const defaultActions = defaultResolve(props)\n\n // Insert 'Duplicate to...' after 'Duplicate' only on config'd types\n if (duplicatorTypes.includes(props?.type)) {\n return defaultActions.reduce((acc, cur) => {\n if (cur === DuplicateAction) {\n return [...acc, cur, DuplicateToAction]\n }\n\n return [...acc, cur]\n }, [])\n }\n\n return defaultActions\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["resolveDocumentActions","props","duplicatorTypes","config","types","defaultActions","defaultResolve","includes","type","reduce","acc","cur","DuplicateAction","DuplicateToAction"],"sources":["../../src/actions/index.ts"],"sourcesContent":["import defaultResolve, {DuplicateAction} from 'part:@sanity/base/document-actions'\nimport config from 'config:@sanity/cross-dataset-duplicator'\n\nimport DuplicateToAction from './DuplicateToAction'\n\nexport default function resolveDocumentActions(props) { \n const duplicatorTypes = config?.types ?? []\n const defaultActions = defaultResolve(props)\n\n // Insert 'Duplicate to...' after 'Duplicate' only on config'd types\n if (duplicatorTypes.includes(props?.type)) {\n return defaultActions.reduce((acc, cur) => {\n if (cur === DuplicateAction) {\n return [...acc, cur, DuplicateToAction]\n }\n\n return [...acc, cur]\n }, [])\n }\n\n return defaultActions\n}\n"],"mappings":";;;;;;AAAA;AACA;AAEA;AAAmD;AAAA;AAAA;AAEpC,SAASA,sBAAsB,CAACC,KAAK,EAAE;EAAA;EACpD,IAAMC,eAAe,oBAAGC,+BAAM,aAANA,+BAAM,uBAANA,+BAAM,CAAEC,KAAK,yDAAI,EAAE;EAC3C,IAAMC,cAAc,GAAG,IAAAC,wBAAc,EAACL,KAAK,CAAC;;EAE5C;EACA,IAAIC,eAAe,CAACK,QAAQ,CAACN,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEO,IAAI,CAAC,EAAE;IACzC,OAAOH,cAAc,CAACI,MAAM,CAAC,CAACC,GAAG,EAAEC,GAAG,KAAK;MACzC,IAAIA,GAAG,KAAKC,gCAAe,EAAE;QAC3B,OAAO,CAAC,GAAGF,GAAG,EAAEC,GAAG,EAAEE,0BAAiB,CAAC;MACzC;MAEA,OAAO,CAAC,GAAGH,GAAG,EAAEC,GAAG,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC;EACR;EAEA,OAAON,cAAc;AACvB"}
|
|
@@ -4,72 +4,49 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = CrossDatasetDuplicator;
|
|
7
|
-
|
|
8
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
|
|
10
8
|
var _sanitySecrets = require("sanity-secrets");
|
|
11
|
-
|
|
12
9
|
var _ui = require("@sanity/ui");
|
|
13
|
-
|
|
14
10
|
var _DuplicatorQuery = _interopRequireDefault(require("./DuplicatorQuery"));
|
|
15
|
-
|
|
16
11
|
var _DuplicatorTool = _interopRequireDefault(require("./DuplicatorTool"));
|
|
17
|
-
|
|
18
12
|
var _ResetSecret = _interopRequireDefault(require("./ResetSecret"));
|
|
19
|
-
|
|
20
13
|
var _Feedback = _interopRequireDefault(require("./Feedback"));
|
|
21
|
-
|
|
22
14
|
var _constants = require("../helpers/constants");
|
|
23
|
-
|
|
24
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
25
|
-
|
|
26
16
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
27
|
-
|
|
28
17
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
29
|
-
|
|
30
18
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
31
|
-
|
|
32
19
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
33
|
-
|
|
34
20
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
35
|
-
|
|
36
21
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
37
|
-
|
|
38
22
|
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
39
|
-
|
|
40
23
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
41
|
-
|
|
42
24
|
// Check for auth secret (required for asset uploads)
|
|
43
25
|
var secretConfigKeys = [{
|
|
44
26
|
key: 'bearerToken',
|
|
45
27
|
title: 'An API token with Viewer permissions is required to duplicate the original files of assets, and will be used for all Duplications. Create one at sanity.io/manage',
|
|
46
28
|
description: ''
|
|
47
29
|
}];
|
|
48
|
-
|
|
49
30
|
function CrossDatasetDuplicator(props) {
|
|
50
31
|
var _props$mode = props.mode,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
32
|
+
mode = _props$mode === void 0 ? "tool" : _props$mode,
|
|
33
|
+
_props$docs = props.docs,
|
|
34
|
+
docs = _props$docs === void 0 ? [] : _props$docs;
|
|
54
35
|
var secretsData = (0, _sanitySecrets.useSecrets)(_constants.SECRET_NAMESPACE);
|
|
55
36
|
var loading = secretsData.loading,
|
|
56
|
-
|
|
57
|
-
|
|
37
|
+
secrets = secretsData.secrets;
|
|
58
38
|
var _useState = (0, _react.useState)(false),
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
39
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
40
|
+
showSecretsPrompt = _useState2[0],
|
|
41
|
+
setShowSecretsPrompt = _useState2[1];
|
|
63
42
|
(0, _react.useEffect)(() => {
|
|
64
43
|
if (secrets) {
|
|
65
44
|
setShowSecretsPrompt(!(secrets !== null && secrets !== void 0 && secrets.bearerToken));
|
|
66
45
|
}
|
|
67
46
|
}, [secrets]);
|
|
68
|
-
|
|
69
47
|
if (!secretsData) {
|
|
70
48
|
return /*#__PURE__*/_react.default.createElement(_Feedback.default, null, "Could not query for Secrets. You may have insufficient permissions on your account.");
|
|
71
49
|
}
|
|
72
|
-
|
|
73
50
|
if (loading) {
|
|
74
51
|
return /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, null, /*#__PURE__*/_react.default.createElement(_ui.Flex, {
|
|
75
52
|
justify: "center",
|
|
@@ -78,27 +55,24 @@ function CrossDatasetDuplicator(props) {
|
|
|
78
55
|
padding: 5
|
|
79
56
|
}, /*#__PURE__*/_react.default.createElement(_ui.Spinner, null))));
|
|
80
57
|
}
|
|
81
|
-
|
|
82
58
|
if (!loading && showSecretsPrompt || !(secrets !== null && secrets !== void 0 && secrets.bearerToken)) {
|
|
83
59
|
return /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, null, /*#__PURE__*/_react.default.createElement(_sanitySecrets.SettingsView, {
|
|
84
60
|
title: "Token Required",
|
|
85
61
|
namespace: _constants.SECRET_NAMESPACE,
|
|
86
|
-
keys: secretConfigKeys
|
|
62
|
+
keys: secretConfigKeys
|
|
63
|
+
// eslint-disable-next-line react/jsx-no-bind
|
|
87
64
|
,
|
|
88
65
|
onClose: () => setShowSecretsPrompt(false)
|
|
89
66
|
}));
|
|
90
67
|
}
|
|
91
|
-
|
|
92
68
|
if (mode === 'tool') {
|
|
93
69
|
return /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, null, /*#__PURE__*/_react.default.createElement(_DuplicatorQuery.default, {
|
|
94
70
|
token: secrets === null || secrets === void 0 ? void 0 : secrets.bearerToken
|
|
95
71
|
}), /*#__PURE__*/_react.default.createElement(_ResetSecret.default, null));
|
|
96
72
|
}
|
|
97
|
-
|
|
98
73
|
if (!(docs !== null && docs !== void 0 && docs.length)) {
|
|
99
74
|
return /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, null, /*#__PURE__*/_react.default.createElement(_Feedback.default, null, "No docs passed into Duplicator Tool"));
|
|
100
75
|
}
|
|
101
|
-
|
|
102
76
|
return /*#__PURE__*/_react.default.createElement(_ui.ThemeProvider, null, /*#__PURE__*/_react.default.createElement(_DuplicatorTool.default, {
|
|
103
77
|
docs: docs,
|
|
104
78
|
token: secrets === null || secrets === void 0 ? void 0 : secrets.bearerToken
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrossDatasetDuplicator.js","names":["secretConfigKeys","key","title","description","CrossDatasetDuplicator","props","mode","docs","secretsData","useSecrets","SECRET_NAMESPACE","loading","secrets","useState","showSecretsPrompt","setShowSecretsPrompt","useEffect","bearerToken","length"],"sources":["../../src/components/CrossDatasetDuplicator.tsx"],"sourcesContent":["import React, {useEffect, useState} from 'react'\nimport {useSecrets, SettingsView} from 'sanity-secrets'\nimport {ThemeProvider, Flex, Box, Spinner} from '@sanity/ui'\n\nimport DuplicatorQuery from './DuplicatorQuery'\nimport DuplicatorTool from './DuplicatorTool'\nimport ResetSecret from './ResetSecret'\nimport Feedback from './Feedback'\nimport {SanityDocument} from '../types'\nimport {SECRET_NAMESPACE} from '../helpers/constants'\n\n// Check for auth secret (required for asset uploads)\nconst secretConfigKeys = [\n {\n key: 'bearerToken',\n title:\n 'An API token with Viewer permissions is required to duplicate the original files of assets, and will be used for all Duplications. Create one at sanity.io/manage',\n description: '',\n },\n]\n\ntype CrossDatasetDuplicatorProps = {\n mode: 'tool' | 'action'\n docs: SanityDocument[]\n}\n\ntype Secrets = {\n bearerToken?: string\n}\n\nexport default function CrossDatasetDuplicator(props: CrossDatasetDuplicatorProps) {\n const {mode = `tool`, docs = []} = props\n\n const secretsData = useSecrets(SECRET_NAMESPACE)\n const {loading, secrets}: {loading: boolean; secrets: Secrets} = secretsData\n const [showSecretsPrompt, setShowSecretsPrompt] = useState(false)\n\n useEffect(() => {\n if (secrets) {\n setShowSecretsPrompt(!secrets?.bearerToken)\n }\n }, [secrets])\n\n if (!secretsData) {\n return (\n <Feedback>\n Could not query for Secrets. You may have insufficient permissions on your account.\n </Feedback>\n )\n }\n\n if (loading) {\n return (\n <ThemeProvider>\n <Flex justify=\"center\" align=\"center\">\n <Box padding={5}>\n <Spinner />\n </Box>\n </Flex>\n </ThemeProvider>\n )\n }\n\n if ((!loading && showSecretsPrompt) || !secrets?.bearerToken) {\n return (\n <ThemeProvider>\n <SettingsView\n title=\"Token Required\"\n namespace={SECRET_NAMESPACE}\n keys={secretConfigKeys}\n // eslint-disable-next-line react/jsx-no-bind\n onClose={() => setShowSecretsPrompt(false)}\n />\n </ThemeProvider>\n )\n }\n\n if (mode === 'tool') {\n return (\n <ThemeProvider>\n <DuplicatorQuery token={secrets?.bearerToken} />\n <ResetSecret />\n </ThemeProvider>\n )\n }\n\n if (!docs?.length) {\n return (\n <ThemeProvider>\n <Feedback>No docs passed into Duplicator Tool</Feedback>\n </ThemeProvider>\n )\n }\n\n return (\n <ThemeProvider>\n <DuplicatorTool docs={docs} token={secrets?.bearerToken} />\n </ThemeProvider>\n )\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"CrossDatasetDuplicator.js","names":["secretConfigKeys","key","title","description","CrossDatasetDuplicator","props","mode","docs","secretsData","useSecrets","SECRET_NAMESPACE","loading","secrets","useState","showSecretsPrompt","setShowSecretsPrompt","useEffect","bearerToken","length"],"sources":["../../src/components/CrossDatasetDuplicator.tsx"],"sourcesContent":["import React, {useEffect, useState} from 'react'\nimport {useSecrets, SettingsView} from 'sanity-secrets'\nimport {ThemeProvider, Flex, Box, Spinner} from '@sanity/ui'\n\nimport DuplicatorQuery from './DuplicatorQuery'\nimport DuplicatorTool from './DuplicatorTool'\nimport ResetSecret from './ResetSecret'\nimport Feedback from './Feedback'\nimport {SanityDocument} from '../types'\nimport {SECRET_NAMESPACE} from '../helpers/constants'\n\n// Check for auth secret (required for asset uploads)\nconst secretConfigKeys = [\n {\n key: 'bearerToken',\n title:\n 'An API token with Viewer permissions is required to duplicate the original files of assets, and will be used for all Duplications. Create one at sanity.io/manage',\n description: '',\n },\n]\n\ntype CrossDatasetDuplicatorProps = {\n mode: 'tool' | 'action'\n docs: SanityDocument[]\n}\n\ntype Secrets = {\n bearerToken?: string\n}\n\nexport default function CrossDatasetDuplicator(props: CrossDatasetDuplicatorProps) {\n const {mode = `tool`, docs = []} = props\n\n const secretsData = useSecrets(SECRET_NAMESPACE)\n const {loading, secrets}: {loading: boolean; secrets: Secrets} = secretsData\n const [showSecretsPrompt, setShowSecretsPrompt] = useState(false)\n\n useEffect(() => {\n if (secrets) {\n setShowSecretsPrompt(!secrets?.bearerToken)\n }\n }, [secrets])\n\n if (!secretsData) {\n return (\n <Feedback>\n Could not query for Secrets. You may have insufficient permissions on your account.\n </Feedback>\n )\n }\n\n if (loading) {\n return (\n <ThemeProvider>\n <Flex justify=\"center\" align=\"center\">\n <Box padding={5}>\n <Spinner />\n </Box>\n </Flex>\n </ThemeProvider>\n )\n }\n\n if ((!loading && showSecretsPrompt) || !secrets?.bearerToken) {\n return (\n <ThemeProvider>\n <SettingsView\n title=\"Token Required\"\n namespace={SECRET_NAMESPACE}\n keys={secretConfigKeys}\n // eslint-disable-next-line react/jsx-no-bind\n onClose={() => setShowSecretsPrompt(false)}\n />\n </ThemeProvider>\n )\n }\n\n if (mode === 'tool') {\n return (\n <ThemeProvider>\n <DuplicatorQuery token={secrets?.bearerToken} />\n <ResetSecret />\n </ThemeProvider>\n )\n }\n\n if (!docs?.length) {\n return (\n <ThemeProvider>\n <Feedback>No docs passed into Duplicator Tool</Feedback>\n </ThemeProvider>\n )\n }\n\n return (\n <ThemeProvider>\n <DuplicatorTool docs={docs} token={secrets?.bearerToken} />\n </ThemeProvider>\n )\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AAEA;AAAqD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAErD;AACA,IAAMA,gBAAgB,GAAG,CACvB;EACEC,GAAG,EAAE,aAAa;EAClBC,KAAK,EACH,mKAAmK;EACrKC,WAAW,EAAE;AACf,CAAC,CACF;AAWc,SAASC,sBAAsB,CAACC,KAAkC,EAAE;EACjF,kBAAmCA,KAAK,CAAjCC,IAAI;IAAJA,IAAI;IAAA,cAAwBD,KAAK,CAAlBE,IAAI;IAAJA,IAAI,4BAAG,EAAE;EAE/B,IAAMC,WAAW,GAAG,IAAAC,yBAAU,EAACC,2BAAgB,CAAC;EAChD,IAAOC,OAAO,GAAmDH,WAAW,CAArEG,OAAO;IAAEC,OAAO,GAA0CJ,WAAW,CAA5DI,OAAO;EACvB,gBAAkD,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAA;IAA1DC,iBAAiB;IAAEC,oBAAoB;EAE9C,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAIJ,OAAO,EAAE;MACXG,oBAAoB,CAAC,EAACH,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEK,WAAW,EAAC;IAC7C;EACF,CAAC,EAAE,CAACL,OAAO,CAAC,CAAC;EAEb,IAAI,CAACJ,WAAW,EAAE;IAChB,oBACE,6BAAC,iBAAQ,8FAEE;EAEf;EAEA,IAAIG,OAAO,EAAE;IACX,oBACE,6BAAC,iBAAa,qBACZ,6BAAC,QAAI;MAAC,OAAO,EAAC,QAAQ;MAAC,KAAK,EAAC;IAAQ,gBACnC,6BAAC,OAAG;MAAC,OAAO,EAAE;IAAE,gBACd,6BAAC,WAAO,OAAG,CACP,CACD,CACO;EAEpB;EAEA,IAAK,CAACA,OAAO,IAAIG,iBAAiB,IAAK,EAACF,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEK,WAAW,GAAE;IAC5D,oBACE,6BAAC,iBAAa,qBACZ,6BAAC,2BAAY;MACX,KAAK,EAAC,gBAAgB;MACtB,SAAS,EAAEP,2BAAiB;MAC5B,IAAI,EAAEV;MACN;MAAA;MACA,OAAO,EAAE,MAAMe,oBAAoB,CAAC,KAAK;IAAE,EAC3C,CACY;EAEpB;EAEA,IAAIT,IAAI,KAAK,MAAM,EAAE;IACnB,oBACE,6BAAC,iBAAa,qBACZ,6BAAC,wBAAe;MAAC,KAAK,EAAEM,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK;IAAY,EAAG,eAChD,6BAAC,oBAAW,OAAG,CACD;EAEpB;EAEA,IAAI,EAACV,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEW,MAAM,GAAE;IACjB,oBACE,6BAAC,iBAAa,qBACZ,6BAAC,iBAAQ,8CAA+C,CAC1C;EAEpB;EAEA,oBACE,6BAAC,iBAAa,qBACZ,6BAAC,uBAAc;IAAC,IAAI,EAAEX,IAAK;IAAC,KAAK,EAAEK,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEK;EAAY,EAAG,CAC7C;AAEpB"}
|
|
@@ -4,59 +4,37 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = DuplicatorQuery;
|
|
7
|
-
|
|
8
7
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
|
|
10
8
|
var _client = _interopRequireDefault(require("part:@sanity/base/client"));
|
|
11
|
-
|
|
12
9
|
var _schema = _interopRequireDefault(require("part:@sanity/base/schema"));
|
|
13
|
-
|
|
14
10
|
var _ui = require("@sanity/ui");
|
|
15
|
-
|
|
16
11
|
var _DuplicatorTool = _interopRequireDefault(require("./DuplicatorTool"));
|
|
17
|
-
|
|
18
12
|
var _clientConfig = require("../helpers/clientConfig");
|
|
19
|
-
|
|
20
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
-
|
|
22
14
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
|
-
|
|
24
15
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
25
|
-
|
|
26
16
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
27
|
-
|
|
28
17
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
29
|
-
|
|
30
18
|
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
31
|
-
|
|
32
19
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
33
|
-
|
|
34
20
|
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
35
|
-
|
|
36
21
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
37
|
-
|
|
38
22
|
var originClient = _client.default.withConfig(_clientConfig.clientConfig);
|
|
39
|
-
|
|
40
23
|
var schemaTypes = _schema.default.getTypeNames();
|
|
41
|
-
|
|
42
24
|
function DuplicatorQuery(props) {
|
|
43
25
|
var _initialData$docs2, _initialData$docs3;
|
|
44
|
-
|
|
45
26
|
var token = props.token;
|
|
46
|
-
|
|
47
27
|
var _useState = (0, _react.useState)(""),
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
28
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
29
|
+
value = _useState2[0],
|
|
30
|
+
setValue = _useState2[1];
|
|
52
31
|
var _useState3 = (0, _react.useState)({
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
32
|
+
docs: [],
|
|
33
|
+
draftIds: []
|
|
34
|
+
}),
|
|
35
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
36
|
+
initialData = _useState4[0],
|
|
37
|
+
setInitialData = _useState4[1];
|
|
60
38
|
function handleSubmit(e) {
|
|
61
39
|
if (e) e.preventDefault();
|
|
62
40
|
originClient.fetch(value).then(res => {
|
|
@@ -68,12 +46,11 @@ function DuplicatorQuery(props) {
|
|
|
68
46
|
draftIds: initialDraftIds
|
|
69
47
|
});
|
|
70
48
|
}).catch(err => console.error(err));
|
|
71
|
-
}
|
|
72
|
-
|
|
49
|
+
}
|
|
73
50
|
|
|
51
|
+
// Auto-load initial textinput value
|
|
74
52
|
(0, _react.useEffect)(() => {
|
|
75
53
|
var _initialData$docs;
|
|
76
|
-
|
|
77
54
|
if (!((_initialData$docs = initialData.docs) !== null && _initialData$docs !== void 0 && _initialData$docs.length) && value) {
|
|
78
55
|
handleSubmit();
|
|
79
56
|
}
|
|
@@ -101,7 +78,8 @@ function DuplicatorQuery(props) {
|
|
|
101
78
|
style: {
|
|
102
79
|
fontFamily: 'monospace'
|
|
103
80
|
},
|
|
104
|
-
fontSize: 2
|
|
81
|
+
fontSize: 2
|
|
82
|
+
// eslint-disable-next-line react/jsx-no-bind
|
|
105
83
|
,
|
|
106
84
|
onChange: event => setValue(event.currentTarget.value),
|
|
107
85
|
padding: 4,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DuplicatorQuery.js","names":["originClient","sanityClient","withConfig","clientConfig","schemaTypes","schema","getTypeNames","DuplicatorQuery","props","token","useState","value","setValue","docs","draftIds","initialData","setInitialData","handleSubmit","e","preventDefault","fetch","then","res","registeredAndPublishedDocs","length","filter","doc","includes","_type","_id","startsWith","initialDraftIds","map","catch","err","console","error","useEffect","fontFamily","event","currentTarget"],"sources":["../../src/components/DuplicatorQuery.tsx"],"sourcesContent":["import React, {useEffect, useState} from 'react'\nimport sanityClient from 'part:@sanity/base/client'\nimport schema from 'part:@sanity/base/schema'\nimport {Button, Stack, Box, Label, Text, Card, Flex, Grid, Container, TextInput} from '@sanity/ui'\n\nimport DuplicatorTool from './DuplicatorTool'\nimport {clientConfig} from '../helpers/clientConfig'\n\nconst originClient = sanityClient.withConfig(clientConfig)\n\ntype DuplicatorQueryProps = {\n token: string\n}\n\nconst schemaTypes = schema.getTypeNames()\n\nexport default function DuplicatorQuery(props: DuplicatorQueryProps) {\n const {token} = props\n\n const [value, setValue] = useState(``)\n const [initialData, setInitialData] = useState({docs: [], draftIds: []});\n\n function handleSubmit(e?: any) {\n if (e) e.preventDefault()\n\n originClient\n .fetch(value)\n .then((res) => {\n // Ensure queried docs are registered to the schema\n const registeredAndPublishedDocs = res.length\n ? res\n .filter((doc) => schemaTypes.includes(doc._type))\n .filter((doc) => !doc._id.startsWith(`drafts.`))\n : []\n const initialDraftIds = res.length ? res.filter(doc => doc._id.startsWith(`drafts.`)).map(doc => doc._id) : []\n\n setInitialData({docs: registeredAndPublishedDocs, draftIds: initialDraftIds})\n })\n .catch((err) => console.error(err))\n }\n\n // Auto-load initial textinput value\n useEffect(() => {\n if (!initialData.docs?.length && value) {\n handleSubmit()\n }\n }, [])\n\n return (\n <Container width={[1, 1, 1, 3]} padding={[0, 0, 0, 5]}>\n <Grid columns={[1, 1, 1, 2]} gap={[1, 1, 1, 4]}>\n <Box padding={[2, 2, 2, 0]}>\n <Card padding={4} scheme=\"dark\" radius={3}>\n <Stack space={4}>\n <Box>\n <Label>Initial Documents Query</Label>\n </Box>\n <Box>\n <Text>\n Start with a valid GROQ query to load initial documents. The query will need to\n return an Array of Objects. Drafts will be removed from the results.\n </Text>\n </Box>\n <form onSubmit={handleSubmit}>\n <Flex>\n <Box flex={1} paddingRight={2}>\n <TextInput\n style={{fontFamily: 'monospace'}}\n fontSize={2}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={(event) => setValue(event.currentTarget.value)}\n padding={4}\n placeholder={`*[_type == \"article\"]`}\n value={value ?? ``}\n />\n </Box>\n <Button\n padding={2}\n paddingX={4}\n tone=\"primary\"\n onClick={handleSubmit}\n text=\"Query\"\n disabled={!value}\n />\n </Flex>\n </form>\n </Stack>\n </Card>\n </Box>\n {!initialData.docs?.length ||\n (initialData.docs.length < 1 && (\n <Container width={1}>\n <Card padding={5}>\n {value\n ? `No Documents registered to the Schema match this query`\n : `Start with a valid GROQ query`}\n </Card>\n </Container>\n ))}\n {initialData.docs?.length > 0 && <DuplicatorTool docs={initialData.docs} draftIds={initialData.draftIds} token={token} />}\n </Grid>\n </Container>\n )\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"DuplicatorQuery.js","names":["originClient","sanityClient","withConfig","clientConfig","schemaTypes","schema","getTypeNames","DuplicatorQuery","props","token","useState","value","setValue","docs","draftIds","initialData","setInitialData","handleSubmit","e","preventDefault","fetch","then","res","registeredAndPublishedDocs","length","filter","doc","includes","_type","_id","startsWith","initialDraftIds","map","catch","err","console","error","useEffect","fontFamily","event","currentTarget"],"sources":["../../src/components/DuplicatorQuery.tsx"],"sourcesContent":["import React, {useEffect, useState} from 'react'\nimport sanityClient from 'part:@sanity/base/client'\nimport schema from 'part:@sanity/base/schema'\nimport {Button, Stack, Box, Label, Text, Card, Flex, Grid, Container, TextInput} from '@sanity/ui'\n\nimport DuplicatorTool from './DuplicatorTool'\nimport {clientConfig} from '../helpers/clientConfig'\n\nconst originClient = sanityClient.withConfig(clientConfig)\n\ntype DuplicatorQueryProps = {\n token: string\n}\n\nconst schemaTypes = schema.getTypeNames()\n\nexport default function DuplicatorQuery(props: DuplicatorQueryProps) {\n const {token} = props\n\n const [value, setValue] = useState(``)\n const [initialData, setInitialData] = useState({docs: [], draftIds: []});\n\n function handleSubmit(e?: any) {\n if (e) e.preventDefault()\n\n originClient\n .fetch(value)\n .then((res) => {\n // Ensure queried docs are registered to the schema\n const registeredAndPublishedDocs = res.length\n ? res\n .filter((doc) => schemaTypes.includes(doc._type))\n .filter((doc) => !doc._id.startsWith(`drafts.`))\n : []\n const initialDraftIds = res.length ? res.filter(doc => doc._id.startsWith(`drafts.`)).map(doc => doc._id) : []\n\n setInitialData({docs: registeredAndPublishedDocs, draftIds: initialDraftIds})\n })\n .catch((err) => console.error(err))\n }\n\n // Auto-load initial textinput value\n useEffect(() => {\n if (!initialData.docs?.length && value) {\n handleSubmit()\n }\n }, [])\n\n return (\n <Container width={[1, 1, 1, 3]} padding={[0, 0, 0, 5]}>\n <Grid columns={[1, 1, 1, 2]} gap={[1, 1, 1, 4]}>\n <Box padding={[2, 2, 2, 0]}>\n <Card padding={4} scheme=\"dark\" radius={3}>\n <Stack space={4}>\n <Box>\n <Label>Initial Documents Query</Label>\n </Box>\n <Box>\n <Text>\n Start with a valid GROQ query to load initial documents. The query will need to\n return an Array of Objects. Drafts will be removed from the results.\n </Text>\n </Box>\n <form onSubmit={handleSubmit}>\n <Flex>\n <Box flex={1} paddingRight={2}>\n <TextInput\n style={{fontFamily: 'monospace'}}\n fontSize={2}\n // eslint-disable-next-line react/jsx-no-bind\n onChange={(event) => setValue(event.currentTarget.value)}\n padding={4}\n placeholder={`*[_type == \"article\"]`}\n value={value ?? ``}\n />\n </Box>\n <Button\n padding={2}\n paddingX={4}\n tone=\"primary\"\n onClick={handleSubmit}\n text=\"Query\"\n disabled={!value}\n />\n </Flex>\n </form>\n </Stack>\n </Card>\n </Box>\n {!initialData.docs?.length ||\n (initialData.docs.length < 1 && (\n <Container width={1}>\n <Card padding={5}>\n {value\n ? `No Documents registered to the Schema match this query`\n : `Start with a valid GROQ query`}\n </Card>\n </Container>\n ))}\n {initialData.docs?.length > 0 && <DuplicatorTool docs={initialData.docs} draftIds={initialData.draftIds} token={token} />}\n </Grid>\n </Container>\n )\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAoD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEpD,IAAMA,YAAY,GAAGC,eAAY,CAACC,UAAU,CAACC,0BAAY,CAAC;AAM1D,IAAMC,WAAW,GAAGC,eAAM,CAACC,YAAY,EAAE;AAE1B,SAASC,eAAe,CAACC,KAA2B,EAAE;EAAA;EACnE,IAAOC,KAAK,GAAID,KAAK,CAAdC,KAAK;EAEZ,gBAA0B,IAAAC,eAAQ,KAAI;IAAA;IAA/BC,KAAK;IAAEC,QAAQ;EACtB,iBAAsC,IAAAF,eAAQ,EAAC;MAACG,IAAI,EAAE,EAAE;MAAEC,QAAQ,EAAE;IAAE,CAAC,CAAC;IAAA;IAAjEC,WAAW;IAAEC,cAAc;EAElC,SAASC,YAAY,CAACC,CAAO,EAAE;IAC7B,IAAIA,CAAC,EAAEA,CAAC,CAACC,cAAc,EAAE;IAEzBnB,YAAY,CACToB,KAAK,CAACT,KAAK,CAAC,CACZU,IAAI,CAAEC,GAAG,IAAK;MACb;MACA,IAAMC,0BAA0B,GAAGD,GAAG,CAACE,MAAM,GACzCF,GAAG,CACAG,MAAM,CAAEC,GAAG,IAAKtB,WAAW,CAACuB,QAAQ,CAACD,GAAG,CAACE,KAAK,CAAC,CAAC,CAChDH,MAAM,CAAEC,GAAG,IAAK,CAACA,GAAG,CAACG,GAAG,CAACC,UAAU,WAAW,CAAC,GAClD,EAAE;MACN,IAAMC,eAAe,GAAGT,GAAG,CAACE,MAAM,GAAGF,GAAG,CAACG,MAAM,CAACC,GAAG,IAAIA,GAAG,CAACG,GAAG,CAACC,UAAU,WAAW,CAAC,CAACE,GAAG,CAACN,GAAG,IAAIA,GAAG,CAACG,GAAG,CAAC,GAAG,EAAE;MAE9Gb,cAAc,CAAC;QAACH,IAAI,EAAEU,0BAA0B;QAAET,QAAQ,EAAEiB;MAAe,CAAC,CAAC;IAC/E,CAAC,CAAC,CACDE,KAAK,CAAEC,GAAG,IAAKC,OAAO,CAACC,KAAK,CAACF,GAAG,CAAC,CAAC;EACvC;;EAEA;EACA,IAAAG,gBAAS,EAAC,MAAM;IAAA;IACd,IAAI,uBAACtB,WAAW,CAACF,IAAI,8CAAhB,kBAAkBW,MAAM,KAAIb,KAAK,EAAE;MACtCM,YAAY,EAAE;IAChB;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,oBACE,6BAAC,aAAS;IAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;IAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAAE,gBACpD,6BAAC,QAAI;IAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAE;IAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAAE,gBAC7C,6BAAC,OAAG;IAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;EAAE,gBACzB,6BAAC,QAAI;IAAC,OAAO,EAAE,CAAE;IAAC,MAAM,EAAC,MAAM;IAAC,MAAM,EAAE;EAAE,gBACxC,6BAAC,SAAK;IAAC,KAAK,EAAE;EAAE,gBACd,6BAAC,OAAG,qBACF,6BAAC,SAAK,kCAAgC,CAClC,eACN,6BAAC,OAAG,qBACF,6BAAC,QAAI,+JAGE,CACH,eACN;IAAM,QAAQ,EAAEA;EAAa,gBAC3B,6BAAC,QAAI,qBACH,6BAAC,OAAG;IAAC,IAAI,EAAE,CAAE;IAAC,YAAY,EAAE;EAAE,gBAC5B,6BAAC,aAAS;IACR,KAAK,EAAE;MAACqB,UAAU,EAAE;IAAW,CAAE;IACjC,QAAQ,EAAE;IACV;IAAA;IACA,QAAQ,EAAGC,KAAK,IAAK3B,QAAQ,CAAC2B,KAAK,CAACC,aAAa,CAAC7B,KAAK,CAAE;IACzD,OAAO,EAAE,CAAE;IACX,WAAW,2BAA0B;IACrC,KAAK,EAAEA,KAAK,aAALA,KAAK,cAALA,KAAK;EAAO,EACnB,CACE,eACN,6BAAC,UAAM;IACL,OAAO,EAAE,CAAE;IACX,QAAQ,EAAE,CAAE;IACZ,IAAI,EAAC,SAAS;IACd,OAAO,EAAEM,YAAa;IACtB,IAAI,EAAC,OAAO;IACZ,QAAQ,EAAE,CAACN;EAAM,EACjB,CACG,CACF,CACD,CACH,CACH,EACL,wBAACI,WAAW,CAACF,IAAI,+CAAhB,mBAAkBW,MAAM,KACvBT,WAAW,CAACF,IAAI,CAACW,MAAM,GAAG,CAAC,iBAC1B,6BAAC,aAAS;IAAC,KAAK,EAAE;EAAE,gBAClB,6BAAC,QAAI;IAAC,OAAO,EAAE;EAAE,GACdb,KAAK,6FAE6B,CAC9B,CAET,EACH,uBAAAI,WAAW,CAACF,IAAI,uDAAhB,mBAAkBW,MAAM,IAAG,CAAC,iBAAI,6BAAC,uBAAc;IAAC,IAAI,EAAET,WAAW,CAACF,IAAK;IAAC,QAAQ,EAAEE,WAAW,CAACD,QAAS;IAAC,KAAK,EAAEL;EAAM,EAAG,CACpH,CACG;AAEhB"}
|