sanity-plugin-dashboard-widget-netlify 1.2.1 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -61,7 +61,8 @@ To get dashboard support in Sanity Studio in general:
|
|
|
61
61
|
- `buildHookId` - The id of a build hook you have created for your site within the Netlify administration panel (see *Site Settings > Build & Deploy > Continuous Deployment -> Build Hooks*).
|
|
62
62
|
- `name` - The Netlify site name
|
|
63
63
|
- `title` - Override the site name with a custom title
|
|
64
|
-
- `url` - Optionally override site deployment url. By default it is inferred to be `https://netlify-site-name
|
|
64
|
+
- `url` - Optionally override site deployment url. By default it is inferred to be `https://netlify-site-name.netlify.app`.
|
|
65
|
+
- `branch` - Optionally pass the name of a branch to deploy
|
|
65
66
|
|
|
66
67
|
## Developing on this module
|
|
67
68
|
|
|
@@ -32,19 +32,20 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
32
32
|
var IMAGE_PULL_INTERVAL = 10000;
|
|
33
33
|
exports.IMAGE_PULL_INTERVAL = IMAGE_PULL_INTERVAL;
|
|
34
34
|
|
|
35
|
-
var getImageUrl = siteId => {
|
|
35
|
+
var getImageUrl = (siteId, branchName) => {
|
|
36
36
|
var baseUrl = "https://api.netlify.com/api/v1/badges/".concat(siteId, "/deploy-status");
|
|
37
37
|
var time = new Date().getTime();
|
|
38
|
-
|
|
38
|
+
var branch = "branch=".concat(branchName);
|
|
39
|
+
return branchName ? "".concat(baseUrl, "?").concat(time, "&").concat(branch) : "".concat(baseUrl, "?").concat(time);
|
|
39
40
|
};
|
|
40
41
|
|
|
41
|
-
var useBadgeImage = siteId => {
|
|
42
|
-
var _useState = (0, _react.useState)(() => getImageUrl(siteId)),
|
|
42
|
+
var useBadgeImage = (siteId, branchName) => {
|
|
43
|
+
var _useState = (0, _react.useState)(() => getImageUrl(siteId, branchName)),
|
|
43
44
|
_useState2 = _slicedToArray(_useState, 2),
|
|
44
45
|
src = _useState2[0],
|
|
45
46
|
setSrc = _useState2[1];
|
|
46
47
|
|
|
47
|
-
var update = (0, _react.useCallback)(() => setSrc(getImageUrl(siteId)), [siteId]);
|
|
48
|
+
var update = (0, _react.useCallback)(() => setSrc(getImageUrl(siteId, branchName)), [siteId]);
|
|
48
49
|
(0, _react.useEffect)(() => {
|
|
49
50
|
var interval = window.setInterval(update, IMAGE_PULL_INTERVAL);
|
|
50
51
|
return () => window.clearInterval(interval);
|
|
@@ -74,9 +75,10 @@ var SiteItem = props => {
|
|
|
74
75
|
title = site.title,
|
|
75
76
|
url = site.url,
|
|
76
77
|
adminUrl = site.adminUrl,
|
|
77
|
-
buildHookId = site.buildHookId
|
|
78
|
+
buildHookId = site.buildHookId,
|
|
79
|
+
branch = site.branch;
|
|
78
80
|
|
|
79
|
-
var _useBadgeImage = useBadgeImage(id),
|
|
81
|
+
var _useBadgeImage = useBadgeImage(id, branch),
|
|
80
82
|
_useBadgeImage2 = _slicedToArray(_useBadgeImage, 2),
|
|
81
83
|
badge = _useBadgeImage2[0],
|
|
82
84
|
updateBadge = _useBadgeImage2[1];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/SiteItem/index.tsx"],"names":["IMAGE_PULL_INTERVAL","getImageUrl","siteId","baseUrl","time","Date","getTime","useBadgeImage","src","setSrc","update","interval","window","setInterval","clearInterval","useDeploy","site","onDeploy","updateBadge","timeoutRef","clearTimeout","current","setTimeout","SiteItem","props","hasBadgeError","setHasBadgeError","id","name","title","url","adminUrl","buildHookId","badge","handleDeploy","handleBadgeError"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;AAOO,IAAMA,mBAAmB,GAAG,KAA5B;;;AAEP,IAAMC,WAAW,
|
|
1
|
+
{"version":3,"sources":["../../../src/components/SiteItem/index.tsx"],"names":["IMAGE_PULL_INTERVAL","getImageUrl","siteId","branchName","baseUrl","time","Date","getTime","branch","useBadgeImage","src","setSrc","update","interval","window","setInterval","clearInterval","useDeploy","site","onDeploy","updateBadge","timeoutRef","clearTimeout","current","setTimeout","SiteItem","props","hasBadgeError","setHasBadgeError","id","name","title","url","adminUrl","buildHookId","badge","handleDeploy","handleBadgeError"],"mappings":"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","sourcesContent":["import React, {FunctionComponent, useCallback, useEffect, useRef, useState} from 'react'\nimport {Button, Flex, Box, Card, Text, Stack, Label} from '@sanity/ui'\nimport {DeployAction, Site} from '../../types'\nimport Links from './Links'\n\ninterface Props {\n site: Site\n onDeploy: DeployAction\n}\n\nexport const 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])\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 space={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 && <Card tone=\"critical\" radius={2} padding={2}><Label size={0} muted>Failed to load badge</Label></Card>}\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"],"file":"index.js"}
|
package/dist/props.js
CHANGED
|
@@ -48,8 +48,9 @@ var props$ = options => {
|
|
|
48
48
|
name: site.name,
|
|
49
49
|
title: site.title,
|
|
50
50
|
buildHookId: site.buildHookId,
|
|
51
|
-
url: site.url || site.name && "https://".concat(site.name, ".netlify.app/"),
|
|
52
|
-
adminUrl: site.name && "https://app.netlify.com/sites/".concat(site.name)
|
|
51
|
+
url: site.url || site.branch && "https://".concat(site.branch, "--").concat(site.name, ".netlify.app/") || site.name && "https://".concat(site.name, ".netlify.app/"),
|
|
52
|
+
adminUrl: site.name && "https://app.netlify.com/sites/".concat(site.name),
|
|
53
|
+
branch: site.branch
|
|
53
54
|
}));
|
|
54
55
|
|
|
55
56
|
var _createEventHandler = (0, _reactPropsStream.createEventHandler)(),
|
package/dist/props.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/props.ts"],"names":["noop","undefined","INITIAL_PROPS","title","sites","isLoading","onDeploy","props$","options","configuredSites","map","site","id","apiId","name","buildHookId","url","adminUrl","onDeploy$","setSitesAction$","pipe","type","deployAction$","deployResult$","deployCompletedAction$","result","error","stateReducer$","subscribe","description"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;AAEA,IAAMA,IAAI,GAAG,MAAMC,SAAnB;;AAEA,IAAMC,aAAa,GAAG;AACpBC,EAAAA,KAAK,EAAE,eADa;AAEpBC,EAAAA,KAAK,EAAE,EAFa;AAGpBC,EAAAA,SAAS,EAAE,IAHS;AAIpBC,EAAAA,QAAQ,EAAEN;AAJU,CAAtB,C,CAOA;;AACO,IAAMO,MAAM,GAAIC,OAAD,IAA4B;AAChD,MAAMC,eAAe,GAAG,CAACD,OAAO,CAACJ,KAAR,IAAiB,EAAlB,EAAsBM,GAAtB,CAA2BC,IAAD,KAAW;AAC3DC,IAAAA,EAAE,EAAED,IAAI,CAACE,KADkD;AAE3DC,IAAAA,IAAI,EAAEH,IAAI,CAACG,IAFgD;AAG3DX,IAAAA,KAAK,EAAEQ,IAAI,CAACR,KAH+C;AAI3DY,IAAAA,WAAW,EAAEJ,IAAI,CAACI,WAJyC;AAK3DC,IAAAA,GAAG,EAAEL,IAAI,CAACK,GAAL,IAAaL,IAAI,CAACG,IAAL,sBAAwBH,IAAI,CAACG,IAA7B,
|
|
1
|
+
{"version":3,"sources":["../src/props.ts"],"names":["noop","undefined","INITIAL_PROPS","title","sites","isLoading","onDeploy","props$","options","configuredSites","map","site","id","apiId","name","buildHookId","url","branch","adminUrl","onDeploy$","setSitesAction$","pipe","type","deployAction$","deployResult$","deployCompletedAction$","result","error","stateReducer$","subscribe","description"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;;;;;;;;;;;;;;;;;;;AAEA,IAAMA,IAAI,GAAG,MAAMC,SAAnB;;AAEA,IAAMC,aAAa,GAAG;AACpBC,EAAAA,KAAK,EAAE,eADa;AAEpBC,EAAAA,KAAK,EAAE,EAFa;AAGpBC,EAAAA,SAAS,EAAE,IAHS;AAIpBC,EAAAA,QAAQ,EAAEN;AAJU,CAAtB,C,CAOA;;AACO,IAAMO,MAAM,GAAIC,OAAD,IAA4B;AAChD,MAAMC,eAAe,GAAG,CAACD,OAAO,CAACJ,KAAR,IAAiB,EAAlB,EAAsBM,GAAtB,CAA2BC,IAAD,KAAW;AAC3DC,IAAAA,EAAE,EAAED,IAAI,CAACE,KADkD;AAE3DC,IAAAA,IAAI,EAAEH,IAAI,CAACG,IAFgD;AAG3DX,IAAAA,KAAK,EAAEQ,IAAI,CAACR,KAH+C;AAI3DY,IAAAA,WAAW,EAAEJ,IAAI,CAACI,WAJyC;AAK3DC,IAAAA,GAAG,EAAEL,IAAI,CAACK,GAAL,IAAaL,IAAI,CAACM,MAAL,sBAA0BN,IAAI,CAACM,MAA/B,eAA0CN,IAAI,CAACG,IAA/C,kBAAb,IAAqFH,IAAI,CAACG,IAAL,sBAAwBH,IAAI,CAACG,IAA7B,kBAL/B;AAM3DI,IAAAA,QAAQ,EAAEP,IAAI,CAACG,IAAL,4CAA8CH,IAAI,CAACG,IAAnD,CANiD;AAO3DG,IAAAA,MAAM,EAAEN,IAAI,CAACM;AAP8C,GAAX,CAA1B,CAAxB;;AADgD,4BAWlB,2CAXkB;AAAA;AAAA,MAWzCE,SAXyC;AAAA,MAW9Bb,QAX8B;;AAYhD,MAAMc,eAAe,GAAG,cAAGX,eAAH,EAAoBY,IAApB,CAAyB,oBAAKjB,KAAD,KAAY;AAACkB,IAAAA,IAAI,EAAE,UAAP;AAAmBlB,IAAAA;AAAnB,GAAZ,CAAJ,CAAzB,CAAxB;AACA,MAAMmB,aAAa,GAAGJ,SAAS,CAACE,IAAV,CAAe,oBAAKV,IAAD,KAAW;AAACW,IAAAA,IAAI,EAAE,gBAAP;AAAyBX,IAAAA;AAAzB,GAAX,CAAJ,CAAf,CAAtB;AACA,MAAMa,aAAa,GAAGL,SAAS,CAACE,IAAV,CAAe,0BAAWV,IAAD,IAAU,oBAAOA,IAAP,CAApB,CAAf,CAAtB;AACA,MAAMc,sBAAsB,GAAGD,aAAa,CAACH,IAAd,CAC7B,oBACGK,MAAD;AAAcJ,IAAAA,IAAI,EAAE;AAApB,KAA2CI,MAA3C,CADF,EAEE,2BAAYC,KAAD,IAAW,cAAG;AAACL,IAAAA,IAAI,EAAE,eAAP;AAAwBK,IAAAA;AAAxB,GAAH,CAAtB,CAFF,CAD6B,CAA/B;AAOA,mBAAMP,eAAN,EAAuBG,aAAvB,EAAsCE,sBAAtC,EAA8DJ,IAA9D,CAAmEO,uBAAnE,EAAkFC,SAAlF;AAEA,SAAO,cAAGpB,eAAH,EAAoBY,IAApB,CACL,oBAAKjB,KAAD,KAAY;AACdA,IAAAA,KADc;AAEdD,IAAAA,KAAK,EAAEK,OAAO,CAACL,KAAR,IAAiBD,aAAa,CAACC,KAFxB;AAGd2B,IAAAA,WAAW,EAAEtB,OAAO,CAACsB,WAHP;AAIdzB,IAAAA,SAAS,EAAE,KAJG;AAKdC,IAAAA;AALc,GAAZ,CAAJ,CADK,EAQL,0BAAUJ,aAAV,CARK,CAAP;AAUD,CAlCM","sourcesContent":["import {merge, of} from 'rxjs'\nimport {createEventHandler} from 'react-props-stream'\nimport {catchError, map, startWith, switchMap} from 'rxjs/operators'\nimport {deploy} from './datastores/deploy'\nimport {Site, WidgetOptions} from './types'\nimport {stateReducer$} from './reducers'\n\nconst noop = () => undefined\n\nconst INITIAL_PROPS = {\n title: 'Netlify sites',\n sites: [],\n isLoading: true,\n onDeploy: noop,\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport const props$ = (options: WidgetOptions) => {\n const configuredSites = (options.sites || []).map((site) => ({\n id: site.apiId,\n name: site.name,\n title: site.title,\n buildHookId: site.buildHookId,\n url: site.url || (site.branch && `https://${site.branch}--${site.name}.netlify.app/`) || (site.name && `https://${site.name}.netlify.app/`),\n adminUrl: site.name && `https://app.netlify.com/sites/${site.name}`,\n branch: site.branch\n }))\n\n const [onDeploy$, onDeploy] = createEventHandler<Site>()\n const setSitesAction$ = of(configuredSites).pipe(map((sites) => ({type: 'setSites', sites})))\n const deployAction$ = onDeploy$.pipe(map((site) => ({type: 'deploy/started', site})))\n const deployResult$ = onDeploy$.pipe(switchMap((site) => deploy(site)))\n const deployCompletedAction$ = deployResult$.pipe(\n map(\n (result) => ({type: 'deploy/completed', ...result}),\n catchError((error) => of({type: 'deploy/failed', error}))\n )\n )\n\n merge(setSitesAction$, deployAction$, deployCompletedAction$).pipe(stateReducer$).subscribe()\n\n return of(configuredSites).pipe(\n map((sites) => ({\n sites,\n title: options.title || INITIAL_PROPS.title,\n description: options.description,\n isLoading: false,\n onDeploy,\n })),\n startWith(INITIAL_PROPS)\n )\n}\n"],"file":"props.js"}
|