sanity-plugin-dashboard-widget-netlify

3.0.173.0.18
dist/index.js.map
~dist/index.js.mapModified
+1−1
Index: package/dist/index.js.map
===================================================================
--- package/dist/index.js.map
+++ package/dist/index.js.map
@@ -1,1 +1,1 @@
-{"version":3,"file":"index.js","names":["FunctionComponent","PropsWithChildren","Link","props","$","_c","url","children","t0","Props","adminUrl","Links","t1","t2","Button","Flex","Box","Card","Text","Stack","Label","FunctionComponent","useCallback","useEffect","useRef","useState","DeployAction","Site","Links","Props","site","onDeploy","IMAGE_PULL_INTERVAL","getImageUrl","siteId","branchName","baseUrl","time","Date","getTime","branch","useBadgeImage","$","_c","t0","src","setSrc","t1","update","t2","t3","interval","window","setInterval","clearInterval","t4","const","useDeploy","updateBadge","timeoutRef","Symbol","for","clearTimeout","current","setTimeout","SiteItem","props","hasBadgeError","setHasBadgeError","id","name","title","url","adminUrl","buildHookId","badge","handleDeploy","handleBadgeError","t5","t6","t7","t8","t9","Flex","Box","Card","Text","Spinner","Stack","DeployAction","Site","SiteItem","Props","isLoading","sites","onDeploy","SiteList","props","$","_c","t0","Symbol","for","t1","length","site","id","map","DashboardWidgetContainer","Button","Flex","Card","Text","Box","styled","NetlifyWidgetProps","SiteList","ContentCard","NetlifyWidget","props","$","_c","title","description","isLoading","sites","onDeploy","t0","undefined","t1","footer","t2","__html","t3","t4","t5","ReactNode","NetlifyWidget","Site","SiteWidgetOption","WidgetOptions","DEFAULT_TITLE","toSite","option","apiId","name","title","buildHookId","url","branch","id","undefined","adminUrl","deploy","site","fetch","method","catch","Widget","options","$","_c","t0","sites","t1","map","t2","t3","description","DashboardWidget","LayoutConfig","WidgetOptions","Widget","NetlifyWidgetConfig","layout","netlifyWidget","config","name","component","width"],"sources":["../src/components/SiteItem/Links.tsx","../src/components/SiteItem/index.tsx","../src/components/SiteList.tsx","../src/components/NetlifyWidget.tsx","../src/widget.tsx","../src/plugin.tsx"],"sourcesContent":["import type {FunctionComponent, PropsWithChildren} from 'react'\n\nconst Link = (props: PropsWithChildren<{url: string}>) => {\n  const {url, children} = props\n\n  return (\n    <span>\n      <a href={url} target=\"_blank\" rel=\"noreferrer\">\n        {children}\n      </a>\n    </span>\n  )\n}\n\ntype Props = {\n  url?: string\n  adminUrl?: string\n}\n\nconst Links: FunctionComponent<Props> = (props) => {\n  const {url, adminUrl} = props\n\n  if (url && adminUrl) {\n    return (\n      <span>\n        (<Link url={url}>view</Link>, <Link url={adminUrl}>admin</Link>)\n      </span>\n    )\n  }\n\n  if (url) {\n    return <Link url={url}>(view)</Link>\n  }\n  if (adminUrl) {\n    return <Link url={adminUrl}>(admin)</Link>\n  }\n  return null\n}\n\nexport default Links\n","import {Button, Flex, Box, Card, Text, Stack, Label} from '@sanity/ui'\nimport {type FunctionComponent, useCallback, useEffect, useRef, useState} from 'react'\n\nimport {type DeployAction, type Site} from '../../types'\nimport Links from './Links'\n\ninterface Props {\n  site: Site\n  onDeploy: DeployAction\n}\n\nconst IMAGE_PULL_INTERVAL = 10000\n\nconst getImageUrl = (siteId: string, branchName?: string) => {\n  const baseUrl = `https://api.netlify.com/api/v1/badges/${siteId}/deploy-status`\n  const time = new Date().getTime()\n  const branch = `branch=${branchName}`\n\n  return branchName ? `${baseUrl}?${time}&${branch}` : `${baseUrl}?${time}`\n}\n\nconst useBadgeImage = (siteId: string, branchName?: string) => {\n  const [src, setSrc] = useState(() => getImageUrl(siteId, branchName))\n  const update = useCallback(() => setSrc(getImageUrl(siteId, branchName)), [siteId, branchName])\n\n  useEffect(() => {\n    const interval = window.setInterval(update, IMAGE_PULL_INTERVAL)\n    return () => window.clearInterval(interval)\n  }, [update])\n\n  return [src, update] as const\n}\n\nconst useDeploy = (site: Site, onDeploy: DeployAction, updateBadge: () => void) => {\n  const timeoutRef = useRef(-1)\n  useEffect(() => () => window.clearTimeout(timeoutRef.current), [])\n\n  return useCallback(() => {\n    onDeploy(site)\n    timeoutRef.current = window.setTimeout(updateBadge, 1000)\n  }, [site, onDeploy, updateBadge])\n}\n\nconst SiteItem: FunctionComponent<Props> = (props) => {\n  const [hasBadgeError, setHasBadgeError] = useState(false)\n  const {site, onDeploy} = props\n  const {id, name, title, url, adminUrl, buildHookId, branch} = site\n\n  const [badge, updateBadge] = useBadgeImage(id, branch)\n  const handleDeploy = useDeploy(site, onDeploy, updateBadge)\n  const handleBadgeError = () => {\n    setHasBadgeError(true)\n  }\n\n  return (\n    <Flex as=\"li\">\n      <Box flex={1} paddingY={2} paddingX={3}>\n        <Stack gap={2}>\n          <Text as=\"h4\">\n            {title || name}\n            <Links url={url} adminUrl={adminUrl} />\n          </Text>\n\n          <Flex justify=\"flex-start\">\n            {!hasBadgeError && <img src={badge} onError={handleBadgeError} alt=\"Badge\" />}\n            {hasBadgeError && (\n              <Card tone=\"critical\" radius={2} padding={2}>\n                <Label size={0} muted>\n                  Failed to load badge\n                </Label>\n              </Card>\n            )}\n          </Flex>\n        </Stack>\n      </Box>\n\n      {buildHookId ? (\n        <Box paddingY={2} paddingX={3}>\n          <Button mode=\"ghost\" onClick={handleDeploy} text=\"Deploy\" />\n        </Box>\n      ) : null}\n    </Flex>\n  )\n}\n\nexport default SiteItem\n","import {Flex, Box, Card, Text, Spinner, Stack} from '@sanity/ui'\n\nimport {type DeployAction, type Site} from '../types'\nimport SiteItem from './SiteItem'\n\ninterface Props {\n  isLoading: boolean\n  sites?: Site[]\n  onDeploy: DeployAction\n}\n\nexport default function SiteList(props: Props) {\n  const {isLoading, onDeploy, sites} = props\n  if (isLoading) {\n    return (\n      <Card padding={4}>\n        <Flex direction=\"column\" justify=\"center\" align=\"center\">\n          <Spinner muted />\n          <Box marginTop={3}>\n            <Text muted>Loading sites…</Text>\n          </Box>\n        </Flex>\n      </Card>\n    )\n  }\n  if (!sites || (sites && sites.length === 0)) {\n    return (\n      <Card tone=\"critical\" padding={3}>\n        <Text>No sites are defined in the widget options. Please check your config.</Text>\n      </Card>\n    )\n  }\n  return (\n    <Box paddingY={2}>\n      <Stack as=\"ul\" gap={2}>\n        {sites.map((site) => {\n          return <SiteItem onDeploy={onDeploy} site={site} key={site.id} />\n        })}\n      </Stack>\n    </Box>\n  )\n}\n","import {DashboardWidgetContainer} from '@sanity/dashboard'\nimport {Button, Flex, Card, Text, Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {type NetlifyWidgetProps} from '../types'\nimport SiteList from './SiteList'\n\nconst ContentCard = styled(Card)`\n  min-height: 66px;\n`\n\nexport default function NetlifyWidget(props: NetlifyWidgetProps) {\n  const netlifySitesUrl = 'https://app.netlify.com/account/sites'\n  const {title, description, isLoading, sites, onDeploy} = props\n\n  const footer = (\n    <Flex direction=\"column\" align=\"stretch\">\n      <Button\n        as=\"a\"\n        href={isLoading ? undefined : netlifySitesUrl}\n        paddingX={2}\n        paddingY={4}\n        mode=\"bleed\"\n        tone=\"primary\"\n        text=\"Manage sites at Netlify\"\n        loading={isLoading}\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n      />\n    </Flex>\n  )\n\n  return (\n    <DashboardWidgetContainer header={title} footer={footer}>\n      <ContentCard paddingY={1}>\n        {description && (\n          <Box paddingY={3} paddingX={3}>\n            <Text as=\"p\" size={1} muted>\n              <span dangerouslySetInnerHTML={{__html: description}} />\n            </Text>\n          </Box>\n        )}\n        <SiteList isLoading={isLoading} onDeploy={onDeploy} sites={sites} />\n      </ContentCard>\n    </DashboardWidgetContainer>\n  )\n}\n","import type {ReactNode} from 'react'\n\nimport NetlifyWidget from './components/NetlifyWidget'\nimport type {Site, SiteWidgetOption, WidgetOptions} from './types'\n\nconst DEFAULT_TITLE = 'Netlify sites'\n\nfunction toSite(option: SiteWidgetOption): Site {\n  const {apiId, name, title, buildHookId, url, branch} = option\n\n  return {\n    id: apiId,\n    name,\n    title,\n    buildHookId,\n    url:\n      url ||\n      (branch && name ? `https://${branch}--${name}.netlify.app/` : undefined) ||\n      (name ? `https://${name}.netlify.app/` : undefined),\n    adminUrl: name ? `https://app.netlify.com/sites/${name}` : undefined,\n    branch,\n  }\n}\n\nfunction deploy(site: Site): void {\n  if (!site.buildHookId) {\n    return\n  }\n\n  fetch(`https://api.netlify.com/build_hooks/${site.buildHookId}`, {method: 'POST'}).catch(() => {\n    // Build hook failures are intentionally ignored; the deploy badge will\n    // keep reflecting the actual deploy status of the site.\n  })\n}\n\nexport default function Widget(options: WidgetOptions): ReactNode {\n  const sites = (options.sites || []).map(toSite)\n\n  return (\n    <NetlifyWidget\n      title={options.title || DEFAULT_TITLE}\n      description={options.description}\n      sites={sites}\n      isLoading={false}\n      onDeploy={deploy}\n    />\n  )\n}\n","import {type DashboardWidget, type LayoutConfig} from '@sanity/dashboard'\n\nimport {type WidgetOptions} from './types'\nimport Widget from './widget'\n\nexport type NetlifyWidgetConfig = WidgetOptions & {layout?: LayoutConfig}\n\nexport function netlifyWidget(config: NetlifyWidgetConfig): DashboardWidget {\n  return {\n    name: 'netlify-widget',\n    component: () => {\n      return <Widget {...config} />\n    },\n    layout: config.layout ?? {width: 'medium'},\n  }\n}\n"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"index.js","names":["<span>\n      <a href={url} target=\"_blank\" rel=\"noreferrer\">\n        {children}\n      </a>\n    </span>","<Link url={url}>view</Link>","<Link url={adminUrl}>admin</Link>","<span>\n        (<Link url={url}>view</Link>, <Link url={adminUrl}>admin</Link>)\n      </span>","<Link url={url}>(view)</Link>","<Link url={adminUrl}>(admin)</Link>","() => getImageUrl(siteId, branchName)","() => setSrc(getImageUrl(siteId, branchName))","useCallback(() => setSrc(getImageUrl(siteId, branchName)), [siteId, branchName])","() => {\n    const interval = window.setInterval(update, IMAGE_PULL_INTERVAL)\n    return () => window.clearInterval(interval)\n  }","[update]","[src, update]","() => () => window.clearTimeout(timeoutRef.current)","[]","() => {\n    onDeploy(site)\n    timeoutRef.current = window.setTimeout(updateBadge, 1000)\n  }","useCallback(() => {\n    onDeploy(site)\n    timeoutRef.current = window.setTimeout(updateBadge, 1000)\n  }, [site, onDeploy, updateBadge])","() => {\n    setHasBadgeError(true)\n  }","<Links url={url} adminUrl={adminUrl} />","<Text as=\"h4\">\n            {title || name}\n            <Links url={url} adminUrl={adminUrl} />\n          </Text>","title || name","!hasBadgeError && <img src={badge} onError={handleBadgeError} alt=\"Badge\" />","hasBadgeError && (\n              <Card tone=\"critical\" radius={2} padding={2}>\n                <Label size={0} muted>\n                  Failed to load badge\n                </Label>\n              </Card>\n            )","<Flex justify=\"flex-start\">\n            {!hasBadgeError && <img src={badge} onError={handleBadgeError} alt=\"Badge\" />}\n            {hasBadgeError && (\n              <Card tone=\"critical\" radius={2} padding={2}>\n                <Label size={0} muted>\n                  Failed to load badge\n                </Label>\n              </Card>\n            )}\n          </Flex>","<Box flex={1} paddingY={2} paddingX={3}>\n        <Stack gap={2}>\n          <Text as=\"h4\">\n            {title || name}\n            <Links url={url} adminUrl={adminUrl} />\n          </Text>\n\n          <Flex justify=\"flex-start\">\n            {!hasBadgeError && <img src={badge} onError={handleBadgeError} alt=\"Badge\" />}\n            {hasBadgeError && (\n              <Card tone=\"critical\" radius={2} padding={2}>\n                <Label size={0} muted>\n                  Failed to load badge\n                </Label>\n              </Card>\n            )}\n          </Flex>\n        </Stack>\n      </Box>","buildHookId ? (\n        <Box paddingY={2} paddingX={3}>\n          <Button mode=\"ghost\" onClick={handleDeploy} text=\"Deploy\" />\n        </Box>\n      ) : null","<Flex as=\"li\">\n      <Box flex={1} paddingY={2} paddingX={3}>\n        <Stack gap={2}>\n          <Text as=\"h4\">\n            {title || name}\n            <Links url={url} adminUrl={adminUrl} />\n          </Text>\n\n          <Flex justify=\"flex-start\">\n            {!hasBadgeError && <img src={badge} onError={handleBadgeError} alt=\"Badge\" />}\n            {hasBadgeError && (\n              <Card tone=\"critical\" radius={2} padding={2}>\n                <Label size={0} muted>\n                  Failed to load badge\n                </Label>\n              </Card>\n            )}\n          </Flex>\n        </Stack>\n      </Box>\n\n      {buildHookId ? (\n        <Box paddingY={2} paddingX={3}>\n          <Button mode=\"ghost\" onClick={handleDeploy} text=\"Deploy\" />\n        </Box>\n      ) : null}\n    </Flex>","<Spinner muted />","<Card padding={4}>\n        <Flex direction=\"column\" justify=\"center\" align=\"center\">\n          <Spinner muted />\n          <Box marginTop={3}>\n            <Text muted>Loading sites…</Text>\n          </Box>\n        </Flex>\n      </Card>","<Card tone=\"critical\" padding={3}>\n        <Text>No sites are defined in the widget options. Please check your config.</Text>\n      </Card>","sites.map((site) => {\n          return <SiteItem onDeploy={onDeploy} site={site} key={site.id} />\n        })","(site) => {\n          return <SiteItem onDeploy={onDeploy} site={site} key={site.id} />\n        }","<Box paddingY={2}>\n      <Stack as=\"ul\" gap={2}>\n        {sites.map((site) => {\n          return <SiteItem onDeploy={onDeploy} site={site} key={site.id} />\n        })}\n      </Stack>\n    </Box>","<Flex direction=\"column\" align=\"stretch\">\n      <Button\n        as=\"a\"\n        href={isLoading ? undefined : netlifySitesUrl}\n        paddingX={2}\n        paddingY={4}\n        mode=\"bleed\"\n        tone=\"primary\"\n        text=\"Manage sites at Netlify\"\n        loading={isLoading}\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n      />\n    </Flex>","isLoading ? undefined : netlifySitesUrl","description && (\n          <Box paddingY={3} paddingX={3}>\n            <Text as=\"p\" size={1} muted>\n              <span dangerouslySetInnerHTML={{__html: description}} />\n            </Text>\n          </Box>\n        )","<SiteList isLoading={isLoading} onDeploy={onDeploy} sites={sites} />","<ContentCard paddingY={1}>\n        {description && (\n          <Box paddingY={3} paddingX={3}>\n            <Text as=\"p\" size={1} muted>\n              <span dangerouslySetInnerHTML={{__html: description}} />\n            </Text>\n          </Box>\n        )}\n        <SiteList isLoading={isLoading} onDeploy={onDeploy} sites={sites} />\n      </ContentCard>","<DashboardWidgetContainer header={title} footer={footer}>\n      <ContentCard paddingY={1}>\n        {description && (\n          <Box paddingY={3} paddingX={3}>\n            <Text as=\"p\" size={1} muted>\n              <span dangerouslySetInnerHTML={{__html: description}} />\n            </Text>\n          </Box>\n        )}\n        <SiteList isLoading={isLoading} onDeploy={onDeploy} sites={sites} />\n      </ContentCard>\n    </DashboardWidgetContainer>","options.sites || []","sites","(options.sites || []).map(toSite)","<NetlifyWidget\n      title={options.title || DEFAULT_TITLE}\n      description={options.description}\n      sites={sites}\n      isLoading={false}\n      onDeploy={deploy}\n    />","description","options.title || DEFAULT_TITLE"],"sources":["../src/components/SiteItem/Links.tsx","../src/components/SiteItem/index.tsx","../src/components/SiteList.tsx","../src/components/NetlifyWidget.tsx","../src/widget.tsx","../src/plugin.tsx"],"sourcesContent":["import type {FunctionComponent, PropsWithChildren} from 'react'\n\nconst Link = (props: PropsWithChildren<{url: string}>) => {\n  const {url, children} = props\n\n  return (\n    <span>\n      <a href={url} target=\"_blank\" rel=\"noreferrer\">\n        {children}\n      </a>\n    </span>\n  )\n}\n\ntype Props = {\n  url?: string\n  adminUrl?: string\n}\n\nconst Links: FunctionComponent<Props> = (props) => {\n  const {url, adminUrl} = props\n\n  if (url && adminUrl) {\n    return (\n      <span>\n        (<Link url={url}>view</Link>, <Link url={adminUrl}>admin</Link>)\n      </span>\n    )\n  }\n\n  if (url) {\n    return <Link url={url}>(view)</Link>\n  }\n  if (adminUrl) {\n    return <Link url={adminUrl}>(admin)</Link>\n  }\n  return null\n}\n\nexport default Links\n","import {Button, Flex, Box, Card, Text, Stack, Label} from '@sanity/ui'\nimport {type FunctionComponent, useCallback, useEffect, useRef, useState} from 'react'\n\nimport {type DeployAction, type Site} from '../../types'\nimport Links from './Links'\n\ninterface Props {\n  site: Site\n  onDeploy: DeployAction\n}\n\nconst IMAGE_PULL_INTERVAL = 10000\n\nconst getImageUrl = (siteId: string, branchName?: string) => {\n  const baseUrl = `https://api.netlify.com/api/v1/badges/${siteId}/deploy-status`\n  const time = new Date().getTime()\n  const branch = `branch=${branchName}`\n\n  return branchName ? `${baseUrl}?${time}&${branch}` : `${baseUrl}?${time}`\n}\n\nconst useBadgeImage = (siteId: string, branchName?: string) => {\n  const [src, setSrc] = useState(() => getImageUrl(siteId, branchName))\n  const update = useCallback(() => setSrc(getImageUrl(siteId, branchName)), [siteId, branchName])\n\n  useEffect(() => {\n    const interval = window.setInterval(update, IMAGE_PULL_INTERVAL)\n    return () => window.clearInterval(interval)\n  }, [update])\n\n  return [src, update] as const\n}\n\nconst useDeploy = (site: Site, onDeploy: DeployAction, updateBadge: () => void) => {\n  const timeoutRef = useRef(-1)\n  useEffect(() => () => window.clearTimeout(timeoutRef.current), [])\n\n  return useCallback(() => {\n    onDeploy(site)\n    timeoutRef.current = window.setTimeout(updateBadge, 1000)\n  }, [site, onDeploy, updateBadge])\n}\n\nconst SiteItem: FunctionComponent<Props> = (props) => {\n  const [hasBadgeError, setHasBadgeError] = useState(false)\n  const {site, onDeploy} = props\n  const {id, name, title, url, adminUrl, buildHookId, branch} = site\n\n  const [badge, updateBadge] = useBadgeImage(id, branch)\n  const handleDeploy = useDeploy(site, onDeploy, updateBadge)\n  const handleBadgeError = () => {\n    setHasBadgeError(true)\n  }\n\n  return (\n    <Flex as=\"li\">\n      <Box flex={1} paddingY={2} paddingX={3}>\n        <Stack gap={2}>\n          <Text as=\"h4\">\n            {title || name}\n            <Links url={url} adminUrl={adminUrl} />\n          </Text>\n\n          <Flex justify=\"flex-start\">\n            {!hasBadgeError && <img src={badge} onError={handleBadgeError} alt=\"Badge\" />}\n            {hasBadgeError && (\n              <Card tone=\"critical\" radius={2} padding={2}>\n                <Label size={0} muted>\n                  Failed to load badge\n                </Label>\n              </Card>\n            )}\n          </Flex>\n        </Stack>\n      </Box>\n\n      {buildHookId ? (\n        <Box paddingY={2} paddingX={3}>\n          <Button mode=\"ghost\" onClick={handleDeploy} text=\"Deploy\" />\n        </Box>\n      ) : null}\n    </Flex>\n  )\n}\n\nexport default SiteItem\n","import {Flex, Box, Card, Text, Spinner, Stack} from '@sanity/ui'\n\nimport {type DeployAction, type Site} from '../types'\nimport SiteItem from './SiteItem'\n\ninterface Props {\n  isLoading: boolean\n  sites?: Site[]\n  onDeploy: DeployAction\n}\n\nexport default function SiteList(props: Props) {\n  const {isLoading, onDeploy, sites} = props\n  if (isLoading) {\n    return (\n      <Card padding={4}>\n        <Flex direction=\"column\" justify=\"center\" align=\"center\">\n          <Spinner muted />\n          <Box marginTop={3}>\n            <Text muted>Loading sites…</Text>\n          </Box>\n        </Flex>\n      </Card>\n    )\n  }\n  if (!sites || (sites && sites.length === 0)) {\n    return (\n      <Card tone=\"critical\" padding={3}>\n        <Text>No sites are defined in the widget options. Please check your config.</Text>\n      </Card>\n    )\n  }\n  return (\n    <Box paddingY={2}>\n      <Stack as=\"ul\" gap={2}>\n        {sites.map((site) => {\n          return <SiteItem onDeploy={onDeploy} site={site} key={site.id} />\n        })}\n      </Stack>\n    </Box>\n  )\n}\n","import {DashboardWidgetContainer} from '@sanity/dashboard'\nimport {Button, Flex, Card, Text, Box} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport {type NetlifyWidgetProps} from '../types'\nimport SiteList from './SiteList'\n\nconst ContentCard = styled(Card)`\n  min-height: 66px;\n`\n\nexport default function NetlifyWidget(props: NetlifyWidgetProps) {\n  const netlifySitesUrl = 'https://app.netlify.com/account/sites'\n  const {title, description, isLoading, sites, onDeploy} = props\n\n  const footer = (\n    <Flex direction=\"column\" align=\"stretch\">\n      <Button\n        as=\"a\"\n        href={isLoading ? undefined : netlifySitesUrl}\n        paddingX={2}\n        paddingY={4}\n        mode=\"bleed\"\n        tone=\"primary\"\n        text=\"Manage sites at Netlify\"\n        loading={isLoading}\n        target=\"_blank\"\n        rel=\"noopener noreferrer\"\n      />\n    </Flex>\n  )\n\n  return (\n    <DashboardWidgetContainer header={title} footer={footer}>\n      <ContentCard paddingY={1}>\n        {description && (\n          <Box paddingY={3} paddingX={3}>\n            <Text as=\"p\" size={1} muted>\n              <span dangerouslySetInnerHTML={{__html: description}} />\n            </Text>\n          </Box>\n        )}\n        <SiteList isLoading={isLoading} onDeploy={onDeploy} sites={sites} />\n      </ContentCard>\n    </DashboardWidgetContainer>\n  )\n}\n","import type {ReactNode} from 'react'\n\nimport NetlifyWidget from './components/NetlifyWidget'\nimport type {Site, SiteWidgetOption, WidgetOptions} from './types'\n\nconst DEFAULT_TITLE = 'Netlify sites'\n\nfunction toSite(option: SiteWidgetOption): Site {\n  const {apiId, name, title, buildHookId, url, branch} = option\n\n  return {\n    id: apiId,\n    name,\n    title,\n    buildHookId,\n    url:\n      url ||\n      (branch && name ? `https://${branch}--${name}.netlify.app/` : undefined) ||\n      (name ? `https://${name}.netlify.app/` : undefined),\n    adminUrl: name ? `https://app.netlify.com/sites/${name}` : undefined,\n    branch,\n  }\n}\n\nfunction deploy(site: Site): void {\n  if (!site.buildHookId) {\n    return\n  }\n\n  fetch(`https://api.netlify.com/build_hooks/${site.buildHookId}`, {method: 'POST'}).catch(() => {\n    // Build hook failures are intentionally ignored; the deploy badge will\n    // keep reflecting the actual deploy status of the site.\n  })\n}\n\nexport default function Widget(options: WidgetOptions): ReactNode {\n  const sites = (options.sites || []).map(toSite)\n\n  return (\n    <NetlifyWidget\n      title={options.title || DEFAULT_TITLE}\n      description={options.description}\n      sites={sites}\n      isLoading={false}\n      onDeploy={deploy}\n    />\n  )\n}\n","import {type DashboardWidget, type LayoutConfig} from '@sanity/dashboard'\n\nimport {type WidgetOptions} from './types'\nimport Widget from './widget'\n\nexport type NetlifyWidgetConfig = WidgetOptions & {layout?: LayoutConfig}\n\nexport function netlifyWidget(config: NetlifyWidgetConfig): DashboardWidget {\n  return {\n    name: 'netlify-widget',\n    component: () => {\n      return <Widget {...config} />\n    },\n    layout: config.layout ?? {width: 'medium'},\n  }\n}\n"],"mappings":"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"}
\ No newline at end of file