sanity-plugin-aprimo
2.0.202.0.21
dist/index.js.map~
dist/index.js.mapModified+1−1
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["{\n value,\n layout = 'block',\n}: ComponentProps","layout = 'block'","{\n maxWidth: layout === 'block' ? '80px' : '100%',\n height: 'auto',\n }","layout === 'block' ? '80px' : '100%'","<Box>\n <img\n alt={`preview for ${value?.title}`}\n src={url}\n style={{\n maxWidth: layout === 'block' ? '80px' : '100%',\n height: 'auto',\n }}\n />\n </Box>","`preview for ${value?.title}`","{value, tenantName}: AprimoFilePreviewProps","() => {\n window.open(damUrl, '_blank')\n }","useCallback(() => {\n window.open(damUrl, '_blank')\n }, [damUrl])","<Label as=\"p\">Aprimo File Asset</Label>","<Stack gap={3}>\n <Label as=\"p\">Aprimo File Asset</Label>\n <Text as=\"p\">{assetName}</Text>\n </Stack>","<Stack>\n {/* ADD launch icon */}\n <Button\n tone=\"primary\"\n as={'a'}\n href={damUrl}\n target={`_blank`}\n onClick={onClick}\n text={'View'}\n />\n </Stack>","<Box paddingY={1}>\n <Card paddingY={3} paddingX={3} radius={1} shadow={1}>\n <Flex align=\"center\" justify=\"space-between\" gap={1}>\n <Stack gap={3}>\n <Label as=\"p\">Aprimo File Asset</Label>\n <Text as=\"p\">{assetName}</Text>\n </Stack>\n <Stack>\n {/* ADD launch icon */}\n <Button\n tone=\"primary\"\n as={'a'}\n href={damUrl}\n target={`_blank`}\n onClick={onClick}\n text={'View'}\n />\n </Stack>\n </Flex>\n </Card>\n </Box>","{tenantName}","() => {\n onChange(PatchEvent.from(unset()))\n }","() => {\n const setAsset = (asset: Record<string, any>) => {\n onChange(PatchEvent.from(asset ? set(asset) : unset()))\n }\n\n const handleMessageEvent = async (event: MessageEvent) => {\n // Ensure only messages from the Aprimo Content Selector are handled\n if (tenantName && event.origin === `https://${tenantName || ''}.dam.aprimo.com`) {\n //if cancel, get out of fetching state\n if (event.data.result === 'cancel') {\n setIsLoading(false)\n } else if (event.data.selection && event.data.selection[0] && isLoading) {\n if (_key) {\n setAsset({...event.data.selection[0], _key})\n } else {\n setAsset(event.data.selection[0])\n }\n setIsLoading(false)\n }\n }\n }\n\n window.addEventListener('message', handleMessageEvent)\n //cleanup\n return () => window.removeEventListener('message', handleMessageEvent)\n }","[tenantName, isLoading, _key, onChange]","() => {\n const selectType = schemaType.name === 'aprimo.cdnasset' ? 'singlerendition' : 'singlefile'\n setIsLoading(true)\n openSelector(tenantName, selectType)\n }","name","useMemo(() => {\n if (value && schemaType.name === 'aprimo.cdnasset' && isAprimoCDNAsset(value)) {\n return <AprimoCDNPreview value={value} layout=\"default\" />\n } else if (value && schemaType.name === 'aprimo.asset' && isAprimoAsset(value)) {\n return <AprimoFilePreview value={value} tenantName={tenantName} />\n }\n return null\n }, [tenantName, schemaType, value])","<AprimoCDNPreview value={value} layout=\"default\" />","<AprimoFilePreview value={value} tenantName={tenantName} />","<Box padding={3}>\n <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n <Text>\n The tenant name has not been set in the configuration for the Aprimo plugin. Please add\n a tenant name.\n </Text>\n </Card>\n </Box>","<Box>{preview}</Box>","{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}","<Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n Select…\n </Button>","<Button\n disabled={readOnly || !value}\n color=\"danger\"\n mode=\"ghost\"\n title=\"Remove asset\"\n onClick={removeValue}\n >\n Remove\n </Button>","readOnly || !value","<Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n Select…\n </Button>\n <Button\n disabled={readOnly || !value}\n color=\"danger\"\n mode=\"ghost\"\n title=\"Remove asset\"\n onClick={removeValue}\n >\n Remove\n </Button>\n </Grid>","<Box>\n <Box>{preview}</Box>\n <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n Select…\n </Button>\n <Button\n disabled={readOnly || !value}\n color=\"danger\"\n mode=\"ghost\"\n title=\"Remove asset\"\n onClick={removeValue}\n >\n Remove\n </Button>\n </Grid>\n </Box>","{\n diff,\n schemaType,\n}: {\n diff: any\n schemaType: SchemaType\n}","<DiffFromTo diff={diff} schemaType={schemaType} previewComponent={AprimoCDNPreview} />"],"sources":["../src/utils.ts","../src/components/AprimoCDNPreview.tsx","../src/components/AprimoFilePreview.tsx","../src/components/AprimoWidget.tsx","../src/schema/AdditionalFile.ts","../src/schema/AprimoAsset.ts","../src/components/AprimoDiff.tsx","../src/schema/AprimoCDNAsset.tsx","../src/plugin.tsx"],"sourcesContent":["export const openSelector = (tenantName: string, selectType: string): void => {\n let assetType = 'asset rendition'\n switch (selectType) {\n case 'singlefile':\n assetType = 'asset file'\n break\n case 'multiple':\n assetType = 'asset renditions'\n break\n default:\n assetType = 'asset rendition'\n }\n\n const selectorOptions = {\n title: `Select ${assetType}`,\n description: `Select the ${assetType} you'd like to bring into this document`,\n accept: `Use ${assetType}`,\n select: selectType,\n }\n\n const params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,\n width=1000,height=600,left=100,top=100`\n\n const encodedOptions = btoa(JSON.stringify(selectorOptions))\n window.open(\n `https://${tenantName}.dam.aprimo.com/dam/selectcontent#options=${encodedOptions}`,\n 'selector',\n params,\n )\n}\n","import {Box} from '@sanity/ui'\n\nimport type {AprimoCDNAsset} from '../types'\n\ntype ComponentProps = {\n layout?: 'default' | 'block'\n value: AprimoCDNAsset\n title?: string\n}\n\nexport function AprimoCDNPreview({\n value,\n layout = 'block',\n}: ComponentProps): React.JSX.Element | null {\n const url = value?.rendition?.publicuri\n if (url) {\n return (\n <Box>\n <img\n alt={`preview for ${value?.title}`}\n src={url}\n style={{\n maxWidth: layout === 'block' ? '80px' : '100%',\n height: 'auto',\n }}\n />\n </Box>\n )\n }\n return null\n}\n","import {Card, Box, Flex, Stack, Text, Label, Button} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport type {AprimoAsset} from '../types'\n\ninterface AprimoFilePreviewProps {\n value: AprimoAsset\n tenantName: string\n}\n\nexport function AprimoFilePreview({value, tenantName}: AprimoFilePreviewProps): React.JSX.Element {\n const {title, additionalFile, id} = value\n const assetName = additionalFile?.fileName || title || 'No name'\n const damUrl = `https://${tenantName}.dam.aprimo.com/Assets/Records/${id}`\n const onClick = useCallback(() => {\n window.open(damUrl, '_blank')\n }, [damUrl])\n return (\n <Box paddingY={1}>\n <Card paddingY={3} paddingX={3} radius={1} shadow={1}>\n <Flex align=\"center\" justify=\"space-between\" gap={1}>\n <Stack gap={3}>\n <Label as=\"p\">Aprimo File Asset</Label>\n <Text as=\"p\">{assetName}</Text>\n </Stack>\n <Stack>\n {/* ADD launch icon */}\n <Button\n tone=\"primary\"\n as={'a'}\n href={damUrl}\n target={`_blank`}\n onClick={onClick}\n text={'View'}\n />\n </Stack>\n </Flex>\n </Card>\n </Box>\n )\n}\n","import {Box, Button, Card, Grid, Text} from '@sanity/ui'\nimport {useEffect, useState, useMemo} from 'react'\nimport {PatchEvent, type ObjectInputProps, set, unset} from 'sanity'\n\nimport type {AprimoCDNAsset, AprimoAsset, AprimoConfig} from '../types'\nimport {openSelector} from '../utils'\nimport {AprimoCDNPreview} from './AprimoCDNPreview'\nimport {AprimoFilePreview} from './AprimoFilePreview'\n\nconst isAprimoCDNAsset = (value: AprimoCDNAsset | AprimoAsset): value is AprimoCDNAsset => {\n return value && value.hasOwnProperty('rendition')\n}\n\nconst isAprimoAsset = (value: AprimoCDNAsset | AprimoAsset): value is AprimoAsset => {\n //the ID is all we need to construct a link back to Aprimo\n return value && value.hasOwnProperty('id')\n}\n\nexport interface AprimoWidgetProps extends ObjectInputProps<AprimoCDNAsset | AprimoAsset> {\n pluginConfig: AprimoConfig\n}\n\nexport function AprimoWidget(props: AprimoWidgetProps): React.JSX.Element {\n const {\n value,\n readOnly,\n onChange,\n schemaType,\n pluginConfig: {tenantName},\n } = props\n\n const _key = value?._key\n const removeValue = () => {\n onChange(PatchEvent.from(unset()))\n }\n\n //this keeps track of which component is requesting an asset\n const [isLoading, setIsLoading] = useState(false)\n\n useEffect(() => {\n const setAsset = (asset: Record<string, any>) => {\n onChange(PatchEvent.from(asset ? set(asset) : unset()))\n }\n\n const handleMessageEvent = async (event: MessageEvent) => {\n // Ensure only messages from the Aprimo Content Selector are handled\n if (tenantName && event.origin === `https://${tenantName || ''}.dam.aprimo.com`) {\n //if cancel, get out of fetching state\n if (event.data.result === 'cancel') {\n setIsLoading(false)\n } else if (event.data.selection && event.data.selection[0] && isLoading) {\n if (_key) {\n setAsset({...event.data.selection[0], _key})\n } else {\n setAsset(event.data.selection[0])\n }\n setIsLoading(false)\n }\n }\n }\n\n window.addEventListener('message', handleMessageEvent)\n //cleanup\n return () => window.removeEventListener('message', handleMessageEvent)\n }, [tenantName, isLoading, _key, onChange])\n\n const action = () => {\n const selectType = schemaType.name === 'aprimo.cdnasset' ? 'singlerendition' : 'singlefile'\n setIsLoading(true)\n openSelector(tenantName, selectType)\n }\n\n const preview = useMemo(() => {\n if (value && schemaType.name === 'aprimo.cdnasset' && isAprimoCDNAsset(value)) {\n return <AprimoCDNPreview value={value} layout=\"default\" />\n } else if (value && schemaType.name === 'aprimo.asset' && isAprimoAsset(value)) {\n return <AprimoFilePreview value={value} tenantName={tenantName} />\n }\n return null\n }, [tenantName, schemaType, value])\n\n if (!tenantName) {\n return (\n <Box padding={3}>\n <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n <Text>\n The tenant name has not been set in the configuration for the Aprimo plugin. Please add\n a tenant name.\n </Text>\n </Card>\n </Box>\n )\n }\n\n return (\n <Box>\n <Box>{preview}</Box>\n <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n Select…\n </Button>\n <Button\n disabled={readOnly || !value}\n color=\"danger\"\n mode=\"ghost\"\n title=\"Remove asset\"\n onClick={removeValue}\n >\n Remove\n </Button>\n </Grid>\n </Box>\n )\n}\n","import {defineType} from 'sanity'\n\nexport const AprimoAdditionalFileSchema = defineType({\n name: 'aprimo.additionalFile',\n title: 'Aprimo Additional File',\n type: 'object',\n fields: [\n {\n name: 'additionalFileId',\n title: 'Additional File ID',\n type: 'string',\n },\n {\n name: 'fileName',\n title: 'File Name',\n type: 'string',\n },\n {\n name: 'label',\n title: 'Label',\n type: 'string',\n },\n {\n name: 'type',\n title: 'Type',\n type: 'string',\n },\n ],\n})\n","import {AprimoWidget} from '../components/AprimoWidget'\n\nexport const AprimoAssetSchema = {\n type: 'object',\n name: 'aprimo.asset',\n title: 'Aprimo Asset',\n fields: [\n {\n type: 'string',\n name: 'id',\n },\n {\n type: 'string',\n name: 'title',\n },\n {\n type: 'aprimo.additionalFile',\n name: 'additionalFile',\n },\n ],\n components: {\n input: AprimoWidget,\n },\n}\n","import {DiffFromTo, type SchemaType} from 'sanity'\n\nimport {AprimoCDNPreview} from './AprimoCDNPreview'\n\n//@TODO: HUGE\nexport function AprimoDiff({\n diff,\n schemaType,\n}: {\n diff: any\n schemaType: SchemaType\n}): React.JSX.Element {\n return <DiffFromTo diff={diff} schemaType={schemaType} previewComponent={AprimoCDNPreview} />\n}\n","import {AprimoDiff} from '../components/AprimoDiff'\nimport {AprimoWidget} from '../components/AprimoWidget'\n\nexport const AprimoCDNAssetSchema = {\n type: 'object',\n name: 'aprimo.cdnasset',\n title: 'Aprimo CDN Asset',\n fields: [\n {\n type: 'string',\n name: 'id',\n },\n {\n type: 'string',\n name: 'title',\n },\n {\n type: 'object',\n name: 'rendition',\n fields: [\n {\n type: 'string',\n name: 'publicuri',\n },\n ],\n },\n ],\n components: {\n input: AprimoWidget,\n diff: AprimoDiff,\n },\n preview: {\n select: {\n url: 'rendition.publicuri',\n title: 'title',\n },\n prepare({url, title}: {url: string; title: string}) {\n return {\n title,\n media: <img src={url} alt=\"\" style={{height: '100%', width: '100%'}} />,\n }\n },\n },\n}\n","import {definePlugin, isObjectInputProps, type SchemaType} from 'sanity'\n\nimport {AprimoWidget} from './components/AprimoWidget'\nimport {AprimoAdditionalFileSchema} from './schema/AdditionalFile'\nimport {AprimoAssetSchema} from './schema/AprimoAsset'\nimport {AprimoCDNAssetSchema} from './schema/AprimoCDNAsset'\nimport type {AprimoCDNAsset, AprimoConfig} from './types'\n\nexport const aprimoPlugin = definePlugin((config: Partial<AprimoConfig>) => {\n const reqConfig: AprimoConfig = {\n tenantName: '',\n ...config,\n }\n\n return {\n name: 'aprimo-assets',\n schema: {\n types: [AprimoCDNAssetSchema, AprimoAdditionalFileSchema, AprimoAssetSchema],\n },\n form: {\n components: {\n input: (props) => {\n if (\n isObjectInputProps(props) &&\n (isType(props.schemaType, AprimoCDNAssetSchema.name) ||\n isType(props.schemaType, AprimoAssetSchema.name))\n ) {\n return (\n // @ts-expect-error - TODO: fix this\n <AprimoWidget\n {...props}\n // oxlint-disable-next-line no-unsafe-type-assertion\n value={props.value as AprimoCDNAsset}\n pluginConfig={reqConfig}\n />\n )\n }\n //add array check here to render the widget in array\n return props.renderDefault(props)\n },\n },\n },\n }\n})\n\nfunction isType(schemaType: SchemaType, name: string): boolean {\n if (schemaType.name === name) {\n return true\n }\n if (schemaType.type) {\n return isType(schemaType.type, name)\n }\n return false\n}\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["{\n value,\n layout = 'block',\n}: ComponentProps","layout = 'block'","{\n maxWidth: layout === 'block' ? '80px' : '100%',\n height: 'auto',\n }","layout === 'block' ? '80px' : '100%'","<Box>\n <img\n alt={`preview for ${value?.title}`}\n src={url}\n style={{\n maxWidth: layout === 'block' ? '80px' : '100%',\n height: 'auto',\n }}\n />\n </Box>","`preview for ${value?.title}`","_c","{value, tenantName}: AprimoFilePreviewProps","() => {\n window.open(damUrl, '_blank')\n }","useCallback(() => {\n window.open(damUrl, '_blank')\n }, [damUrl])","<Label as=\"p\">Aprimo File Asset</Label>","<Stack gap={3}>\n <Label as=\"p\">Aprimo File Asset</Label>\n <Text as=\"p\">{assetName}</Text>\n </Stack>","<Stack>\n {/* ADD launch icon */}\n <Button\n tone=\"primary\"\n as={'a'}\n href={damUrl}\n target={`_blank`}\n onClick={onClick}\n text={'View'}\n />\n </Stack>","<Box paddingY={1}>\n <Card paddingY={3} paddingX={3} radius={1} shadow={1}>\n <Flex align=\"center\" justify=\"space-between\" gap={1}>\n <Stack gap={3}>\n <Label as=\"p\">Aprimo File Asset</Label>\n <Text as=\"p\">{assetName}</Text>\n </Stack>\n <Stack>\n {/* ADD launch icon */}\n <Button\n tone=\"primary\"\n as={'a'}\n href={damUrl}\n target={`_blank`}\n onClick={onClick}\n text={'View'}\n />\n </Stack>\n </Flex>\n </Card>\n </Box>","_c","{tenantName}","() => {\n onChange(PatchEvent.from(unset()))\n }","() => {\n const setAsset = (asset: Record<string, any>) => {\n onChange(PatchEvent.from(asset ? set(asset) : unset()))\n }\n\n const handleMessageEvent = async (event: MessageEvent) => {\n // Ensure only messages from the Aprimo Content Selector are handled\n if (tenantName && event.origin === `https://${tenantName || ''}.dam.aprimo.com`) {\n //if cancel, get out of fetching state\n if (event.data.result === 'cancel') {\n setIsLoading(false)\n } else if (event.data.selection && event.data.selection[0] && isLoading) {\n if (_key) {\n setAsset({...event.data.selection[0], _key})\n } else {\n setAsset(event.data.selection[0])\n }\n setIsLoading(false)\n }\n }\n }\n\n window.addEventListener('message', handleMessageEvent)\n //cleanup\n return () => window.removeEventListener('message', handleMessageEvent)\n }","[tenantName, isLoading, _key, onChange]","() => {\n const selectType = schemaType.name === 'aprimo.cdnasset' ? 'singlerendition' : 'singlefile'\n setIsLoading(true)\n openSelector(tenantName, selectType)\n }","name","useMemo(() => {\n if (value && schemaType.name === 'aprimo.cdnasset' && isAprimoCDNAsset(value)) {\n return <AprimoCDNPreview value={value} layout=\"default\" />\n } else if (value && schemaType.name === 'aprimo.asset' && isAprimoAsset(value)) {\n return <AprimoFilePreview value={value} tenantName={tenantName} />\n }\n return null\n }, [tenantName, schemaType, value])","<AprimoCDNPreview value={value} layout=\"default\" />","<AprimoFilePreview value={value} tenantName={tenantName} />","<Box padding={3}>\n <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n <Text>\n The tenant name has not been set in the configuration for the Aprimo plugin. Please add\n a tenant name.\n </Text>\n </Card>\n </Box>","<Box>{preview}</Box>","{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}","<Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n Select…\n </Button>","<Button\n disabled={readOnly || !value}\n color=\"danger\"\n mode=\"ghost\"\n title=\"Remove asset\"\n onClick={removeValue}\n >\n Remove\n </Button>","readOnly || !value","<Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n Select…\n </Button>\n <Button\n disabled={readOnly || !value}\n color=\"danger\"\n mode=\"ghost\"\n title=\"Remove asset\"\n onClick={removeValue}\n >\n Remove\n </Button>\n </Grid>","<Box>\n <Box>{preview}</Box>\n <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n Select…\n </Button>\n <Button\n disabled={readOnly || !value}\n color=\"danger\"\n mode=\"ghost\"\n title=\"Remove asset\"\n onClick={removeValue}\n >\n Remove\n </Button>\n </Grid>\n </Box>","_c","{\n diff,\n schemaType,\n}: {\n diff: any\n schemaType: SchemaType\n}","<DiffFromTo diff={diff} schemaType={schemaType} previewComponent={AprimoCDNPreview} />","_c"],"sources":["../src/utils.ts","../src/components/AprimoCDNPreview.tsx","../src/components/AprimoFilePreview.tsx","../src/components/AprimoWidget.tsx","../src/schema/AdditionalFile.ts","../src/schema/AprimoAsset.ts","../src/components/AprimoDiff.tsx","../src/schema/AprimoCDNAsset.tsx","../src/plugin.tsx"],"sourcesContent":["export const openSelector = (tenantName: string, selectType: string): void => {\n let assetType = 'asset rendition'\n switch (selectType) {\n case 'singlefile':\n assetType = 'asset file'\n break\n case 'multiple':\n assetType = 'asset renditions'\n break\n default:\n assetType = 'asset rendition'\n }\n\n const selectorOptions = {\n title: `Select ${assetType}`,\n description: `Select the ${assetType} you'd like to bring into this document`,\n accept: `Use ${assetType}`,\n select: selectType,\n }\n\n const params = `scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no,\n width=1000,height=600,left=100,top=100`\n\n const encodedOptions = btoa(JSON.stringify(selectorOptions))\n window.open(\n `https://${tenantName}.dam.aprimo.com/dam/selectcontent#options=${encodedOptions}`,\n 'selector',\n params,\n )\n}\n","import {Box} from '@sanity/ui'\n\nimport type {AprimoCDNAsset} from '../types'\n\ntype ComponentProps = {\n layout?: 'default' | 'block'\n value: AprimoCDNAsset\n title?: string\n}\n\nexport function AprimoCDNPreview({\n value,\n layout = 'block',\n}: ComponentProps): React.JSX.Element | null {\n const url = value?.rendition?.publicuri\n if (url) {\n return (\n <Box>\n <img\n alt={`preview for ${value?.title}`}\n src={url}\n style={{\n maxWidth: layout === 'block' ? '80px' : '100%',\n height: 'auto',\n }}\n />\n </Box>\n )\n }\n return null\n}\n","import {Card, Box, Flex, Stack, Text, Label, Button} from '@sanity/ui'\nimport {useCallback} from 'react'\n\nimport type {AprimoAsset} from '../types'\n\ninterface AprimoFilePreviewProps {\n value: AprimoAsset\n tenantName: string\n}\n\nexport function AprimoFilePreview({value, tenantName}: AprimoFilePreviewProps): React.JSX.Element {\n const {title, additionalFile, id} = value\n const assetName = additionalFile?.fileName || title || 'No name'\n const damUrl = `https://${tenantName}.dam.aprimo.com/Assets/Records/${id}`\n const onClick = useCallback(() => {\n window.open(damUrl, '_blank')\n }, [damUrl])\n return (\n <Box paddingY={1}>\n <Card paddingY={3} paddingX={3} radius={1} shadow={1}>\n <Flex align=\"center\" justify=\"space-between\" gap={1}>\n <Stack gap={3}>\n <Label as=\"p\">Aprimo File Asset</Label>\n <Text as=\"p\">{assetName}</Text>\n </Stack>\n <Stack>\n {/* ADD launch icon */}\n <Button\n tone=\"primary\"\n as={'a'}\n href={damUrl}\n target={`_blank`}\n onClick={onClick}\n text={'View'}\n />\n </Stack>\n </Flex>\n </Card>\n </Box>\n )\n}\n","import {Box, Button, Card, Grid, Text} from '@sanity/ui'\nimport {useEffect, useState, useMemo} from 'react'\nimport {PatchEvent, type ObjectInputProps, set, unset} from 'sanity'\n\nimport type {AprimoCDNAsset, AprimoAsset, AprimoConfig} from '../types'\nimport {openSelector} from '../utils'\nimport {AprimoCDNPreview} from './AprimoCDNPreview'\nimport {AprimoFilePreview} from './AprimoFilePreview'\n\nconst isAprimoCDNAsset = (value: AprimoCDNAsset | AprimoAsset): value is AprimoCDNAsset => {\n return value && value.hasOwnProperty('rendition')\n}\n\nconst isAprimoAsset = (value: AprimoCDNAsset | AprimoAsset): value is AprimoAsset => {\n //the ID is all we need to construct a link back to Aprimo\n return value && value.hasOwnProperty('id')\n}\n\nexport interface AprimoWidgetProps extends ObjectInputProps<AprimoCDNAsset | AprimoAsset> {\n pluginConfig: AprimoConfig\n}\n\nexport function AprimoWidget(props: AprimoWidgetProps): React.JSX.Element {\n const {\n value,\n readOnly,\n onChange,\n schemaType,\n pluginConfig: {tenantName},\n } = props\n\n const _key = value?._key\n const removeValue = () => {\n onChange(PatchEvent.from(unset()))\n }\n\n //this keeps track of which component is requesting an asset\n const [isLoading, setIsLoading] = useState(false)\n\n useEffect(() => {\n const setAsset = (asset: Record<string, any>) => {\n onChange(PatchEvent.from(asset ? set(asset) : unset()))\n }\n\n const handleMessageEvent = async (event: MessageEvent) => {\n // Ensure only messages from the Aprimo Content Selector are handled\n if (tenantName && event.origin === `https://${tenantName || ''}.dam.aprimo.com`) {\n //if cancel, get out of fetching state\n if (event.data.result === 'cancel') {\n setIsLoading(false)\n } else if (event.data.selection && event.data.selection[0] && isLoading) {\n if (_key) {\n setAsset({...event.data.selection[0], _key})\n } else {\n setAsset(event.data.selection[0])\n }\n setIsLoading(false)\n }\n }\n }\n\n window.addEventListener('message', handleMessageEvent)\n //cleanup\n return () => window.removeEventListener('message', handleMessageEvent)\n }, [tenantName, isLoading, _key, onChange])\n\n const action = () => {\n const selectType = schemaType.name === 'aprimo.cdnasset' ? 'singlerendition' : 'singlefile'\n setIsLoading(true)\n openSelector(tenantName, selectType)\n }\n\n const preview = useMemo(() => {\n if (value && schemaType.name === 'aprimo.cdnasset' && isAprimoCDNAsset(value)) {\n return <AprimoCDNPreview value={value} layout=\"default\" />\n } else if (value && schemaType.name === 'aprimo.asset' && isAprimoAsset(value)) {\n return <AprimoFilePreview value={value} tenantName={tenantName} />\n }\n return null\n }, [tenantName, schemaType, value])\n\n if (!tenantName) {\n return (\n <Box padding={3}>\n <Card padding={4} radius={2} shadow={1} tone=\"caution\">\n <Text>\n The tenant name has not been set in the configuration for the Aprimo plugin. Please add\n a tenant name.\n </Text>\n </Card>\n </Box>\n )\n }\n\n return (\n <Box>\n <Box>{preview}</Box>\n <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n <Button disabled={readOnly} mode=\"ghost\" title=\"Select an asset\" onClick={action}>\n Select…\n </Button>\n <Button\n disabled={readOnly || !value}\n color=\"danger\"\n mode=\"ghost\"\n title=\"Remove asset\"\n onClick={removeValue}\n >\n Remove\n </Button>\n </Grid>\n </Box>\n )\n}\n","import {defineType} from 'sanity'\n\nexport const AprimoAdditionalFileSchema = defineType({\n name: 'aprimo.additionalFile',\n title: 'Aprimo Additional File',\n type: 'object',\n fields: [\n {\n name: 'additionalFileId',\n title: 'Additional File ID',\n type: 'string',\n },\n {\n name: 'fileName',\n title: 'File Name',\n type: 'string',\n },\n {\n name: 'label',\n title: 'Label',\n type: 'string',\n },\n {\n name: 'type',\n title: 'Type',\n type: 'string',\n },\n ],\n})\n","import {AprimoWidget} from '../components/AprimoWidget'\n\nexport const AprimoAssetSchema = {\n type: 'object',\n name: 'aprimo.asset',\n title: 'Aprimo Asset',\n fields: [\n {\n type: 'string',\n name: 'id',\n },\n {\n type: 'string',\n name: 'title',\n },\n {\n type: 'aprimo.additionalFile',\n name: 'additionalFile',\n },\n ],\n components: {\n input: AprimoWidget,\n },\n}\n","import {DiffFromTo, type SchemaType} from 'sanity'\n\nimport {AprimoCDNPreview} from './AprimoCDNPreview'\n\n//@TODO: HUGE\nexport function AprimoDiff({\n diff,\n schemaType,\n}: {\n diff: any\n schemaType: SchemaType\n}): React.JSX.Element {\n return <DiffFromTo diff={diff} schemaType={schemaType} previewComponent={AprimoCDNPreview} />\n}\n","import {AprimoDiff} from '../components/AprimoDiff'\nimport {AprimoWidget} from '../components/AprimoWidget'\n\nexport const AprimoCDNAssetSchema = {\n type: 'object',\n name: 'aprimo.cdnasset',\n title: 'Aprimo CDN Asset',\n fields: [\n {\n type: 'string',\n name: 'id',\n },\n {\n type: 'string',\n name: 'title',\n },\n {\n type: 'object',\n name: 'rendition',\n fields: [\n {\n type: 'string',\n name: 'publicuri',\n },\n ],\n },\n ],\n components: {\n input: AprimoWidget,\n diff: AprimoDiff,\n },\n preview: {\n select: {\n url: 'rendition.publicuri',\n title: 'title',\n },\n prepare({url, title}: {url: string; title: string}) {\n return {\n title,\n media: <img src={url} alt=\"\" style={{height: '100%', width: '100%'}} />,\n }\n },\n },\n}\n","import {definePlugin, isObjectInputProps, type SchemaType} from 'sanity'\n\nimport {AprimoWidget} from './components/AprimoWidget'\nimport {AprimoAdditionalFileSchema} from './schema/AdditionalFile'\nimport {AprimoAssetSchema} from './schema/AprimoAsset'\nimport {AprimoCDNAssetSchema} from './schema/AprimoCDNAsset'\nimport type {AprimoCDNAsset, AprimoConfig} from './types'\n\nexport const aprimoPlugin = definePlugin((config: Partial<AprimoConfig>) => {\n const reqConfig: AprimoConfig = {\n tenantName: '',\n ...config,\n }\n\n return {\n name: 'aprimo-assets',\n schema: {\n types: [AprimoCDNAssetSchema, AprimoAdditionalFileSchema, AprimoAssetSchema],\n },\n form: {\n components: {\n input: (props) => {\n if (\n isObjectInputProps(props) &&\n (isType(props.schemaType, AprimoCDNAssetSchema.name) ||\n isType(props.schemaType, AprimoAssetSchema.name))\n ) {\n return (\n // @ts-expect-error - TODO: fix this\n <AprimoWidget\n {...props}\n // oxlint-disable-next-line no-unsafe-type-assertion\n value={props.value as AprimoCDNAsset}\n pluginConfig={reqConfig}\n />\n )\n }\n //add array check here to render the widget in array\n return props.renderDefault(props)\n },\n },\n },\n }\n})\n\nfunction isType(schemaType: SchemaType, name: string): boolean {\n if (schemaType.name === name) {\n return true\n }\n if (schemaType.type) {\n return isType(schemaType.type, name)\n }\n return false\n}\n"],"mappings":"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"}
\ No newline at end of file