sanity-plugin-shopify-assets 1.2.0 → 1.2.2
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 +0 -2
- package/dist/index.esm.js +150 -81
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +149 -80
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/components/ShopifyAssetPicker.tsx +6 -3
- package/src/datastores/shopify.ts +24 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/File.styled.tsx","../src/components/VideoPlayer.tsx","../src/components/AssetPreview.tsx","../src/datastores/shopify.ts","../src/components/DialogHeader.tsx","../src/utils/helpers.ts","../src/components/File.tsx","../src/components/ShopifyAssetInput.styled.tsx","../src/components/ShopifyAssetPicker.tsx","../src/components/ShopifyIcon.tsx","../src/components/ShopifyAssetInput.tsx","../src/components/AssetDiff.tsx","../src/schema/shopifyAssetSchema.ts","../src/schema/shopifyAssetPreviewSchema.ts","../src/schema/shopifyAssetMetadataSchema.ts","../src/index.ts"],"sourcesContent":["import {Card} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const Root = styled.div`\n overflow: hidden;\n background-origin: content-box;\n background-repeat: no-repeat;\n background-clip: border-box;\n background-size: cover;\n background-color: ${({theme}) => theme.sanity.color.card.enabled.bg2};\n position: relative;\n outline: none !important;\n border: ${({theme}) => `1px solid ${theme.sanity.color.card.enabled.border}`};\n box-sizing: content-box;\n user-drag: none;\n\n &:hover {\n opacity: 0.85;\n }\n\n &:focus,\n &:active {\n border: 1px solid var(--input-border-color-focus);\n box-shadow: inset 0 0 0 3px var(--input-border-color-focus);\n }\n`\n\nexport const InfoLine = styled(Card)`\n ${({theme}) => `\n --infoline-fg: ${theme.sanity.color.card.enabled.fg};\n --infoline-bg: ${theme.sanity.color.card.enabled.bg};\n `};\n user-drag: none;\n position: absolute;\n background-color: var(--infoline-bg);\n top: 0;\n left: 0;\n max-width: 65%;\n overflow-wrap: break-word;\n\n [data-ui='Text'] {\n color: var(--infoline-fg);\n }\n`\n\nexport const DurationLine = styled(Card)`\n ${({theme}) => `\n --durationline-fg: ${theme.sanity.color.card.enabled.bg};\n --durationline-bg: ${theme.sanity.color.card.enabled.fg};\n `};\n user-drag: none;\n position: absolute;\n background-color: var(--durationline-bg);\n top: 0;\n right: 0;\n\n [data-ui='Text'] {\n color: var(--durationline-fg);\n }\n`\n","import React, {type CSSProperties, type MouseEvent, useCallback, useEffect} from 'react'\nimport videojs, {type VideoJsPlayer} from 'video.js'\n\ntype PlayerKind = 'player' | 'diff'\n\ninterface VideoProps {\n src: string\n kind: PlayerKind\n}\n\nconst VideoPlayer = ({src, kind}: VideoProps) => {\n const videoNode = React.useRef<HTMLVideoElement>(null)\n const player = React.useRef<VideoJsPlayer>()\n\n useEffect(() => {\n player.current = videojs(videoNode.current ?? '', {\n sources: [{src}],\n controls: true,\n })\n\n player.current.src({src})\n }, [src])\n\n const stopPropagation = useCallback((event: MouseEvent) => {\n event.stopPropagation()\n }, [])\n\n const className: Record<PlayerKind, string> = {\n player: 'video-js vjs-16-9 vjs-big-play-centered',\n diff: 'video-js vjs-layout-tiny vjs-fluid',\n }\n\n const style: CSSProperties = {position: 'relative'}\n\n return (\n <div>\n <link href=\"https://vjs.zencdn.net/7.8.4/video-js.css\" rel=\"stylesheet\" />\n <div data-vjs-player>\n <video\n onClick={stopPropagation}\n style={kind === 'diff' ? style : {}}\n className={className[kind]}\n ref={videoNode}\n />\n </div>\n </div>\n )\n}\n\nexport default VideoPlayer\n","import React from 'react'\nimport prettyBytes from 'pretty-bytes'\nimport prettyMilliseconds from 'pretty-ms'\nimport {styled} from 'styled-components'\nimport {Box, Flex, Text} from '@sanity/ui'\n\nimport {Asset} from '../types'\nimport {DurationLine, InfoLine} from './File.styled'\nimport VideoPlayer from './VideoPlayer'\n\ninterface ComponentProps {\n value: Asset\n}\n\nexport const StyledBox = styled(Box)`\n background-color: ${({theme}) => theme.sanity.color?.card?.enabled?.bg2};\n border: ${({theme}) => `1px solid ${theme.sanity?.color?.card?.enabled?.border}`};\n display: flex;\n justify-content: center;\n margin-bottom: ${({theme}) => theme.sanity.space[4]};\n position: relative;\n`\n\nconst RenderAsset = ({value, url}: {value: Asset; url: string}) => {\n switch (value.type) {\n case 'video':\n return <VideoPlayer src={url} kind=\"player\" />\n default:\n return (\n <Flex justify=\"center\">\n <img\n alt=\"preview\"\n src={value?.preview?.url}\n style={{\n maxWidth: '100%',\n height: 'auto',\n display: 'block',\n maxHeight: '30vh',\n }}\n />\n </Flex>\n )\n }\n}\n\nconst AssetPreview = ({value}: ComponentProps) => {\n const url = value && value.url\n\n if (!value || !url) {\n return null\n }\n\n const {filename, meta} = value\n const {fileSize, duration} = meta\n\n return (\n <StyledBox marginBottom={2}>\n <RenderAsset value={value} url={url} />\n <InfoLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Select ${filename}`}>\n {filename} {fileSize && `(${prettyBytes(fileSize)})`}\n </Text>\n </InfoLine>\n {duration && (\n <DurationLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Video duration: ${filename}`}>\n {prettyMilliseconds(duration, {colonNotation: true, secondsDecimalDigits: 0})}\n </Text>\n </DurationLine>\n )}\n </StyledBox>\n )\n}\n\nexport default AssetPreview\n","import {BehaviorSubject, Observable, concat, defer} from 'rxjs'\nimport {debounceTime, distinctUntilChanged, map, switchMap, withLatestFrom} from 'rxjs/operators'\n\nimport axios from 'axios'\n\ntype SearchSubject = BehaviorSubject<string>\ntype CursorSubject = BehaviorSubject<any>\n\ninterface fetchProps {\n projectId: string\n dataset: string\n shop: string\n query: SearchSubject\n cursor: CursorSubject\n resultsPerPage: number\n}\n\ninterface searchProps extends Omit<fetchProps, 'query' | 'cursor'> {\n query: string\n cursor: string\n}\ninterface listProps extends Omit<fetchProps, 'query' | 'cursor'> {\n cursor: string\n}\n\nconst fetchSearch = (props: searchProps): Observable<any> => {\n const {projectId, dataset, shop, query, cursor, resultsPerPage} = props\n\n return defer(() => {\n return axios.get(\n `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}&query=${encodeURIComponent(\n query\n )}${cursor && `&cursor=${cursor}`}&limit=${resultsPerPage}`,\n {\n withCredentials: true,\n method: 'GET',\n }\n )\n }).pipe(map((result) => result.data))\n}\n\nconst fetchList = (props: listProps): Observable<any> => {\n const {projectId, dataset, shop, cursor, resultsPerPage} = props\n\n return defer(() =>\n axios.get(\n `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}${\n cursor && `&cursor=${cursor}`\n }&limit=${resultsPerPage}`,\n {\n withCredentials: true,\n method: 'GET',\n }\n )\n ).pipe(map((result) => result.data))\n}\n\nexport const search = (props: fetchProps): Observable<any> => {\n const {projectId, dataset, shop, query, cursor, resultsPerPage} = props\n\n return concat(\n query.pipe(\n withLatestFrom(cursor),\n debounceTime(500),\n distinctUntilChanged(),\n switchMap(([q, c]) => {\n if (q) {\n return fetchSearch({projectId, dataset, shop, query: q, cursor: c, resultsPerPage}).pipe(\n distinctUntilChanged()\n )\n }\n return fetchList({projectId, dataset, shop, cursor: c, resultsPerPage})\n })\n )\n )\n}\n","import React, {useCallback} from 'react'\nimport {Box, Flex, Button} from '@sanity/ui'\nimport {LaunchIcon} from '@sanity/icons'\n\ninterface Props {\n title: string\n shopifyDomain: string\n}\n\nconst DialogHeader = (props: Props) => {\n const {title, shopifyDomain} = props\n\n const handleOpenInNewTab = useCallback(() => {\n window.open(`https://${shopifyDomain}/admin/settings/files`, '_blank')\n }, [shopifyDomain])\n\n return (\n <Flex align=\"center\">\n {title}\n {/*\n HACK: Sanity UI will attempt to focus the first 'focusable' descendant of any dialog.\n Typically this is fine, but since our first focusable element is a button with a tooltip, this\n default behaviour causes the tooltip to appear whenever the dialog is opened, which we don't want!\n\n To get around this, we include a pseudo-hidden input to ensure our tooltip-enabled button remains\n unfocused on initial mount.\n */}\n <input style={{opacity: 0}} tabIndex={-1} type=\"button\" />\n <Box style={{position: 'absolute', right: '-1.5em'}}>\n <Box className=\"button-large\">\n <Button\n fontSize={1}\n icon={LaunchIcon}\n mode=\"bleed\"\n onClick={handleOpenInNewTab}\n text=\"Add New\"\n />\n </Box>\n </Box>\n </Flex>\n )\n}\n\nexport default DialogHeader\n","export const extractName = (name: string): string => name?.split('/')?.pop()?.split('?')[0] ?? ''\n","import React, {useCallback, useRef} from 'react'\nimport {Text} from '@sanity/ui'\nimport prettyBytes from 'pretty-bytes'\nimport prettyMilliseconds from 'pretty-ms'\n\nimport {extractName} from '../utils/helpers'\nimport {Asset, ShopifyFile} from '../types'\nimport {DurationLine, InfoLine, Root} from './File.styled'\n\ntype Props = {\n data: ShopifyFile\n width: number\n height: number\n onClick: (file: Asset) => void\n}\n\nexport default function File(props: Props) {\n const {onClick, data, width, height} = props\n const rootElm = useRef<HTMLDivElement>(null)\n\n const {preview, meta} = data\n const filename = extractName(data.url)\n\n const handleClick = useCallback(() => {\n onClick({...data, filename})\n }, [onClick, data, filename])\n\n return (\n <Root\n ref={rootElm}\n title={`${filename}`}\n tabIndex={0}\n style={{\n width: `${width}px`,\n height: `${height}px`,\n backgroundImage: `url(\"${preview?.url}\")`,\n }}\n onClick={handleClick}\n >\n <InfoLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Select ${filename}`}>\n {filename} {meta.fileSize && `(${prettyBytes(meta.fileSize)})`}\n </Text>\n </InfoLine>\n {meta.duration && (\n <DurationLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Video duration: ${filename}`}>\n {prettyMilliseconds(meta.duration, {colonNotation: true, secondsDecimalDigits: 0})}\n </Text>\n </DurationLine>\n )}\n </Root>\n )\n}\n","import {Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const Search = styled(Stack)`\n position: sticky;\n top: 0;\n z-index: 1;\n`\n\nexport const Scroller = styled.div`\n overflow-y: auto;\n max-height: 80vh;\n`\n","import {BehaviorSubject, Subscription} from 'rxjs'\nimport {ErrorOutlineIcon} from '@sanity/icons'\nimport {Card, Dialog, Flex, Inline, Spinner, Stack, Text, TextInput} from '@sanity/ui'\nimport {PatchEvent, set, useProjectId, ObjectInputProps, useDataset} from 'sanity'\nimport React, {useCallback, useEffect, useMemo, useState} from 'react'\nimport PhotoAlbum from 'react-photo-album'\nimport InfiniteScroll from 'react-infinite-scroll-component'\n\nimport {search} from '../datastores/shopify'\nimport type {Asset, PageInfo, ShopifyAPIResponse, ShopifyFile} from '../types'\nimport DialogHeader from './DialogHeader'\nimport File from './File'\nimport {Search} from './ShopifyAssetInput.styled'\n\nconst RESULTS_PER_PAGE = 42\nconst PHOTO_SPACING = 2\nconst PHOTO_PADDING = 1\n\nexport interface AssetPickerProps extends ObjectInputProps<Asset> {\n shopifyDomain: string\n isOpen: boolean\n onClose: () => void\n}\n\nexport default function ShopifyAssetPicker(props: AssetPickerProps) {\n const {isOpen, onClose, shopifyDomain, onChange, schemaType, value} = props\n const projectId = useProjectId()\n const dataset = useDataset()\n\n const [error, setError] = useState('')\n const [query, setQuery] = useState('')\n const [searchResults, setSearchResults] = useState<any[]>([])\n const [pageInfo, setPageInfo] = useState<PageInfo>()\n const [isLoading, setIsLoading] = useState(true)\n\n const searchSubject$ = useMemo(() => new BehaviorSubject(''), [])\n const cursorSubject$ = useMemo(() => new BehaviorSubject(''), [])\n\n useEffect(() => {\n if (!shopifyDomain) setError('Please configure your Shopify domain in the plugin config')\n }, [shopifyDomain])\n\n useEffect(() => {\n const searchSubscription: Subscription = search({\n projectId,\n dataset,\n shop: shopifyDomain,\n query: searchSubject$,\n cursor: cursorSubject$,\n resultsPerPage: RESULTS_PER_PAGE,\n }).subscribe({\n next: (results: ShopifyAPIResponse) => {\n setSearchResults((prevResults) => [...prevResults, ...results.assets])\n setPageInfo(results.pageInfo)\n setIsLoading(false)\n },\n error: (err) => {\n setError(\n `${\n err.response.data.message || err.message || 'An error occurred'\n } - check plugin configuration`\n )\n },\n })\n\n return () => searchSubscription.unsubscribe()\n }, [searchSubject$, cursorSubject$, shopifyDomain, projectId, dataset])\n\n const handleSearchTermChanged = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newQuery = event.currentTarget.value\n setQuery(newQuery)\n setSearchResults([])\n setPageInfo(undefined)\n setIsLoading(true)\n\n cursorSubject$.next('')\n searchSubject$.next(newQuery)\n },\n [cursorSubject$, searchSubject$]\n )\n\n const handleScollerLoadMore = useCallback(() => {\n setIsLoading(true)\n if (pageInfo) cursorSubject$.next(pageInfo.cursor)\n searchSubject$.next(query)\n }, [cursorSubject$, pageInfo, searchSubject$, query])\n\n const handleSelect = useCallback(\n (file: Asset) => {\n file._key = value?._key\n file._type = schemaType.name\n onChange(PatchEvent.from([set(file)]))\n onClose()\n },\n [onChange, onClose, schemaType.name, value?._key]\n )\n\n const renderFile = useCallback(\n (fileProps: any) => {\n const {photo, layout} = fileProps\n return (\n <File\n onClick={handleSelect}\n data={photo.data}\n width={layout.width}\n height={layout.height}\n />\n )\n },\n [handleSelect]\n )\n\n const handleWidth = useCallback((width: number) => {\n if (width < 300) return 150\n else if (width < 600) return 200\n return 300\n }, [])\n\n return (\n <Dialog\n id=\"shopify-asset-source\"\n header={<DialogHeader title=\"Shopify Assets\" shopifyDomain={shopifyDomain} />}\n onClose={onClose}\n open={isOpen}\n width={4}\n >\n <Stack space={3} padding={4}>\n {error ? (\n <Card overflow=\"hidden\" padding={4} radius={2} shadow={1} tone=\"critical\">\n <Flex align=\"center\" gap={3}>\n <Text size={2}>\n <ErrorOutlineIcon />\n </Text>\n <Inline space={2}>\n <Text size={1}>{error}</Text>\n </Inline>\n </Flex>\n </Card>\n ) : (\n <>\n <Card>\n <Search space={3}>\n <Text size={1} weight=\"semibold\">\n Search Shopify for assets\n </Text>\n <TextInput\n label=\"Search Images\"\n placeholder=\"filename.jpg\"\n value={query}\n onChange={handleSearchTermChanged}\n />\n </Search>\n </Card>\n {!isLoading && searchResults.length === 0 && (\n <Text size={1} muted>\n No results found\n </Text>\n )}\n <InfiniteScroll\n dataLength={searchResults.length} // This is important field to render the next data\n next={handleScollerLoadMore}\n hasMore={pageInfo ? pageInfo?.hasNextPage : true}\n scrollThreshold={0.99}\n height=\"60vh\"\n loader={\n <Flex align=\"center\" justify=\"center\" padding={3}>\n <Spinner muted />\n </Flex>\n }\n endMessage={\n <Flex align=\"center\" justify=\"center\" padding={3}>\n <Text size={1} muted>\n No more results\n </Text>\n </Flex>\n }\n >\n {searchResults && (\n <PhotoAlbum\n layout=\"rows\"\n spacing={PHOTO_SPACING}\n padding={PHOTO_PADDING}\n targetRowHeight={handleWidth}\n photos={searchResults.map((file: ShopifyFile) => ({\n src: file?.preview?.url,\n width: file?.preview?.width || 2048,\n height: file?.preview?.height || 2048,\n key: file.id,\n data: file,\n }))}\n renderPhoto={renderFile}\n componentsProps={{\n containerProps: {style: {marginBottom: `${PHOTO_SPACING}px`}},\n }}\n />\n )}\n </InfiniteScroll>\n </>\n )}\n </Stack>\n </Dialog>\n )\n}\n","import React from 'react'\n\nconst ShopifyIcon = () => {\n return (\n <svg width=\"18\" height=\"20\" viewBox=\"0 0 18 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15.3269 3.85113C15.3132 3.75015 15.2258 3.69411 15.1531 3.688C15.081 3.6819 13.6693 3.66026 13.6693 3.66026C13.6693 3.66026 12.4887 2.50392 12.3722 2.38628C12.2555 2.26865 12.0277 2.30417 11.9392 2.3308C11.9381 2.33135 11.7175 2.40016 11.3461 2.51612C11.2839 2.31304 11.1927 2.06335 11.0622 1.81255C10.6419 1.00356 10.0263 0.575752 9.2825 0.574642C9.28142 0.574642 9.28092 0.574642 9.27975 0.574642C9.22808 0.574642 9.17692 0.579636 9.12517 0.584074C9.10317 0.557441 9.08117 0.531362 9.05808 0.505838C8.73408 0.156272 8.31869 -0.0140727 7.82082 0.000908712C6.86027 0.0286521 5.90357 0.72834 5.12787 1.97124C4.58212 2.84572 4.16677 3.94435 4.04904 4.79497C2.94601 5.13953 2.17471 5.38035 2.15766 5.3859C1.60091 5.56235 1.58331 5.57955 1.51069 6.10889C1.45677 6.50895 0 17.8704 0 17.8704L12.2082 20L17.4994 18.6733C17.4994 18.6733 15.3407 3.95212 15.3269 3.85113ZM10.7349 2.707C10.4537 2.79467 10.1342 2.89454 9.78758 3.00274C9.78042 2.51224 9.72267 1.82975 9.496 1.23992C10.2249 1.3792 10.5836 2.21095 10.7349 2.707ZM9.14883 3.20249C8.509 3.40225 7.81091 3.62031 7.11058 3.83892C7.30753 3.0782 7.68107 2.32081 8.13989 1.8242C8.31044 1.63943 8.54917 1.43358 8.832 1.31594C9.09767 1.87525 9.15542 2.66705 9.14883 3.20249ZM7.84007 0.645665C8.06562 0.640671 8.25542 0.690609 8.41775 0.798253C8.15805 0.9342 7.90718 1.12951 7.67172 1.38419C7.06162 2.04448 6.594 3.06932 6.4075 4.0581C5.826 4.23954 5.25715 4.41766 4.73342 4.58078C5.06405 3.02438 6.35743 0.688944 7.84007 0.645665Z\"\n fill=\"#95BF47\"\n />\n <path\n d=\"M9.276 6.43238L8.66142 8.75117C8.66142 8.75117 7.97598 8.43658 7.16342 8.48817C5.97181 8.56417 5.95916 9.32217 5.97126 9.51242C6.03618 10.5495 8.74125 10.7759 8.89308 13.2051C9.01242 15.1161 7.88796 16.4233 6.26779 16.5265C4.32303 16.6502 3.25246 15.4933 3.25246 15.4933L3.66452 13.7256C3.66452 13.7256 4.74224 14.5457 5.60487 14.4907C6.16821 14.4547 6.36957 13.9924 6.34921 13.6657C6.26448 12.3128 4.06172 12.3927 3.92253 10.17C3.80536 8.29951 5.02337 6.40408 7.71081 6.23318C8.74617 6.16604 9.276 6.43238 9.276 6.43238Z\"\n fill=\"white\"\n />\n <path\n d=\"M15.1536 3.68853C15.0815 3.68243 13.6698 3.66078 13.6698 3.66078C13.6698 3.66078 12.4893 2.50444 12.3726 2.38681C12.3292 2.34298 12.2703 2.32023 12.2087 2.31079L12.2093 19.9994L17.4999 18.6733C17.4999 18.6733 15.3412 3.95264 15.3274 3.85166C15.3137 3.75068 15.2257 3.69463 15.1536 3.68853Z\"\n fill=\"#5E8E3E\"\n />\n </svg>\n )\n}\n\nexport default ShopifyIcon\n","import React from 'react'\nimport {ErrorOutlineIcon} from '@sanity/icons'\nimport {Button, Card, Flex, Grid, Inline, Stack, Text} from '@sanity/ui'\nimport {ObjectInputProps, PatchEvent, unset} from 'sanity'\nimport {useCallback, useState} from 'react'\n\nimport {Asset} from '../types'\nimport AssetPreview from './AssetPreview'\nimport ShopifyAssetPicker from './ShopifyAssetPicker'\nimport ShopifyIcon from './ShopifyIcon'\n\nexport default function ShopifyAssetInput(props: ObjectInputProps) {\n const {onChange, readOnly, value, schemaType} = props\n const {options} = schemaType\n const {shopifyDomain} = options\n\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const removeValue = useCallback(() => {\n onChange(PatchEvent.from([unset()]))\n }, [onChange])\n\n const onOpen = useCallback(() => {\n setDialogOpen(true)\n }, [setDialogOpen])\n\n const onClose = useCallback(() => {\n setDialogOpen(false)\n }, [setDialogOpen])\n\n if (!shopifyDomain) {\n return (\n <Card overflow=\"hidden\" padding={4} radius={2} shadow={1} tone=\"critical\">\n <Flex align=\"center\" gap={3}>\n <Text size={2}>\n <ErrorOutlineIcon />\n </Text>\n <Inline space={2}>\n <Text size={1}>\n You need to configure your *.myshopify.com domain in the plugin / field options to\n enable Shopify Assets.\n </Text>\n </Inline>\n </Flex>\n </Card>\n )\n }\n\n return (\n <>\n {dialogOpen && (\n <ShopifyAssetPicker\n {...props}\n shopifyDomain={shopifyDomain}\n isOpen={dialogOpen}\n onClose={onClose}\n value={value as Asset}\n />\n )}\n <Stack>\n <AssetPreview value={value as Asset} />\n\n <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n <Button\n disabled={readOnly}\n mode=\"ghost\"\n icon={ShopifyIcon}\n title=\"Select an asset\"\n onClick={onOpen}\n text=\"Select…\"\n />\n <Button\n disabled={readOnly || !value}\n tone=\"critical\"\n mode=\"ghost\"\n title=\"Remove asset\"\n text=\"Remove\"\n onClick={removeValue}\n />\n </Grid>\n </Stack>\n </>\n )\n}\n","import React from 'react'\nimport {DiffFromTo} from 'sanity'\nimport {Flex, Text, Stack} from '@sanity/ui'\n\nimport type {Asset} from '../types'\n\ntype Props = {\n value: Asset | undefined\n}\n\nconst CloudinaryDiffPreview = ({value}: Props) => {\n if (!value) {\n return null\n }\n\n if (value?.preview?.url) {\n return (\n <Flex justify=\"center\" align=\"center\" height=\"fill\" width=\"fill\">\n <Stack space={2}>\n <img\n alt=\"preview\"\n src={value?.preview?.url}\n style={{\n objectFit: 'contain',\n margin: 'auto',\n maxWidth: '100%',\n maxHeight: '100%',\n }}\n />\n <Text size={1}>{value.type.charAt(0).toUpperCase() + value.type.slice(1)}</Text>\n </Stack>\n </Flex>\n )\n }\n\n return (\n <Flex justify=\"center\" align=\"center\" height=\"fill\" width=\"fill\">\n <div>(no image)</div>\n </Flex>\n )\n}\n\ntype DiffProps = {\n diff: any\n schemaType: any\n}\n\nconst AssetDiff = ({diff, schemaType}: DiffProps) => {\n return (\n <DiffFromTo\n diff={diff}\n schemaType={schemaType}\n previewComponent={CloudinaryDiffPreview}\n layout={'grid'}\n />\n )\n}\n\nexport default AssetDiff\n","/* eslint-disable */\nimport ShopifyAssetInput from '../components/ShopifyAssetInput'\nimport AssetDiff from '../components/AssetDiff'\nimport AssetPreview from '../components/AssetPreview'\nimport {defineField, defineType} from 'sanity'\n\ninterface ObjectConfig {\n shopifyDomain: string\n}\n\ndeclare module 'sanity' {\n interface ObjectOptions {\n shopifyDomain?: string\n }\n}\n\nexport const shopifyAssetSchema = (config: ObjectConfig) => {\n const {shopifyDomain} = config\n\n return defineType({\n type: 'object',\n name: 'shopify.asset',\n title: 'Shopify Asset',\n options: {\n shopifyDomain,\n },\n fields: [\n defineField({\n type: 'string',\n name: 'filename',\n title: 'Filename',\n }),\n defineField({\n type: 'string',\n name: 'id',\n title: 'ID',\n }),\n defineField({\n type: 'shopify.assetMetadata',\n name: 'meta',\n title: 'Metadata',\n }),\n defineField({\n type: 'shopify.assetPreview',\n name: 'preview',\n title: 'Preview',\n }),\n defineField({\n type: 'string',\n name: 'type',\n title: 'Type',\n }),\n defineField({\n type: 'url',\n name: 'url',\n title: 'URL',\n }),\n ],\n ...({\n components: {\n input: ShopifyAssetInput,\n diff: AssetDiff,\n preview: AssetPreview,\n },\n } as {}),\n preview: {\n select: {\n meta: 'meta',\n preview: 'preview',\n url: 'url',\n filename: 'filename',\n type: 'type',\n },\n prepare({url, meta, preview, filename, type}) {\n return {\n title: filename,\n subtitle: type,\n value: {\n url,\n meta,\n preview,\n filename,\n },\n }\n },\n },\n })\n}\n","import {defineField, defineType} from 'sanity'\n\nexport const shopifyAssetPreviewSchema = defineType({\n type: 'object',\n name: 'shopify.assetPreview',\n title: 'Asset preview',\n fields: [\n defineField({\n type: 'number',\n name: 'height',\n title: 'Height',\n }),\n defineField({\n type: 'number',\n name: 'width',\n title: 'Width',\n }),\n defineField({\n type: 'url',\n name: 'url',\n title: 'URL',\n }),\n ],\n})\n","import {defineField, defineType} from 'sanity'\n\nexport const shopifyAssetMetadataSchema = defineType({\n type: 'object',\n name: 'shopify.assetMetadata',\n title: 'Asset metadata',\n fields: [\n defineField({\n type: 'string',\n name: 'alt',\n title: 'Alternative text',\n }),\n defineField({\n type: 'number',\n name: 'duration',\n title: 'Duration',\n }),\n defineField({\n type: 'number',\n name: 'fileSize',\n title: 'File size',\n }),\n defineField({\n type: 'number',\n name: 'height',\n title: 'Height',\n }),\n defineField({\n type: 'number',\n name: 'width',\n title: 'Width',\n }),\n ],\n})\n","import {definePlugin, type ObjectDefinition} from 'sanity'\nimport {shopifyAssetSchema} from './schema/shopifyAssetSchema'\nimport {shopifyAssetPreviewSchema} from './schema/shopifyAssetPreviewSchema'\nimport {shopifyAssetMetadataSchema} from './schema/shopifyAssetMetadataSchema'\nimport type {PluginConfig} from './types'\n\nexport * from './types'\n\n// enables autocompletion and validation of document options\ndeclare module 'sanity' {\n export namespace Schema {\n // here we type up our custom schema definition\n export type ShopifyAssetTypeDef = Omit<ObjectDefinition, 'type' | 'fields'> & {\n type: 'shopify.asset'\n options: {\n shopifyDomain: string\n }\n }\n // Adds 'extension-type' as an intrinsic type\n export interface IntrinsicTypeDefinition {\n 'shopify.asset': ShopifyAssetTypeDef\n }\n }\n}\n\nexport const shopifyAssets = definePlugin<PluginConfig>((config) => {\n return {\n name: 'shopify-asset-schema',\n schema: {\n types: [shopifyAssetPreviewSchema, shopifyAssetMetadataSchema, shopifyAssetSchema(config)],\n },\n }\n})\n"],"names":["Root","styled","div","theme","sanity","color","card","enabled","bg2","border","InfoLine","Card","fg","bg","DurationLine","VideoPlayer","src","kind","videoNode","React","useRef","player","useEffect","_a","current","videojs","default","sources","controls","stopPropagation","useCallback","event","className","diff","style","position","children","jsx","href","rel","onClick","ref","StyledBox","Box","_b","_c","_d","space","RenderAsset","value","url","type","Flex","justify","alt","preview","maxWidth","height","display","maxHeight","AssetPreview","filename","meta","fileSize","duration","jsxs","marginBottom","padding","radius","margin","Text","size","title","prettyBytes","prettyMilliseconds","colonNotation","secondsDecimalDigits","fetchSearch","props","projectId","dataset","shop","query","cursor","resultsPerPage","defer","axios","get","encodeURIComponent","withCredentials","method","pipe","map","result","data","fetchList","search","concat","withLatestFrom","debounceTime","distinctUntilChanged","switchMap","q","c","DialogHeader","shopifyDomain","handleOpenInNewTab","window","open","align","opacity","tabIndex","right","Button","fontSize","icon","LaunchIcon","mode","text","extractName","name","split","pop","File","width","rootElm","handleClick","backgroundImage","Search","Stack","RESULTS_PER_PAGE","PHOTO_SPACING","PHOTO_PADDING","ShopifyAssetPicker","isOpen","onClose","onChange","schemaType","useProjectId","useDataset","error","setError","useState","setQuery","searchResults","setSearchResults","pageInfo","setPageInfo","isLoading","setIsLoading","searchSubject$","useMemo","BehaviorSubject","cursorSubject$","searchSubscription","subscribe","next","results","prevResults","assets","err","response","message","unsubscribe","handleSearchTermChanged","newQuery","currentTarget","handleScollerLoadMore","handleSelect","file","_key","_type","PatchEvent","from","set","renderFile","fileProps","photo","layout","handleWidth","Dialog","id","header","overflow","shadow","tone","gap","ErrorOutlineIcon","Inline","Fragment","weight","TextInput","label","placeholder","length","muted","InfiniteScroll","dataLength","hasMore","hasNextPage","scrollThreshold","loader","Spinner","endMessage","PhotoAlbum","spacing","targetRowHeight","photos","key","renderPhoto","componentsProps","containerProps","ShopifyIcon","viewBox","fill","xmlns","d","ShopifyAssetInput","readOnly","options","dialogOpen","setDialogOpen","removeValue","unset","onOpen","Grid","gridTemplateColumns","disabled","CloudinaryDiffPreview","objectFit","charAt","toUpperCase","slice","AssetDiff","DiffFromTo","previewComponent","shopifyAssetSchema","config","defineType","fields","defineField","components","input","select","prepare","subtitle","shopifyAssetPreviewSchema","shopifyAssetMetadataSchema","shopifyAssets","definePlugin","schema","types"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/File.styled.tsx","../src/components/VideoPlayer.tsx","../src/components/AssetPreview.tsx","../src/datastores/shopify.ts","../src/components/DialogHeader.tsx","../src/utils/helpers.ts","../src/components/File.tsx","../src/components/ShopifyAssetInput.styled.tsx","../src/components/ShopifyAssetPicker.tsx","../src/components/ShopifyIcon.tsx","../src/components/ShopifyAssetInput.tsx","../src/components/AssetDiff.tsx","../src/schema/shopifyAssetSchema.ts","../src/schema/shopifyAssetPreviewSchema.ts","../src/schema/shopifyAssetMetadataSchema.ts","../src/index.ts"],"sourcesContent":["import {Card} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const Root = styled.div`\n overflow: hidden;\n background-origin: content-box;\n background-repeat: no-repeat;\n background-clip: border-box;\n background-size: cover;\n background-color: ${({theme}) => theme.sanity.color.card.enabled.bg2};\n position: relative;\n outline: none !important;\n border: ${({theme}) => `1px solid ${theme.sanity.color.card.enabled.border}`};\n box-sizing: content-box;\n user-drag: none;\n\n &:hover {\n opacity: 0.85;\n }\n\n &:focus,\n &:active {\n border: 1px solid var(--input-border-color-focus);\n box-shadow: inset 0 0 0 3px var(--input-border-color-focus);\n }\n`\n\nexport const InfoLine = styled(Card)`\n ${({theme}) => `\n --infoline-fg: ${theme.sanity.color.card.enabled.fg};\n --infoline-bg: ${theme.sanity.color.card.enabled.bg};\n `};\n user-drag: none;\n position: absolute;\n background-color: var(--infoline-bg);\n top: 0;\n left: 0;\n max-width: 65%;\n overflow-wrap: break-word;\n\n [data-ui='Text'] {\n color: var(--infoline-fg);\n }\n`\n\nexport const DurationLine = styled(Card)`\n ${({theme}) => `\n --durationline-fg: ${theme.sanity.color.card.enabled.bg};\n --durationline-bg: ${theme.sanity.color.card.enabled.fg};\n `};\n user-drag: none;\n position: absolute;\n background-color: var(--durationline-bg);\n top: 0;\n right: 0;\n\n [data-ui='Text'] {\n color: var(--durationline-fg);\n }\n`\n","import React, {type CSSProperties, type MouseEvent, useCallback, useEffect} from 'react'\nimport videojs, {type VideoJsPlayer} from 'video.js'\n\ntype PlayerKind = 'player' | 'diff'\n\ninterface VideoProps {\n src: string\n kind: PlayerKind\n}\n\nconst VideoPlayer = ({src, kind}: VideoProps) => {\n const videoNode = React.useRef<HTMLVideoElement>(null)\n const player = React.useRef<VideoJsPlayer>()\n\n useEffect(() => {\n player.current = videojs(videoNode.current ?? '', {\n sources: [{src}],\n controls: true,\n })\n\n player.current.src({src})\n }, [src])\n\n const stopPropagation = useCallback((event: MouseEvent) => {\n event.stopPropagation()\n }, [])\n\n const className: Record<PlayerKind, string> = {\n player: 'video-js vjs-16-9 vjs-big-play-centered',\n diff: 'video-js vjs-layout-tiny vjs-fluid',\n }\n\n const style: CSSProperties = {position: 'relative'}\n\n return (\n <div>\n <link href=\"https://vjs.zencdn.net/7.8.4/video-js.css\" rel=\"stylesheet\" />\n <div data-vjs-player>\n <video\n onClick={stopPropagation}\n style={kind === 'diff' ? style : {}}\n className={className[kind]}\n ref={videoNode}\n />\n </div>\n </div>\n )\n}\n\nexport default VideoPlayer\n","import React from 'react'\nimport prettyBytes from 'pretty-bytes'\nimport prettyMilliseconds from 'pretty-ms'\nimport {styled} from 'styled-components'\nimport {Box, Flex, Text} from '@sanity/ui'\n\nimport {Asset} from '../types'\nimport {DurationLine, InfoLine} from './File.styled'\nimport VideoPlayer from './VideoPlayer'\n\ninterface ComponentProps {\n value: Asset\n}\n\nexport const StyledBox = styled(Box)`\n background-color: ${({theme}) => theme.sanity.color?.card?.enabled?.bg2};\n border: ${({theme}) => `1px solid ${theme.sanity?.color?.card?.enabled?.border}`};\n display: flex;\n justify-content: center;\n margin-bottom: ${({theme}) => theme.sanity.space[4]};\n position: relative;\n`\n\nconst RenderAsset = ({value, url}: {value: Asset; url: string}) => {\n switch (value.type) {\n case 'video':\n return <VideoPlayer src={url} kind=\"player\" />\n default:\n return (\n <Flex justify=\"center\">\n <img\n alt=\"preview\"\n src={value?.preview?.url}\n style={{\n maxWidth: '100%',\n height: 'auto',\n display: 'block',\n maxHeight: '30vh',\n }}\n />\n </Flex>\n )\n }\n}\n\nconst AssetPreview = ({value}: ComponentProps) => {\n const url = value && value.url\n\n if (!value || !url) {\n return null\n }\n\n const {filename, meta} = value\n const {fileSize, duration} = meta\n\n return (\n <StyledBox marginBottom={2}>\n <RenderAsset value={value} url={url} />\n <InfoLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Select ${filename}`}>\n {filename} {fileSize && `(${prettyBytes(fileSize)})`}\n </Text>\n </InfoLine>\n {duration && (\n <DurationLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Video duration: ${filename}`}>\n {prettyMilliseconds(duration, {colonNotation: true, secondsDecimalDigits: 0})}\n </Text>\n </DurationLine>\n )}\n </StyledBox>\n )\n}\n\nexport default AssetPreview\n","import {BehaviorSubject, Observable, concat, defer} from 'rxjs'\nimport {debounceTime, distinctUntilChanged, map, switchMap, withLatestFrom} from 'rxjs/operators'\n\nimport axios from 'axios'\n\ntype SearchSubject = BehaviorSubject<string>\ntype CursorSubject = BehaviorSubject<any>\n\ninterface fetchProps {\n projectId: string\n dataset: string\n shop: string\n query: SearchSubject\n cursor: CursorSubject\n resultsPerPage: number\n token?: string\n}\n\ninterface searchProps extends Omit<fetchProps, 'query' | 'cursor'> {\n query: string\n cursor: string\n}\ninterface listProps extends Omit<fetchProps, 'query' | 'cursor'> {\n cursor: string\n}\n\nconst fetchSearch = (props: searchProps): Observable<any> => {\n const {projectId, dataset, shop, query, cursor, resultsPerPage, token} = props\n\n return defer(() => {\n return axios.get(\n `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}&query=${encodeURIComponent(\n query\n )}${cursor && `&cursor=${cursor}`}&limit=${resultsPerPage}`,\n {\n withCredentials: true,\n method: 'GET',\n headers: token\n ? {\n Authorization: `Bearer ${token}`,\n }\n : {},\n }\n )\n }).pipe(map((result) => result.data))\n}\n\nconst fetchList = (props: listProps): Observable<any> => {\n const {projectId, dataset, shop, cursor, resultsPerPage, token} = props\n\n return defer(() =>\n axios.get(\n `https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}${\n cursor && `&cursor=${cursor}`\n }&limit=${resultsPerPage}`,\n {\n withCredentials: true,\n method: 'GET',\n headers: token\n ? {\n Authorization: `Bearer ${token}`,\n }\n : {},\n }\n )\n ).pipe(map((result) => result.data))\n}\n\nexport const search = (props: fetchProps): Observable<any> => {\n const {projectId, dataset, shop, query, cursor, resultsPerPage, token} = props\n\n return concat(\n query.pipe(\n withLatestFrom(cursor),\n debounceTime(500),\n distinctUntilChanged(),\n switchMap(([q, c]) => {\n if (q) {\n return fetchSearch({\n projectId,\n dataset,\n shop,\n query: q,\n cursor: c,\n resultsPerPage,\n token,\n }).pipe(distinctUntilChanged())\n }\n return fetchList({projectId, dataset, shop, cursor: c, resultsPerPage, token})\n })\n )\n )\n}\n","import React, {useCallback} from 'react'\nimport {Box, Flex, Button} from '@sanity/ui'\nimport {LaunchIcon} from '@sanity/icons'\n\ninterface Props {\n title: string\n shopifyDomain: string\n}\n\nconst DialogHeader = (props: Props) => {\n const {title, shopifyDomain} = props\n\n const handleOpenInNewTab = useCallback(() => {\n window.open(`https://${shopifyDomain}/admin/settings/files`, '_blank')\n }, [shopifyDomain])\n\n return (\n <Flex align=\"center\">\n {title}\n {/*\n HACK: Sanity UI will attempt to focus the first 'focusable' descendant of any dialog.\n Typically this is fine, but since our first focusable element is a button with a tooltip, this\n default behaviour causes the tooltip to appear whenever the dialog is opened, which we don't want!\n\n To get around this, we include a pseudo-hidden input to ensure our tooltip-enabled button remains\n unfocused on initial mount.\n */}\n <input style={{opacity: 0}} tabIndex={-1} type=\"button\" />\n <Box style={{position: 'absolute', right: '-1.5em'}}>\n <Box className=\"button-large\">\n <Button\n fontSize={1}\n icon={LaunchIcon}\n mode=\"bleed\"\n onClick={handleOpenInNewTab}\n text=\"Add New\"\n />\n </Box>\n </Box>\n </Flex>\n )\n}\n\nexport default DialogHeader\n","export const extractName = (name: string): string => name?.split('/')?.pop()?.split('?')[0] ?? ''\n","import React, {useCallback, useRef} from 'react'\nimport {Text} from '@sanity/ui'\nimport prettyBytes from 'pretty-bytes'\nimport prettyMilliseconds from 'pretty-ms'\n\nimport {extractName} from '../utils/helpers'\nimport {Asset, ShopifyFile} from '../types'\nimport {DurationLine, InfoLine, Root} from './File.styled'\n\ntype Props = {\n data: ShopifyFile\n width: number\n height: number\n onClick: (file: Asset) => void\n}\n\nexport default function File(props: Props) {\n const {onClick, data, width, height} = props\n const rootElm = useRef<HTMLDivElement>(null)\n\n const {preview, meta} = data\n const filename = extractName(data.url)\n\n const handleClick = useCallback(() => {\n onClick({...data, filename})\n }, [onClick, data, filename])\n\n return (\n <Root\n ref={rootElm}\n title={`${filename}`}\n tabIndex={0}\n style={{\n width: `${width}px`,\n height: `${height}px`,\n backgroundImage: `url(\"${preview?.url}\")`,\n }}\n onClick={handleClick}\n >\n <InfoLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Select ${filename}`}>\n {filename} {meta.fileSize && `(${prettyBytes(meta.fileSize)})`}\n </Text>\n </InfoLine>\n {meta.duration && (\n <DurationLine padding={2} radius={2} margin={2}>\n <Text size={1} title={`Video duration: ${filename}`}>\n {prettyMilliseconds(meta.duration, {colonNotation: true, secondsDecimalDigits: 0})}\n </Text>\n </DurationLine>\n )}\n </Root>\n )\n}\n","import {Stack} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nexport const Search = styled(Stack)`\n position: sticky;\n top: 0;\n z-index: 1;\n`\n\nexport const Scroller = styled.div`\n overflow-y: auto;\n max-height: 80vh;\n`\n","import {BehaviorSubject, Subscription} from 'rxjs'\nimport {ErrorOutlineIcon} from '@sanity/icons'\nimport {Card, Dialog, Flex, Inline, Spinner, Stack, Text, TextInput} from '@sanity/ui'\nimport {PatchEvent, set, useProjectId, ObjectInputProps, useDataset, useClient} from 'sanity'\nimport React, {useCallback, useEffect, useMemo, useState} from 'react'\nimport PhotoAlbum from 'react-photo-album'\nimport InfiniteScroll from 'react-infinite-scroll-component'\n\nimport {search} from '../datastores/shopify'\nimport type {Asset, PageInfo, ShopifyAPIResponse, ShopifyFile} from '../types'\nimport DialogHeader from './DialogHeader'\nimport File from './File'\nimport {Search} from './ShopifyAssetInput.styled'\n\nconst RESULTS_PER_PAGE = 42\nconst PHOTO_SPACING = 2\nconst PHOTO_PADDING = 1\n\nexport interface AssetPickerProps extends ObjectInputProps<Asset> {\n shopifyDomain: string\n isOpen: boolean\n onClose: () => void\n}\n\nexport default function ShopifyAssetPicker(props: AssetPickerProps) {\n const {isOpen, onClose, shopifyDomain, onChange, schemaType, value} = props\n const projectId = useProjectId()\n const dataset = useDataset()\n const client = useClient({apiVersion: '2021-06-07'})\n const token = client.config().token\n\n const [error, setError] = useState('')\n const [query, setQuery] = useState('')\n const [searchResults, setSearchResults] = useState<any[]>([])\n const [pageInfo, setPageInfo] = useState<PageInfo>()\n const [isLoading, setIsLoading] = useState(true)\n\n const searchSubject$ = useMemo(() => new BehaviorSubject(''), [])\n const cursorSubject$ = useMemo(() => new BehaviorSubject(''), [])\n\n useEffect(() => {\n if (!shopifyDomain) setError('Please configure your Shopify domain in the plugin config')\n }, [shopifyDomain])\n\n useEffect(() => {\n const searchSubscription: Subscription = search({\n projectId,\n dataset,\n shop: shopifyDomain,\n query: searchSubject$,\n cursor: cursorSubject$,\n resultsPerPage: RESULTS_PER_PAGE,\n token,\n }).subscribe({\n next: (results: ShopifyAPIResponse) => {\n setSearchResults((prevResults) => [...prevResults, ...results.assets])\n setPageInfo(results.pageInfo)\n setIsLoading(false)\n },\n error: (err) => {\n setError(\n `${\n err.response?.data?.message || err.message || 'An error occurred'\n } - check plugin configuration`\n )\n },\n })\n\n return () => searchSubscription.unsubscribe()\n }, [searchSubject$, cursorSubject$, shopifyDomain, projectId, dataset, token])\n\n const handleSearchTermChanged = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newQuery = event.currentTarget.value\n setQuery(newQuery)\n setSearchResults([])\n setPageInfo(undefined)\n setIsLoading(true)\n\n cursorSubject$.next('')\n searchSubject$.next(newQuery)\n },\n [cursorSubject$, searchSubject$]\n )\n\n const handleScollerLoadMore = useCallback(() => {\n setIsLoading(true)\n if (pageInfo) cursorSubject$.next(pageInfo.cursor)\n searchSubject$.next(query)\n }, [cursorSubject$, pageInfo, searchSubject$, query])\n\n const handleSelect = useCallback(\n (file: Asset) => {\n file._key = value?._key\n file._type = schemaType.name\n onChange(PatchEvent.from([set(file)]))\n onClose()\n },\n [onChange, onClose, schemaType.name, value?._key]\n )\n\n const renderFile = useCallback(\n (fileProps: any) => {\n const {photo, layout} = fileProps\n return (\n <File\n onClick={handleSelect}\n data={photo.data}\n width={layout.width}\n height={layout.height}\n />\n )\n },\n [handleSelect]\n )\n\n const handleWidth = useCallback((width: number) => {\n if (width < 300) return 150\n else if (width < 600) return 200\n return 300\n }, [])\n\n return (\n <Dialog\n id=\"shopify-asset-source\"\n header={<DialogHeader title=\"Shopify Assets\" shopifyDomain={shopifyDomain} />}\n onClose={onClose}\n open={isOpen}\n width={4}\n >\n <Stack space={3} padding={4}>\n {error ? (\n <Card overflow=\"hidden\" padding={4} radius={2} shadow={1} tone=\"critical\">\n <Flex align=\"center\" gap={3}>\n <Text size={2}>\n <ErrorOutlineIcon />\n </Text>\n <Inline space={2}>\n <Text size={1}>{error}</Text>\n </Inline>\n </Flex>\n </Card>\n ) : (\n <>\n <Card>\n <Search space={3}>\n <Text size={1} weight=\"semibold\">\n Search Shopify for assets\n </Text>\n <TextInput\n label=\"Search Images\"\n placeholder=\"filename.jpg\"\n value={query}\n onChange={handleSearchTermChanged}\n />\n </Search>\n </Card>\n {!isLoading && searchResults.length === 0 && (\n <Text size={1} muted>\n No results found\n </Text>\n )}\n <InfiniteScroll\n dataLength={searchResults.length} // This is important field to render the next data\n next={handleScollerLoadMore}\n hasMore={pageInfo ? pageInfo?.hasNextPage : true}\n scrollThreshold={0.99}\n height=\"60vh\"\n loader={\n <Flex align=\"center\" justify=\"center\" padding={3}>\n <Spinner muted />\n </Flex>\n }\n endMessage={\n <Flex align=\"center\" justify=\"center\" padding={3}>\n <Text size={1} muted>\n No more results\n </Text>\n </Flex>\n }\n >\n {searchResults && (\n <PhotoAlbum\n layout=\"rows\"\n spacing={PHOTO_SPACING}\n padding={PHOTO_PADDING}\n targetRowHeight={handleWidth}\n photos={searchResults.map((file: ShopifyFile) => ({\n src: file?.preview?.url,\n width: file?.preview?.width || 2048,\n height: file?.preview?.height || 2048,\n key: file.id,\n data: file,\n }))}\n renderPhoto={renderFile}\n componentsProps={{\n containerProps: {style: {marginBottom: `${PHOTO_SPACING}px`}},\n }}\n />\n )}\n </InfiniteScroll>\n </>\n )}\n </Stack>\n </Dialog>\n )\n}\n","import React from 'react'\n\nconst ShopifyIcon = () => {\n return (\n <svg width=\"18\" height=\"20\" viewBox=\"0 0 18 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M15.3269 3.85113C15.3132 3.75015 15.2258 3.69411 15.1531 3.688C15.081 3.6819 13.6693 3.66026 13.6693 3.66026C13.6693 3.66026 12.4887 2.50392 12.3722 2.38628C12.2555 2.26865 12.0277 2.30417 11.9392 2.3308C11.9381 2.33135 11.7175 2.40016 11.3461 2.51612C11.2839 2.31304 11.1927 2.06335 11.0622 1.81255C10.6419 1.00356 10.0263 0.575752 9.2825 0.574642C9.28142 0.574642 9.28092 0.574642 9.27975 0.574642C9.22808 0.574642 9.17692 0.579636 9.12517 0.584074C9.10317 0.557441 9.08117 0.531362 9.05808 0.505838C8.73408 0.156272 8.31869 -0.0140727 7.82082 0.000908712C6.86027 0.0286521 5.90357 0.72834 5.12787 1.97124C4.58212 2.84572 4.16677 3.94435 4.04904 4.79497C2.94601 5.13953 2.17471 5.38035 2.15766 5.3859C1.60091 5.56235 1.58331 5.57955 1.51069 6.10889C1.45677 6.50895 0 17.8704 0 17.8704L12.2082 20L17.4994 18.6733C17.4994 18.6733 15.3407 3.95212 15.3269 3.85113ZM10.7349 2.707C10.4537 2.79467 10.1342 2.89454 9.78758 3.00274C9.78042 2.51224 9.72267 1.82975 9.496 1.23992C10.2249 1.3792 10.5836 2.21095 10.7349 2.707ZM9.14883 3.20249C8.509 3.40225 7.81091 3.62031 7.11058 3.83892C7.30753 3.0782 7.68107 2.32081 8.13989 1.8242C8.31044 1.63943 8.54917 1.43358 8.832 1.31594C9.09767 1.87525 9.15542 2.66705 9.14883 3.20249ZM7.84007 0.645665C8.06562 0.640671 8.25542 0.690609 8.41775 0.798253C8.15805 0.9342 7.90718 1.12951 7.67172 1.38419C7.06162 2.04448 6.594 3.06932 6.4075 4.0581C5.826 4.23954 5.25715 4.41766 4.73342 4.58078C5.06405 3.02438 6.35743 0.688944 7.84007 0.645665Z\"\n fill=\"#95BF47\"\n />\n <path\n d=\"M9.276 6.43238L8.66142 8.75117C8.66142 8.75117 7.97598 8.43658 7.16342 8.48817C5.97181 8.56417 5.95916 9.32217 5.97126 9.51242C6.03618 10.5495 8.74125 10.7759 8.89308 13.2051C9.01242 15.1161 7.88796 16.4233 6.26779 16.5265C4.32303 16.6502 3.25246 15.4933 3.25246 15.4933L3.66452 13.7256C3.66452 13.7256 4.74224 14.5457 5.60487 14.4907C6.16821 14.4547 6.36957 13.9924 6.34921 13.6657C6.26448 12.3128 4.06172 12.3927 3.92253 10.17C3.80536 8.29951 5.02337 6.40408 7.71081 6.23318C8.74617 6.16604 9.276 6.43238 9.276 6.43238Z\"\n fill=\"white\"\n />\n <path\n d=\"M15.1536 3.68853C15.0815 3.68243 13.6698 3.66078 13.6698 3.66078C13.6698 3.66078 12.4893 2.50444 12.3726 2.38681C12.3292 2.34298 12.2703 2.32023 12.2087 2.31079L12.2093 19.9994L17.4999 18.6733C17.4999 18.6733 15.3412 3.95264 15.3274 3.85166C15.3137 3.75068 15.2257 3.69463 15.1536 3.68853Z\"\n fill=\"#5E8E3E\"\n />\n </svg>\n )\n}\n\nexport default ShopifyIcon\n","import React from 'react'\nimport {ErrorOutlineIcon} from '@sanity/icons'\nimport {Button, Card, Flex, Grid, Inline, Stack, Text} from '@sanity/ui'\nimport {ObjectInputProps, PatchEvent, unset} from 'sanity'\nimport {useCallback, useState} from 'react'\n\nimport {Asset} from '../types'\nimport AssetPreview from './AssetPreview'\nimport ShopifyAssetPicker from './ShopifyAssetPicker'\nimport ShopifyIcon from './ShopifyIcon'\n\nexport default function ShopifyAssetInput(props: ObjectInputProps) {\n const {onChange, readOnly, value, schemaType} = props\n const {options} = schemaType\n const {shopifyDomain} = options\n\n const [dialogOpen, setDialogOpen] = useState(false)\n\n const removeValue = useCallback(() => {\n onChange(PatchEvent.from([unset()]))\n }, [onChange])\n\n const onOpen = useCallback(() => {\n setDialogOpen(true)\n }, [setDialogOpen])\n\n const onClose = useCallback(() => {\n setDialogOpen(false)\n }, [setDialogOpen])\n\n if (!shopifyDomain) {\n return (\n <Card overflow=\"hidden\" padding={4} radius={2} shadow={1} tone=\"critical\">\n <Flex align=\"center\" gap={3}>\n <Text size={2}>\n <ErrorOutlineIcon />\n </Text>\n <Inline space={2}>\n <Text size={1}>\n You need to configure your *.myshopify.com domain in the plugin / field options to\n enable Shopify Assets.\n </Text>\n </Inline>\n </Flex>\n </Card>\n )\n }\n\n return (\n <>\n {dialogOpen && (\n <ShopifyAssetPicker\n {...props}\n shopifyDomain={shopifyDomain}\n isOpen={dialogOpen}\n onClose={onClose}\n value={value as Asset}\n />\n )}\n <Stack>\n <AssetPreview value={value as Asset} />\n\n <Grid gap={1} style={{gridTemplateColumns: 'repeat(auto-fit, minmax(100px, 1fr))'}}>\n <Button\n disabled={readOnly}\n mode=\"ghost\"\n icon={ShopifyIcon}\n title=\"Select an asset\"\n onClick={onOpen}\n text=\"Select…\"\n />\n <Button\n disabled={readOnly || !value}\n tone=\"critical\"\n mode=\"ghost\"\n title=\"Remove asset\"\n text=\"Remove\"\n onClick={removeValue}\n />\n </Grid>\n </Stack>\n </>\n )\n}\n","import React from 'react'\nimport {DiffFromTo} from 'sanity'\nimport {Flex, Text, Stack} from '@sanity/ui'\n\nimport type {Asset} from '../types'\n\ntype Props = {\n value: Asset | undefined\n}\n\nconst CloudinaryDiffPreview = ({value}: Props) => {\n if (!value) {\n return null\n }\n\n if (value?.preview?.url) {\n return (\n <Flex justify=\"center\" align=\"center\" height=\"fill\" width=\"fill\">\n <Stack space={2}>\n <img\n alt=\"preview\"\n src={value?.preview?.url}\n style={{\n objectFit: 'contain',\n margin: 'auto',\n maxWidth: '100%',\n maxHeight: '100%',\n }}\n />\n <Text size={1}>{value.type.charAt(0).toUpperCase() + value.type.slice(1)}</Text>\n </Stack>\n </Flex>\n )\n }\n\n return (\n <Flex justify=\"center\" align=\"center\" height=\"fill\" width=\"fill\">\n <div>(no image)</div>\n </Flex>\n )\n}\n\ntype DiffProps = {\n diff: any\n schemaType: any\n}\n\nconst AssetDiff = ({diff, schemaType}: DiffProps) => {\n return (\n <DiffFromTo\n diff={diff}\n schemaType={schemaType}\n previewComponent={CloudinaryDiffPreview}\n layout={'grid'}\n />\n )\n}\n\nexport default AssetDiff\n","/* eslint-disable */\nimport ShopifyAssetInput from '../components/ShopifyAssetInput'\nimport AssetDiff from '../components/AssetDiff'\nimport AssetPreview from '../components/AssetPreview'\nimport {defineField, defineType} from 'sanity'\n\ninterface ObjectConfig {\n shopifyDomain: string\n}\n\ndeclare module 'sanity' {\n interface ObjectOptions {\n shopifyDomain?: string\n }\n}\n\nexport const shopifyAssetSchema = (config: ObjectConfig) => {\n const {shopifyDomain} = config\n\n return defineType({\n type: 'object',\n name: 'shopify.asset',\n title: 'Shopify Asset',\n options: {\n shopifyDomain,\n },\n fields: [\n defineField({\n type: 'string',\n name: 'filename',\n title: 'Filename',\n }),\n defineField({\n type: 'string',\n name: 'id',\n title: 'ID',\n }),\n defineField({\n type: 'shopify.assetMetadata',\n name: 'meta',\n title: 'Metadata',\n }),\n defineField({\n type: 'shopify.assetPreview',\n name: 'preview',\n title: 'Preview',\n }),\n defineField({\n type: 'string',\n name: 'type',\n title: 'Type',\n }),\n defineField({\n type: 'url',\n name: 'url',\n title: 'URL',\n }),\n ],\n ...({\n components: {\n input: ShopifyAssetInput,\n diff: AssetDiff,\n preview: AssetPreview,\n },\n } as {}),\n preview: {\n select: {\n meta: 'meta',\n preview: 'preview',\n url: 'url',\n filename: 'filename',\n type: 'type',\n },\n prepare({url, meta, preview, filename, type}) {\n return {\n title: filename,\n subtitle: type,\n value: {\n url,\n meta,\n preview,\n filename,\n },\n }\n },\n },\n })\n}\n","import {defineField, defineType} from 'sanity'\n\nexport const shopifyAssetPreviewSchema = defineType({\n type: 'object',\n name: 'shopify.assetPreview',\n title: 'Asset preview',\n fields: [\n defineField({\n type: 'number',\n name: 'height',\n title: 'Height',\n }),\n defineField({\n type: 'number',\n name: 'width',\n title: 'Width',\n }),\n defineField({\n type: 'url',\n name: 'url',\n title: 'URL',\n }),\n ],\n})\n","import {defineField, defineType} from 'sanity'\n\nexport const shopifyAssetMetadataSchema = defineType({\n type: 'object',\n name: 'shopify.assetMetadata',\n title: 'Asset metadata',\n fields: [\n defineField({\n type: 'string',\n name: 'alt',\n title: 'Alternative text',\n }),\n defineField({\n type: 'number',\n name: 'duration',\n title: 'Duration',\n }),\n defineField({\n type: 'number',\n name: 'fileSize',\n title: 'File size',\n }),\n defineField({\n type: 'number',\n name: 'height',\n title: 'Height',\n }),\n defineField({\n type: 'number',\n name: 'width',\n title: 'Width',\n }),\n ],\n})\n","import {definePlugin, type ObjectDefinition} from 'sanity'\nimport {shopifyAssetSchema} from './schema/shopifyAssetSchema'\nimport {shopifyAssetPreviewSchema} from './schema/shopifyAssetPreviewSchema'\nimport {shopifyAssetMetadataSchema} from './schema/shopifyAssetMetadataSchema'\nimport type {PluginConfig} from './types'\n\nexport * from './types'\n\n// enables autocompletion and validation of document options\ndeclare module 'sanity' {\n export namespace Schema {\n // here we type up our custom schema definition\n export type ShopifyAssetTypeDef = Omit<ObjectDefinition, 'type' | 'fields'> & {\n type: 'shopify.asset'\n options: {\n shopifyDomain: string\n }\n }\n // Adds 'extension-type' as an intrinsic type\n export interface IntrinsicTypeDefinition {\n 'shopify.asset': ShopifyAssetTypeDef\n }\n }\n}\n\nexport const shopifyAssets = definePlugin<PluginConfig>((config) => {\n return {\n name: 'shopify-asset-schema',\n schema: {\n types: [shopifyAssetPreviewSchema, shopifyAssetMetadataSchema, shopifyAssetSchema(config)],\n },\n }\n})\n"],"names":["Root","styled","div","_ref","theme","sanity","color","card","enabled","bg2","_ref2","border","InfoLine","Card","_ref3","fg","bg","DurationLine","_ref4","VideoPlayer","_ref5","src","kind","videoNode","React","useRef","player","useEffect","current","videojs","sources","controls","stopPropagation","useCallback","event","className","diff","style","position","children","jsx","href","rel","onClick","ref","StyledBox","Box","_ref6","_ref7","_ref8","space","RenderAsset","_ref9","value","url","type","Flex","justify","alt","preview","maxWidth","height","display","maxHeight","AssetPreview","_ref0","filename","meta","fileSize","duration","jsxs","marginBottom","padding","radius","margin","Text","size","title","prettyBytes","default","prettyMilliseconds","colonNotation","secondsDecimalDigits","fetchSearch","props","projectId","dataset","shop","query","cursor","resultsPerPage","token","defer","axios","get","encodeURIComponent","withCredentials","method","headers","Authorization","pipe","map","result","data","fetchList","search","concat","withLatestFrom","debounceTime","distinctUntilChanged","switchMap","_ref1","q","c","DialogHeader","shopifyDomain","handleOpenInNewTab","window","open","align","opacity","tabIndex","right","Button","fontSize","icon","LaunchIcon","mode","text","extractName","name","split","pop","File","width","rootElm","handleClick","backgroundImage","Search","Stack","RESULTS_PER_PAGE","PHOTO_SPACING","PHOTO_PADDING","ShopifyAssetPicker","isOpen","onClose","onChange","schemaType","useProjectId","useDataset","client","useClient","apiVersion","config","error","setError","useState","setQuery","searchResults","setSearchResults","pageInfo","setPageInfo","isLoading","setIsLoading","searchSubject$","useMemo","BehaviorSubject","cursorSubject$","searchSubscription","subscribe","next","results","prevResults","assets","err","response","message","unsubscribe","handleSearchTermChanged","newQuery","currentTarget","handleScollerLoadMore","handleSelect","file","_key","_type","PatchEvent","from","set","renderFile","fileProps","photo","layout","handleWidth","Dialog","id","header","overflow","shadow","tone","gap","ErrorOutlineIcon","Inline","Fragment","weight","TextInput","label","placeholder","length","muted","InfiniteScroll","dataLength","hasMore","hasNextPage","scrollThreshold","loader","Spinner","endMessage","PhotoAlbum","spacing","targetRowHeight","photos","key","renderPhoto","componentsProps","containerProps","ShopifyIcon","viewBox","fill","xmlns","d","ShopifyAssetInput","readOnly","options","dialogOpen","setDialogOpen","removeValue","unset","onOpen","Grid","gridTemplateColumns","disabled","CloudinaryDiffPreview","_ref10","objectFit","charAt","toUpperCase","slice","AssetDiff","_ref11","DiffFromTo","previewComponent","shopifyAssetSchema","defineType","fields","defineField","components","input","select","prepare","_ref12","subtitle","shopifyAssetPreviewSchema","shopifyAssetMetadataSchema","shopifyAssets","definePlugin","schema","types"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sanity-plugin-shopify-assets",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "Choose assets from your Shopify store in your Sanity Studio",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -88,11 +88,11 @@
|
|
|
88
88
|
"rimraf": "^4.0.4",
|
|
89
89
|
"sanity": "^3.2.3",
|
|
90
90
|
"styled-components": "^6.1.15",
|
|
91
|
-
"typescript": "^
|
|
91
|
+
"typescript": "^5.8.3"
|
|
92
92
|
},
|
|
93
93
|
"peerDependencies": {
|
|
94
94
|
"react": "^18.3 || ^19",
|
|
95
|
-
"sanity": "^3",
|
|
95
|
+
"sanity": "^3 || ^4.0.0-0",
|
|
96
96
|
"styled-components": "^6"
|
|
97
97
|
},
|
|
98
98
|
"engines": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {BehaviorSubject, Subscription} from 'rxjs'
|
|
2
2
|
import {ErrorOutlineIcon} from '@sanity/icons'
|
|
3
3
|
import {Card, Dialog, Flex, Inline, Spinner, Stack, Text, TextInput} from '@sanity/ui'
|
|
4
|
-
import {PatchEvent, set, useProjectId, ObjectInputProps, useDataset} from 'sanity'
|
|
4
|
+
import {PatchEvent, set, useProjectId, ObjectInputProps, useDataset, useClient} from 'sanity'
|
|
5
5
|
import React, {useCallback, useEffect, useMemo, useState} from 'react'
|
|
6
6
|
import PhotoAlbum from 'react-photo-album'
|
|
7
7
|
import InfiniteScroll from 'react-infinite-scroll-component'
|
|
@@ -26,6 +26,8 @@ export default function ShopifyAssetPicker(props: AssetPickerProps) {
|
|
|
26
26
|
const {isOpen, onClose, shopifyDomain, onChange, schemaType, value} = props
|
|
27
27
|
const projectId = useProjectId()
|
|
28
28
|
const dataset = useDataset()
|
|
29
|
+
const client = useClient({apiVersion: '2021-06-07'})
|
|
30
|
+
const token = client.config().token
|
|
29
31
|
|
|
30
32
|
const [error, setError] = useState('')
|
|
31
33
|
const [query, setQuery] = useState('')
|
|
@@ -48,6 +50,7 @@ export default function ShopifyAssetPicker(props: AssetPickerProps) {
|
|
|
48
50
|
query: searchSubject$,
|
|
49
51
|
cursor: cursorSubject$,
|
|
50
52
|
resultsPerPage: RESULTS_PER_PAGE,
|
|
53
|
+
token,
|
|
51
54
|
}).subscribe({
|
|
52
55
|
next: (results: ShopifyAPIResponse) => {
|
|
53
56
|
setSearchResults((prevResults) => [...prevResults, ...results.assets])
|
|
@@ -57,14 +60,14 @@ export default function ShopifyAssetPicker(props: AssetPickerProps) {
|
|
|
57
60
|
error: (err) => {
|
|
58
61
|
setError(
|
|
59
62
|
`${
|
|
60
|
-
err.response
|
|
63
|
+
err.response?.data?.message || err.message || 'An error occurred'
|
|
61
64
|
} - check plugin configuration`
|
|
62
65
|
)
|
|
63
66
|
},
|
|
64
67
|
})
|
|
65
68
|
|
|
66
69
|
return () => searchSubscription.unsubscribe()
|
|
67
|
-
}, [searchSubject$, cursorSubject$, shopifyDomain, projectId, dataset])
|
|
70
|
+
}, [searchSubject$, cursorSubject$, shopifyDomain, projectId, dataset, token])
|
|
68
71
|
|
|
69
72
|
const handleSearchTermChanged = useCallback(
|
|
70
73
|
(event: React.ChangeEvent<HTMLInputElement>) => {
|
|
@@ -13,6 +13,7 @@ interface fetchProps {
|
|
|
13
13
|
query: SearchSubject
|
|
14
14
|
cursor: CursorSubject
|
|
15
15
|
resultsPerPage: number
|
|
16
|
+
token?: string
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
interface searchProps extends Omit<fetchProps, 'query' | 'cursor'> {
|
|
@@ -24,7 +25,7 @@ interface listProps extends Omit<fetchProps, 'query' | 'cursor'> {
|
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
const fetchSearch = (props: searchProps): Observable<any> => {
|
|
27
|
-
const {projectId, dataset, shop, query, cursor, resultsPerPage} = props
|
|
28
|
+
const {projectId, dataset, shop, query, cursor, resultsPerPage, token} = props
|
|
28
29
|
|
|
29
30
|
return defer(() => {
|
|
30
31
|
return axios.get(
|
|
@@ -34,13 +35,18 @@ const fetchSearch = (props: searchProps): Observable<any> => {
|
|
|
34
35
|
{
|
|
35
36
|
withCredentials: true,
|
|
36
37
|
method: 'GET',
|
|
38
|
+
headers: token
|
|
39
|
+
? {
|
|
40
|
+
Authorization: `Bearer ${token}`,
|
|
41
|
+
}
|
|
42
|
+
: {},
|
|
37
43
|
}
|
|
38
44
|
)
|
|
39
45
|
}).pipe(map((result) => result.data))
|
|
40
46
|
}
|
|
41
47
|
|
|
42
48
|
const fetchList = (props: listProps): Observable<any> => {
|
|
43
|
-
const {projectId, dataset, shop, cursor, resultsPerPage} = props
|
|
49
|
+
const {projectId, dataset, shop, cursor, resultsPerPage, token} = props
|
|
44
50
|
|
|
45
51
|
return defer(() =>
|
|
46
52
|
axios.get(
|
|
@@ -50,13 +56,18 @@ const fetchList = (props: listProps): Observable<any> => {
|
|
|
50
56
|
{
|
|
51
57
|
withCredentials: true,
|
|
52
58
|
method: 'GET',
|
|
59
|
+
headers: token
|
|
60
|
+
? {
|
|
61
|
+
Authorization: `Bearer ${token}`,
|
|
62
|
+
}
|
|
63
|
+
: {},
|
|
53
64
|
}
|
|
54
65
|
)
|
|
55
66
|
).pipe(map((result) => result.data))
|
|
56
67
|
}
|
|
57
68
|
|
|
58
69
|
export const search = (props: fetchProps): Observable<any> => {
|
|
59
|
-
const {projectId, dataset, shop, query, cursor, resultsPerPage} = props
|
|
70
|
+
const {projectId, dataset, shop, query, cursor, resultsPerPage, token} = props
|
|
60
71
|
|
|
61
72
|
return concat(
|
|
62
73
|
query.pipe(
|
|
@@ -65,11 +76,17 @@ export const search = (props: fetchProps): Observable<any> => {
|
|
|
65
76
|
distinctUntilChanged(),
|
|
66
77
|
switchMap(([q, c]) => {
|
|
67
78
|
if (q) {
|
|
68
|
-
return fetchSearch({
|
|
69
|
-
|
|
70
|
-
|
|
79
|
+
return fetchSearch({
|
|
80
|
+
projectId,
|
|
81
|
+
dataset,
|
|
82
|
+
shop,
|
|
83
|
+
query: q,
|
|
84
|
+
cursor: c,
|
|
85
|
+
resultsPerPage,
|
|
86
|
+
token,
|
|
87
|
+
}).pipe(distinctUntilChanged())
|
|
71
88
|
}
|
|
72
|
-
return fetchList({projectId, dataset, shop, cursor: c, resultsPerPage})
|
|
89
|
+
return fetchList({projectId, dataset, shop, cursor: c, resultsPerPage, token})
|
|
73
90
|
})
|
|
74
91
|
)
|
|
75
92
|
)
|