@sanity/cross-dataset-duplicator 1.4.0-beta.2 → 1.4.0
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 +10 -9
- package/dist/index.d.ts +4 -8
- package/dist/index.esm.js +57 -48
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +56 -47
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/components/Duplicator.tsx +1 -1
- package/src/components/DuplicatorQuery.tsx +33 -11
- package/src/components/StatusBadge.tsx +5 -1
- package/src/helpers/constants.ts +1 -0
- package/src/helpers/getDocumentsInArray.ts +10 -57
- package/src/types/index.ts +4 -9
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/helpers/index.ts","../src/helpers/getDocumentsInArray.ts","../src/components/SelectButtons.tsx","../src/components/StatusBadge.tsx","../src/components/Feedback.tsx","../src/helpers/clientConfig.ts","../src/components/Duplicator.tsx","../src/components/DuplicatorQuery.tsx","../src/components/DuplicatorWrapper.tsx","../src/helpers/constants.ts","../src/components/ResetSecret.tsx","../src/context/ConfigProvider.tsx","../src/components/CrossDatasetDuplicator.tsx","../src/components/CrossDatasetDuplicatorAction.tsx","../src/actions/DuplicateToAction.tsx","../src/components/CrossDatasetDuplicatorTool.tsx","../src/tool/index.ts","../src/plugin.tsx"],"sourcesContent":["import {CSSProperties} from 'react'\n\nexport function createInitialMessage(docCount = 0, refsCount = 0): string {\n const message = [\n docCount === 1 ? `This Document contains` : `These ${docCount} Documents contain`,\n refsCount === 1 ? `1 Reference.` : `${refsCount} References.`,\n refsCount === 1 ? `That Document` : `Those Documents`,\n `may have References too. If referenced Documents do not exist at the target Destination, this transaction will fail.`,\n ]\n\n return message.join(` `)\n}\n\nexport const stickyStyles = (isDarkMode = true): CSSProperties => ({\n position: 'sticky',\n top: 0,\n zIndex: 100,\n backgroundColor: isDarkMode ? `rgba(10,10,10,0.95)` : `rgba(255,255,255,0.95)`,\n})\n","import {extractWithPath} from '@sanity/mutator'\nimport {SanityClient, SanityDocument} from 'sanity'\nimport {PluginConfig} from '../types'\n\ntype OptionsBag = {\n fetchIds: string[]\n client: SanityClient\n pluginConfig: PluginConfig\n currentIds?: Set<string> | null\n projection?: string\n}\n\nconst isAsset = (doc: SanityDocument) =>\n doc._type === 'sanity.imageAsset' || doc._type === 'sanity.fileAsset'\n\nconst returnOnlyAssets = (references: SanityDocument[]) =>\n references.filter((item) => isAsset(item))\n\n// Recursively fetch Documents from an array of _id's and their references\n// Heavy use of Set is to avoid recursively querying for id's already in the payload\n\nexport async function getDocumentsInArray(\n options: OptionsBag,\n recurrsionDepth: number = 0\n): Promise<SanityDocument[]> {\n const {fetchIds, client, pluginConfig, currentIds, projection} = options\n const {reference} = pluginConfig\n const collection: SanityDocument[] = []\n\n // Find initial docs\n const filter = ['_id in $fetchIds', pluginConfig.filter].filter(Boolean).join(' && ')\n const query = `*[${filter}]${projection ?? ``}`\n const data: SanityDocument[] = await client.fetch(query, {\n fetchIds: fetchIds ?? [],\n })\n\n if (!data?.length) {\n return []\n }\n\n const localCurrentIds = currentIds ?? new Set<string>()\n\n // Find new ids in the returned data\n // Unless we started with an empty set, get the _ids from the data\n const newDataIds = new Set<string>(\n data\n .map((dataDoc) => dataDoc._id)\n .filter((id) => (currentIds?.size ? !localCurrentIds.has(id) : Boolean(id)))\n )\n\n if (newDataIds.size) {\n collection.push(...data)\n // @ts-ignore\n localCurrentIds.add(...newDataIds)\n\n // Check new data for more references\n await Promise.all(\n data.map(async (doc) => {\n const expr = `.._ref`\n const references: string[] = extractWithPath(expr, doc).map((ref) => ref.value as string)\n\n if (references.length) {\n // Find references not already in the Collection\n const newReferenceIds = new Set<string>(\n references.filter((ref) => !localCurrentIds.has(ref))\n )\n\n if (newReferenceIds.size) {\n // Recursive query for new documents\n\n // If the reference?.maxDepth is set, enter here for recursion and the option to only return assets\n if (typeof reference?.maxDepth === 'number' && reference?.maxDepth >= 0) {\n recurrsionDepth++\n\n const referenceDocs = await getDocumentsInArray(\n {\n fetchIds: Array.from(newReferenceIds),\n currentIds: localCurrentIds,\n client,\n pluginConfig,\n },\n recurrsionDepth\n )\n\n // I know this is a bit messy... but I hit the max nesting eslint limit\n if (\n // // If we are at the max depth and reference?.assetsOnly is falsy\n referenceDocs?.length &&\n recurrsionDepth === reference.maxDepth + 1 &&\n !reference?.assetsOnly\n ) {\n collection.push(...referenceDocs)\n } else if (\n // // If we are at the max depth and reference?.assetsOnly is truthy\n referenceDocs?.length &&\n recurrsionDepth === reference.maxDepth + 1 &&\n reference?.assetsOnly\n ) {\n collection.push(...returnOnlyAssets(referenceDocs))\n } else if (referenceDocs?.length && recurrsionDepth < reference.maxDepth + 1) {\n // // If we are not at the max depth\n collection.push(...referenceDocs)\n }\n } else {\n const referenceDocs = await getDocumentsInArray({\n fetchIds: Array.from(newReferenceIds),\n currentIds: localCurrentIds,\n client,\n pluginConfig,\n })\n\n if (referenceDocs?.length) {\n collection.push(...referenceDocs)\n }\n }\n }\n }\n })\n )\n }\n\n // Create a unique array of objects from collection\n // Set() wasn't working for unique id's ¯\\_(ツ)_/¯\n const uniqueCollection = collection.filter(Boolean).reduce((acc: SanityDocument[], cur) => {\n if (acc.some((doc) => doc._id === cur._id)) {\n return acc\n }\n\n return [...acc, cur]\n }, [])\n\n return uniqueCollection\n}\n","import {useState, useEffect} from 'react'\nimport {Button, Card, Flex} from '@sanity/ui'\n\nimport {PayloadItem} from './Duplicator'\nimport {isAssetId} from '@sanity/asset-utils'\n\nconst buttons = [`All`, `None`, null, `New`, `Existing`, `Older`, null, `Documents`, `Assets`]\n\ntype Action = 'ALL' | 'NONE' | 'NEW' | 'EXISTING' | 'OLDER' | 'ASSETS' | 'DOCUMENTS'\n\ntype SelectButtonsProps = {\n payload: PayloadItem[]\n setPayload: Function\n}\n\nexport default function SelectButtons(props: SelectButtonsProps) {\n const {payload, setPayload} = props\n const [disabledActions, setDisabledActions] = useState<Action[]>([])\n\n // Set intiial disabled button\n useEffect(() => {\n if (!disabledActions?.length && payload.every((item) => item.include)) {\n setDisabledActions([`ALL`])\n }\n }, [disabledActions?.length, payload])\n\n function handleSelectButton(action?: Action) {\n if (!action || !payload.length) return\n\n const newPayload = [...payload]\n\n switch (action) {\n case 'ALL':\n newPayload.map((item) => (item.include = true))\n break\n case 'NONE':\n newPayload.map((item) => (item.include = false))\n break\n case 'NEW':\n newPayload.map((item) => (item.include = Boolean(item.status === 'CREATE')))\n break\n case 'EXISTING':\n newPayload.map((item) => (item.include = Boolean(item.status === 'EXISTS')))\n break\n case 'OLDER':\n newPayload.map((item) => (item.include = Boolean(item.status === 'OVERWRITE')))\n break\n case 'ASSETS':\n newPayload.map((item) => (item.include = isAssetId(item.doc._id)))\n break\n case 'DOCUMENTS':\n newPayload.map((item) => (item.include = !isAssetId(item.doc._id)))\n break\n default:\n break\n }\n\n setDisabledActions([action])\n setPayload(newPayload)\n }\n\n return (\n <Card padding={1} radius={3} shadow={1}>\n <Flex gap={2} wrap=\"wrap\">\n {buttons.map((action, actionIndex) =>\n action ? (\n <Button\n key={action}\n fontSize={1}\n mode=\"bleed\"\n padding={2}\n text={action}\n disabled={disabledActions.includes(action.toUpperCase() as Action)}\n onClick={() => handleSelectButton(action.toUpperCase() as Action)}\n />\n ) : (\n // eslint-disable-next-line react/no-array-index-key\n <Card key={`divider-${actionIndex}`} borderLeft />\n )\n )}\n </Flex>\n </Card>\n )\n}\n","import {Box, Text, Badge, Tooltip} from '@sanity/ui'\nimport type {BadgeTone} from '@sanity/ui'\n\ntype StatusTones = {\n EXISTS: BadgeTone\n OVERWRITE: BadgeTone\n UPDATE: BadgeTone\n CREATE: BadgeTone\n UNPUBLISHED: BadgeTone\n}\n\nconst documentTones: StatusTones = {\n EXISTS: `primary`,\n OVERWRITE: `critical`,\n UPDATE: `caution`,\n CREATE: `positive`,\n UNPUBLISHED: `caution`,\n}\n\nconst assetTones: StatusTones = {\n EXISTS: `critical`,\n OVERWRITE: `critical`,\n UPDATE: `critical`,\n CREATE: `positive`,\n UNPUBLISHED: `default`,\n}\n\nexport type MessageTypes = {\n EXISTS: string\n OVERWRITE: string\n UPDATE: string\n CREATE: string\n UNPUBLISHED: string\n}\n\nconst documentMessages: MessageTypes = {\n // Only happens once document is copied the first time, and _updatedAt is the same\n EXISTS: `This document already exists at the Destination with the same ID with the same Updated time.`,\n // Is true immediately after transaction as _updatedAt is updated by API after mutation\n // Is also true if the document at the destination has been manually modified\n // Presently, the plugin doesn't actually compare the two documents\n OVERWRITE: `A newer version of this document exists at the Destination, and it will be overwritten with this version.`,\n // Document at destination is older\n UPDATE: `An older version of this document exists at the Destination, and it will be overwritten with this version.`,\n // Document at destination doesn't exist\n CREATE: `This document will be created at the destination.`,\n UNPUBLISHED: `A Draft version of this Document exists in this Dataset, but only the Published version will be duplicated to the destination.`,\n}\n\nconst assetMessages: MessageTypes = {\n EXISTS: `This Asset already exists at the Destination`,\n OVERWRITE: `This Asset already exists at the Destination`,\n UPDATE: `This Asset already exists at the Destination`,\n CREATE: `This Asset does not yet exist at the Destination`,\n UNPUBLISHED: ``,\n}\n\nconst assetStatus: MessageTypes = {\n EXISTS: `RE-UPLOAD`,\n OVERWRITE: `RE-UPLOAD`,\n UPDATE: `RE-UPLOAD`,\n CREATE: `UPLOAD`,\n UNPUBLISHED: ``,\n}\n\ntype StatusBadgeProps = {\n isAsset: boolean\n status?: keyof MessageTypes\n}\n\nexport default function StatusBadge(props: StatusBadgeProps) {\n const {status, isAsset} = props\n\n if (!status) {\n return null\n }\n\n const badgeTone = isAsset ? assetTones[status] : documentTones[status]\n\n if (!badgeTone) {\n return (\n <Badge muted padding={2} fontSize={1} mode=\"outline\">\n Checking...\n </Badge>\n )\n }\n\n const badgeText = isAsset ? assetMessages[status] : documentMessages[status]\n const badgeStatus = isAsset ? assetStatus[status] : status\n\n return (\n <Tooltip\n content={\n <Box padding={3} style={{maxWidth: 200}}>\n <Text size={1}>{badgeText}</Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n >\n <Badge muted padding={2} fontSize={1} tone={badgeTone} mode=\"outline\">\n {badgeStatus}\n </Badge>\n </Tooltip>\n )\n}\n","import React from 'react'\nimport {Card, Text} from '@sanity/ui'\nimport type {BadgeTone} from '@sanity/ui'\n\ntype FeedbackProps = {\n children?: React.ReactNode\n tone?: BadgeTone\n}\n\nexport default function Feedback(props: FeedbackProps) {\n const {children, tone = `caution`} = props\n\n return (\n <Card padding={3} radius={2} shadow={1} tone={tone}>\n <Text size={1}>{children}</Text>\n </Card>\n )\n}\n","export const clientConfig = {apiVersion: `2021-05-19`}\n","/* eslint-disable react/jsx-no-bind */\nimport React, {useState, useEffect} from 'react'\nimport {\n useClient,\n Preview,\n useSchema,\n useWorkspaces,\n WorkspaceSummary,\n SanityDocument,\n} from 'sanity'\n// @ts-ignore\nimport mapLimit from 'async/mapLimit'\n// @ts-ignore\nimport asyncify from 'async/asyncify'\nimport {extractWithPath} from '@sanity/mutator'\nimport {dset} from 'dset'\nimport {\n Card,\n Container,\n Text,\n Box,\n Button,\n Label,\n Stack,\n Select,\n Flex,\n Checkbox,\n CardTone,\n useTheme,\n Spinner,\n} from '@sanity/ui'\nimport {ArrowRightIcon, SearchIcon, LaunchIcon} from '@sanity/icons'\nimport {SanityAssetDocument} from '@sanity/client'\nimport {isAssetId, isSanityFileAsset} from '@sanity/asset-utils'\n\nimport {stickyStyles, createInitialMessage} from '../helpers'\nimport {getDocumentsInArray} from '../helpers/getDocumentsInArray'\nimport SelectButtons from './SelectButtons'\nimport StatusBadge, {MessageTypes} from './StatusBadge'\nimport Feedback from './Feedback'\nimport {clientConfig} from '../helpers/clientConfig'\nimport {PluginConfig} from '../types'\n\nexport type DuplicatorProps = {\n docs: SanityDocument[]\n // TODO: Find out if this is even used?\n // draftIds: string[]\n token: string\n pluginConfig: PluginConfig\n onDuplicated?: () => Promise<void>\n}\n\nexport type PayloadItem = {\n doc: SanityDocument\n include: boolean\n status?: keyof MessageTypes\n hasDraft?: boolean\n}\n\ntype WorkspaceOption = WorkspaceSummary & {\n disabled: boolean\n}\n\ntype Message = {\n text: string\n tone: CardTone\n}\n\nexport default function Duplicator(props: DuplicatorProps) {\n const {docs, token, pluginConfig, onDuplicated} = props\n const isDarkMode = useTheme().sanity.color.dark\n\n // Prepare origin (this Studio) client\n const originClient = useClient(clientConfig)\n\n const schema = useSchema()\n\n // Create list of dataset options\n // and set initial value of dropdown\n const workspaces = useWorkspaces()\n const workspacesOptions: WorkspaceOption[] = workspaces.map((workspace) => ({\n ...workspace,\n disabled: workspace.dataset === originClient.config().dataset,\n }))\n\n const [destination, setDestination] = useState<WorkspaceOption | null>(\n workspaces.length ? workspacesOptions.find((space) => !space.disabled) ?? null : null\n )\n const [message, setMessage] = useState<Message | null>(null)\n const [payload, setPayload] = useState<PayloadItem[]>([])\n\n const [hasReferences, setHasReferences] = useState(false)\n const [isDuplicating, setIsDuplicating] = useState(false)\n const [isGathering, setIsGathering] = useState(false)\n const [progress, setProgress] = useState<number[]>([0, 0])\n\n // Check for References and update message\n useEffect(() => {\n const expr = `.._ref`\n const initialRefs = []\n const initialPayload: PayloadItem[] = []\n\n docs.forEach((doc) => {\n const refs = extractWithPath(expr, doc).map((ref) => ref.value)\n initialRefs.push(...refs)\n initialPayload.push({include: true, doc})\n })\n\n setPayload(initialPayload)\n\n const docCount = docs.length\n const refsCount = initialRefs.length\n\n if (initialRefs.length) {\n setHasReferences(true)\n\n setMessage({\n tone: `caution`,\n text: createInitialMessage(docCount, refsCount),\n })\n }\n }, [docs])\n\n // Re-check payload on destination when value changes\n // (On initial render + select change)\n useEffect(() => {\n updatePayloadStatuses()\n }, [destination])\n\n // Check if payload documents exist at destination\n async function updatePayloadStatuses(newPayload: PayloadItem[] = []) {\n const payloadActual = newPayload.length ? newPayload : payload\n\n if (!payloadActual.length || !destination?.name) {\n return\n }\n\n const payloadIds = payloadActual.map(({doc}) => doc._id)\n const destinationClient = originClient.withConfig({\n ...clientConfig,\n dataset: destination.dataset,\n projectId: destination.projectId,\n })\n const destinationData: SanityDocument[] = await destinationClient.fetch(\n `*[_id in $payloadIds]{ _id, _updatedAt }`,\n {payloadIds}\n )\n\n const updatedPayload = payloadActual.map((item) => {\n const existingDoc = destinationData.find((doc) => doc._id === item.doc._id)\n\n if (existingDoc?._updatedAt && item?.doc?._updatedAt) {\n if (existingDoc._updatedAt === item.doc._updatedAt) {\n // Exact same document exists at destination\n // We don't compare by _rev because that is updated in a transaction\n item.status = `EXISTS`\n } else if (existingDoc._updatedAt && item.doc._updatedAt) {\n item.status =\n new Date(existingDoc._updatedAt) > new Date(item.doc._updatedAt)\n ? // Document at destination is newer\n `OVERWRITE`\n : // Document at destination is older\n `UPDATE`\n }\n } else {\n item.status = 'CREATE'\n }\n\n return item\n })\n\n setPayload(updatedPayload)\n }\n\n function handleCheckbox(_id: string) {\n const updatedPayload = payload.map((item) => {\n if (item.doc._id === _id) {\n item.include = !item.include\n }\n\n return item\n })\n\n setPayload(updatedPayload)\n }\n\n // Find and recursively follow references beginning with this document\n async function handleReferences() {\n setIsGathering(true)\n const docIds = docs.map((doc) => doc._id)\n\n const payloadDocs = await getDocumentsInArray({\n fetchIds: docIds,\n client: originClient,\n pluginConfig,\n })\n const draftDocs = await getDocumentsInArray({\n fetchIds: docIds.map((id) => `drafts.${id}`),\n client: originClient,\n projection: `{_id}`,\n pluginConfig,\n })\n const draftDocsIds = new Set(draftDocs.map(({_id}) => _id))\n\n // Shape it up\n const payloadShaped = payloadDocs.map((doc) => ({\n doc,\n // Include this in the transaction?\n include: true,\n // Does it exist at the destination?\n status: undefined,\n // Does it have any drafts?\n hasDraft: draftDocsIds.has(`drafts.${doc._id}`),\n }))\n\n setPayload(payloadShaped)\n updatePayloadStatuses(payloadShaped)\n setIsGathering(false)\n }\n\n // Duplicate payload to destination dataset\n async function handleDuplicate() {\n if (!destination) {\n return\n }\n\n setIsDuplicating(true)\n\n const assetsCount = payload.filter(({doc, include}) => include && isAssetId(doc._id)).length\n let currentProgress = 0\n setProgress([currentProgress, assetsCount])\n\n setMessage({text: 'Duplicating...', tone: `transparent`})\n\n const destinationClient = originClient.withConfig({\n ...clientConfig,\n dataset: destination.dataset,\n projectId: destination.projectId,\n })\n\n const transactionDocs: SanityDocument[] = []\n const svgMaps: {old: string; new: string}[] = []\n\n // Upload assets and then add to transaction\n async function fetchDoc(doc: SanityAssetDocument) {\n if (isAssetId(doc._id)) {\n // Download and upload asset\n // Get the *original* image with this dlRaw param to create the same deterministic _id\n const typeIsFile = isSanityFileAsset(doc)\n const downloadUrl = typeIsFile ? doc.url : `${doc.url}?dlRaw=true`\n const downloadConfig = typeIsFile ? {} : {headers: {Authorization: `Bearer ${token}`}}\n\n await fetch(downloadUrl, downloadConfig).then(async (res) => {\n const assetData = await res.blob()\n\n const options = {filename: doc.originalFilename}\n const assetDoc = await destinationClient.assets.upload(\n typeIsFile ? `file` : `image`,\n assetData,\n options\n )\n\n // SVG _id's need remapping before transaction\n if (doc?.extension === 'svg') {\n svgMaps.push({old: doc._id, new: assetDoc._id})\n }\n\n // This adds the newly created asset document to the transaction but ...\n // it doesn't have some of the original asset's metadata like `altText` or `title`\n transactionDocs.push(assetDoc)\n\n // So the original `doc` is added to the transaction as well below\n // However, we don't want to retain `url` or `path` keys\n // because these strings contain the origin's dataset name\n doc.url = assetDoc.url\n doc.path = assetDoc.path\n })\n\n currentProgress += 1\n setMessage({\n text: `Duplicating ${currentProgress}/${assetsCount} ${\n assetsCount === 1 ? `Assets` : `Assets`\n }`,\n tone: 'default',\n })\n\n setProgress([currentProgress, assetsCount])\n }\n\n return transactionDocs.push(doc)\n }\n\n // Promises are limited to three at once\n const result = new Promise((resolve, reject) => {\n const payloadIncludedDocs = payload.filter((item) => item.include).map((item) => item.doc)\n\n mapLimit(payloadIncludedDocs, 3, asyncify(fetchDoc), (err: Error) => {\n if (err) {\n setIsDuplicating(false)\n setMessage({tone: 'critical', text: `Duplication Failed`})\n console.error(err)\n reject(new Error('Duplication Failed'))\n }\n\n // @ts-ignore\n resolve()\n })\n })\n\n await result\n\n // Remap SVG references to new _id's\n const transactionDocsMapped = transactionDocs.map((doc) => {\n const expr = `.._ref`\n const references = extractWithPath(expr, doc)\n\n if (!references.length) {\n return doc\n }\n\n // For every found _ref, search for an SVG asset _id and update\n references.forEach((ref) => {\n const newRefValue = svgMaps.find((asset) => asset.old === ref.value)?.new\n\n if (newRefValue) {\n const refPath = ref.path.join('.')\n\n dset(doc, refPath, newRefValue)\n }\n })\n\n return doc\n })\n\n // Create transaction\n const transaction = destinationClient.transaction()\n\n transactionDocsMapped.forEach((doc) => {\n transaction.createOrReplace(doc)\n })\n\n await transaction\n .commit()\n .then((res) => {\n setMessage({tone: 'positive', text: 'Duplication complete!'})\n\n updatePayloadStatuses()\n })\n .catch((err) => {\n setMessage({tone: 'critical', text: err.details.description})\n })\n\n setIsDuplicating(false)\n setProgress([0, 0])\n if (onDuplicated) {\n try {\n await onDuplicated()\n } catch (error) {\n setMessage({tone: 'critical', text: `Error in onDuplicated hook: ${error}`})\n }\n }\n }\n\n function handleChange(e: React.ChangeEvent<HTMLSelectElement>) {\n if (!workspacesOptions.length) {\n return\n }\n\n const targeted = workspacesOptions.find((space) => space.name === e.currentTarget.value)\n\n if (targeted) {\n setDestination(targeted)\n }\n }\n\n const payloadCount = payload.length\n const firstSvgIndex = payload.findIndex(({doc}) => doc.extension === 'svg')\n const selectedDocumentsCount = payload.filter(\n (item) => item.include && !isAssetId(item.doc._id)\n ).length\n const selectedAssetsCount = payload.filter(\n (item) => item.include && isAssetId(item.doc._id)\n ).length\n const selectedTotal = selectedDocumentsCount + selectedAssetsCount\n const destinationTitle = destination?.title ?? destination?.name\n const hasMultipleProjectIds =\n new Set(workspacesOptions.map((space) => space?.projectId).filter(Boolean)).size > 1\n\n const headingText = [selectedTotal, `/`, payloadCount, `Documents and Assets selected`].join(` `)\n\n const buttonText = React.useMemo(() => {\n const text = [`Duplicate`]\n\n if (selectedDocumentsCount > 1) {\n text.push(\n String(selectedDocumentsCount),\n selectedDocumentsCount === 1 ? `Document` : `Documents`\n )\n }\n\n if (selectedAssetsCount > 1) {\n text.push(`and`, String(selectedAssetsCount), selectedAssetsCount === 1 ? `Asset` : `Assets`)\n }\n\n if (originClient.config().projectId !== destination?.projectId) {\n text.push(`between Projects`)\n }\n\n text.push(`to`, String(destinationTitle))\n\n return text.join(` `)\n }, [\n selectedDocumentsCount,\n selectedAssetsCount,\n originClient,\n destination?.projectId,\n destinationTitle,\n ])\n\n if (workspacesOptions.length < 2) {\n return (\n <Feedback tone=\"critical\">\n <code>sanity.config.ts</code> must contain at least two Workspaces to use this plugin.\n </Feedback>\n )\n }\n\n return (\n <Container width={1}>\n <Card border>\n <Stack>\n <Card padding={4} style={stickyStyles(isDarkMode)}>\n <Stack space={4}>\n <Flex gap={3}>\n <Stack style={{flex: 1}} space={3}>\n <Label>Duplicate from</Label>\n <Select readOnly value={workspacesOptions.find((space) => space.disabled)?.name}>\n {workspacesOptions\n .filter((space) => space.disabled)\n .map((space) => (\n <option key={space.name} value={space.name} disabled={space.disabled}>\n {space.title ?? space.name}\n {hasMultipleProjectIds ? ` (${space.projectId})` : ``}\n </option>\n ))}\n </Select>\n </Stack>\n <Box padding={4} paddingTop={5} paddingBottom={0}>\n <Text size={3}>\n <ArrowRightIcon />\n </Text>\n </Box>\n <Stack style={{flex: 1}} space={3}>\n <Label>To Destination</Label>\n <Select onChange={handleChange}>\n {workspacesOptions.map((space) => (\n <option key={space.name} value={space.name} disabled={space.disabled}>\n {space.title ?? space.name}\n {hasMultipleProjectIds ? ` (${space.projectId})` : ``}\n {space.disabled ? ` (Current)` : ``}\n </option>\n ))}\n </Select>\n </Stack>\n </Flex>\n\n {isDuplicating && (\n <Card border radius={2}>\n <Card\n style={{\n width: '100%',\n transform: `scaleX(${progress[0] / progress[1]})`,\n transformOrigin: 'left',\n transition: 'transform .2s ease',\n boxSizing: 'border-box',\n }}\n padding={1}\n tone=\"positive\"\n />\n </Card>\n )}\n {payload.length > 0 && (\n <>\n <Label>{headingText}</Label>\n <SelectButtons payload={payload} setPayload={setPayload} />\n </>\n )}\n </Stack>\n </Card>\n <Card borderTop padding={4}>\n <Stack space={3}>\n {message && (\n <Card padding={3} radius={2} shadow={1} tone={message.tone}>\n <Text size={1}>{message.text}</Text>\n </Card>\n )}\n {payload.length > 0 ? (\n <Stack>\n {payload.map(({doc, include, status, hasDraft}, index) => {\n const schemaType = schema.get(doc._type)\n\n return (\n <React.Fragment key={doc._id}>\n <Flex align=\"center\">\n <Checkbox checked={include} onChange={() => handleCheckbox(doc._id)} />\n <Box flex={1} paddingX={3}>\n {schemaType ? (\n <Preview value={doc} schemaType={schemaType} />\n ) : (\n <Card tone=\"caution\">Invalid schema type</Card>\n )}\n </Box>\n <Flex align=\"center\" gap={2}>\n {hasDraft ? <StatusBadge status=\"UNPUBLISHED\" isAsset={false} /> : null}\n <StatusBadge status={status} isAsset={isAssetId(doc._id)} />\n </Flex>\n </Flex>\n {doc?.extension === 'svg' && index === firstSvgIndex && (\n <Card padding={3} radius={2} shadow={1} tone=\"caution\">\n <Text size={1}>\n Due to how SVGs are sanitized after first uploaded, duplicated SVG\n assets may have new <code>_id</code>'s at the destination. The newly\n generated <code>_id</code> will be the same in each duplication, but\n it will never be the same <code>_id</code> as the first time this\n Asset was uploaded. References to the asset will be updated to use the\n new <code>_id</code>.\n </Text>\n </Card>\n )}\n </React.Fragment>\n )\n })}\n </Stack>\n ) : (\n <Flex padding={4} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )}\n <Stack space={2}>\n {hasReferences && (\n <Button\n fontSize={2}\n padding={4}\n tone=\"positive\"\n mode=\"ghost\"\n icon={SearchIcon}\n onClick={handleReferences}\n text=\"Gather References\"\n disabled={isDuplicating || !selectedTotal || isGathering}\n />\n )}\n <Button\n fontSize={2}\n padding={4}\n tone=\"positive\"\n icon={LaunchIcon}\n onClick={handleDuplicate}\n text={buttonText}\n disabled={isDuplicating || !selectedTotal || isGathering}\n />\n </Stack>\n </Stack>\n </Card>\n </Stack>\n </Card>\n </Container>\n )\n}\n","import {useEffect, useState} from 'react'\nimport {Button, Stack, Box, Label, Text, Card, Flex, Grid, Container, TextInput} from '@sanity/ui'\nimport {useSchema, useClient, SanityDocument} from 'sanity'\n\nimport Duplicator from './Duplicator'\nimport {clientConfig} from '../helpers/clientConfig'\nimport {PluginConfig} from '../types'\n\ntype DuplicatorQueryProps = {\n token: string\n pluginConfig: PluginConfig\n}\n\ntype InitialData = {\n docs: SanityDocument[]\n // draftIds: string[]\n}\n\nexport default function DuplicatorQuery(props: DuplicatorQueryProps) {\n const {token, pluginConfig} = props\n\n const originClient = useClient(clientConfig)\n\n const schema = useSchema()\n const schemaTypes = schema.getTypeNames()\n\n const [value, setValue] = useState(``)\n const [initialData, setInitialData] = useState<InitialData>({\n docs: [],\n // draftIds: []\n })\n\n function handleSubmit(e?: any) {\n if (e) e.preventDefault()\n\n originClient\n .fetch(value)\n .then((res: SanityDocument[]) => {\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\n // ? res.filter((doc) => doc._id.startsWith(`drafts.`)).map((doc) => doc._id)\n // : []\n\n setInitialData({\n docs: registeredAndPublishedDocs,\n // draftIds: initialDraftIds\n })\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n <Card padding={[0, 0, 0, 5]}>\n <Container>\n <Grid columns={[1, 1, 1, 2]} gap={[1, 1, 1, 4]}>\n <Box padding={[2, 2, 2, 0]}>\n <Card padding={4} radius={3} border>\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 && (\n <Duplicator\n docs={initialData.docs}\n // draftIds={initialData.draftIds}\n token={token}\n pluginConfig={pluginConfig}\n />\n )}\n </Grid>\n </Container>\n </Card>\n )\n}\n","import {useState, useEffect} from 'react'\nimport {Grid, Card, Container, Button} from '@sanity/ui'\nimport {SanityDocument, useClient} from 'sanity'\n\nimport type {DuplicatorProps} from './Duplicator'\nimport Duplicator from './Duplicator'\nimport {clientConfig} from '../helpers/clientConfig'\n\nexport default function DuplicatorWrapper(props: DuplicatorProps) {\n const {docs, token, pluginConfig, onDuplicated} = props\n const [inbound, setInbound] = useState<SanityDocument[]>([])\n const {follow = []} = pluginConfig\n\n // Make the first mode the default if there's only one\n const [mode, setMode] = useState<'inbound' | 'outbound'>(\n follow.length === 1 ? follow[0] : `outbound`\n )\n const client = useClient(clientConfig)\n\n // \"Inbound\" will start with all documents that reference the first one\n // And then you can gather \"Outbound\" references thereafter\n useEffect(() => {\n ;(async () => {\n if (follow.includes(`inbound`)) {\n const inboundReferences = await client.fetch(`*[references($id)]`, {id: docs[0]._id})\n setInbound([...props.docs, ...inboundReferences])\n }\n })()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n <Container>\n {follow.length > 1 && (follow.includes(`inbound`) || follow.includes(`outbound`)) ? (\n <Card paddingX={4} paddingBottom={4} marginBottom={4} borderBottom>\n <Grid columns={2} gap={4}>\n {follow.includes(`outbound`) ? (\n <Button\n mode=\"ghost\"\n tone=\"primary\"\n selected={mode === 'outbound'}\n onClick={() => setMode('outbound')}\n text=\"Outbound\"\n />\n ) : null}\n {follow.includes(`inbound`) ? (\n <Button\n mode=\"ghost\"\n tone=\"primary\"\n selected={mode === 'inbound'}\n onClick={() => setMode('inbound')}\n disabled={inbound.length === 0}\n text={inbound.length > 0 ? `Inbound (${inbound.length})` : 'No inbound references'}\n />\n ) : null}\n </Grid>\n </Card>\n ) : null}\n <Duplicator\n docs={mode === 'outbound' ? docs : inbound}\n token={token}\n // draftIds={[]}\n pluginConfig={pluginConfig}\n onDuplicated={onDuplicated}\n />\n </Container>\n )\n}\n","import {PluginConfig} from '../types'\n\nexport const SECRET_NAMESPACE = `CrossDatasetDuplicator`\n\nexport const DEFAULT_CONFIG: PluginConfig = {\n tool: true,\n types: [],\n filter: '',\n follow: ['outbound'],\n}\n","import {useCallback} from 'react'\nimport {useClient} from 'sanity'\nimport {Button, Flex} from '@sanity/ui'\n\nimport {clientConfig} from '../helpers/clientConfig'\nimport {SECRET_NAMESPACE} from '../helpers/constants'\n\nexport default function ResetSecret() {\n const client = useClient(clientConfig)\n\n const handleClick = useCallback(() => {\n client.delete({query: `*[_id == \"secrets.${SECRET_NAMESPACE}\"]`})\n }, [client])\n\n return (\n <Flex align=\"center\" justify=\"flex-end\" paddingX={[2, 2, 2, 5]} paddingY={5}>\n <Button\n text=\"Reset Secret\"\n onClick={handleClick}\n mode=\"ghost\"\n tone=\"critical\"\n fontSize={1}\n padding={2}\n />\n </Flex>\n )\n}\n","import {useContext} from 'react'\nimport {createContext} from 'react'\nimport {LayoutProps} from 'sanity'\n\nimport {DEFAULT_CONFIG} from '../helpers/constants'\nimport {PluginConfig} from '../types'\n\nconst CrossDatasetDuplicatorContext = createContext(DEFAULT_CONFIG)\n\ntype ConfigProviderProps = LayoutProps & {pluginConfig: PluginConfig}\n\n/**\n * Plugin config context hook from the Cross Dataset Duplicator plugin\n * @public\n */\nexport function useCrossDatasetDuplicatorConfig() {\n const pluginConfig = useContext(CrossDatasetDuplicatorContext)\n\n return pluginConfig\n}\n\nexport function ConfigProvider(props: ConfigProviderProps) {\n const {pluginConfig, ...rest} = props\n\n return (\n <CrossDatasetDuplicatorContext.Provider value={pluginConfig}>\n {props.renderDefault(rest)}\n </CrossDatasetDuplicatorContext.Provider>\n )\n}\n","import {useEffect, useState} from 'react'\nimport {useSecrets, SettingsView} from '@sanity/studio-secrets'\nimport {Flex, Box, Spinner} from '@sanity/ui'\nimport {SanityDocument} from 'sanity'\n\nimport DuplicatorQuery from './DuplicatorQuery'\nimport DuplicatorWrapper from './DuplicatorWrapper'\nimport ResetSecret from './ResetSecret'\nimport Feedback from './Feedback'\nimport {SECRET_NAMESPACE} from '../helpers/constants'\nimport {useCrossDatasetDuplicatorConfig} from '../context/ConfigProvider'\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 Secrets = {\n bearerToken?: string\n}\n\ntype CrossDatasetDuplicatorProps = {\n mode: 'tool' | 'action'\n docs: SanityDocument[]\n onDuplicated?: () => Promise<void>\n}\n\nexport default function CrossDatasetDuplicator(props: CrossDatasetDuplicatorProps) {\n const {mode = `tool`, docs = [], onDuplicated} = props ?? {}\n const pluginConfig = useCrossDatasetDuplicatorConfig()\n\n const {loading, secrets} = useSecrets<Secrets>(SECRET_NAMESPACE)\n const [showSecretsPrompt, setShowSecretsPrompt] = useState(false)\n\n useEffect(() => {\n if (secrets) {\n setShowSecretsPrompt(!secrets?.bearerToken)\n }\n }, [secrets])\n\n if (loading) {\n return (\n <Flex justify=\"center\" align=\"center\">\n <Box padding={5}>\n <Spinner />\n </Box>\n </Flex>\n )\n }\n\n if ((!loading && showSecretsPrompt) || !secrets?.bearerToken) {\n return (\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 )\n }\n\n if (mode === 'tool' && pluginConfig) {\n return (\n <>\n <DuplicatorQuery token={secrets?.bearerToken} pluginConfig={pluginConfig} />\n <ResetSecret />\n </>\n )\n }\n\n if (!docs?.length) {\n return <Feedback>No docs passed into Duplicator Tool</Feedback>\n }\n\n if (!pluginConfig) {\n return <Feedback>No plugin config</Feedback>\n }\n\n return (\n <DuplicatorWrapper\n docs={docs}\n token={secrets?.bearerToken}\n pluginConfig={pluginConfig}\n onDuplicated={onDuplicated}\n />\n )\n}\n","import {CrossDatasetDuplicatorActionProps} from '../types'\n\nimport CrossDatasetDuplicator from './CrossDatasetDuplicator'\n\n/**\n * Component to perform a migration from the Cross Dataset Duplicator plugin\n * @public\n */\nexport function CrossDatasetDuplicatorAction(props: CrossDatasetDuplicatorActionProps) {\n const {docs = [], onDuplicated} = props\n\n return <CrossDatasetDuplicator mode=\"action\" docs={docs} onDuplicated={onDuplicated} />\n}\n","import {useState} from 'react'\nimport {LaunchIcon} from '@sanity/icons'\nimport {DocumentActionProps} from 'sanity'\n\nimport {CrossDatasetDuplicatorAction} from '../components/CrossDatasetDuplicatorAction'\n\n/**\n * Document action from the Cross Dataset Duplicator plugin\n * @public\n */\nexport const DuplicateToAction = (props: DocumentActionProps) => {\n const {draft, published, onComplete} = props\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 &&\n published && {\n type: 'modal',\n title: 'Cross Dataset Duplicator',\n content: <CrossDatasetDuplicatorAction docs={[published]} />,\n onClose: () => {\n onComplete()\n setDialogOpen(false)\n },\n },\n onHandle: () => setDialogOpen(true),\n icon: LaunchIcon,\n }\n}\n\nDuplicateToAction.action = 'duplicateTo'\n","import {SanityDocument, Tool} from 'sanity'\n\nimport CrossDatasetDuplicator from './CrossDatasetDuplicator'\n\nexport type MultiToolConfig = {\n docs: SanityDocument[]\n}\n\ntype CrossDatasetDuplicatorProps = {\n tool: Tool<MultiToolConfig>\n}\n\nexport function CrossDatasetDuplicatorTool(props: CrossDatasetDuplicatorProps) {\n const {docs = []} = props.tool.options ?? {}\n\n return <CrossDatasetDuplicator mode=\"tool\" docs={docs} />\n}\n","import type {Tool} from 'sanity'\nimport {LaunchIcon} from '@sanity/icons'\n\nimport {CrossDatasetDuplicatorTool, MultiToolConfig} from '../components/CrossDatasetDuplicatorTool'\n\nexport const crossDatasetDuplicatorTool = (): Tool<MultiToolConfig> => ({\n title: 'Duplicator',\n name: 'duplicator',\n icon: LaunchIcon,\n component: CrossDatasetDuplicatorTool,\n options: {\n docs: [],\n },\n})\n","import {definePlugin} from 'sanity'\n\nimport {DuplicateToAction} from './actions/DuplicateToAction'\nimport {ConfigProvider} from './context/ConfigProvider'\nimport {DEFAULT_CONFIG} from './helpers/constants'\nimport {crossDatasetDuplicatorTool} from './tool'\nimport {PluginConfig} from './types'\n\n/**\n * Plugin: Cross Dataset Duplicator\n * @public\n */\nexport const crossDatasetDuplicator = definePlugin<PluginConfig | void>((config = {}) => {\n const pluginConfig = {...DEFAULT_CONFIG, ...config}\n const {types} = pluginConfig\n\n return {\n name: '@sanity/cross-dataset-duplicator',\n tools: (prev) => (pluginConfig.tool ? [...prev, crossDatasetDuplicatorTool()] : prev),\n studio: {\n components: {\n layout: (props) => ConfigProvider({...props, pluginConfig}),\n },\n },\n document: {\n actions: (prev, {schemaType}) => {\n return types && types.includes(schemaType) ? [...prev, DuplicateToAction] : prev\n },\n },\n }\n})\n"],"names":["createInitialMessage","docCount","arguments","length","undefined","refsCount","message","concat","join","stickyStyles","isDarkMode","position","top","zIndex","backgroundColor","isAsset","doc","_type","returnOnlyAssets","references","filter","item","getDocumentsInArray","options","recurrsionDepth","fetchIds","client","pluginConfig","currentIds","projection","reference","collection","Boolean","query","data","fetch","localCurrentIds","Set","newDataIds","map","dataDoc","_id","id","size","has","push","add","Promise","all","expr","extractWithPath","ref","value","newReferenceIds","maxDepth","referenceDocs","Array","from","assetsOnly","uniqueCollection","reduce","acc","cur","some","buttons","SelectButtons","props","payload","setPayload","disabledActions","setDisabledActions","useState","useEffect","every","include","handleSelectButton","action","newPayload","status","isAssetId","jsx","Card","padding","radius","shadow","children","Flex","gap","wrap","actionIndex","Button","fontSize","mode","text","disabled","includes","toUpperCase","onClick","borderLeft","documentTones","EXISTS","OVERWRITE","UPDATE","CREATE","UNPUBLISHED","assetTones","documentMessages","assetMessages","assetStatus","StatusBadge","badgeTone","Badge","muted","badgeText","badgeStatus","Tooltip","content","Box","style","maxWidth","Text","fallbackPlacements","placement","portal","tone","Feedback","clientConfig","apiVersion","Duplicator","_a","_b","_c","docs","token","onDuplicated","useTheme","sanity","color","dark","originClient","useClient","schema","useSchema","workspaces","useWorkspaces","workspacesOptions","workspace","dataset","config","destination","setDestination","find","space","setMessage","hasReferences","setHasReferences","isDuplicating","setIsDuplicating","isGathering","setIsGathering","progress","setProgress","initialRefs","initialPayload","forEach","refs","updatePayloadStatuses","payloadActual","name","payloadIds","_ref","destinationClient","withConfig","projectId","destinationData","updatedPayload","existingDoc","_updatedAt","Date","handleCheckbox","handleReferences","docIds","payloadDocs","draftDocs","draftDocsIds","_ref2","payloadShaped","hasDraft","handleDuplicate","assetsCount","_ref3","currentProgress","transactionDocs","svgMaps","fetchDoc","typeIsFile","isSanityFileAsset","downloadUrl","url","downloadConfig","headers","Authorization","then","res","assetData","blob","filename","originalFilename","assetDoc","assets","upload","extension","old","new","path","result","resolve","reject","payloadIncludedDocs","mapLimit","asyncify","err","console","error","Error","transactionDocsMapped","newRefValue","asset","refPath","dset","transaction","createOrReplace","commit","catch","details","description","handleChange","e","targeted","currentTarget","payloadCount","firstSvgIndex","findIndex","_ref4","selectedDocumentsCount","selectedAssetsCount","selectedTotal","destinationTitle","title","hasMultipleProjectIds","headingText","buttonText","React","useMemo","String","jsxs","Container","width","border","Stack","flex","Label","Select","readOnly","paddingTop","paddingBottom","ArrowRightIcon","onChange","transform","transformOrigin","transition","boxSizing","Fragment","borderTop","_ref5","index","schemaType","get","align","Checkbox","checked","paddingX","Preview","justify","Spinner","icon","SearchIcon","LaunchIcon","DuplicatorQuery","schemaTypes","getTypeNames","setValue","initialData","setInitialData","handleSubmit","preventDefault","registeredAndPublishedDocs","startsWith","Grid","columns","onSubmit","paddingRight","TextInput","fontFamily","event","placeholder","DuplicatorWrapper","inbound","setInbound","follow","setMode","inboundReferences","marginBottom","borderBottom","selected","SECRET_NAMESPACE","DEFAULT_CONFIG","tool","types","ResetSecret","handleClick","useCallback","delete","paddingY","CrossDatasetDuplicatorContext","createContext","useCrossDatasetDuplicatorConfig","useContext","ConfigProvider","rest","Provider","renderDefault","secretConfigKeys","key","CrossDatasetDuplicator","loading","secrets","useSecrets","showSecretsPrompt","setShowSecretsPrompt","bearerToken","SettingsView","namespace","keys","onClose","CrossDatasetDuplicatorAction","DuplicateToAction","draft","published","onComplete","dialogOpen","setDialogOpen","label","dialog","type","onHandle","CrossDatasetDuplicatorTool","crossDatasetDuplicatorTool","component","crossDatasetDuplicator","definePlugin","tools","prev","studio","components","layout","document","actions","_ref6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/helpers/index.ts","../src/helpers/getDocumentsInArray.ts","../src/components/SelectButtons.tsx","../src/components/StatusBadge.tsx","../src/components/Feedback.tsx","../src/helpers/clientConfig.ts","../src/components/Duplicator.tsx","../src/components/DuplicatorQuery.tsx","../src/components/DuplicatorWrapper.tsx","../src/helpers/constants.ts","../src/components/ResetSecret.tsx","../src/context/ConfigProvider.tsx","../src/components/CrossDatasetDuplicator.tsx","../src/components/CrossDatasetDuplicatorAction.tsx","../src/actions/DuplicateToAction.tsx","../src/components/CrossDatasetDuplicatorTool.tsx","../src/tool/index.ts","../src/plugin.tsx"],"sourcesContent":["import {CSSProperties} from 'react'\n\nexport function createInitialMessage(docCount = 0, refsCount = 0): string {\n const message = [\n docCount === 1 ? `This Document contains` : `These ${docCount} Documents contain`,\n refsCount === 1 ? `1 Reference.` : `${refsCount} References.`,\n refsCount === 1 ? `That Document` : `Those Documents`,\n `may have References too. If referenced Documents do not exist at the target Destination, this transaction will fail.`,\n ]\n\n return message.join(` `)\n}\n\nexport const stickyStyles = (isDarkMode = true): CSSProperties => ({\n position: 'sticky',\n top: 0,\n zIndex: 100,\n backgroundColor: isDarkMode ? `rgba(10,10,10,0.95)` : `rgba(255,255,255,0.95)`,\n})\n","import {extractWithPath} from '@sanity/mutator'\nimport {SanityClient, SanityDocument} from 'sanity'\nimport {PluginConfig} from '../types'\n\ntype OptionsBag = {\n fetchIds: string[]\n client: SanityClient\n pluginConfig: PluginConfig\n currentIds?: Set<string> | null\n projection?: string\n}\n\n// Recursively fetch Documents from an array of _id's and their references\n// Heavy use of Set is to avoid recursively querying for id's already in the payload\nexport async function getDocumentsInArray(options: OptionsBag): Promise<SanityDocument[]> {\n const {fetchIds, client, pluginConfig, currentIds, projection} = options\n const collection: SanityDocument[] = []\n\n // Find initial docs\n const filter = ['_id in $fetchIds', pluginConfig.filter].filter(Boolean).join(' && ')\n const query = `*[${filter}]${projection ?? ``}`\n const data: SanityDocument[] = await client.fetch(query, {\n fetchIds: fetchIds ?? [],\n })\n\n if (!data?.length) {\n return []\n }\n\n const localCurrentIds = currentIds ?? new Set<string>()\n\n // Find new ids in the returned data\n // Unless we started with an empty set, get the _ids from the data\n const newDataIds = new Set<string>(\n data\n .map((dataDoc) => dataDoc._id)\n .filter((id) => (currentIds?.size ? !localCurrentIds.has(id) : Boolean(id)))\n )\n\n if (newDataIds.size) {\n collection.push(...data)\n // @ts-ignore\n localCurrentIds.add(...newDataIds)\n\n // Check new data for more references\n await Promise.all(\n data.map(async (doc) => {\n const expr = `.._ref`\n const references: string[] = extractWithPath(expr, doc).map((ref) => ref.value as string)\n\n if (references.length) {\n // Find references not already in the Collection\n const newReferenceIds = new Set<string>(\n references.filter((ref) => !localCurrentIds.has(ref))\n )\n\n if (newReferenceIds.size) {\n // Recursive query for new documents\n const referenceDocs = await getDocumentsInArray({\n fetchIds: Array.from(newReferenceIds),\n currentIds: localCurrentIds,\n client,\n pluginConfig,\n })\n\n if (referenceDocs?.length) {\n collection.push(...referenceDocs)\n }\n }\n }\n })\n )\n }\n\n // Create a unique array of objects from collection\n // Set() wasn't working for unique id's ¯\\_(ツ)_/¯\n const uniqueCollection = collection.filter(Boolean).reduce((acc: SanityDocument[], cur) => {\n if (acc.some((doc) => doc._id === cur._id)) {\n return acc\n }\n\n return [...acc, cur]\n }, [])\n\n return uniqueCollection\n}\n","import {useState, useEffect} from 'react'\nimport {Button, Card, Flex} from '@sanity/ui'\n\nimport {PayloadItem} from './Duplicator'\nimport {isAssetId} from '@sanity/asset-utils'\n\nconst buttons = [`All`, `None`, null, `New`, `Existing`, `Older`, null, `Documents`, `Assets`]\n\ntype Action = 'ALL' | 'NONE' | 'NEW' | 'EXISTING' | 'OLDER' | 'ASSETS' | 'DOCUMENTS'\n\ntype SelectButtonsProps = {\n payload: PayloadItem[]\n setPayload: Function\n}\n\nexport default function SelectButtons(props: SelectButtonsProps) {\n const {payload, setPayload} = props\n const [disabledActions, setDisabledActions] = useState<Action[]>([])\n\n // Set intiial disabled button\n useEffect(() => {\n if (!disabledActions?.length && payload.every((item) => item.include)) {\n setDisabledActions([`ALL`])\n }\n }, [disabledActions?.length, payload])\n\n function handleSelectButton(action?: Action) {\n if (!action || !payload.length) return\n\n const newPayload = [...payload]\n\n switch (action) {\n case 'ALL':\n newPayload.map((item) => (item.include = true))\n break\n case 'NONE':\n newPayload.map((item) => (item.include = false))\n break\n case 'NEW':\n newPayload.map((item) => (item.include = Boolean(item.status === 'CREATE')))\n break\n case 'EXISTING':\n newPayload.map((item) => (item.include = Boolean(item.status === 'EXISTS')))\n break\n case 'OLDER':\n newPayload.map((item) => (item.include = Boolean(item.status === 'OVERWRITE')))\n break\n case 'ASSETS':\n newPayload.map((item) => (item.include = isAssetId(item.doc._id)))\n break\n case 'DOCUMENTS':\n newPayload.map((item) => (item.include = !isAssetId(item.doc._id)))\n break\n default:\n break\n }\n\n setDisabledActions([action])\n setPayload(newPayload)\n }\n\n return (\n <Card padding={1} radius={3} shadow={1}>\n <Flex gap={2} wrap=\"wrap\">\n {buttons.map((action, actionIndex) =>\n action ? (\n <Button\n key={action}\n fontSize={1}\n mode=\"bleed\"\n padding={2}\n text={action}\n disabled={disabledActions.includes(action.toUpperCase() as Action)}\n onClick={() => handleSelectButton(action.toUpperCase() as Action)}\n />\n ) : (\n // eslint-disable-next-line react/no-array-index-key\n <Card key={`divider-${actionIndex}`} borderLeft />\n )\n )}\n </Flex>\n </Card>\n )\n}\n","import {InfoOutlineIcon} from '@sanity/icons'\nimport {Box, Text, Badge, Tooltip} from '@sanity/ui'\nimport type {BadgeTone} from '@sanity/ui'\n\ntype StatusTones = {\n EXISTS: BadgeTone\n OVERWRITE: BadgeTone\n UPDATE: BadgeTone\n CREATE: BadgeTone\n UNPUBLISHED: BadgeTone\n}\n\nconst documentTones: StatusTones = {\n EXISTS: `primary`,\n OVERWRITE: `critical`,\n UPDATE: `caution`,\n CREATE: `positive`,\n UNPUBLISHED: `caution`,\n}\n\nconst assetTones: StatusTones = {\n EXISTS: `critical`,\n OVERWRITE: `critical`,\n UPDATE: `critical`,\n CREATE: `positive`,\n UNPUBLISHED: `default`,\n}\n\nexport type MessageTypes = {\n EXISTS: string\n OVERWRITE: string\n UPDATE: string\n CREATE: string\n UNPUBLISHED: string\n}\n\nconst documentMessages: MessageTypes = {\n // Only happens once document is copied the first time, and _updatedAt is the same\n EXISTS: `This document already exists at the Destination with the same ID with the same Updated time.`,\n // Is true immediately after transaction as _updatedAt is updated by API after mutation\n // Is also true if the document at the destination has been manually modified\n // Presently, the plugin doesn't actually compare the two documents\n OVERWRITE: `A newer version of this document exists at the Destination, and it will be overwritten with this version.`,\n // Document at destination is older\n UPDATE: `An older version of this document exists at the Destination, and it will be overwritten with this version.`,\n // Document at destination doesn't exist\n CREATE: `This document will be created at the destination.`,\n UNPUBLISHED: `A Draft version of this Document exists in this Dataset, but only the Published version will be duplicated to the destination.`,\n}\n\nconst assetMessages: MessageTypes = {\n EXISTS: `This Asset already exists at the Destination`,\n OVERWRITE: `This Asset already exists at the Destination`,\n UPDATE: `This Asset already exists at the Destination`,\n CREATE: `This Asset does not yet exist at the Destination`,\n UNPUBLISHED: ``,\n}\n\nconst assetStatus: MessageTypes = {\n EXISTS: `RE-UPLOAD`,\n OVERWRITE: `RE-UPLOAD`,\n UPDATE: `RE-UPLOAD`,\n CREATE: `UPLOAD`,\n UNPUBLISHED: ``,\n}\n\ntype StatusBadgeProps = {\n isAsset: boolean\n status?: keyof MessageTypes\n}\n\nexport default function StatusBadge(props: StatusBadgeProps) {\n const {status, isAsset} = props\n\n if (!status) {\n return null\n }\n\n const badgeTone = isAsset ? assetTones[status] : documentTones[status]\n\n if (!badgeTone) {\n return (\n <Badge muted padding={2} fontSize={1} mode=\"outline\">\n Checking...\n </Badge>\n )\n }\n\n const badgeText = isAsset ? assetMessages[status] : documentMessages[status]\n const badgeStatus = isAsset ? assetStatus[status] : status\n\n return (\n <Tooltip\n content={\n <Box padding={3} style={{maxWidth: 200}}>\n <Text size={1}>{badgeText}</Text>\n </Box>\n }\n fallbackPlacements={['right', 'left']}\n placement=\"top\"\n portal\n >\n <Badge muted padding={3} fontSize={1} tone={badgeTone} mode=\"outline\">\n {badgeStatus}\n <Box marginLeft={2} display={'inline-block'} as=\"span\">\n <InfoOutlineIcon />\n </Box>\n </Badge>\n </Tooltip>\n )\n}\n","import React from 'react'\nimport {Card, Text} from '@sanity/ui'\nimport type {BadgeTone} from '@sanity/ui'\n\ntype FeedbackProps = {\n children?: React.ReactNode\n tone?: BadgeTone\n}\n\nexport default function Feedback(props: FeedbackProps) {\n const {children, tone = `caution`} = props\n\n return (\n <Card padding={3} radius={2} shadow={1} tone={tone}>\n <Text size={1}>{children}</Text>\n </Card>\n )\n}\n","export const clientConfig = {apiVersion: `2021-05-19`}\n","/* eslint-disable react/jsx-no-bind */\nimport React, {useState, useEffect} from 'react'\nimport {\n useClient,\n Preview,\n useSchema,\n useWorkspaces,\n WorkspaceSummary,\n SanityDocument,\n} from 'sanity'\n// @ts-ignore\nimport mapLimit from 'async/mapLimit'\n// @ts-ignore\nimport asyncify from 'async/asyncify'\nimport {extractWithPath} from '@sanity/mutator'\nimport {dset} from 'dset'\nimport {\n Card,\n Container,\n Text,\n Box,\n Button,\n Label,\n Stack,\n Select,\n Flex,\n Checkbox,\n CardTone,\n useTheme,\n Spinner,\n} from '@sanity/ui'\nimport {ArrowRightIcon, SearchIcon, LaunchIcon} from '@sanity/icons'\nimport {SanityAssetDocument} from '@sanity/client'\nimport {isAssetId, isSanityFileAsset} from '@sanity/asset-utils'\n\nimport {stickyStyles, createInitialMessage} from '../helpers'\nimport {getDocumentsInArray} from '../helpers/getDocumentsInArray'\nimport SelectButtons from './SelectButtons'\nimport StatusBadge, {MessageTypes} from './StatusBadge'\nimport Feedback from './Feedback'\nimport {clientConfig} from '../helpers/clientConfig'\nimport {PluginConfig} from '../types'\n\nexport type DuplicatorProps = {\n docs: SanityDocument[]\n // TODO: Find out if this is even used?\n // draftIds: string[]\n token: string\n pluginConfig: PluginConfig\n onDuplicated?: () => Promise<void>\n}\n\nexport type PayloadItem = {\n doc: SanityDocument\n include: boolean\n status?: keyof MessageTypes\n hasDraft?: boolean\n}\n\ntype WorkspaceOption = WorkspaceSummary & {\n disabled: boolean\n}\n\ntype Message = {\n text: string\n tone: CardTone\n}\n\nexport default function Duplicator(props: DuplicatorProps) {\n const {docs, token, pluginConfig, onDuplicated} = props\n const isDarkMode = useTheme().sanity.color.dark\n\n // Prepare origin (this Studio) client\n const originClient = useClient(clientConfig)\n\n const schema = useSchema()\n\n // Create list of dataset options\n // and set initial value of dropdown\n const workspaces = useWorkspaces()\n const workspacesOptions: WorkspaceOption[] = workspaces.map((workspace) => ({\n ...workspace,\n disabled: workspace.dataset === originClient.config().dataset,\n }))\n\n const [destination, setDestination] = useState<WorkspaceOption | null>(\n workspaces.length ? workspacesOptions.find((space) => !space.disabled) ?? null : null\n )\n const [message, setMessage] = useState<Message | null>(null)\n const [payload, setPayload] = useState<PayloadItem[]>([])\n\n const [hasReferences, setHasReferences] = useState(false)\n const [isDuplicating, setIsDuplicating] = useState(false)\n const [isGathering, setIsGathering] = useState(false)\n const [progress, setProgress] = useState<number[]>([0, 0])\n\n // Check for References and update message\n useEffect(() => {\n const expr = `.._ref`\n const initialRefs = []\n const initialPayload: PayloadItem[] = []\n\n docs.forEach((doc) => {\n const refs = extractWithPath(expr, doc).map((ref) => ref.value)\n initialRefs.push(...refs)\n initialPayload.push({include: true, doc})\n })\n\n updatePayloadStatuses(initialPayload)\n\n const docCount = docs.length\n const refsCount = initialRefs.length\n\n if (initialRefs.length) {\n setHasReferences(true)\n\n setMessage({\n tone: `caution`,\n text: createInitialMessage(docCount, refsCount),\n })\n }\n }, [docs])\n\n // Re-check payload on destination when value changes\n // (On initial render + select change)\n useEffect(() => {\n updatePayloadStatuses()\n }, [destination])\n\n // Check if payload documents exist at destination\n async function updatePayloadStatuses(newPayload: PayloadItem[] = []) {\n const payloadActual = newPayload.length ? newPayload : payload\n\n if (!payloadActual.length || !destination?.name) {\n return\n }\n\n const payloadIds = payloadActual.map(({doc}) => doc._id)\n const destinationClient = originClient.withConfig({\n ...clientConfig,\n dataset: destination.dataset,\n projectId: destination.projectId,\n })\n const destinationData: SanityDocument[] = await destinationClient.fetch(\n `*[_id in $payloadIds]{ _id, _updatedAt }`,\n {payloadIds}\n )\n\n const updatedPayload = payloadActual.map((item) => {\n const existingDoc = destinationData.find((doc) => doc._id === item.doc._id)\n\n if (existingDoc?._updatedAt && item?.doc?._updatedAt) {\n if (existingDoc._updatedAt === item.doc._updatedAt) {\n // Exact same document exists at destination\n // We don't compare by _rev because that is updated in a transaction\n item.status = `EXISTS`\n } else if (existingDoc._updatedAt && item.doc._updatedAt) {\n item.status =\n new Date(existingDoc._updatedAt) > new Date(item.doc._updatedAt)\n ? // Document at destination is newer\n `OVERWRITE`\n : // Document at destination is older\n `UPDATE`\n }\n } else {\n item.status = 'CREATE'\n }\n\n return item\n })\n\n setPayload(updatedPayload)\n }\n\n function handleCheckbox(_id: string) {\n const updatedPayload = payload.map((item) => {\n if (item.doc._id === _id) {\n item.include = !item.include\n }\n\n return item\n })\n\n setPayload(updatedPayload)\n }\n\n // Find and recursively follow references beginning with this document\n async function handleReferences() {\n setIsGathering(true)\n const docIds = docs.map((doc) => doc._id)\n\n const payloadDocs = await getDocumentsInArray({\n fetchIds: docIds,\n client: originClient,\n pluginConfig,\n })\n const draftDocs = await getDocumentsInArray({\n fetchIds: docIds.map((id) => `drafts.${id}`),\n client: originClient,\n projection: `{_id}`,\n pluginConfig,\n })\n const draftDocsIds = new Set(draftDocs.map(({_id}) => _id))\n\n // Shape it up\n const payloadShaped = payloadDocs.map((doc) => ({\n doc,\n // Include this in the transaction?\n include: true,\n // Does it exist at the destination?\n status: undefined,\n // Does it have any drafts?\n hasDraft: draftDocsIds.has(`drafts.${doc._id}`),\n }))\n\n setPayload(payloadShaped)\n updatePayloadStatuses(payloadShaped)\n setIsGathering(false)\n }\n\n // Duplicate payload to destination dataset\n async function handleDuplicate() {\n if (!destination) {\n return\n }\n\n setIsDuplicating(true)\n\n const assetsCount = payload.filter(({doc, include}) => include && isAssetId(doc._id)).length\n let currentProgress = 0\n setProgress([currentProgress, assetsCount])\n\n setMessage({text: 'Duplicating...', tone: `transparent`})\n\n const destinationClient = originClient.withConfig({\n ...clientConfig,\n dataset: destination.dataset,\n projectId: destination.projectId,\n })\n\n const transactionDocs: SanityDocument[] = []\n const svgMaps: {old: string; new: string}[] = []\n\n // Upload assets and then add to transaction\n async function fetchDoc(doc: SanityAssetDocument) {\n if (isAssetId(doc._id)) {\n // Download and upload asset\n // Get the *original* image with this dlRaw param to create the same deterministic _id\n const typeIsFile = isSanityFileAsset(doc)\n const downloadUrl = typeIsFile ? doc.url : `${doc.url}?dlRaw=true`\n const downloadConfig = typeIsFile ? {} : {headers: {Authorization: `Bearer ${token}`}}\n\n await fetch(downloadUrl, downloadConfig).then(async (res) => {\n const assetData = await res.blob()\n\n const options = {filename: doc.originalFilename}\n const assetDoc = await destinationClient.assets.upload(\n typeIsFile ? `file` : `image`,\n assetData,\n options\n )\n\n // SVG _id's need remapping before transaction\n if (doc?.extension === 'svg') {\n svgMaps.push({old: doc._id, new: assetDoc._id})\n }\n\n // This adds the newly created asset document to the transaction but ...\n // it doesn't have some of the original asset's metadata like `altText` or `title`\n transactionDocs.push(assetDoc)\n\n // So the original `doc` is added to the transaction as well below\n // However, we don't want to retain `url` or `path` keys\n // because these strings contain the origin's dataset name\n doc.url = assetDoc.url\n doc.path = assetDoc.path\n })\n\n currentProgress += 1\n setMessage({\n text: `Duplicating ${currentProgress}/${assetsCount} ${\n assetsCount === 1 ? `Assets` : `Assets`\n }`,\n tone: 'default',\n })\n\n setProgress([currentProgress, assetsCount])\n }\n\n return transactionDocs.push(doc)\n }\n\n // Promises are limited to three at once\n const result = new Promise((resolve, reject) => {\n const payloadIncludedDocs = payload.filter((item) => item.include).map((item) => item.doc)\n\n mapLimit(payloadIncludedDocs, 3, asyncify(fetchDoc), (err: Error) => {\n if (err) {\n setIsDuplicating(false)\n setMessage({tone: 'critical', text: `Duplication Failed`})\n console.error(err)\n reject(new Error('Duplication Failed'))\n }\n\n // @ts-ignore\n resolve()\n })\n })\n\n await result\n\n // Remap SVG references to new _id's\n const transactionDocsMapped = transactionDocs.map((doc) => {\n const expr = `.._ref`\n const references = extractWithPath(expr, doc)\n\n if (!references.length) {\n return doc\n }\n\n // For every found _ref, search for an SVG asset _id and update\n references.forEach((ref) => {\n const newRefValue = svgMaps.find((asset) => asset.old === ref.value)?.new\n\n if (newRefValue) {\n const refPath = ref.path.join('.')\n\n dset(doc, refPath, newRefValue)\n }\n })\n\n return doc\n })\n\n // Create transaction\n const transaction = destinationClient.transaction()\n\n transactionDocsMapped.forEach((doc) => {\n transaction.createOrReplace(doc)\n })\n\n await transaction\n .commit()\n .then((res) => {\n setMessage({tone: 'positive', text: 'Duplication complete!'})\n\n updatePayloadStatuses()\n })\n .catch((err) => {\n setMessage({tone: 'critical', text: err.details.description})\n })\n\n setIsDuplicating(false)\n setProgress([0, 0])\n if (onDuplicated) {\n try {\n await onDuplicated()\n } catch (error) {\n setMessage({tone: 'critical', text: `Error in onDuplicated hook: ${error}`})\n }\n }\n }\n\n function handleChange(e: React.ChangeEvent<HTMLSelectElement>) {\n if (!workspacesOptions.length) {\n return\n }\n\n const targeted = workspacesOptions.find((space) => space.name === e.currentTarget.value)\n\n if (targeted) {\n setDestination(targeted)\n }\n }\n\n const payloadCount = payload.length\n const firstSvgIndex = payload.findIndex(({doc}) => doc.extension === 'svg')\n const selectedDocumentsCount = payload.filter(\n (item) => item.include && !isAssetId(item.doc._id)\n ).length\n const selectedAssetsCount = payload.filter(\n (item) => item.include && isAssetId(item.doc._id)\n ).length\n const selectedTotal = selectedDocumentsCount + selectedAssetsCount\n const destinationTitle = destination?.title ?? destination?.name\n const hasMultipleProjectIds =\n new Set(workspacesOptions.map((space) => space?.projectId).filter(Boolean)).size > 1\n\n const headingText = [selectedTotal, `/`, payloadCount, `Documents and Assets selected`].join(` `)\n\n const buttonText = React.useMemo(() => {\n const text = [`Duplicate`]\n\n if (selectedDocumentsCount > 1) {\n text.push(\n String(selectedDocumentsCount),\n selectedDocumentsCount === 1 ? `Document` : `Documents`\n )\n }\n\n if (selectedAssetsCount > 1) {\n text.push(`and`, String(selectedAssetsCount), selectedAssetsCount === 1 ? `Asset` : `Assets`)\n }\n\n if (originClient.config().projectId !== destination?.projectId) {\n text.push(`between Projects`)\n }\n\n text.push(`to`, String(destinationTitle))\n\n return text.join(` `)\n }, [\n selectedDocumentsCount,\n selectedAssetsCount,\n originClient,\n destination?.projectId,\n destinationTitle,\n ])\n\n if (workspacesOptions.length < 2) {\n return (\n <Feedback tone=\"critical\">\n <code>sanity.config.ts</code> must contain at least two Workspaces to use this plugin.\n </Feedback>\n )\n }\n\n return (\n <Container width={1}>\n <Card border>\n <Stack>\n <Card padding={4} style={stickyStyles(isDarkMode)}>\n <Stack space={4}>\n <Flex gap={3}>\n <Stack style={{flex: 1}} space={3}>\n <Label>Duplicate from</Label>\n <Select readOnly value={workspacesOptions.find((space) => space.disabled)?.name}>\n {workspacesOptions\n .filter((space) => space.disabled)\n .map((space) => (\n <option key={space.name} value={space.name} disabled={space.disabled}>\n {space.title ?? space.name}\n {hasMultipleProjectIds ? ` (${space.projectId})` : ``}\n </option>\n ))}\n </Select>\n </Stack>\n <Box padding={4} paddingTop={5} paddingBottom={0}>\n <Text size={3}>\n <ArrowRightIcon />\n </Text>\n </Box>\n <Stack style={{flex: 1}} space={3}>\n <Label>To Destination</Label>\n <Select onChange={handleChange}>\n {workspacesOptions.map((space) => (\n <option key={space.name} value={space.name} disabled={space.disabled}>\n {space.title ?? space.name}\n {hasMultipleProjectIds ? ` (${space.projectId})` : ``}\n {space.disabled ? ` (Current)` : ``}\n </option>\n ))}\n </Select>\n </Stack>\n </Flex>\n\n {isDuplicating && (\n <Card border radius={2}>\n <Card\n style={{\n width: '100%',\n transform: `scaleX(${progress[0] / progress[1]})`,\n transformOrigin: 'left',\n transition: 'transform .2s ease',\n boxSizing: 'border-box',\n }}\n padding={1}\n tone=\"positive\"\n />\n </Card>\n )}\n {payload.length > 0 && (\n <>\n <Label>{headingText}</Label>\n <SelectButtons payload={payload} setPayload={setPayload} />\n </>\n )}\n </Stack>\n </Card>\n <Card borderTop padding={4}>\n <Stack space={3}>\n {message && (\n <Card padding={3} radius={2} shadow={1} tone={message.tone}>\n <Text size={1}>{message.text}</Text>\n </Card>\n )}\n {payload.length > 0 ? (\n <Stack>\n {payload.map(({doc, include, status, hasDraft}, index) => {\n const schemaType = schema.get(doc._type)\n\n return (\n <React.Fragment key={doc._id}>\n <Flex align=\"center\">\n <Checkbox checked={include} onChange={() => handleCheckbox(doc._id)} />\n <Box flex={1} paddingX={3}>\n {schemaType ? (\n <Preview value={doc} schemaType={schemaType} />\n ) : (\n <Card tone=\"caution\">Invalid schema type</Card>\n )}\n </Box>\n <Flex align=\"center\" gap={2}>\n {hasDraft ? <StatusBadge status=\"UNPUBLISHED\" isAsset={false} /> : null}\n <StatusBadge status={status} isAsset={isAssetId(doc._id)} />\n </Flex>\n </Flex>\n {doc?.extension === 'svg' && index === firstSvgIndex && (\n <Card padding={3} radius={2} shadow={1} tone=\"caution\">\n <Text size={1}>\n Due to how SVGs are sanitized after first uploaded, duplicated SVG\n assets may have new <code>_id</code>'s at the destination. The newly\n generated <code>_id</code> will be the same in each duplication, but\n it will never be the same <code>_id</code> as the first time this\n Asset was uploaded. References to the asset will be updated to use the\n new <code>_id</code>.\n </Text>\n </Card>\n )}\n </React.Fragment>\n )\n })}\n </Stack>\n ) : (\n <Flex padding={4} align=\"center\" justify=\"center\">\n <Spinner />\n </Flex>\n )}\n <Stack space={2}>\n {hasReferences && (\n <Button\n fontSize={2}\n padding={4}\n tone=\"positive\"\n mode=\"ghost\"\n icon={SearchIcon}\n onClick={handleReferences}\n text=\"Gather References\"\n disabled={isDuplicating || !selectedTotal || isGathering}\n />\n )}\n <Button\n fontSize={2}\n padding={4}\n tone=\"positive\"\n icon={LaunchIcon}\n onClick={handleDuplicate}\n text={buttonText}\n disabled={isDuplicating || !selectedTotal || isGathering}\n />\n </Stack>\n </Stack>\n </Card>\n </Stack>\n </Card>\n </Container>\n )\n}\n","import {useEffect, useState} from 'react'\nimport {Button, Stack, Box, Label, Text, Card, Flex, Grid, Container, TextInput} from '@sanity/ui'\nimport {useSchema, useClient, SanityDocument} from 'sanity'\n\nimport Duplicator from './Duplicator'\nimport {clientConfig} from '../helpers/clientConfig'\nimport {PluginConfig} from '../types'\n\ntype DuplicatorQueryProps = {\n token: string\n pluginConfig: PluginConfig\n}\n\ntype InitialData = {\n docs: SanityDocument[]\n // draftIds: string[]\n}\n\nexport default function DuplicatorQuery(props: DuplicatorQueryProps) {\n const {token, pluginConfig} = props\n\n const {queries: preDefinedQueries} = pluginConfig\n const originClient = useClient(clientConfig)\n\n const schema = useSchema()\n const schemaTypes = schema.getTypeNames()\n\n const [value, setValue] = useState(``)\n const [fetched, setFetched] = useState(false)\n const [initialData, setInitialData] = useState<InitialData>({\n docs: [],\n // draftIds: []\n })\n function handleSubmit(e?: any) {\n if (e) e.preventDefault()\n\n originClient\n .fetch(value)\n .then((res: SanityDocument[]) => {\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\n // ? res.filter((doc) => doc._id.startsWith(`drafts.`)).map((doc) => doc._id)\n // : []\n\n setInitialData({\n docs: registeredAndPublishedDocs,\n // draftIds: initialDraftIds\n })\n setFetched(true)\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n <Card padding={[0, 0, 0, 5]}>\n <Container>\n <Grid columns={[1, 1, 1, 2]} gap={[1, 1, 1, 4]}>\n <Box padding={[2, 2, 2, 0]}>\n <Card padding={4} radius={3} border>\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 {preDefinedQueries && preDefinedQueries?.length > 0 && (\n <Card marginTop={2} padding={4} radius={3} border>\n <Box>\n <Stack space={4}>\n <Box>\n <Label>Predefined Queries</Label>\n </Box>\n <Stack space={2}>\n {preDefinedQueries.map((query) => (\n <Button\n key={query.label.replace(/\\s+/g, '-')}\n padding={2}\n paddingX={4}\n tone=\"primary\"\n onClick={() => setValue(`*[${query.query}]`)}\n text={query.label}\n />\n ))}\n </Stack>\n </Stack>\n </Box>\n </Card>\n )}\n </Box>\n {fetched && initialData.docs.length < 1 && (\n <Container width={1}>\n <Card padding={5}>\n {value ? `No documents match this query` : `Start with a valid GROQ query`}\n </Card>\n </Container>\n )}\n {initialData.docs?.length > 0 && (\n <Duplicator\n docs={initialData.docs}\n // draftIds={initialData.draftIds}\n token={token}\n pluginConfig={pluginConfig}\n />\n )}\n </Grid>\n </Container>\n </Card>\n )\n}\n","import {useState, useEffect} from 'react'\nimport {Grid, Card, Container, Button} from '@sanity/ui'\nimport {SanityDocument, useClient} from 'sanity'\n\nimport type {DuplicatorProps} from './Duplicator'\nimport Duplicator from './Duplicator'\nimport {clientConfig} from '../helpers/clientConfig'\n\nexport default function DuplicatorWrapper(props: DuplicatorProps) {\n const {docs, token, pluginConfig, onDuplicated} = props\n const [inbound, setInbound] = useState<SanityDocument[]>([])\n const {follow = []} = pluginConfig\n\n // Make the first mode the default if there's only one\n const [mode, setMode] = useState<'inbound' | 'outbound'>(\n follow.length === 1 ? follow[0] : `outbound`\n )\n const client = useClient(clientConfig)\n\n // \"Inbound\" will start with all documents that reference the first one\n // And then you can gather \"Outbound\" references thereafter\n useEffect(() => {\n ;(async () => {\n if (follow.includes(`inbound`)) {\n const inboundReferences = await client.fetch(`*[references($id)]`, {id: docs[0]._id})\n setInbound([...props.docs, ...inboundReferences])\n }\n })()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return (\n <Container>\n {follow.length > 1 && (follow.includes(`inbound`) || follow.includes(`outbound`)) ? (\n <Card paddingX={4} paddingBottom={4} marginBottom={4} borderBottom>\n <Grid columns={2} gap={4}>\n {follow.includes(`outbound`) ? (\n <Button\n mode=\"ghost\"\n tone=\"primary\"\n selected={mode === 'outbound'}\n onClick={() => setMode('outbound')}\n text=\"Outbound\"\n />\n ) : null}\n {follow.includes(`inbound`) ? (\n <Button\n mode=\"ghost\"\n tone=\"primary\"\n selected={mode === 'inbound'}\n onClick={() => setMode('inbound')}\n disabled={inbound.length === 0}\n text={inbound.length > 0 ? `Inbound (${inbound.length})` : 'No inbound references'}\n />\n ) : null}\n </Grid>\n </Card>\n ) : null}\n <Duplicator\n docs={mode === 'outbound' ? docs : inbound}\n token={token}\n // draftIds={[]}\n pluginConfig={pluginConfig}\n onDuplicated={onDuplicated}\n />\n </Container>\n )\n}\n","import {PluginConfig} from '../types'\n\nexport const SECRET_NAMESPACE = `CrossDatasetDuplicator`\n\nexport const DEFAULT_CONFIG: PluginConfig = {\n tool: true,\n types: [],\n filter: '',\n follow: ['outbound'],\n queries: [],\n}\n","import {useCallback} from 'react'\nimport {useClient} from 'sanity'\nimport {Button, Flex} from '@sanity/ui'\n\nimport {clientConfig} from '../helpers/clientConfig'\nimport {SECRET_NAMESPACE} from '../helpers/constants'\n\nexport default function ResetSecret() {\n const client = useClient(clientConfig)\n\n const handleClick = useCallback(() => {\n client.delete({query: `*[_id == \"secrets.${SECRET_NAMESPACE}\"]`})\n }, [client])\n\n return (\n <Flex align=\"center\" justify=\"flex-end\" paddingX={[2, 2, 2, 5]} paddingY={5}>\n <Button\n text=\"Reset Secret\"\n onClick={handleClick}\n mode=\"ghost\"\n tone=\"critical\"\n fontSize={1}\n padding={2}\n />\n </Flex>\n )\n}\n","import {useContext} from 'react'\nimport {createContext} from 'react'\nimport {LayoutProps} from 'sanity'\n\nimport {DEFAULT_CONFIG} from '../helpers/constants'\nimport {PluginConfig} from '../types'\n\nconst CrossDatasetDuplicatorContext = createContext(DEFAULT_CONFIG)\n\ntype ConfigProviderProps = LayoutProps & {pluginConfig: PluginConfig}\n\n/**\n * Plugin config context hook from the Cross Dataset Duplicator plugin\n * @public\n */\nexport function useCrossDatasetDuplicatorConfig() {\n const pluginConfig = useContext(CrossDatasetDuplicatorContext)\n\n return pluginConfig\n}\n\nexport function ConfigProvider(props: ConfigProviderProps) {\n const {pluginConfig, ...rest} = props\n\n return (\n <CrossDatasetDuplicatorContext.Provider value={pluginConfig}>\n {props.renderDefault(rest)}\n </CrossDatasetDuplicatorContext.Provider>\n )\n}\n","import {useEffect, useState} from 'react'\nimport {useSecrets, SettingsView} from '@sanity/studio-secrets'\nimport {Flex, Box, Spinner} from '@sanity/ui'\nimport {SanityDocument} from 'sanity'\n\nimport DuplicatorQuery from './DuplicatorQuery'\nimport DuplicatorWrapper from './DuplicatorWrapper'\nimport ResetSecret from './ResetSecret'\nimport Feedback from './Feedback'\nimport {SECRET_NAMESPACE} from '../helpers/constants'\nimport {useCrossDatasetDuplicatorConfig} from '../context/ConfigProvider'\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 Secrets = {\n bearerToken?: string\n}\n\ntype CrossDatasetDuplicatorProps = {\n mode: 'tool' | 'action'\n docs: SanityDocument[]\n onDuplicated?: () => Promise<void>\n}\n\nexport default function CrossDatasetDuplicator(props: CrossDatasetDuplicatorProps) {\n const {mode = `tool`, docs = [], onDuplicated} = props ?? {}\n const pluginConfig = useCrossDatasetDuplicatorConfig()\n\n const {loading, secrets} = useSecrets<Secrets>(SECRET_NAMESPACE)\n const [showSecretsPrompt, setShowSecretsPrompt] = useState(false)\n\n useEffect(() => {\n if (secrets) {\n setShowSecretsPrompt(!secrets?.bearerToken)\n }\n }, [secrets])\n\n if (loading) {\n return (\n <Flex justify=\"center\" align=\"center\">\n <Box padding={5}>\n <Spinner />\n </Box>\n </Flex>\n )\n }\n\n if ((!loading && showSecretsPrompt) || !secrets?.bearerToken) {\n return (\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 )\n }\n\n if (mode === 'tool' && pluginConfig) {\n return (\n <>\n <DuplicatorQuery token={secrets?.bearerToken} pluginConfig={pluginConfig} />\n <ResetSecret />\n </>\n )\n }\n\n if (!docs?.length) {\n return <Feedback>No docs passed into Duplicator Tool</Feedback>\n }\n\n if (!pluginConfig) {\n return <Feedback>No plugin config</Feedback>\n }\n\n return (\n <DuplicatorWrapper\n docs={docs}\n token={secrets?.bearerToken}\n pluginConfig={pluginConfig}\n onDuplicated={onDuplicated}\n />\n )\n}\n","import {CrossDatasetDuplicatorActionProps} from '../types'\n\nimport CrossDatasetDuplicator from './CrossDatasetDuplicator'\n\n/**\n * Component to perform a migration from the Cross Dataset Duplicator plugin\n * @public\n */\nexport function CrossDatasetDuplicatorAction(props: CrossDatasetDuplicatorActionProps) {\n const {docs = [], onDuplicated} = props\n\n return <CrossDatasetDuplicator mode=\"action\" docs={docs} onDuplicated={onDuplicated} />\n}\n","import {useState} from 'react'\nimport {LaunchIcon} from '@sanity/icons'\nimport {DocumentActionProps} from 'sanity'\n\nimport {CrossDatasetDuplicatorAction} from '../components/CrossDatasetDuplicatorAction'\n\n/**\n * Document action from the Cross Dataset Duplicator plugin\n * @public\n */\nexport const DuplicateToAction = (props: DocumentActionProps) => {\n const {draft, published, onComplete} = props\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 &&\n published && {\n type: 'modal',\n title: 'Cross Dataset Duplicator',\n content: <CrossDatasetDuplicatorAction docs={[published]} />,\n onClose: () => {\n onComplete()\n setDialogOpen(false)\n },\n },\n onHandle: () => setDialogOpen(true),\n icon: LaunchIcon,\n }\n}\n\nDuplicateToAction.action = 'duplicateTo'\n","import {SanityDocument, Tool} from 'sanity'\n\nimport CrossDatasetDuplicator from './CrossDatasetDuplicator'\n\nexport type MultiToolConfig = {\n docs: SanityDocument[]\n}\n\ntype CrossDatasetDuplicatorProps = {\n tool: Tool<MultiToolConfig>\n}\n\nexport function CrossDatasetDuplicatorTool(props: CrossDatasetDuplicatorProps) {\n const {docs = []} = props.tool.options ?? {}\n\n return <CrossDatasetDuplicator mode=\"tool\" docs={docs} />\n}\n","import type {Tool} from 'sanity'\nimport {LaunchIcon} from '@sanity/icons'\n\nimport {CrossDatasetDuplicatorTool, MultiToolConfig} from '../components/CrossDatasetDuplicatorTool'\n\nexport const crossDatasetDuplicatorTool = (): Tool<MultiToolConfig> => ({\n title: 'Duplicator',\n name: 'duplicator',\n icon: LaunchIcon,\n component: CrossDatasetDuplicatorTool,\n options: {\n docs: [],\n },\n})\n","import {definePlugin} from 'sanity'\n\nimport {DuplicateToAction} from './actions/DuplicateToAction'\nimport {ConfigProvider} from './context/ConfigProvider'\nimport {DEFAULT_CONFIG} from './helpers/constants'\nimport {crossDatasetDuplicatorTool} from './tool'\nimport {PluginConfig} from './types'\n\n/**\n * Plugin: Cross Dataset Duplicator\n * @public\n */\nexport const crossDatasetDuplicator = definePlugin<PluginConfig | void>((config = {}) => {\n const pluginConfig = {...DEFAULT_CONFIG, ...config}\n const {types} = pluginConfig\n\n return {\n name: '@sanity/cross-dataset-duplicator',\n tools: (prev) => (pluginConfig.tool ? [...prev, crossDatasetDuplicatorTool()] : prev),\n studio: {\n components: {\n layout: (props) => ConfigProvider({...props, pluginConfig}),\n },\n },\n document: {\n actions: (prev, {schemaType}) => {\n return types && types.includes(schemaType) ? [...prev, DuplicateToAction] : prev\n },\n },\n }\n})\n"],"names":["createInitialMessage","docCount","arguments","length","undefined","refsCount","message","concat","join","stickyStyles","isDarkMode","position","top","zIndex","backgroundColor","getDocumentsInArray","options","fetchIds","client","pluginConfig","currentIds","projection","collection","filter","Boolean","query","data","fetch","localCurrentIds","Set","newDataIds","map","dataDoc","_id","id","size","has","push","add","Promise","all","doc","expr","references","extractWithPath","ref","value","newReferenceIds","referenceDocs","Array","from","uniqueCollection","reduce","acc","cur","some","buttons","SelectButtons","props","payload","setPayload","disabledActions","setDisabledActions","useState","useEffect","every","item","include","handleSelectButton","action","newPayload","status","isAssetId","jsx","Card","padding","radius","shadow","children","Flex","gap","wrap","actionIndex","Button","fontSize","mode","text","disabled","includes","toUpperCase","onClick","borderLeft","documentTones","EXISTS","OVERWRITE","UPDATE","CREATE","UNPUBLISHED","assetTones","documentMessages","assetMessages","assetStatus","StatusBadge","isAsset","badgeTone","Badge","muted","badgeText","badgeStatus","Tooltip","content","Box","style","maxWidth","Text","fallbackPlacements","placement","portal","jsxs","tone","marginLeft","display","as","InfoOutlineIcon","Feedback","clientConfig","apiVersion","Duplicator","_a","_b","_c","docs","token","onDuplicated","useTheme","sanity","color","dark","originClient","useClient","schema","useSchema","workspaces","useWorkspaces","workspacesOptions","workspace","dataset","config","destination","setDestination","find","space","setMessage","hasReferences","setHasReferences","isDuplicating","setIsDuplicating","isGathering","setIsGathering","progress","setProgress","initialRefs","initialPayload","forEach","refs","updatePayloadStatuses","payloadActual","name","payloadIds","_ref","destinationClient","withConfig","projectId","destinationData","updatedPayload","existingDoc","_updatedAt","Date","handleCheckbox","handleReferences","docIds","payloadDocs","draftDocs","draftDocsIds","_ref2","payloadShaped","hasDraft","handleDuplicate","assetsCount","_ref3","currentProgress","transactionDocs","svgMaps","fetchDoc","typeIsFile","isSanityFileAsset","downloadUrl","url","downloadConfig","headers","Authorization","then","res","assetData","blob","filename","originalFilename","assetDoc","assets","upload","extension","old","new","path","result","resolve","reject","payloadIncludedDocs","mapLimit","asyncify","err","console","error","Error","transactionDocsMapped","newRefValue","asset","refPath","dset","transaction","createOrReplace","commit","catch","details","description","handleChange","e","targeted","currentTarget","payloadCount","firstSvgIndex","findIndex","_ref4","selectedDocumentsCount","selectedAssetsCount","selectedTotal","destinationTitle","title","hasMultipleProjectIds","headingText","buttonText","React","useMemo","String","Container","width","border","Stack","flex","Label","Select","readOnly","paddingTop","paddingBottom","ArrowRightIcon","onChange","transform","transformOrigin","transition","boxSizing","Fragment","borderTop","_ref5","index","schemaType","get","_type","align","Checkbox","checked","paddingX","Preview","justify","Spinner","icon","SearchIcon","LaunchIcon","DuplicatorQuery","queries","preDefinedQueries","schemaTypes","getTypeNames","setValue","fetched","setFetched","initialData","setInitialData","handleSubmit","preventDefault","registeredAndPublishedDocs","startsWith","Grid","columns","onSubmit","paddingRight","TextInput","fontFamily","event","placeholder","marginTop","label","replace","DuplicatorWrapper","inbound","setInbound","follow","setMode","inboundReferences","marginBottom","borderBottom","selected","SECRET_NAMESPACE","DEFAULT_CONFIG","tool","types","ResetSecret","handleClick","useCallback","delete","paddingY","CrossDatasetDuplicatorContext","createContext","useCrossDatasetDuplicatorConfig","useContext","ConfigProvider","rest","Provider","renderDefault","secretConfigKeys","key","CrossDatasetDuplicator","loading","secrets","useSecrets","showSecretsPrompt","setShowSecretsPrompt","bearerToken","SettingsView","namespace","keys","onClose","CrossDatasetDuplicatorAction","DuplicateToAction","draft","published","onComplete","dialogOpen","setDialogOpen","dialog","type","onHandle","CrossDatasetDuplicatorTool","crossDatasetDuplicatorTool","component","crossDatasetDuplicator","definePlugin","tools","prev","studio","components","layout","document","actions","_ref6"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -37,10 +37,7 @@ const stickyStyles = function () {
|
|
|
37
37
|
backgroundColor: isDarkMode ? "rgba(10,10,10,0.95)" : "rgba(255,255,255,0.95)"
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
|
-
const isAsset = doc => doc._type === "sanity.imageAsset" || doc._type === "sanity.fileAsset";
|
|
41
|
-
const returnOnlyAssets = references => references.filter(item => isAsset(item));
|
|
42
40
|
async function getDocumentsInArray(options) {
|
|
43
|
-
let recurrsionDepth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
44
41
|
const {
|
|
45
42
|
fetchIds,
|
|
46
43
|
client,
|
|
@@ -48,9 +45,6 @@ async function getDocumentsInArray(options) {
|
|
|
48
45
|
currentIds,
|
|
49
46
|
projection
|
|
50
47
|
} = options;
|
|
51
|
-
const {
|
|
52
|
-
reference
|
|
53
|
-
} = pluginConfig;
|
|
54
48
|
const collection = [];
|
|
55
49
|
const filter = ["_id in $fetchIds", pluginConfig.filter].filter(Boolean).join(" && ");
|
|
56
50
|
const query = "*[".concat(filter, "]").concat(projection != null ? projection : "");
|
|
@@ -71,35 +65,14 @@ async function getDocumentsInArray(options) {
|
|
|
71
65
|
if (references.length) {
|
|
72
66
|
const newReferenceIds = new Set(references.filter(ref => !localCurrentIds.has(ref)));
|
|
73
67
|
if (newReferenceIds.size) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if (
|
|
83
|
-
// // If we are at the max depth and reference?.assetsOnly is falsy
|
|
84
|
-
(referenceDocs == null ? void 0 : referenceDocs.length) && recurrsionDepth === reference.maxDepth + 1 && !(reference == null ? void 0 : reference.assetsOnly)) {
|
|
85
|
-
collection.push(...referenceDocs);
|
|
86
|
-
} else if (
|
|
87
|
-
// // If we are at the max depth and reference?.assetsOnly is truthy
|
|
88
|
-
(referenceDocs == null ? void 0 : referenceDocs.length) && recurrsionDepth === reference.maxDepth + 1 && (reference == null ? void 0 : reference.assetsOnly)) {
|
|
89
|
-
collection.push(...returnOnlyAssets(referenceDocs));
|
|
90
|
-
} else if ((referenceDocs == null ? void 0 : referenceDocs.length) && recurrsionDepth < reference.maxDepth + 1) {
|
|
91
|
-
collection.push(...referenceDocs);
|
|
92
|
-
}
|
|
93
|
-
} else {
|
|
94
|
-
const referenceDocs = await getDocumentsInArray({
|
|
95
|
-
fetchIds: Array.from(newReferenceIds),
|
|
96
|
-
currentIds: localCurrentIds,
|
|
97
|
-
client,
|
|
98
|
-
pluginConfig
|
|
99
|
-
});
|
|
100
|
-
if (referenceDocs == null ? void 0 : referenceDocs.length) {
|
|
101
|
-
collection.push(...referenceDocs);
|
|
102
|
-
}
|
|
68
|
+
const referenceDocs = await getDocumentsInArray({
|
|
69
|
+
fetchIds: Array.from(newReferenceIds),
|
|
70
|
+
currentIds: localCurrentIds,
|
|
71
|
+
client,
|
|
72
|
+
pluginConfig
|
|
73
|
+
});
|
|
74
|
+
if (referenceDocs == null ? void 0 : referenceDocs.length) {
|
|
75
|
+
collection.push(...referenceDocs);
|
|
103
76
|
}
|
|
104
77
|
}
|
|
105
78
|
}
|
|
@@ -252,13 +225,18 @@ function StatusBadge(props) {
|
|
|
252
225
|
fallbackPlacements: ["right", "left"],
|
|
253
226
|
placement: "top",
|
|
254
227
|
portal: true,
|
|
255
|
-
children: /* @__PURE__ */jsxRuntime.
|
|
228
|
+
children: /* @__PURE__ */jsxRuntime.jsxs(ui.Badge, {
|
|
256
229
|
muted: true,
|
|
257
|
-
padding:
|
|
230
|
+
padding: 3,
|
|
258
231
|
fontSize: 1,
|
|
259
232
|
tone: badgeTone,
|
|
260
233
|
mode: "outline",
|
|
261
|
-
children: badgeStatus
|
|
234
|
+
children: [badgeStatus, /* @__PURE__ */jsxRuntime.jsx(ui.Box, {
|
|
235
|
+
marginLeft: 2,
|
|
236
|
+
display: "inline-block",
|
|
237
|
+
as: "span",
|
|
238
|
+
children: /* @__PURE__ */jsxRuntime.jsx(icons.InfoOutlineIcon, {})
|
|
239
|
+
})]
|
|
262
240
|
})
|
|
263
241
|
});
|
|
264
242
|
}
|
|
@@ -316,7 +294,7 @@ function Duplicator(props) {
|
|
|
316
294
|
doc
|
|
317
295
|
});
|
|
318
296
|
});
|
|
319
|
-
|
|
297
|
+
updatePayloadStatuses(initialPayload);
|
|
320
298
|
const docCount = docs.length;
|
|
321
299
|
const refsCount = initialRefs.length;
|
|
322
300
|
if (initialRefs.length) {
|
|
@@ -758,15 +736,19 @@ function Duplicator(props) {
|
|
|
758
736
|
});
|
|
759
737
|
}
|
|
760
738
|
function DuplicatorQuery(props) {
|
|
761
|
-
var _a
|
|
739
|
+
var _a;
|
|
762
740
|
const {
|
|
763
741
|
token,
|
|
764
742
|
pluginConfig
|
|
765
743
|
} = props;
|
|
744
|
+
const {
|
|
745
|
+
queries: preDefinedQueries
|
|
746
|
+
} = pluginConfig;
|
|
766
747
|
const originClient = sanity.useClient(clientConfig);
|
|
767
748
|
const schema = sanity.useSchema();
|
|
768
749
|
const schemaTypes = schema.getTypeNames();
|
|
769
750
|
const [value, setValue] = React.useState("");
|
|
751
|
+
const [fetched, setFetched] = React.useState(false);
|
|
770
752
|
const [initialData, setInitialData] = React.useState({
|
|
771
753
|
docs: []
|
|
772
754
|
// draftIds: []
|
|
@@ -780,6 +762,8 @@ function DuplicatorQuery(props) {
|
|
|
780
762
|
docs: registeredAndPublishedDocs
|
|
781
763
|
// draftIds: initialDraftIds
|
|
782
764
|
});
|
|
765
|
+
|
|
766
|
+
setFetched(true);
|
|
783
767
|
}).catch(err => console.error(err));
|
|
784
768
|
}
|
|
785
769
|
React.useEffect(() => {
|
|
@@ -794,9 +778,9 @@ function DuplicatorQuery(props) {
|
|
|
794
778
|
children: /* @__PURE__ */jsxRuntime.jsxs(ui.Grid, {
|
|
795
779
|
columns: [1, 1, 1, 2],
|
|
796
780
|
gap: [1, 1, 1, 4],
|
|
797
|
-
children: [/* @__PURE__ */jsxRuntime.
|
|
781
|
+
children: [/* @__PURE__ */jsxRuntime.jsxs(ui.Box, {
|
|
798
782
|
padding: [2, 2, 2, 0],
|
|
799
|
-
children: /* @__PURE__ */jsxRuntime.jsx(ui.Card, {
|
|
783
|
+
children: [/* @__PURE__ */jsxRuntime.jsx(ui.Card, {
|
|
800
784
|
padding: 4,
|
|
801
785
|
radius: 3,
|
|
802
786
|
border: true,
|
|
@@ -837,14 +821,38 @@ function DuplicatorQuery(props) {
|
|
|
837
821
|
})
|
|
838
822
|
})]
|
|
839
823
|
})
|
|
840
|
-
})
|
|
841
|
-
|
|
824
|
+
}), preDefinedQueries && (preDefinedQueries == null ? void 0 : preDefinedQueries.length) > 0 && /* @__PURE__ */jsxRuntime.jsx(ui.Card, {
|
|
825
|
+
marginTop: 2,
|
|
826
|
+
padding: 4,
|
|
827
|
+
radius: 3,
|
|
828
|
+
border: true,
|
|
829
|
+
children: /* @__PURE__ */jsxRuntime.jsx(ui.Box, {
|
|
830
|
+
children: /* @__PURE__ */jsxRuntime.jsxs(ui.Stack, {
|
|
831
|
+
space: 4,
|
|
832
|
+
children: [/* @__PURE__ */jsxRuntime.jsx(ui.Box, {
|
|
833
|
+
children: /* @__PURE__ */jsxRuntime.jsx(ui.Label, {
|
|
834
|
+
children: "Predefined Queries"
|
|
835
|
+
})
|
|
836
|
+
}), /* @__PURE__ */jsxRuntime.jsx(ui.Stack, {
|
|
837
|
+
space: 2,
|
|
838
|
+
children: preDefinedQueries.map(query => /* @__PURE__ */jsxRuntime.jsx(ui.Button, {
|
|
839
|
+
padding: 2,
|
|
840
|
+
paddingX: 4,
|
|
841
|
+
tone: "primary",
|
|
842
|
+
onClick: () => setValue("*[".concat(query.query, "]")),
|
|
843
|
+
text: query.label
|
|
844
|
+
}, query.label.replace(/\s+/g, "-")))
|
|
845
|
+
})]
|
|
846
|
+
})
|
|
847
|
+
})
|
|
848
|
+
})]
|
|
849
|
+
}), fetched && initialData.docs.length < 1 && /* @__PURE__ */jsxRuntime.jsx(ui.Container, {
|
|
842
850
|
width: 1,
|
|
843
851
|
children: /* @__PURE__ */jsxRuntime.jsx(ui.Card, {
|
|
844
852
|
padding: 5,
|
|
845
|
-
children: value ? "No
|
|
853
|
+
children: value ? "No documents match this query" : "Start with a valid GROQ query"
|
|
846
854
|
})
|
|
847
|
-
}), ((
|
|
855
|
+
}), ((_a = initialData.docs) == null ? void 0 : _a.length) > 0 && /* @__PURE__ */jsxRuntime.jsx(Duplicator, {
|
|
848
856
|
docs: initialData.docs,
|
|
849
857
|
token,
|
|
850
858
|
pluginConfig
|
|
@@ -913,7 +921,8 @@ const DEFAULT_CONFIG = {
|
|
|
913
921
|
tool: true,
|
|
914
922
|
types: [],
|
|
915
923
|
filter: "",
|
|
916
|
-
follow: ["outbound"]
|
|
924
|
+
follow: ["outbound"],
|
|
925
|
+
queries: []
|
|
917
926
|
};
|
|
918
927
|
function ResetSecret() {
|
|
919
928
|
const client = sanity.useClient(clientConfig);
|