sanity-plugin-shopify-assets 1.2.1 → 1.2.3
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 +28 -12
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +27 -11
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/DialogHeader.tsx +1 -1
- package/src/components/ShopifyAssetPicker.tsx +6 -3
- package/src/datastores/shopify.ts +24 -7
package/README.md
CHANGED
package/dist/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useProjectId, useDataset, PatchEvent, set, unset, DiffFromTo, defineType, defineField, definePlugin } from 'sanity';
|
|
1
|
+
import { useProjectId, useDataset, useClient, PatchEvent, set, unset, DiffFromTo, defineType, defineField, definePlugin } from 'sanity';
|
|
2
2
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
3
3
|
import { LaunchIcon, ErrorOutlineIcon } from '@sanity/icons';
|
|
4
4
|
import { Card, Box, Text, Flex, Button, Stack, Dialog, Inline, TextInput, Spinner, Grid } from '@sanity/ui';
|
|
@@ -232,12 +232,16 @@ const fetchSearch = props => {
|
|
|
232
232
|
shop,
|
|
233
233
|
query,
|
|
234
234
|
cursor,
|
|
235
|
-
resultsPerPage
|
|
235
|
+
resultsPerPage,
|
|
236
|
+
token
|
|
236
237
|
} = props;
|
|
237
238
|
return defer(() => {
|
|
238
239
|
return axios.get(`https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}&query=${encodeURIComponent(query)}${cursor && `&cursor=${cursor}`}&limit=${resultsPerPage}`, {
|
|
239
240
|
withCredentials: true,
|
|
240
|
-
method: "GET"
|
|
241
|
+
method: "GET",
|
|
242
|
+
headers: token ? {
|
|
243
|
+
Authorization: `Bearer ${token}`
|
|
244
|
+
} : {}
|
|
241
245
|
});
|
|
242
246
|
}).pipe(map(result => result.data));
|
|
243
247
|
};
|
|
@@ -247,11 +251,15 @@ const fetchList = props => {
|
|
|
247
251
|
dataset,
|
|
248
252
|
shop,
|
|
249
253
|
cursor,
|
|
250
|
-
resultsPerPage
|
|
254
|
+
resultsPerPage,
|
|
255
|
+
token
|
|
251
256
|
} = props;
|
|
252
257
|
return defer(() => axios.get(`https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}${cursor && `&cursor=${cursor}`}&limit=${resultsPerPage}`, {
|
|
253
258
|
withCredentials: true,
|
|
254
|
-
method: "GET"
|
|
259
|
+
method: "GET",
|
|
260
|
+
headers: token ? {
|
|
261
|
+
Authorization: `Bearer ${token}`
|
|
262
|
+
} : {}
|
|
255
263
|
})).pipe(map(result => result.data));
|
|
256
264
|
};
|
|
257
265
|
const search = props => {
|
|
@@ -261,7 +269,8 @@ const search = props => {
|
|
|
261
269
|
shop,
|
|
262
270
|
query,
|
|
263
271
|
cursor,
|
|
264
|
-
resultsPerPage
|
|
272
|
+
resultsPerPage,
|
|
273
|
+
token
|
|
265
274
|
} = props;
|
|
266
275
|
return concat(query.pipe(withLatestFrom(cursor), debounceTime(500), distinctUntilChanged(), switchMap(_ref1 => {
|
|
267
276
|
let [q, c] = _ref1;
|
|
@@ -272,7 +281,8 @@ const search = props => {
|
|
|
272
281
|
shop,
|
|
273
282
|
query: q,
|
|
274
283
|
cursor: c,
|
|
275
|
-
resultsPerPage
|
|
284
|
+
resultsPerPage,
|
|
285
|
+
token
|
|
276
286
|
}).pipe(distinctUntilChanged());
|
|
277
287
|
}
|
|
278
288
|
return fetchList({
|
|
@@ -280,7 +290,8 @@ const search = props => {
|
|
|
280
290
|
dataset,
|
|
281
291
|
shop,
|
|
282
292
|
cursor: c,
|
|
283
|
-
resultsPerPage
|
|
293
|
+
resultsPerPage,
|
|
294
|
+
token
|
|
284
295
|
});
|
|
285
296
|
})));
|
|
286
297
|
};
|
|
@@ -290,7 +301,7 @@ const DialogHeader = props => {
|
|
|
290
301
|
shopifyDomain
|
|
291
302
|
} = props;
|
|
292
303
|
const handleOpenInNewTab = useCallback(() => {
|
|
293
|
-
window.open(`https://${shopifyDomain}/admin/
|
|
304
|
+
window.open(`https://${shopifyDomain}/admin/content/files`, "_blank");
|
|
294
305
|
}, [shopifyDomain]);
|
|
295
306
|
return /* @__PURE__ */jsxs(Flex, {
|
|
296
307
|
align: "center",
|
|
@@ -395,6 +406,10 @@ function ShopifyAssetPicker(props) {
|
|
|
395
406
|
} = props;
|
|
396
407
|
const projectId = useProjectId();
|
|
397
408
|
const dataset = useDataset();
|
|
409
|
+
const client = useClient({
|
|
410
|
+
apiVersion: "2021-06-07"
|
|
411
|
+
});
|
|
412
|
+
const token = client.config().token;
|
|
398
413
|
const [error, setError] = useState("");
|
|
399
414
|
const [query, setQuery] = useState("");
|
|
400
415
|
const [searchResults, setSearchResults] = useState([]);
|
|
@@ -412,7 +427,8 @@ function ShopifyAssetPicker(props) {
|
|
|
412
427
|
shop: shopifyDomain,
|
|
413
428
|
query: searchSubject$,
|
|
414
429
|
cursor: cursorSubject$,
|
|
415
|
-
resultsPerPage: RESULTS_PER_PAGE
|
|
430
|
+
resultsPerPage: RESULTS_PER_PAGE,
|
|
431
|
+
token
|
|
416
432
|
}).subscribe({
|
|
417
433
|
next: results => {
|
|
418
434
|
setSearchResults(prevResults => [...prevResults, ...results.assets]);
|
|
@@ -420,11 +436,11 @@ function ShopifyAssetPicker(props) {
|
|
|
420
436
|
setIsLoading(false);
|
|
421
437
|
},
|
|
422
438
|
error: err => {
|
|
423
|
-
setError(`${err.response
|
|
439
|
+
setError(`${err.response?.data?.message || err.message || "An error occurred"} - check plugin configuration`);
|
|
424
440
|
}
|
|
425
441
|
});
|
|
426
442
|
return () => searchSubscription.unsubscribe();
|
|
427
|
-
}, [searchSubject$, cursorSubject$, shopifyDomain, projectId, dataset]);
|
|
443
|
+
}, [searchSubject$, cursorSubject$, shopifyDomain, projectId, dataset, token]);
|
|
428
444
|
const handleSearchTermChanged = useCallback(event => {
|
|
429
445
|
const newQuery = event.currentTarget.value;
|
|
430
446
|
setQuery(newQuery);
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.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","_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","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","_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","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","config","defineType","fields","defineField","components","input","select","prepare","_ref12","subtitle","shopifyAssetPreviewSchema","shopifyAssetMetadataSchema","shopifyAssets","definePlugin","schema","types"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.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/content/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","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/dist/index.js
CHANGED
|
@@ -249,12 +249,16 @@ const fetchSearch = props => {
|
|
|
249
249
|
shop,
|
|
250
250
|
query,
|
|
251
251
|
cursor,
|
|
252
|
-
resultsPerPage
|
|
252
|
+
resultsPerPage,
|
|
253
|
+
token
|
|
253
254
|
} = props;
|
|
254
255
|
return rxjs.defer(() => {
|
|
255
256
|
return axios__default.default.get(`https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}&query=${encodeURIComponent(query)}${cursor && `&cursor=${cursor}`}&limit=${resultsPerPage}`, {
|
|
256
257
|
withCredentials: true,
|
|
257
|
-
method: "GET"
|
|
258
|
+
method: "GET",
|
|
259
|
+
headers: token ? {
|
|
260
|
+
Authorization: `Bearer ${token}`
|
|
261
|
+
} : {}
|
|
258
262
|
});
|
|
259
263
|
}).pipe(operators.map(result => result.data));
|
|
260
264
|
};
|
|
@@ -264,11 +268,15 @@ const fetchList = props => {
|
|
|
264
268
|
dataset,
|
|
265
269
|
shop,
|
|
266
270
|
cursor,
|
|
267
|
-
resultsPerPage
|
|
271
|
+
resultsPerPage,
|
|
272
|
+
token
|
|
268
273
|
} = props;
|
|
269
274
|
return rxjs.defer(() => axios__default.default.get(`https://${projectId}.api.sanity.io/v1/shopify/assets/${dataset}?shop=${shop}${cursor && `&cursor=${cursor}`}&limit=${resultsPerPage}`, {
|
|
270
275
|
withCredentials: true,
|
|
271
|
-
method: "GET"
|
|
276
|
+
method: "GET",
|
|
277
|
+
headers: token ? {
|
|
278
|
+
Authorization: `Bearer ${token}`
|
|
279
|
+
} : {}
|
|
272
280
|
})).pipe(operators.map(result => result.data));
|
|
273
281
|
};
|
|
274
282
|
const search = props => {
|
|
@@ -278,7 +286,8 @@ const search = props => {
|
|
|
278
286
|
shop,
|
|
279
287
|
query,
|
|
280
288
|
cursor,
|
|
281
|
-
resultsPerPage
|
|
289
|
+
resultsPerPage,
|
|
290
|
+
token
|
|
282
291
|
} = props;
|
|
283
292
|
return rxjs.concat(query.pipe(operators.withLatestFrom(cursor), operators.debounceTime(500), operators.distinctUntilChanged(), operators.switchMap(_ref1 => {
|
|
284
293
|
let [q, c] = _ref1;
|
|
@@ -289,7 +298,8 @@ const search = props => {
|
|
|
289
298
|
shop,
|
|
290
299
|
query: q,
|
|
291
300
|
cursor: c,
|
|
292
|
-
resultsPerPage
|
|
301
|
+
resultsPerPage,
|
|
302
|
+
token
|
|
293
303
|
}).pipe(operators.distinctUntilChanged());
|
|
294
304
|
}
|
|
295
305
|
return fetchList({
|
|
@@ -297,7 +307,8 @@ const search = props => {
|
|
|
297
307
|
dataset,
|
|
298
308
|
shop,
|
|
299
309
|
cursor: c,
|
|
300
|
-
resultsPerPage
|
|
310
|
+
resultsPerPage,
|
|
311
|
+
token
|
|
301
312
|
});
|
|
302
313
|
})));
|
|
303
314
|
};
|
|
@@ -307,7 +318,7 @@ const DialogHeader = props => {
|
|
|
307
318
|
shopifyDomain
|
|
308
319
|
} = props;
|
|
309
320
|
const handleOpenInNewTab = React.useCallback(() => {
|
|
310
|
-
window.open(`https://${shopifyDomain}/admin/
|
|
321
|
+
window.open(`https://${shopifyDomain}/admin/content/files`, "_blank");
|
|
311
322
|
}, [shopifyDomain]);
|
|
312
323
|
return /* @__PURE__ */jsxRuntime.jsxs(ui.Flex, {
|
|
313
324
|
align: "center",
|
|
@@ -412,6 +423,10 @@ function ShopifyAssetPicker(props) {
|
|
|
412
423
|
} = props;
|
|
413
424
|
const projectId = sanity.useProjectId();
|
|
414
425
|
const dataset = sanity.useDataset();
|
|
426
|
+
const client = sanity.useClient({
|
|
427
|
+
apiVersion: "2021-06-07"
|
|
428
|
+
});
|
|
429
|
+
const token = client.config().token;
|
|
415
430
|
const [error, setError] = React.useState("");
|
|
416
431
|
const [query, setQuery] = React.useState("");
|
|
417
432
|
const [searchResults, setSearchResults] = React.useState([]);
|
|
@@ -429,7 +444,8 @@ function ShopifyAssetPicker(props) {
|
|
|
429
444
|
shop: shopifyDomain,
|
|
430
445
|
query: searchSubject$,
|
|
431
446
|
cursor: cursorSubject$,
|
|
432
|
-
resultsPerPage: RESULTS_PER_PAGE
|
|
447
|
+
resultsPerPage: RESULTS_PER_PAGE,
|
|
448
|
+
token
|
|
433
449
|
}).subscribe({
|
|
434
450
|
next: results => {
|
|
435
451
|
setSearchResults(prevResults => [...prevResults, ...results.assets]);
|
|
@@ -437,11 +453,11 @@ function ShopifyAssetPicker(props) {
|
|
|
437
453
|
setIsLoading(false);
|
|
438
454
|
},
|
|
439
455
|
error: err => {
|
|
440
|
-
setError(`${err.response
|
|
456
|
+
setError(`${err.response?.data?.message || err.message || "An error occurred"} - check plugin configuration`);
|
|
441
457
|
}
|
|
442
458
|
});
|
|
443
459
|
return () => searchSubscription.unsubscribe();
|
|
444
|
-
}, [searchSubject$, cursorSubject$, shopifyDomain, projectId, dataset]);
|
|
460
|
+
}, [searchSubject$, cursorSubject$, shopifyDomain, projectId, dataset, token]);
|
|
445
461
|
const handleSearchTermChanged = React.useCallback(event => {
|
|
446
462
|
const newQuery = event.currentTarget.value;
|
|
447
463
|
setQuery(newQuery);
|
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","_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","defer","axios","get","encodeURIComponent","withCredentials","method","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","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","config","defineType","fields","defineField","components","input","select","prepare","_ref12","subtitle","shopifyAssetPreviewSchema","shopifyAssetMetadataSchema","shopifyAssets","definePlugin","schema","types"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGO,MAAMA,OAAOC,gBAAO,CAAAA,MAAA,CAAAC,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAMLC,IAAA;EAAA,IAAC;IAACC;EAAK,CAAA,GAAAD,IAAA;EAAA,OAAMC,MAAMC,MAAO,CAAAC,KAAA,CAAMC,IAAK,CAAAC,OAAA,CAAQC,GAAG;AAAA;AAAA;AAAA;AAAA,YAG1DC,KAAA;EAAA,IAAC;IAACN;GAAW,GAAAM,KAAA;EAAA,OAAA,aAAaN,KAAM,CAAAC,MAAA,CAAOC,KAAM,CAAAC,IAAA,CAAKC,OAAQ,CAAAG,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAejE,MAAAC,QAAA,GAAWX,gBAAAA,CAAAA,OAAOY,EAAAA,CAAAA,IAAI,CAAA;AAAA,IAC/BC,KAAA;EAAA,IAAC;IAACV;EAAA,CAAW,GAAAU,KAAA;EAAA,OAAA;AAAA,qBACIV,KAAM,CAAAC,MAAA,CAAOC,KAAM,CAAAC,IAAA,CAAKC,QAAQO,EAAE;AAAA,qBAClCX,KAAM,CAAAC,MAAA,CAAOC,KAAM,CAAAC,IAAA,CAAKC,QAAQQ,EAAE;AAAA,GACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAcU,MAAAC,YAAA,GAAehB,gBAAAA,CAAAA,OAAOY,EAAAA,CAAAA,IAAI,CAAA;AAAA,IACnCK,KAAA;EAAA,IAAC;IAACd;EAAA,CAAW,GAAAc,KAAA;EAAA,OAAA;AAAA,yBACQd,KAAM,CAAAC,MAAA,CAAOC,KAAM,CAAAC,IAAA,CAAKC,QAAQQ,EAAE;AAAA,yBAClCZ,KAAM,CAAAC,MAAA,CAAOC,KAAM,CAAAC,IAAA,CAAKC,QAAQO,EAAE;AAAA,GACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;ACvCH,MAAMI,WAAc,GAAAC,KAAA,IAA6B;EAAA,IAA5B;IAACC,GAAA;IAAKC;GAAsB,GAAAF,KAAA;EACzC,MAAAG,SAAA,GAAYC,cAAAA,CAAAA,OAAM,CAAAC,MAAA,CAAyB,IAAI,CAAA;EAC/C,MAAAC,MAAA,GAASF,uBAAMC,MAAsB,EAAA;EAE3CE,KAAAA,CAAAA,SAAA,CAAU,MAAM;IACdD,MAAA,CAAOE,OAAU,GAAAC,gBAAAA,CAAAA,OAAA,CAAQN,SAAU,CAAAK,OAAA,IAAW,EAAI,EAAA;MAChDE,OAAS,EAAA,CAAC;QAACT;OAAI,CAAA;MACfU,QAAU,EAAA;IAAA,CACX,CAAA;IAEDL,MAAA,CAAOE,OAAQ,CAAAP,GAAA,CAAI;MAACA;IAAI,CAAA,CAAA;EAAA,CAC1B,EAAG,CAACA,GAAG,CAAC,CAAA;EAEF,MAAAW,eAAA,GAAkBC,iBAAY,CAACC,KAAsB,IAAA;IACzDA,KAAA,CAAMF,eAAgB,CAAA,CAAA;EACxB,CAAA,EAAG,EAAE,CAAA;EAEL,MAAMG,SAAwC,GAAA;IAC5CT,MAAQ,EAAA,yCAAA;IACRU,IAAM,EAAA;EAAA,CACR;EAEM,MAAAC,KAAA,GAAuB;IAACC,QAAA,EAAU;GAAU;EAElD,sCACG,KACC,EAAA;IAAAC,QAAA,EAAA,CAAA,eAAAC,UAAA,CAAAA,GAAA,CAAC,MAAK,EAAA;MAAAC,IAAA,EAAK,2CAA4C;MAAAC,GAAA,EAAI;KAAa,CAAA,EACxEF,eAAAA,UAAAA,CAAAA,GAAA,CAAC,KAAI,EAAA;MAAA,iBAAA,EAAe,IAClB;MAAAD,QAAA,EAAA,eAAAC,UAAA,CAAAA,GAAA,CAAC,OAAA,EAAA;QACCG,OAAS,EAAAX,eAAA;QACTK,KAAO,EAAAf,IAAA,KAAS,MAAS,GAAAe,KAAA,GAAQ,CAAC,CAAA;QAClCF,SAAA,EAAWA,UAAUb,IAAI,CAAA;QACzBsB,GAAK,EAAArB;MAAA,CAAA;KAET,CAAA;EACF,CAAA,CAAA;AAEJ,CAAA;ACjCa,MAAAsB,SAAA,GAAY5C,gBAAAA,CAAAA,OAAO6C,EAAAA,CAAAA,GAAG,CAAA;AAAA,sBACbC,KAAA;EAAA,IAAC;IAAC3C;EAAK,CAAA,GAAA2C,KAAA;EAAA,OAAM3C,MAAMC,MAAO,CAAAC,KAAA,EAAOC,IAAM,EAAAC,OAAA,EAASC,GAAG;AAAA;AAAA,YAC7DuC,KAAA;EAAA,IAAC;IAAC5C;GAAW,GAAA4C,KAAA;EAAA,OAAA,aAAa5C,KAAM,CAAAC,MAAA,EAAQC,KAAO,EAAAC,IAAA,EAAMC,OAAS,EAAAG,MAAM,EAAE;AAAA;AAAA;AAAA;AAAA,mBAG/DsC,KAAA;EAAA,IAAC;IAAC7C;GAAK,GAAA6C,KAAA;EAAA,OAAM7C,MAAMC,MAAO,CAAA6C,KAAA,CAAM,CAAC,CAAC;AAAA;AAAA;AAAA,CAAA;AAIrD,MAAMC,WAAc,GAAAC,KAAA,IAA+C;EAAA,IAA9C;IAACC,KAAA;IAAOC;GAAsC,GAAAF,KAAA;EACjE,QAAQC,MAAME,IAAM;IAClB,KAAK,OAAA;MACH,OAAQf,eAAAA,UAAAA,CAAAA,GAAA,CAAArB,WAAA,EAAA;QAAYE,GAAK,EAAAiC,GAAA;QAAKhC,MAAK;MAAS,CAAA,CAAA;IAC9C;MAEI,OAAAkB,eAAAA,UAAAA,CAAAA,GAAA,CAACgB,EAAAA,CAAAA,IAAK,EAAA;QAAAC,OAAA,EAAQ,QACZ;QAAAlB,QAAA,EAAA,eAAAC,UAAA,CAAAA,GAAA,CAAC,KAAA,EAAA;UACCkB,GAAI,EAAA,SAAA;UACJrC,GAAA,EAAKgC,OAAOM,OAAS,EAAAL,GAAA;UACrBjB,KAAO,EAAA;YACLuB,QAAU,EAAA,MAAA;YACVC,MAAQ,EAAA,MAAA;YACRC,OAAS,EAAA,OAAA;YACTC,SAAW,EAAA;UACb;QAAA,CAEJ;MAAA,CAAA,CAAA;EAEN;AACF,CAAA;AAEA,MAAMC,YAAe,GAAAC,KAAA,IAA6B;EAAA,IAA5B;IAACZ;GAA2B,GAAAY,KAAA;EAC1C,MAAAX,GAAA,GAAMD,SAASA,KAAM,CAAAC,GAAA;EAEvB,IAAA,CAACD,KAAS,IAAA,CAACC,GAAK,EAAA;IACX,OAAA,IAAA;EACT;EAEM,MAAA;IAACY,QAAU;IAAAC;EAAQ,CAAA,GAAAd,KAAA;EACnB,MAAA;IAACe,QAAU;IAAAC;EAAY,CAAA,GAAAF,IAAA;EAG3B,OAAA,eAAAG,UAAA,CAAAA,IAAA,CAACzB,SAAU,EAAA;IAAA0B,YAAA,EAAc,CACvB;IAAAhC,QAAA,EAAA,CAACC,eAAAA,UAAAA,CAAAA,GAAA,CAAAW,WAAA,EAAA;MAAYE;MAAcC;IAAU,CAAA,CAAA,EAAA,eACpCd,cAAA,CAAA5B,QAAA,EAAA;MAAS4D,OAAS,EAAA,CAAA;MAAGC,QAAQ,CAAG;MAAAC,MAAA,EAAQ,CACvC;MAAAnC,QAAA,EAAA,eAAA+B,UAAA,CAAAA,IAAA,CAACK;QAAKC,IAAM,EAAA,CAAA;QAAGC,KAAO,EAAA,UAAUX,QAAQ,EACrC;QAAA3B,QAAA,EAAA,CAAA2B,QAAA,EAAS,GAAA,EAAEE,QAAY,IAAA,IAAIU,oBAAY,CAAAC,OAAA,CAAAX,QAAQ,CAAC,GAAA;MAAA,CACnD;IACF,CAAA,CAAA,EACCC,QAAA,IACE7B,eAAAA,UAAAA,CAAAA,GAAA,CAAAvB,YAAA,EAAA;MAAauD,OAAS,EAAA,CAAA;MAAGC,MAAQ,EAAA,CAAA;MAAGC,MAAQ,EAAA,CAAA;MAC3CnC,QAAC,EAAA,eAAAC,UAAA,CAAAA,GAAA,CAAAmC,EAAA,CAAAA,IAAA,EAAA;QAAKC,IAAM,EAAA,CAAA;QAAGC,OAAO,mBAAmBX,QAAQ,EAC9C;QAAA3B,QAAA,EAAAyC,2BAAAA,CAAAA,OAAA,CAAmBX,QAAU,EAAA;UAACY,aAAe,EAAA,IAAA;UAAMC,oBAAsB,EAAA;QAAA,CAAE;MAAA,CAC9E;IACF,CAAA,CAAA;EAEJ,CAAA,CAAA;AAEJ,CAAA;AC/CA,MAAMC,WAAA,GAAeC,KAAwC,IAAA;EAC3D,MAAM;IAACC,SAAW;IAAAC,OAAA;IAASC;IAAMC,KAAO;IAAAC,MAAA;IAAQC;EAAkB,CAAA,GAAAN,KAAA;EAElE,OAAOO,WAAM,MAAM;IACjB,OAAOC,cAAM,CAAAb,OAAA,CAAAc,GAAA,CACX,WAAWR,SAAS,oCAAoCC,OAAO,SAASC,IAAI,UAAUO,kBAAA,CACpFN,KAAA,CACD,GAAGC,MAAA,IAAU,WAAWA,MAAM,EAAE,UAAUC,cAAc,EAAA,EACzD;MACEK,eAAiB,EAAA,IAAA;MACjBC,MAAQ,EAAA;IACV,CAAA,CACF;EAAA,CACD,EAAEC,IAAK,CAAAC,aAAA,CAAKC,MAAW,IAAAA,MAAA,CAAOC,IAAI,CAAC,CAAA;AACtC,CAAA;AAEA,MAAMC,SAAA,GAAajB,KAAsC,IAAA;EACvD,MAAM;IAACC,SAAW;IAAAC,OAAA;IAASC,IAAM;IAAAE,MAAA;IAAQC;EAAkB,CAAA,GAAAN,KAAA;EAEpD,OAAAO,IAAA,CAAAA,KAAA,CAAM,MACXC,cAAM,CAAAb,OAAA,CAAAc,GAAA,CACJ,WAAWR,SAAS,oCAAoCC,OAAO,SAASC,IAAI,GAC1EE,MAAA,IAAU,WAAWA,MAAM,EAC7B,UAAUC,cAAc,EAAA,EACxB;IACEK,eAAiB,EAAA,IAAA;IACjBC,MAAQ,EAAA;EACV,CACF,CAAA,EACAC,IAAK,CAAAC,SAAAA,CAAAA,GAAA,CAAKC,MAAW,IAAAA,MAAA,CAAOC,IAAI,CAAC,CAAA;AACrC,CAAA;AAEa,MAAAE,MAAA,GAAUlB,KAAuC,IAAA;EAC5D,MAAM;IAACC,SAAW;IAAAC,OAAA;IAASC;IAAMC,KAAO;IAAAC,MAAA;IAAQC;EAAkB,CAAA,GAAAN,KAAA;EAE3D,OAAAmB,IAAA,CAAAA,MAAA,CACLf,KAAM,CAAAS,IAAA,CACJO,SAAAA,CAAAA,eAAef,MAAM,CAAA,EACrBgB,SAAAA,CAAAA,aAAa,GAAG,CAAA,EAChBC,8BAAqB,CAAA,CAAA,EACrBC,SAAAA,CAAAA,SAAU,CAAAC,KAAA,IAAY;IAAA,IAAX,CAACC,CAAA,EAAGC,CAAC,CAAM,GAAAF,KAAA;IACpB,IAAIC,CAAG,EAAA;MACE,OAAA1B,WAAA,CAAY;QAACE,SAAA;QAAWC,OAAS;QAAAC,IAAA;QAAMC,KAAO,EAAAqB,CAAA;QAAGpB,MAAQ,EAAAqB,CAAA;QAAGpB;MAAc,CAAC,CAAE,CAAAO,IAAA,CAClFS,8BAAqB,CAAA,CAAA,CACvB;IACF;IACO,OAAAL,SAAA,CAAU;MAAChB,SAAW;MAAAC,OAAA;MAASC;MAAME,MAAQ,EAAAqB,CAAA;MAAGpB;KAAe,CAAA;EAAA,CACvE,CACH,CAAA,CACF;AACF,CAAA;AClEA,MAAMqB,YAAA,GAAgB3B,KAAiB,IAAA;EAC/B,MAAA;IAACP,KAAO;IAAAmC;EAAiB,CAAA,GAAA5B,KAAA;EAEzB,MAAA6B,kBAAA,GAAqBhF,KAAAA,CAAAA,YAAY,MAAM;IAC3CiF,MAAA,CAAOC,IAAK,CAAA,WAAWH,aAAa,uBAAA,EAAyB,QAAQ,CAAA;EAAA,CACvE,EAAG,CAACA,aAAa,CAAC,CAAA;EAGhB,OAAA,eAAA1C,UAAA,CAAAA,IAAA,CAACd,EAAK,CAAAA,IAAA,EAAA;IAAA4D,KAAA,EAAM,QACT;IAAA7E,QAAA,EAAA,CAAAsC,KAAA,EASDrC,eAAAA,UAAAA,CAAAA,GAAA,CAAC,OAAM,EAAA;MAAAH,KAAA,EAAO;QAACgF,OAAA,EAAS;OAAI;MAAAC,QAAA,EAAU,CAAI,CAAA;MAAA/D,IAAA,EAAK;IAAS,CAAA,CAAA,EAAA,eACvDf,UAAA,CAAAA,GAAA,CAAAM,EAAA,CAAAA,GAAA,EAAA;MAAIT,KAAO,EAAA;QAACC,QAAU,EAAA,UAAA;QAAYiF,KAAO,EAAA;MACxC,CAAA;MAAAhF,QAAA,EAAA,eAAAC,UAAA,CAAAA,GAAA,CAACM,EAAI,CAAAA,GAAA,EAAA;QAAAX,SAAA,EAAU,cACb;QAAAI,QAAA,iBAAAC,UAAA,CAAAA,GAAA,CAACgF,EAAA,CAAAA,MAAA,EAAA;UACCC,QAAU,EAAA,CAAA;UACVC,IAAM,EAAAC,KAAA,CAAAA,UAAA;UACNC,IAAK,EAAA,OAAA;UACLjF,OAAS,EAAAsE,kBAAA;UACTY,IAAK,EAAA;QAAA;OAET;IACF,CAAA,CAAA;EACF,CAAA,CAAA;AAEJ,CAAA;ACzCO,MAAMC,WAAc,GAACC,IAAyB,IAAAA,IAAA,EAAMC,KAAM,CAAA,GAAG,CAAG,EAAAC,GAAA,CAAA,CAAO,EAAAD,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAK,IAAA,EAAA;ACgB/F,SAAwBE,KAAK9C,KAAc,EAAA;EACzC,MAAM;IAACzC,OAAA;IAASyD,IAAM;IAAA+B,KAAA;IAAOtE;GAAU,GAAAuB,KAAA;EACjC,MAAAgD,OAAA,GAAU3G,aAAuB,IAAI,CAAA;EAErC,MAAA;IAACkC,OAAS;IAAAQ;EAAQ,CAAA,GAAAiC,IAAA;EAClB,MAAAlC,QAAA,GAAW4D,WAAY,CAAA1B,IAAA,CAAK9C,GAAG,CAAA;EAE/B,MAAA+E,WAAA,GAAcpG,KAAAA,CAAAA,YAAY,MAAM;IACpCU,OAAA,CAAQ;MAAC,GAAGyD,IAAM;MAAAlC;IAAS,CAAA,CAAA;EAC1B,CAAA,EAAA,CAACvB,OAAS,EAAAyD,IAAA,EAAMlC,QAAQ,CAAC,CAAA;EAG1B,sBAAAI,UAAA,CAAAA,IAAA,CAACtE,IAAA,EAAA;IACC4C,GAAK,EAAAwF,OAAA;IACLvD,KAAA,EAAO,GAAGX,QAAQ,EAAA;IAClBoD,QAAU,EAAA,CAAA;IACVjF,KAAO,EAAA;MACL8F,KAAA,EAAO,GAAGA,KAAK,IAAA;MACftE,MAAA,EAAQ,GAAGA,MAAM,IAAA;MACjByE,eAAA,EAAiB,QAAQ3E,OAAA,EAASL,GAAG;IACvC,CAAA;IACAX,OAAS,EAAA0F,WAAA;IAET9F,QAAA,EAAA,CAAA,eAAAC,cAAA,CAAC5B,QAAS,EAAA;MAAA4D,OAAA,EAAS,CAAG;MAAAC,MAAA,EAAQ;MAAGC,MAAQ,EAAA,CAAA;MACvCnC,QAAC,EAAA,eAAA+B,UAAA,CAAAA,IAAA,CAAAK,OAAA,EAAA;QAAKC,IAAM,EAAA,CAAA;QAAGC,KAAO,EAAA,UAAUX,QAAQ,EACrC;QAAA3B,QAAA,EAAA,CAAA2B,QAAA,EAAS,GAAA,EAAEC,KAAKC,QAAY,IAAA,IAAIU,oBAAY,CAAAC,OAAA,CAAAZ,IAAA,CAAKC,QAAQ,CAAC,GAAA;MAAA,CAC7D;IACF,CAAA,CAAA,EACCD,IAAK,CAAAE,QAAA,IAAA,eACH7B,UAAA,CAAAA,GAAA,CAAAvB,YAAA,EAAA;MAAauD,OAAS,EAAA,CAAA;MAAGC,MAAQ,EAAA,CAAA;MAAGC,MAAQ,EAAA,CAAA;MAC3CnC,QAAC,EAAAC,eAAAA,UAAAA,CAAAA,GAAA,CAAAmC,EAAAA,CAAAA,IAAA,EAAA;QAAKC,IAAM,EAAA,CAAA;QAAGC,KAAO,EAAA,mBAAmBX,QAAQ,EAAA;QAC9C3B,QAAmB,EAAAyC,2BAAA,CAAAD,OAAA,CAAAZ,IAAA,CAAKE,QAAU,EAAA;UAACY,aAAe,EAAA,IAAA;UAAMC,oBAAsB,EAAA;QAAE,CAAA;MACnF,CAAA;KACF,CAAA;EAAA,CAAA,CAEJ;AAEJ;AClDa,MAAAqD,MAAA,GAAStI,gBAAAA,CAAAA,OAAOuI,EAAAA,CAAAA,KAAK,CAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AAMVvI,gBAAO,CAAAA,MAAA,CAAAC,GAAA;AAAA;AAAA;AAAA,CAAA;ACK/B,MAAMuI,gBAAmB,GAAA,EAAA;AACzB,MAAMC,aAAgB,GAAA,CAAA;AACtB,MAAMC,aAAgB,GAAA,CAAA;AAQtB,SAAwBC,mBAAmBxD,KAAyB,EAAA;EAClE,MAAM;IAACyD,MAAQ;IAAAC,OAAA;IAAS9B;IAAe+B,QAAU;IAAAC,UAAA;IAAY3F;EAAS,CAAA,GAAA+B,KAAA;EACtE,MAAMC,YAAY4D,MAAAA,CAAAA,YAAa,EAAA;EAC/B,MAAM3D,UAAU4D,MAAAA,CAAAA,UAAW,EAAA;EAE3B,MAAM,CAACC,KAAA,EAAOC,QAAQ,CAAA,GAAIC,eAAS,EAAE,CAAA;EACrC,MAAM,CAAC7D,KAAA,EAAO8D,QAAQ,CAAA,GAAID,eAAS,EAAE,CAAA;EACrC,MAAM,CAACE,aAAe,EAAAC,gBAAgB,CAAI,GAAAH,KAAA,CAAAA,QAAA,CAAgB,EAAE,CAAA;EAC5D,MAAM,CAACI,QAAA,EAAUC,WAAW,CAAA,GAAIL,KAAmB,CAAAA,QAAA,CAAA,CAAA;EACnD,MAAM,CAACM,SAAA,EAAWC,YAAY,CAAA,GAAIP,eAAS,IAAI,CAAA;EAEzC,MAAAQ,cAAA,GAAiBC,KAAAA,CAAAA,QAAQ,MAAM,IAAIC,qBAAgB,EAAE,CAAA,EAAG,EAAE,CAAA;EAC1D,MAAAC,cAAA,GAAiBF,KAAAA,CAAAA,QAAQ,MAAM,IAAIC,qBAAgB,EAAE,CAAA,EAAG,EAAE,CAAA;EAEhEpI,KAAAA,CAAAA,SAAA,CAAU,MAAM;IACd,IAAI,CAACqF,aAAA,EAAeoC,QAAA,CAAS,2DAA2D,CAAA;EAAA,CAC1F,EAAG,CAACpC,aAAa,CAAC,CAAA;EAElBrF,KAAAA,CAAAA,SAAA,CAAU,MAAM;IACd,MAAMsI,qBAAmC3D,MAAO,CAAA;MAC9CjB,SAAA;MACAC,OAAA;MACAC,IAAM,EAAAyB,aAAA;MACNxB,KAAO,EAAAqE,cAAA;MACPpE,MAAQ,EAAAuE,cAAA;MACRtE,cAAgB,EAAA+C;IACjB,CAAA,EAAEyB,SAAU,CAAA;MACXC,IAAA,EAAOC,OAAgC,IAAA;QACpBZ,gBAAA,CAACa,eAAgB,CAAC,GAAGA,aAAa,GAAGD,OAAA,CAAQE,MAAM,CAAC,CAAA;QACrEZ,WAAA,CAAYU,QAAQX,QAAQ,CAAA;QAC5BG,YAAA,CAAa,KAAK,CAAA;MACpB,CAAA;MACAT,KAAA,EAAQoB,GAAQ,IAAA;QACdnB,QAAA,CACE,GACEmB,GAAI,CAAAC,QAAA,CAASpE,KAAKqE,OAAW,IAAAF,GAAA,CAAIE,WAAW,mBAC9C,+BAAA,CACF;MACF;IAAA,CACD,CAAA;IAEM,OAAA,MAAMR,mBAAmBS,WAAY,EAAA;EAAA,GAC3C,CAACb,cAAA,EAAgBG,gBAAgBhD,aAAe,EAAA3B,SAAA,EAAWC,OAAO,CAAC,CAAA;EAEtE,MAAMqF,uBAA0B,GAAA1I,KAAA,CAAAA,WAAA,CAC7BC,KAA+C,IAAA;IACxC,MAAA0I,QAAA,GAAW1I,MAAM2I,aAAc,CAAAxH,KAAA;IACrCiG,QAAA,CAASsB,QAAQ,CAAA;IACjBpB,gBAAA,CAAiB,EAAE,CAAA;IACnBE,WAAA,CAAY,KAAS,CAAA,CAAA;IACrBE,YAAA,CAAa,IAAI,CAAA;IAEjBI,cAAA,CAAeG,KAAK,EAAE,CAAA;IACtBN,cAAA,CAAeM,KAAKS,QAAQ,CAAA;EAC9B,CAAA,EACA,CAACZ,gBAAgBH,cAAc,CAAA,CACjC;EAEM,MAAAiB,qBAAA,GAAwB7I,KAAAA,CAAAA,YAAY,MAAM;IAC9C2H,YAAA,CAAa,IAAI,CAAA;IACb,IAAAH,QAAA,EAAyBO,cAAA,CAAAG,IAAA,CAAKV,SAAShE,MAAM,CAAA;IACjDoE,cAAA,CAAeM,KAAK3E,KAAK,CAAA;KACxB,CAACwE,cAAA,EAAgBP,QAAU,EAAAI,cAAA,EAAgBrE,KAAK,CAAC,CAAA;EAEpD,MAAMuF,YAAe,GAAA9I,KAAA,CAAAA,WAAA,CAClB+I,IAAgB,IAAA;IACfA,IAAA,CAAKC,OAAO5H,KAAO,EAAA4H,IAAA;IACnBD,IAAA,CAAKE,QAAQlC,UAAW,CAAAjB,IAAA;IACxBgB,QAAA,CAASoC,kBAAWC,IAAK,CAAA,CAACC,WAAIL,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7BlC,OAAA,EAAA;EACV,CAAA,EACA,CAACC,QAAU,EAAAD,OAAA,EAASE,UAAW,CAAAjB,IAAA,EAAM1E,OAAO4H,IAAI,CAAA,CAClD;EAEA,MAAMK,UAAa,GAAArJ,KAAA,CAAAA,WAAA,CAChBsJ,SAAmB,IAAA;IACZ,MAAA;MAACC,KAAO;MAAAC;IAAU,CAAA,GAAAF,SAAA;IAEtB,sBAAA/I,UAAA,CAAAA,GAAA,CAAC0F,IAAA,EAAA;MACCvF,OAAS,EAAAoI,YAAA;MACT3E,MAAMoF,KAAM,CAAApF,IAAA;MACZ+B,OAAOsD,MAAO,CAAAtD,KAAA;MACdtE,QAAQ4H,MAAO,CAAA5H;IAAA,CAAA,CACjB;EAEJ,CAAA,EACA,CAACkH,YAAY,CAAA,CACf;EAEM,MAAAW,WAAA,GAAczJ,iBAAY,CAACkG,KAAkB,IAAA;IACjD,IAAIA,KAAQ,GAAA,GAAA,EAAY,OAAA,GAAA,CAAA,KAAA,IACfA,KAAQ,GAAA,GAAA,EAAY,OAAA,GAAA;IACtB,OAAA,GAAA;EACT,CAAA,EAAG,EAAE,CAAA;EAGH,sBAAA3F,UAAA,CAAAA,GAAA,CAACmJ,EAAA,CAAAA,MAAA,EAAA;IACCC,EAAG,EAAA,sBAAA;IACHC,MAAQ,EAAA,eAAArJ,UAAA,CAAAA,GAAA,CAACuE,YAAa,EAAA;MAAAlC,KAAA,EAAM;MAAiBmC;KAA8B,CAAA;IAC3E8B,OAAA;IACA3B,IAAM,EAAA0B,MAAA;IACNV,KAAO,EAAA,CAAA;IAEP5F,QAAA,EAAA,eAAAC,UAAA,CAAAA,GAAA,CAACgG,EAAM,CAAAA,KAAA,EAAA;MAAAtF,KAAA,EAAO,CAAG;MAAAsB,OAAA,EAAS;MACvBjC,QACC,EAAA4G,KAAA,GAAA3G,eAAAA,UAAAA,CAAAA,GAAA,CAAC3B,EAAAA,CAAAA,IAAK,EAAA;QAAAiL,QAAA,EAAS,QAAS;QAAAtH,OAAA,EAAS;QAAGC,MAAQ,EAAA,CAAA;QAAGsH,MAAQ,EAAA,CAAA;QAAGC,IAAK,EAAA,UAAA;QAC7DzJ,yCAACiB,EAAK,CAAAA,IAAA,EAAA;UAAA4D,KAAA,EAAM,QAAS;UAAA6E,GAAA,EAAK,CACxB;UAAA1J,QAAA,EAAA,CAAA,eAAAC,cAAA,CAACmC,EAAAA,CAAAA,IAAK,EAAA;YAAAC,IAAA,EAAM,CACV;YAAArC,QAAA,EAAA,eAAAC,cAAA,CAAC0J,KAAAA,CAAAA,mBAAiB,CAAA;WACpB,CAAA,EACA1J,eAAAA,UAAAA,CAAAA,GAAA,CAAC2J,EAAAA,CAAAA;YAAOjJ,KAAO,EAAA,CAAA;YACbX,wCAACoC,OAAK,EAAA;cAAAC,IAAA,EAAM,CAAI;cAAArC,QAAA,EAAA4G;YAAA,CAAM;UACxB,CAAA,CAAA;QACF,CAAA;MAAA,CACF,mBAGE7E,UAAA,CAAAA,IAAA,CAAA8H,UAAA,CAAAA,QAAA,EAAA;QAAA7J,QAAA,EAAA,CAAA,eAAAC,cAAA,CAAC3B,EAAAA,CAAAA,IACC,EAAA;UAAA0B,QAAA,EAAA+B,eAAAA,UAAAA,CAAAA,IAAA,CAACiE,MAAO,EAAA;YAAArF,KAAA,EAAO,CACb;YAAAX,QAAA,EAAA,CAAA,eAAAC,cAAA,CAACmC,EAAAA,CAAAA,IAAK,EAAA;cAAAC,IAAA,EAAM,CAAG;cAAAyH,MAAA,EAAO;cAAW9J,QAEjC,EAAA;aAAA,CAAA,EAAA,eACAC,UAAA,CAAAA,GAAA,CAAC8J,EAAA,CAAAA,SAAA,EAAA;cACCC,KAAM,EAAA,eAAA;cACNC,WAAY,EAAA,cAAA;cACZnJ,KAAO,EAAAmC,KAAA;cACPuD,QAAU,EAAA4B;YAAA,CACZ,CAAA;UAAA,CACF;QACF,CAAA,CAAA,EACC,CAAChB,SAAa,IAAAJ,aAAA,CAAckD,MAAW,KAAA,CAAA,IAAA,eACrCjK,UAAA,CAAAA,GAAA,CAAAmC,EAAA,CAAAA,IAAA,EAAA;UAAKC,IAAM,EAAA,CAAA;UAAG8H,KAAK,EAAA,IAAA;UAACnK,QAErB,EAAA;QAAA,CAAA,CAAA,EAAA,eAEFC,UAAA,CAAAA,GAAA,CAACmK,uBAAA,CAAA5H,OAAA,EAAA;UACC6H,YAAYrD,aAAc,CAAAkD,MAAA;UAC1BtC,IAAM,EAAAW,qBAAA;UACN+B,OAAA,EAASpD,QAAW,GAAAA,QAAA,EAAUqD,WAAc,GAAA,IAAA;UAC5CC,eAAiB,EAAA,IAAA;UACjBlJ,MAAO,EAAA,MAAA;UACPmJ,MACE,EAAA,eAAAxK,UAAA,CAAAA,GAAA,CAACgB,OAAK,EAAA;YAAA4D,KAAA,EAAM,QAAS;YAAA3D,OAAA,EAAQ,QAAS;YAAAe,OAAA,EAAS,CAC7C;YAAAjC,QAAA,EAAAC,eAAAA,UAAAA,CAAAA,GAAA,CAACyK,EAAQ,CAAAA,OAAA,EAAA;cAAAP,KAAA,EAAK;YAAC,CAAA;WACjB,CAAA;UAEFQ,YACG1K,eAAAA,UAAAA,CAAAA,GAAA,CAAAgB,EAAA,CAAAA,IAAA,EAAA;YAAK4D,KAAM,EAAA,QAAA;YAAS3D,SAAQ,QAAS;YAAAe,OAAA,EAAS,CAC7C;YAAAjC,QAAA,EAAAC,eAAAA,UAAAA,CAAAA,GAAA,CAACmC;cAAKC,IAAM,EAAA,CAAA;cAAG8H,KAAK,EAAA,IAAA;cAACnK;YAErB,CAAA;WACF,CAAA;UAGDA,QACC,EAAAgH,aAAA,IAAA,eAAA/G,UAAA,CAAAA,GAAA,CAAC2K,mBAAA,CAAApI,OAAA,EAAA;YACC0G,MAAO,EAAA,MAAA;YACP2B,OAAS,EAAA1E,aAAA;YACTlE,OAAS,EAAAmE,aAAA;YACT0E,eAAiB,EAAA3B,WAAA;YACjB4B,MAAQ,EAAA/D,aAAA,CAAcrD,GAAI,CAAC8E,IAAuB,KAAA;cAChD3J,GAAA,EAAK2J,MAAMrH,OAAS,EAAAL,GAAA;cACpB6E,KAAA,EAAO6C,IAAM,EAAArH,OAAA,EAASwE,KAAS,IAAA,IAAA;cAC/BtE,MAAA,EAAQmH,IAAM,EAAArH,OAAA,EAASE,MAAU,IAAA,IAAA;cACjC0J,KAAKvC,IAAK,CAAAY,EAAA;cACVxF,IAAM,EAAA4E;YAAA,CACN,CAAA,CAAA;YACFwC,WAAa,EAAAlC,UAAA;YACbmC,eAAiB,EAAA;cACfC,cAAA,EAAgB;gBAACrL,KAAO,EAAA;kBAACkC,cAAc,GAAGmE,aAAa;;cAAK;YAC9D;UAAA,CACF;QAAA,CAEJ,CAAA;MAAA,CACF;IAEJ,CAAA;EAAA,CAAA,CACF;AAEJ;ACzMA,MAAMiF,cAAcA,CAAA,KAAM;EAEtB,OAAA,eAAArJ,UAAA,CAAAA,IAAA,CAAC,KAAI,EAAA;IAAA6D,KAAA,EAAM,IAAK;IAAAtE,MAAA,EAAO,IAAK;IAAA+J,OAAA,EAAQ,WAAY;IAAAC,IAAA,EAAK,MAAO;IAAAC,KAAA,EAAM,4BAChE;IAAAvL,QAAA,EAAA,CAAA,eAAAC,UAAA,CAAAA,GAAA,CAAC,MAAA,EAAA;MACCuL,CAAE,EAAA,q8CAAA;MACFF,IAAK,EAAA;IAAA,CACP,CAAA,EAAA,eACArL,UAAA,CAAAA,GAAA,CAAC,MAAA,EAAA;MACCuL,CAAE,EAAA,2gBAAA;MACFF,IAAK,EAAA;IAAA,CACP,CAAA,EAAA,eACArL,UAAA,CAAAA,GAAA,CAAC,MAAA,EAAA;MACCuL,CAAE,EAAA,mSAAA;MACFF,IAAK,EAAA;IAAA,CACP,CAAA;EACF,CAAA,CAAA;AAEJ,CAAA;ACRA,SAAwBG,kBAAkB5I,KAAyB,EAAA;EACjE,MAAM;IAAC2D,QAAA;IAAUkF,QAAU;IAAA5K,KAAA;IAAO2F;GAAc,GAAA5D,KAAA;EAC1C,MAAA;IAAC8I;EAAW,CAAA,GAAAlF,UAAA;EACZ,MAAA;IAAChC;EAAiB,CAAA,GAAAkH,OAAA;EAExB,MAAM,CAACC,UAAA,EAAYC,aAAa,CAAA,GAAI/E,eAAS,KAAK,CAAA;EAE5C,MAAAgF,WAAA,GAAcpM,KAAAA,CAAAA,YAAY,MAAM;IACpC8G,QAAA,CAASoC,kBAAWC,IAAK,CAAA,CAACkD,MAAAA,CAAAA,KAAM,CAAC,CAAA,CAAC,CAAC,CAAA;EAAA,CACrC,EAAG,CAACvF,QAAQ,CAAC,CAAA;EAEP,MAAAwF,MAAA,GAAStM,KAAAA,CAAAA,YAAY,MAAM;IAC/BmM,aAAA,CAAc,IAAI,CAAA;EAAA,CACpB,EAAG,CAACA,aAAa,CAAC,CAAA;EAEZ,MAAAtF,OAAA,GAAU7G,KAAAA,CAAAA,YAAY,MAAM;IAChCmM,aAAA,CAAc,KAAK,CAAA;EAAA,CACrB,EAAG,CAACA,aAAa,CAAC,CAAA;EAElB,IAAI,CAACpH,aAAe,EAAA;IAClB,qCACGnG,OAAK,EAAA;MAAAiL,QAAA,EAAS,QAAS;MAAAtH,OAAA,EAAS;MAAGC,MAAQ,EAAA,CAAA;MAAGsH,MAAQ,EAAA,CAAA;MAAGC,MAAK,UAC7D;MAAAzJ,QAAA,EAAA+B,eAAAA,UAAAA,CAAAA,IAAA,CAACd;QAAK4D,KAAM,EAAA,QAAA;QAAS6E,KAAK,CACxB;QAAA1J,QAAA,EAAA,CAAA,eAAAC,cAAA,CAACmC,EAAAA,CAAAA,IAAK,EAAA;UAAAC,IAAA,EAAM,CACV;UAAArC,QAAA,EAAA,eAAAC,cAAA,CAAC0J,KAAAA,CAAAA,mBAAiB,CAAA;SACpB,CAAA,EACA1J,eAAAA,UAAAA,CAAAA,GAAA,CAAC2J,EAAAA,CAAAA;UAAOjJ,KAAO,EAAA,CAAA;UACbX,wCAACoC,OAAK,EAAA;YAAAC,IAAA,EAAM,CAAG;YAAArC,QAAA,EAAA;UAAA,CAGf;QACF,CAAA,CAAA;MACF,CAAA;IACF,CAAA,CAAA;EAEJ;EAEA,sBAEK+B,UAAA,CAAAA,IAAA,CAAA8H,mBAAA,EAAA;IAAA7J,QAAA,EAAA,CACC4L,UAAA,mBAAA3L,UAAA,CAAAA,GAAA,CAACoG,kBAAA,EAAA;MACE,GAAGxD,KAAA;MACJ4B,aAAA;MACA6B,MAAQ,EAAAsF,UAAA;MACRrF,OAAA;MACAzF;IAAA,CACF,CAAA,EAAA,+BAEDmF,EAAAA,CAAAA,KACC,EAAA;MAAAjG,QAAA,EAAA,CAAA,eAAAC,cAAA,CAACwB;QAAaX;OAAuB,CAAA,EAAA,eAErCiB,eAAA,CAACkK,EAAAA,CAAAA;QAAKvC,GAAK,EAAA,CAAA;QAAG5J,OAAO;UAACoM,mBAAA,EAAqB;QACzC,CAAA;QAAAlM,QAAA,EAAA,CAAA,eAAAC,UAAA,CAAAA,GAAA,CAACgF,EAAA,CAAAA,MAAA,EAAA;UACCkH,QAAU,EAAAT,QAAA;UACVrG,IAAK,EAAA,OAAA;UACLF,IAAM,EAAAiG,WAAA;UACN9I,KAAM,EAAA,iBAAA;UACNlC,OAAS,EAAA4L,MAAA;UACT1G,IAAK,EAAA;QAAA,CACP,CAAA,EAAA,eACArF,UAAA,CAAAA,GAAA,CAACgF,EAAA,CAAAA,MAAA,EAAA;UACCkH,QAAA,EAAUT,YAAY,CAAC5K,KAAA;UACvB2I,IAAK,EAAA,UAAA;UACLpE,IAAK,EAAA,OAAA;UACL/C,KAAM,EAAA,cAAA;UACNgD,IAAK,EAAA,QAAA;UACLlF,OAAS,EAAA0L;QAAA,CACX,CAAA;OACF,CAAA;KACF,CAAA;EACF,CAAA,CAAA;AAEJ;ACzEA,MAAMM,qBAAwB,GAAAC,MAAA,IAAoB;EAAA,IAAnB;IAACvL;GAAkB,GAAAuL,MAAA;EAChD,IAAI,CAACvL,KAAO,EAAA;IACH,OAAA,IAAA;EACT;EAEI,IAAAA,KAAA,EAAOM,SAASL,GAAK,EAAA;IACvB,OACGd,eAAAA,UAAAA,CAAAA,GAAA,CAAAgB,EAAAA,CAAAA,IAAA,EAAA;MAAKC,OAAQ,EAAA,QAAA;MAAS2D,KAAM,EAAA,QAAA;MAASvD,MAAO,EAAA,MAAA;MAAOsE,KAAM,EAAA,MAAA;MACxD5F,QAAC,iBAAA+B,UAAA,CAAAA,IAAA,CAAAkE,EAAA,CAAAA,KAAA,EAAA;QAAMtF,OAAO,CACZ;QAAAX,QAAA,EAAA,CAAA,eAAAC,UAAA,CAAAA,GAAA,CAAC,KAAA,EAAA;UACCkB,GAAI,EAAA,SAAA;UACJrC,GAAA,EAAKgC,OAAOM,OAAS,EAAAL,GAAA;UACrBjB,KAAO,EAAA;YACLwM,SAAW,EAAA,SAAA;YACXnK,MAAQ,EAAA,MAAA;YACRd,QAAU,EAAA,MAAA;YACVG,SAAW,EAAA;UACb;QAAA,CACF,CAAA,EAAA,eACCvB,UAAA,CAAAA,GAAA,CAAAmC,EAAA,CAAAA,IAAA,EAAA;UAAKC,IAAM,EAAA,CAAA;UAAIrC,gBAAMgB,IAAK,CAAAuL,MAAA,CAAO,CAAC,CAAA,CAAEC,aAAgB,GAAA1L,KAAA,CAAME,IAAK,CAAAyL,KAAA,CAAM,CAAC;SAAE,CAAA;MAC3E,CAAA;IACF,CAAA,CAAA;EAEJ;EAEA,sBACGxM,UAAA,CAAAA,GAAA,CAAAgB,EAAA,CAAAA,IAAA,EAAA;IAAKC,OAAQ,EAAA,QAAA;IAAS2D,KAAM,EAAA,QAAA;IAASvD,MAAO,EAAA,MAAA;IAAOsE,KAAM,EAAA,MAAA;IACxD5F,QAAC,EAAAC,eAAAA,UAAAA,CAAAA,GAAA,CAAA,KAAA,EAAA;MAAID;KAAU;EACjB,CAAA,CAAA;AAEJ,CAAA;AAOA,MAAM0M,SAAY,GAAAC,MAAA,IAAmC;EAAA,IAAlC;IAAC9M,IAAA;IAAM4G;GAA2B,GAAAkG,MAAA;EAEjD,sBAAA1M,UAAA,CAAAA,GAAA,CAAC2M,MAAA,CAAAA,UAAA,EAAA;IACC/M,IAAA;IACA4G,UAAA;IACAoG,gBAAkB,EAAAT,qBAAA;IAClBlD,MAAQ,EAAA;EAAA,CAAA,CACV;AAEJ,CAAA;ACxCa,MAAA4D,kBAAA,GAAsBC,MAAyB,IAAA;EACpD,MAAA;IAACtI;EAAiB,CAAA,GAAAsI,MAAA;EAExB,OAAOC,iBAAW,CAAA;IAChBhM,IAAM,EAAA,QAAA;IACNwE,IAAM,EAAA,eAAA;IACNlD,KAAO,EAAA,eAAA;IACPqJ,OAAS,EAAA;MACPlH;IACF,CAAA;IACAwI,MAAQ,EAAA,CACNC,kBAAY,CAAA;MACVlM,IAAM,EAAA,QAAA;MACNwE,IAAM,EAAA,UAAA;MACNlD,KAAO,EAAA;IAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;MACVlM,IAAM,EAAA,QAAA;MACNwE,IAAM,EAAA,IAAA;MACNlD,KAAO,EAAA;IAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;MACVlM,IAAM,EAAA,uBAAA;MACNwE,IAAM,EAAA,MAAA;MACNlD,KAAO,EAAA;IAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;MACVlM,IAAM,EAAA,sBAAA;MACNwE,IAAM,EAAA,SAAA;MACNlD,KAAO,EAAA;IAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;MACVlM,IAAM,EAAA,QAAA;MACNwE,IAAM,EAAA,MAAA;MACNlD,KAAO,EAAA;IAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;MACVlM,IAAM,EAAA,KAAA;MACNwE,IAAM,EAAA,KAAA;MACNlD,KAAO,EAAA;IAAA,CACR,CAAA,CACH;IACA,GAAI;MACF6K,UAAY,EAAA;QACVC,KAAO,EAAA3B,iBAAA;QACP5L,IAAM,EAAA6M,SAAA;QACNtL,OAAS,EAAAK;MACX;IACF,CAAA;IACAL,OAAS,EAAA;MACPiM,MAAQ,EAAA;QACNzL,IAAM,EAAA,MAAA;QACNR,OAAS,EAAA,SAAA;QACTL,GAAK,EAAA,KAAA;QACLY,QAAU,EAAA,UAAA;QACVX,IAAM,EAAA;MACR,CAAA;MACAsM,gBAA8C;QAAA,IAAtC;UAACvM,GAAA;UAAKa;UAAMR,OAAS;UAAAO,QAAA;UAAUX;SAAO,GAAAuM,MAAA;QACrC,OAAA;UACLjL,KAAO,EAAAX,QAAA;UACP6L,QAAU,EAAAxM,IAAA;UACVF,KAAO,EAAA;YACLC,GAAA;YACAa,IAAA;YACAR,OAAA;YACAO;UACF;QAAA,CACF;MACF;IACF;EAAA,CACD,CAAA;AACH,CAAA;ACrFO,MAAM8L,4BAA4BT,MAAAA,CAAAA,UAAW,CAAA;EAClDhM,IAAM,EAAA,QAAA;EACNwE,IAAM,EAAA,sBAAA;EACNlD,KAAO,EAAA,eAAA;EACP2K,MAAQ,EAAA,CACNC,kBAAY,CAAA;IACVlM,IAAM,EAAA,QAAA;IACNwE,IAAM,EAAA,QAAA;IACNlD,KAAO,EAAA;EAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;IACVlM,IAAM,EAAA,QAAA;IACNwE,IAAM,EAAA,OAAA;IACNlD,KAAO,EAAA;EAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;IACVlM,IAAM,EAAA,KAAA;IACNwE,IAAM,EAAA,KAAA;IACNlD,KAAO,EAAA;EAAA,CACR,CAAA;AAEL,CAAC,CAAA;ACrBM,MAAMoL,6BAA6BV,MAAAA,CAAAA,UAAW,CAAA;EACnDhM,IAAM,EAAA,QAAA;EACNwE,IAAM,EAAA,uBAAA;EACNlD,KAAO,EAAA,gBAAA;EACP2K,MAAQ,EAAA,CACNC,kBAAY,CAAA;IACVlM,IAAM,EAAA,QAAA;IACNwE,IAAM,EAAA,KAAA;IACNlD,KAAO,EAAA;EAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;IACVlM,IAAM,EAAA,QAAA;IACNwE,IAAM,EAAA,UAAA;IACNlD,KAAO,EAAA;EAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;IACVlM,IAAM,EAAA,QAAA;IACNwE,IAAM,EAAA,UAAA;IACNlD,KAAO,EAAA;EAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;IACVlM,IAAM,EAAA,QAAA;IACNwE,IAAM,EAAA,QAAA;IACNlD,KAAO,EAAA;EAAA,CACR,CAAA,EACD4K,kBAAY,CAAA;IACVlM,IAAM,EAAA,QAAA;IACNwE,IAAM,EAAA,OAAA;IACNlD,KAAO,EAAA;EAAA,CACR,CAAA;AAEL,CAAC,CAAA;ACRY,MAAAqL,aAAA,GAAgBC,MAAAA,CAAAA,YAA2B,CAACb,MAAW,IAAA;EAC3D,OAAA;IACLvH,IAAM,EAAA,sBAAA;IACNqI,MAAQ,EAAA;MACNC,OAAO,CAACL,yBAAA,EAA2BC,0BAA4B,EAAAZ,kBAAA,CAAmBC,MAAM,CAAC;IAC3F;EAAA,CACF;AACF,CAAC,CAAA;"}
|
|
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/content/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.3",
|
|
4
4
|
"description": "Choose assets from your Shopify store in your Sanity Studio",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
},
|
|
93
93
|
"peerDependencies": {
|
|
94
94
|
"react": "^18.3 || ^19",
|
|
95
|
-
"sanity": "^3 || ^4.0.0-0",
|
|
95
|
+
"sanity": "^3 || ^4.0.0-0 || ^5.0.0",
|
|
96
96
|
"styled-components": "^6"
|
|
97
97
|
},
|
|
98
98
|
"engines": {
|
|
@@ -11,7 +11,7 @@ const DialogHeader = (props: Props) => {
|
|
|
11
11
|
const {title, shopifyDomain} = props
|
|
12
12
|
|
|
13
13
|
const handleOpenInNewTab = useCallback(() => {
|
|
14
|
-
window.open(`https://${shopifyDomain}/admin/
|
|
14
|
+
window.open(`https://${shopifyDomain}/admin/content/files`, '_blank')
|
|
15
15
|
}, [shopifyDomain])
|
|
16
16
|
|
|
17
17
|
return (
|
|
@@ -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
|
)
|