@sanity/dashboard 2.35.2 → 2.36.0-v2-studio.1
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/LICENSE +1 -1
- package/dts/components/dashboardWidget.d.ts +10 -0
- package/dts/legacyParts.d.ts +7 -0
- package/lib/DashboardTool.js +2 -1
- package/lib/DashboardTool.js.map +1 -0
- package/lib/components/DashboardLayout.js +2 -1
- package/lib/components/DashboardLayout.js.map +1 -0
- package/lib/components/NotFoundWidget.js +2 -1
- package/lib/components/NotFoundWidget.js.map +1 -0
- package/lib/components/WidgetGroup.js +2 -1
- package/lib/components/WidgetGroup.js.map +1 -0
- package/lib/components/dashboardWidget.js +2 -1
- package/lib/components/dashboardWidget.js.map +1 -0
- package/lib/containers/Dashboard.js +2 -1
- package/lib/containers/Dashboard.js.map +1 -0
- package/lib/containers/WidgetContainer.js +2 -1
- package/lib/containers/WidgetContainer.js.map +1 -0
- package/lib/dashboardConfig.js +2 -1
- package/lib/dashboardConfig.js.map +1 -0
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -0
- package/lib/legacyParts.js +2 -1
- package/lib/legacyParts.js.map +1 -0
- package/lib/versionedClient.js +2 -1
- package/lib/versionedClient.js.map +1 -0
- package/lib/widgets/projectInfo/ProjectInfo.js +5 -4
- package/lib/widgets/projectInfo/ProjectInfo.js.map +1 -0
- package/lib/widgets/projectInfo/index.js +2 -1
- package/lib/widgets/projectInfo/index.js.map +1 -0
- package/lib/widgets/projectUsers/ProjectUsers.js +2 -1
- package/lib/widgets/projectUsers/ProjectUsers.js.map +1 -0
- package/lib/widgets/projectUsers/index.js +2 -1
- package/lib/widgets/projectUsers/index.js.map +1 -0
- package/lib/widgets/sanityTutorials/SanityTutorials.js +2 -1
- package/lib/widgets/sanityTutorials/SanityTutorials.js.map +1 -0
- package/lib/widgets/sanityTutorials/Tutorial.js +2 -1
- package/lib/widgets/sanityTutorials/Tutorial.js.map +1 -0
- package/lib/widgets/sanityTutorials/dataAdapter.js +2 -1
- package/lib/widgets/sanityTutorials/dataAdapter.js.map +1 -0
- package/lib/widgets/sanityTutorials/index.js +2 -1
- package/lib/widgets/sanityTutorials/index.js.map +1 -0
- package/package.json +52 -20
- package/sanity.json +0 -4
- package/src/DashboardTool.js +30 -0
- package/src/components/DashboardLayout.js +42 -0
- package/src/components/NotFoundWidget.js +41 -0
- package/src/components/WidgetGroup.js +98 -0
- package/src/components/dashboardWidget.tsx +76 -0
- package/src/containers/Dashboard.js +21 -0
- package/src/containers/WidgetContainer.js +57 -0
- package/src/dashboardConfig.js +13 -0
- package/src/index.js +2 -0
- package/src/legacyParts.ts +11 -0
- package/src/versionedClient.js +9 -0
- package/src/widget.css +62 -0
- package/src/widgets/projectInfo/ProjectInfo.js +232 -0
- package/src/widgets/projectInfo/index.js +7 -0
- package/src/widgets/projectUsers/ProjectUsers.js +176 -0
- package/src/widgets/projectUsers/index.js +6 -0
- package/src/widgets/sanityTutorials/SanityTutorials.js +152 -0
- package/src/widgets/sanityTutorials/Tutorial.js +158 -0
- package/src/widgets/sanityTutorials/dataAdapter.js +17 -0
- package/src/widgets/sanityTutorials/index.js +7 -0
- package/.babelrc +0 -4
- package/tsconfig.json +0 -17
package/LICENSE
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface DashboardWidgetProps {
|
|
3
|
+
header?: string;
|
|
4
|
+
className?: string;
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
footer?: React.ReactNode;
|
|
7
|
+
hideFooterBorder?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const DashboardWidget: React.ForwardRefExoticComponent<DashboardWidgetProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import WidgetContainer from 'part:@sanity/dashboard/widget-container';
|
|
2
|
+
import dashboardConfig from 'part:@sanity/dashboard/config?';
|
|
3
|
+
import sanityClient from 'part:@sanity/base/client';
|
|
4
|
+
import definitions from 'all:part:@sanity/dashboard/widget?';
|
|
5
|
+
import DefaultPreview from 'part:@sanity/components/previews/default';
|
|
6
|
+
import userStore from 'part:@sanity/base/user';
|
|
7
|
+
export { WidgetContainer, dashboardConfig, sanityClient, definitions, DefaultPreview, userStore };
|
package/lib/DashboardTool.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardTool.js","names":["strokeStyle","stroke","strokeWidth","DashboardIcon","title","name","icon","component","Dashboard"],"sources":["../src/DashboardTool.js"],"sourcesContent":["import React from 'react'\nimport Dashboard from './containers/Dashboard'\n\nconst strokeStyle = {\n stroke: 'currentColor',\n strokeWidth: 1.2,\n}\n\nconst DashboardIcon = () => (\n <svg\n data-sanity-icon\n viewBox=\"0 0 25 25\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n preserveAspectRatio=\"xMidYMid\"\n width=\"1em\"\n height=\"1em\"\n >\n <path d=\"M19.5 19.5H5.5V5.5H19.5V19.5Z\" style={strokeStyle} />\n <path d=\"M5.5 12.5H19.5\" style={strokeStyle} />\n <path d=\"M14.5 19.5V12.5M10.5 12.5V5.5\" style={strokeStyle} />\n </svg>\n)\n\nexport default {\n title: 'Dashboard',\n name: 'dashboard',\n icon: DashboardIcon,\n component: Dashboard,\n}\n"],"mappings":";;;;;;AAAA;AACA;AAA8C;AAE9C,IAAMA,WAAW,GAAG;EAClBC,MAAM,EAAE,cAAc;EACtBC,WAAW,EAAE;AACf,CAAC;AAED,IAAMC,aAAa,GAAG,mBACpB;EACE,wBAAgB;EAChB,OAAO,EAAC,WAAW;EACnB,IAAI,EAAC,MAAM;EACX,KAAK,EAAC,4BAA4B;EAClC,mBAAmB,EAAC,UAAU;EAC9B,KAAK,EAAC,KAAK;EACX,MAAM,EAAC;AAAK,gBAEZ;EAAM,CAAC,EAAC,+BAA+B;EAAC,KAAK,EAAEH;AAAY,EAAG,eAC9D;EAAM,CAAC,EAAC,gBAAgB;EAAC,KAAK,EAAEA;AAAY,EAAG,eAC/C;EAAM,CAAC,EAAC,+BAA+B;EAAC,KAAK,EAAEA;AAAY,EAAG,CAEjE;AAAA,eAEc;EACbI,KAAK,EAAE,WAAW;EAClBC,IAAI,EAAE,WAAW;EACjBC,IAAI,EAAEH,aAAa;EACnBI,SAAS,EAAEC;AACb,CAAC;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DashboardLayout.js","names":["DashboardLayout","props","width","formattedWidth","useMemo","getWidth","minHeight","children","value","widthMap","small","medium","large","propTypes","PropTypes","any","oneOf","defaultProps"],"sources":["../../src/components/DashboardLayout.js"],"sourcesContent":["import PropTypes from 'prop-types'\nimport React, {useMemo} from 'react'\nimport {Container} from '@sanity/ui'\n\nfunction DashboardLayout(props) {\n const {width} = props\n const formattedWidth = useMemo(() => getWidth(width), [width])\n\n return (\n <Container\n width={formattedWidth}\n padding={4}\n sizing=\"border\"\n style={{minHeight: '100%'}}\n data-name=\"dashboard-layout\"\n >\n {props.children}\n </Container>\n )\n}\n\nfunction getWidth(value) {\n const widthMap = {\n small: 2,\n medium: 3,\n large: 4,\n }\n\n return widthMap?.[value] || widthMap.large\n}\n\nDashboardLayout.propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n children: PropTypes.any,\n width: PropTypes.oneOf(['small', 'medium', 'large']),\n}\n\nDashboardLayout.defaultProps = {\n children: 'Dummy',\n}\n\nexport default DashboardLayout\n"],"mappings":";;;;;;AAAA;AACA;AACA;AAAoC;AAAA;AAAA;AAEpC,SAASA,eAAe,CAACC,KAAK,EAAE;EAC9B,IAAOC,KAAK,GAAID,KAAK,CAAdC,KAAK;EACZ,IAAMC,cAAc,GAAG,IAAAC,cAAO,EAAC,MAAMC,QAAQ,CAACH,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAE9D,oBACE,6BAAC,aAAS;IACR,KAAK,EAAEC,cAAe;IACtB,OAAO,EAAE,CAAE;IACX,MAAM,EAAC,QAAQ;IACf,KAAK,EAAE;MAACG,SAAS,EAAE;IAAM,CAAE;IAC3B,aAAU;EAAkB,GAE3BL,KAAK,CAACM,QAAQ,CACL;AAEhB;AAEA,SAASF,QAAQ,CAACG,KAAK,EAAE;EACvB,IAAMC,QAAQ,GAAG;IACfC,KAAK,EAAE,CAAC;IACRC,MAAM,EAAE,CAAC;IACTC,KAAK,EAAE;EACT,CAAC;EAED,OAAO,CAAAH,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGD,KAAK,CAAC,KAAIC,QAAQ,CAACG,KAAK;AAC5C;AAEAZ,eAAe,CAACa,SAAS,GAAG;EAC1B;EACAN,QAAQ,EAAEO,kBAAS,CAACC,GAAG;EACvBb,KAAK,EAAEY,kBAAS,CAACE,KAAK,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;AACrD,CAAC;AAEDhB,eAAe,CAACiB,YAAY,GAAG;EAC7BV,QAAQ,EAAE;AACZ,CAAC;AAAA,eAEcP,eAAe;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotFoundWidget.js","names":["Root","styled","Card","NotFoundWidget","props","title","children","propTypes","PropTypes","any","defaultProps"],"sources":["../../src/components/NotFoundWidget.js"],"sourcesContent":["import PropTypes from 'prop-types'\nimport React from 'react'\nimport {Card, Stack, Heading, Box} from '@sanity/ui'\nimport styled from 'styled-components'\n\nconst Root = styled(Card)`\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n height: 100%;\n`\n\nfunction NotFoundWidget(props) {\n const {title, children} = props\n return (\n <Root radius={3} paddingX={3} paddingY={4} tone=\"critical\">\n <Stack space={2}>\n {title && (\n <Heading size={1} as=\"h2\">\n {title}\n </Heading>\n )}\n {children && <Box>{children}</Box>}\n </Stack>\n </Root>\n )\n}\n\nNotFoundWidget.propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n children: PropTypes.any,\n // eslint-disable-next-line react/forbid-prop-types\n title: PropTypes.any,\n}\n\nNotFoundWidget.defaultProps = {\n children: null,\n title: null,\n}\n\nexport default NotFoundWidget\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAAsC;AAAA;AAAA;AAEtC,IAAMA,IAAI,GAAG,IAAAC,yBAAM,EAACC,QAAI,CAAC,kKAKxB;AAED,SAASC,cAAc,CAACC,KAAK,EAAE;EAC7B,IAAOC,KAAK,GAAcD,KAAK,CAAxBC,KAAK;IAAEC,QAAQ,GAAIF,KAAK,CAAjBE,QAAQ;EACtB,oBACE,6BAAC,IAAI;IAAC,MAAM,EAAE,CAAE;IAAC,QAAQ,EAAE,CAAE;IAAC,QAAQ,EAAE,CAAE;IAAC,IAAI,EAAC;EAAU,gBACxD,6BAAC,SAAK;IAAC,KAAK,EAAE;EAAE,GACbD,KAAK,iBACJ,6BAAC,WAAO;IAAC,IAAI,EAAE,CAAE;IAAC,EAAE,EAAC;EAAI,GACtBA,KAAK,CAET,EACAC,QAAQ,iBAAI,6BAAC,OAAG,QAAEA,QAAQ,CAAO,CAC5B,CACH;AAEX;AAEAH,cAAc,CAACI,SAAS,GAAG;EACzB;EACAD,QAAQ,EAAEE,kBAAS,CAACC,GAAG;EACvB;EACAJ,KAAK,EAAEG,kBAAS,CAACC;AACnB,CAAC;AAEDN,cAAc,CAACO,YAAY,GAAG;EAC5BJ,QAAQ,EAAE,IAAI;EACdD,KAAK,EAAE;AACT,CAAC;AAAA,eAEcF,cAAc;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WidgetGroup.js","names":["media","small","css","theme","sanity","medium","Root","styled","Grid","WidgetGroup","props","config","widgets","layout","width","height","map","widgetConfig","index","type","String"],"sources":["../../src/components/WidgetGroup.js"],"sourcesContent":["/* eslint-disable react/prop-types */\nimport React from 'react'\nimport styled, {css} from 'styled-components'\nimport {Grid} from '@sanity/ui'\nimport {WidgetContainer} from '../legacyParts'\n\nconst media = {\n small: (...args) =>\n css`\n @media (min-width: ${({theme}) => theme.sanity.media[0]}px) {\n ${css(...args)}\n }\n `,\n medium: (...args) =>\n css`\n @media (min-width: ${({theme}) => theme.sanity.media[2]}px) {\n ${css(...args)}\n }\n `,\n}\n\nconst Root = styled(Grid)`\n grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));\n\n & > div {\n overflow: hidden;\n }\n\n & > div[data-width='medium'] {\n ${media.small`\n grid-column: span 2;\n `}\n }\n\n & > div[data-width='large'] {\n ${media.small`\n grid-column: span 2;\n `}\n\n ${media.medium`\n grid-column: span 3;\n `}\n }\n\n & > div[data-width='full'] {\n ${media.small`\n grid-column: 1 / -1;\n `}\n }\n\n & > div[data-height='medium'] {\n ${media.small`\n grid-row: span 2;\n `}\n }\n\n & > div[data-height='large'] {\n ${media.small`\n grid-row: span 2;\n `}\n\n ${media.medium`\n grid-row: span 3;\n `}\n }\n\n & > div[data-height='full'] {\n ${media.medium`\n grid-row: 1 / -1;\n `}\n }\n`\n\nfunction WidgetGroup(props) {\n const config = props.config || {}\n const widgets = config.widgets || []\n const layout = config.layout || {}\n\n return (\n <Root\n autoFlow=\"dense\"\n data-width={layout.width || 'auto'}\n data-height={layout.height || 'auto'}\n data-name=\"sanity-dashboard-widget-group\"\n gap={4}\n >\n {widgets.map((widgetConfig, index) => {\n if (widgetConfig.type === '__experimental_group') {\n return <WidgetGroup key={String(index)} config={widgetConfig} />\n }\n\n return <WidgetContainer key={String(index)} config={widgetConfig} />\n })}\n </Root>\n )\n}\n\nexport default WidgetGroup\n"],"mappings":";;;;;;AACA;AACA;AACA;AACA;AAA8C;AAAA;AAAA;AAAA;AAAA;AAE9C,IAAMA,KAAK,GAAG;EACZC,KAAK,EAAE;IAAA,WACLC,qBAAG,wIACoB;MAAA,IAAEC,KAAK,QAALA,KAAK;MAAA,OAAMA,KAAK,CAACC,MAAM,CAACJ,KAAK,CAAC,CAAC,CAAC;IAAA,GACnD,IAAAE,qBAAG,EAAC,YAAO,CAAC;EAAA,CAEjB;EACHG,MAAM,EAAE;IAAA,WACNH,qBAAG,0IACoB;MAAA,IAAEC,KAAK,SAALA,KAAK;MAAA,OAAMA,KAAK,CAACC,MAAM,CAACJ,KAAK,CAAC,CAAC,CAAC;IAAA,GACnD,IAAAE,qBAAG,EAAC,YAAO,CAAC;EAAA;AAGtB,CAAC;AAED,IAAMI,IAAI,GAAG,IAAAC,yBAAM,EAACC,QAAI,CAAC,4fAQnBR,KAAK,CAACC,KAAK,2GAMXD,KAAK,CAACC,KAAK,2GAIXD,KAAK,CAACK,MAAM,2GAMZL,KAAK,CAACC,KAAK,2GAMXD,KAAK,CAACC,KAAK,wGAMXD,KAAK,CAACC,KAAK,wGAIXD,KAAK,CAACK,MAAM,0GAMZL,KAAK,CAACK,MAAM,yGAIjB;AAED,SAASI,WAAW,CAACC,KAAK,EAAE;EAC1B,IAAMC,MAAM,GAAGD,KAAK,CAACC,MAAM,IAAI,CAAC,CAAC;EACjC,IAAMC,OAAO,GAAGD,MAAM,CAACC,OAAO,IAAI,EAAE;EACpC,IAAMC,MAAM,GAAGF,MAAM,CAACE,MAAM,IAAI,CAAC,CAAC;EAElC,oBACE,6BAAC,IAAI;IACH,QAAQ,EAAC,OAAO;IAChB,cAAYA,MAAM,CAACC,KAAK,IAAI,MAAO;IACnC,eAAaD,MAAM,CAACE,MAAM,IAAI,MAAO;IACrC,aAAU,+BAA+B;IACzC,GAAG,EAAE;EAAE,GAENH,OAAO,CAACI,GAAG,CAAC,CAACC,YAAY,EAAEC,KAAK,KAAK;IACpC,IAAID,YAAY,CAACE,IAAI,KAAK,sBAAsB,EAAE;MAChD,oBAAO,6BAAC,WAAW;QAAC,GAAG,EAAEC,MAAM,CAACF,KAAK,CAAE;QAAC,MAAM,EAAED;MAAa,EAAG;IAClE;IAEA,oBAAO,6BAAC,4BAAe;MAAC,GAAG,EAAEG,MAAM,CAACF,KAAK,CAAE;MAAC,MAAM,EAAED;IAAa,EAAG;EACtE,CAAC,CAAC,CACG;AAEX;AAAC,eAEcR,WAAW;AAAA"}
|
|
@@ -45,4 +45,5 @@ var DashboardWidget = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
|
|
|
45
45
|
}, footer));
|
|
46
46
|
});
|
|
47
47
|
exports.DashboardWidget = DashboardWidget;
|
|
48
|
-
DashboardWidget.displayName = 'DashboardWidget';
|
|
48
|
+
DashboardWidget.displayName = 'DashboardWidget';
|
|
49
|
+
//# sourceMappingURL=dashboardWidget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboardWidget.js","names":["Root","styled","Card","Header","Footer","Content","Box","theme","sanity","media","DashboardWidget","forwardRef","props","ref","header","children","footer","hideFooterBorder","className","displayName"],"sources":["../../src/components/dashboardWidget.tsx"],"sourcesContent":["import React, {forwardRef} from 'react'\nimport {Card, Box, Heading} from '@sanity/ui'\nimport styled from 'styled-components'\n\nconst Root = styled(Card)`\n display: flex;\n flex-direction: column;\n justify-content: stretch;\n height: 100%;\n box-sizing: border-box;\n position: relative;\n`\n\nconst Header = styled(Card)`\n position: sticky;\n top: 0;\n z-index: 2;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n`\n\nconst Footer = styled(Card)`\n position: sticky;\n overflow: hidden;\n bottom: 0;\n z-index: 2;\n border-bottom-right-radius: inherit;\n border-bottom-left-radius: inherit;\n margin-top: auto;\n`\n\nconst Content = styled(Box)`\n position: relative;\n z-index: 1;\n height: stretch;\n min-height: 21.5em;\n\n @media (min-width: ${({theme}) => theme.sanity.media[0]}px) {\n overflow-y: auto;\n outline: none;\n }\n`\n\ninterface DashboardWidgetProps {\n header?: string\n className?: string\n children: React.ReactNode\n footer?: React.ReactNode\n hideFooterBorder?: boolean\n}\n\nexport const DashboardWidget = forwardRef(\n (props: DashboardWidgetProps, ref: React.Ref<HTMLDivElement>) => {\n const {header, children, footer, hideFooterBorder, className} = props\n\n return (\n <Root radius={3} display=\"flex\" ref={ref} className={className}>\n {header && (\n <Header borderBottom paddingX={3} paddingY={4}>\n <Heading size={1} textOverflow=\"ellipsis\">\n {header}\n </Heading>\n </Header>\n )}\n {children && <Content data-name=\"content\">{children}</Content>}\n {footer && (\n <Footer sizing=\"border\" borderTop={!hideFooterBorder}>\n {footer}\n </Footer>\n )}\n </Root>\n )\n }\n)\n\nDashboardWidget.displayName = 'DashboardWidget'\n"],"mappings":";;;;;;AAAA;AACA;AACA;AAAsC;AAAA;AAAA;AAAA;AAAA;AAEtC,IAAMA,IAAI,GAAG,IAAAC,yBAAM,EAACC,QAAI,CAAC,oNAOxB;AAED,IAAMC,MAAM,GAAG,IAAAF,yBAAM,EAACC,QAAI,CAAC,iMAM1B;AAED,IAAME,MAAM,GAAG,IAAAH,yBAAM,EAACC,QAAI,CAAC,oPAQ1B;AAED,IAAMG,OAAO,GAAG,IAAAJ,yBAAM,EAACK,OAAG,CAAC,6OAMJ;EAAA,IAAEC,KAAK,QAALA,KAAK;EAAA,OAAMA,KAAK,CAACC,MAAM,CAACC,KAAK,CAAC,CAAC,CAAC;AAAA,EAIxD;AAUM,IAAMC,eAAe,gBAAG,IAAAC,iBAAU,EACvC,CAACC,KAA2B,EAAEC,GAA8B,KAAK;EAC/D,IAAOC,MAAM,GAAmDF,KAAK,CAA9DE,MAAM;IAAEC,QAAQ,GAAyCH,KAAK,CAAtDG,QAAQ;IAAEC,MAAM,GAAiCJ,KAAK,CAA5CI,MAAM;IAAEC,gBAAgB,GAAeL,KAAK,CAApCK,gBAAgB;IAAEC,SAAS,GAAIN,KAAK,CAAlBM,SAAS;EAE5D,oBACE,6BAAC,IAAI;IAAC,MAAM,EAAE,CAAE;IAAC,OAAO,EAAC,MAAM;IAAC,GAAG,EAAEL,GAAI;IAAC,SAAS,EAAEK;EAAU,GAC5DJ,MAAM,iBACL,6BAAC,MAAM;IAAC,YAAY;IAAC,QAAQ,EAAE,CAAE;IAAC,QAAQ,EAAE;EAAE,gBAC5C,6BAAC,WAAO;IAAC,IAAI,EAAE,CAAE;IAAC,YAAY,EAAC;EAAU,GACtCA,MAAM,CACC,CAEb,EACAC,QAAQ,iBAAI,6BAAC,OAAO;IAAC,aAAU;EAAS,GAAEA,QAAQ,CAAW,EAC7DC,MAAM,iBACL,6BAAC,MAAM;IAAC,MAAM,EAAC,QAAQ;IAAC,SAAS,EAAE,CAACC;EAAiB,GAClDD,MAAM,CAEV,CACI;AAEX,CAAC,CACF;AAAA;AAEDN,eAAe,CAACS,WAAW,GAAG,iBAAiB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard.js","names":["Dashboard","dashboardConfig","widgetConfigs","widgets","layoutWidth","layout","width"],"sources":["../../src/containers/Dashboard.js"],"sourcesContent":["import React from 'react'\nimport DashboardLayout from '../components/DashboardLayout'\nimport WidgetGroup from '../components/WidgetGroup'\nimport {dashboardConfig} from '../legacyParts'\n\nfunction Dashboard() {\n if (!dashboardConfig) {\n return null\n }\n\n const widgetConfigs = dashboardConfig.widgets || []\n const layoutWidth = dashboardConfig?.layout?.width || 'large'\n\n return (\n <DashboardLayout width={layoutWidth}>\n <WidgetGroup config={{widgets: widgetConfigs}} />\n </DashboardLayout>\n )\n}\n\nexport default Dashboard\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAA8C;AAE9C,SAASA,SAAS,GAAG;EAAA;EACnB,IAAI,CAACC,4BAAe,EAAE;IACpB,OAAO,IAAI;EACb;EAEA,IAAMC,aAAa,GAAGD,4BAAe,CAACE,OAAO,IAAI,EAAE;EACnD,IAAMC,WAAW,GAAG,CAAAH,4BAAe,aAAfA,4BAAe,gDAAfA,4BAAe,CAAEI,MAAM,0DAAvB,sBAAyBC,KAAK,KAAI,OAAO;EAE7D,oBACE,6BAAC,wBAAe;IAAC,KAAK,EAAEF;EAAY,gBAClC,6BAAC,oBAAW;IAAC,MAAM,EAAE;MAACD,OAAO,EAAED;IAAa;EAAE,EAAG,CACjC;AAEtB;AAAC,eAEcF,SAAS;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WidgetContainer.js","names":["WidgetContainer","props","config","definition","Array","isArray","definitions","find","wid","name","options","layout","width","height","React","createElement","component","propTypes","PropTypes","any","defaultProps"],"sources":["../../src/containers/WidgetContainer.js"],"sourcesContent":["import PropTypes from 'prop-types'\nimport React from 'react'\nimport NotFoundWidget from '../components/NotFoundWidget'\nimport {definitions} from '../legacyParts'\n\nfunction WidgetContainer(props) {\n const config = props.config || {}\n const definition = Array.isArray(definitions)\n ? definitions.find((wid) => wid.name === config.name)\n : null\n\n if (definition) {\n const options = {\n ...(definition.options || {}),\n ...(config.options || {}),\n }\n const layout = {\n ...(definition.layout || {}),\n ...(config.layout || {}),\n }\n\n return (\n <div\n data-width={layout.width}\n data-height={layout.height}\n data-widget-name={config.name}\n data-name=\"sanity-dashboard-widget-container\"\n >\n {React.createElement(definition.component, options)}\n </div>\n )\n }\n\n const layout = config.layout || {}\n\n return (\n <div data-width={layout.width} data-height={layout.height}>\n <NotFoundWidget title={<>Not found: \"{config.name}\"</>}>\n <p>\n Make sure your <code>sanity.json</code> file mentions such a widget and that it’s an\n implementation of <code>part:@sanity/dashboard/widget</code>.\n </p>\n </NotFoundWidget>\n </div>\n )\n}\n\nWidgetContainer.propTypes = {\n // eslint-disable-next-line react/forbid-prop-types\n config: PropTypes.any,\n}\n\nWidgetContainer.defaultProps = {\n config: null,\n}\n\nexport default WidgetContainer\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAA0C;AAAA;AAAA;AAAA;AAE1C,SAASA,eAAe,CAACC,KAAK,EAAE;EAC9B,IAAMC,MAAM,GAAGD,KAAK,CAACC,MAAM,IAAI,CAAC,CAAC;EACjC,IAAMC,UAAU,GAAGC,KAAK,CAACC,OAAO,CAACC,wBAAW,CAAC,GACzCA,wBAAW,CAACC,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACC,IAAI,KAAKP,MAAM,CAACO,IAAI,CAAC,GACnD,IAAI;EAER,IAAIN,UAAU,EAAE;IACd,IAAMO,OAAO,mCACPP,UAAU,CAACO,OAAO,IAAI,CAAC,CAAC,GACxBR,MAAM,CAACQ,OAAO,IAAI,CAAC,CAAC,CACzB;IACD,IAAMC,OAAM,mCACNR,UAAU,CAACQ,MAAM,IAAI,CAAC,CAAC,GACvBT,MAAM,CAACS,MAAM,IAAI,CAAC,CAAC,CACxB;IAED,oBACE;MACE,cAAYA,OAAM,CAACC,KAAM;MACzB,eAAaD,OAAM,CAACE,MAAO;MAC3B,oBAAkBX,MAAM,CAACO,IAAK;MAC9B,aAAU;IAAmC,gBAE5CK,cAAK,CAACC,aAAa,CAACZ,UAAU,CAACa,SAAS,EAAEN,OAAO,CAAC,CAC/C;EAEV;EAEA,IAAMC,MAAM,GAAGT,MAAM,CAACS,MAAM,IAAI,CAAC,CAAC;EAElC,oBACE;IAAK,cAAYA,MAAM,CAACC,KAAM;IAAC,eAAaD,MAAM,CAACE;EAAO,gBACxD,6BAAC,uBAAc;IAAC,KAAK,eAAE,6EAAeX,MAAM,CAACO,IAAI;EAAM,gBACrD,wEACiB,yDAAwB,wFACrB,2EAA0C,MAC1D,CACW,CACb;AAEV;AAEAT,eAAe,CAACiB,SAAS,GAAG;EAC1B;EACAf,MAAM,EAAEgB,kBAAS,CAACC;AACpB,CAAC;AAEDnB,eAAe,CAACoB,YAAY,GAAG;EAC7BlB,MAAM,EAAE;AACV,CAAC;AAAA,eAEcF,eAAe;AAAA"}
|
package/lib/dashboardConfig.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboardConfig.js","names":["widgets","name","layout","width","height"],"sources":["../src/dashboardConfig.js"],"sourcesContent":["export default {\n widgets: [\n {\n name: 'sanity-tutorials',\n layout: {\n width: 'full',\n height: 'full',\n },\n },\n {name: 'project-info'},\n {name: 'project-users'},\n ],\n}\n"],"mappings":";;;;;;eAAe;EACbA,OAAO,EAAE,CACP;IACEC,IAAI,EAAE,kBAAkB;IACxBC,MAAM,EAAE;MACNC,KAAK,EAAE,MAAM;MACbC,MAAM,EAAE;IACV;EACF,CAAC,EACD;IAACH,IAAI,EAAE;EAAc,CAAC,EACtB;IAACA,IAAI,EAAE;EAAe,CAAC;AAE3B,CAAC;AAAA"}
|
package/lib/index.js
CHANGED
|
@@ -23,4 +23,5 @@ Object.keys(_dashboardWidget).forEach(function (key) {
|
|
|
23
23
|
});
|
|
24
24
|
});
|
|
25
25
|
var _DashboardTool = _interopRequireDefault(require("./DashboardTool"));
|
|
26
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
26
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.js"],"sourcesContent":["export * from './components/dashboardWidget'\nexport {default} from './DashboardTool'\n"],"mappings":";;;;;;;;;;;;AAAA;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AACA;AAAuC"}
|
package/lib/legacyParts.js
CHANGED
|
@@ -45,4 +45,5 @@ var _client = _interopRequireDefault(require("part:@sanity/base/client"));
|
|
|
45
45
|
var _widget = _interopRequireDefault(require("all:part:@sanity/dashboard/widget?"));
|
|
46
46
|
var _default = _interopRequireDefault(require("part:@sanity/components/previews/default"));
|
|
47
47
|
var _user = _interopRequireDefault(require("part:@sanity/base/user"));
|
|
48
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
48
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
49
|
+
//# sourceMappingURL=legacyParts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacyParts.js","names":[],"sources":["../src/legacyParts.ts"],"sourcesContent":["// @todo: remove the following line when part imports has been removed from this file\n///<reference types=\"@sanity/types/parts\" />\n\nimport WidgetContainer from 'part:@sanity/dashboard/widget-container'\nimport dashboardConfig from 'part:@sanity/dashboard/config?'\nimport sanityClient from 'part:@sanity/base/client'\nimport definitions from 'all:part:@sanity/dashboard/widget?'\nimport DefaultPreview from 'part:@sanity/components/previews/default'\nimport userStore from 'part:@sanity/base/user'\n\nexport {WidgetContainer, dashboardConfig, sanityClient, definitions, DefaultPreview, userStore}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA;AACA;AAA8C"}
|
package/lib/versionedClient.js
CHANGED
|
@@ -14,4 +14,5 @@ var _legacyParts = require("./legacyParts");
|
|
|
14
14
|
var versionedClient = _legacyParts.sanityClient.withConfig({
|
|
15
15
|
apiVersion: '1'
|
|
16
16
|
});
|
|
17
|
-
exports.versionedClient = versionedClient;
|
|
17
|
+
exports.versionedClient = versionedClient;
|
|
18
|
+
//# sourceMappingURL=versionedClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versionedClient.js","names":["versionedClient","sanityClient","withConfig","apiVersion"],"sources":["../src/versionedClient.js"],"sourcesContent":["import {sanityClient} from './legacyParts'\n\n/**\n * Only for use inside of @sanity/dashboard\n * Don't import this from external modules.\n *\n * @internal\n */\nexport const versionedClient = sanityClient.withConfig({apiVersion: '1'})\n"],"mappings":";;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMA,eAAe,GAAGC,yBAAY,CAACC,UAAU,CAAC;EAACC,UAAU,EAAE;AAAG,CAAC,CAAC;AAAA"}
|
|
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _isPlainObject2 = _interopRequireDefault(require("lodash/isPlainObject"));
|
|
8
7
|
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _lodash = require("lodash");
|
|
9
9
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
10
|
var _ui = require("@sanity/ui");
|
|
11
11
|
var _versionedClient = require("../../versionedClient");
|
|
@@ -205,9 +205,9 @@ class ProjectInfo extends _react.default.PureComponent {
|
|
|
205
205
|
}, /*#__PURE__*/_react.default.createElement(_ui.Text, {
|
|
206
206
|
weight: "medium",
|
|
207
207
|
role: "rowheader"
|
|
208
|
-
}, row.title), (0,
|
|
208
|
+
}, row.title), (0, _lodash.isPlainObject)(row.value) && /*#__PURE__*/_react.default.createElement(_ui.Text, {
|
|
209
209
|
size: 1
|
|
210
|
-
}, row.value.error), !(0,
|
|
210
|
+
}, row.value.error), !(0, _lodash.isPlainObject)(row.value) && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isUrl(row.value) ? /*#__PURE__*/_react.default.createElement(_ui.Text, {
|
|
211
211
|
size: 1,
|
|
212
212
|
role: "cell",
|
|
213
213
|
style: {
|
|
@@ -237,4 +237,5 @@ _defineProperty(ProjectInfo, "defaultProps", {
|
|
|
237
237
|
data: []
|
|
238
238
|
});
|
|
239
239
|
var _default = ProjectInfo;
|
|
240
|
-
exports.default = _default;
|
|
240
|
+
exports.default = _default;
|
|
241
|
+
//# sourceMappingURL=ProjectInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectInfo.js","names":["versionedClient","config","projectId","dataset","isUrl","url","test","getGraphQlUrl","getGroqUrl","getManageUrl","ProjectInfo","React","PureComponent","studioHost","graphqlApi","componentDidMount","subscriptions","push","observable","request","uri","subscribe","next","result","setState","error","console","log","method","statusCode","componentWillUnmount","forEach","sub","unsubscribe","assembleTableRows","state","propsData","props","data","title","rows","value","apps","concat","filter","item","category","Boolean","length","otherStuff","Object","keys","render","__experimental_before","map","widgetConfig","idx","String","width","row","isPlainObject","wordBreak","PropTypes","array"],"sources":["../../../src/widgets/projectInfo/ProjectInfo.js"],"sourcesContent":["/* eslint-disable react/forbid-prop-types, no-console */\nimport React from 'react'\nimport {isPlainObject} from 'lodash'\nimport PropTypes from 'prop-types'\nimport {Box, Card, Stack, Heading, Grid, Label, Text, Code, Button} from '@sanity/ui'\nimport {versionedClient} from '../../versionedClient'\nimport {DashboardWidget} from '../../'\nimport {WidgetContainer} from '../../legacyParts'\n\nconst {projectId, dataset} = versionedClient.config()\n\nfunction isUrl(url) {\n return /^https?:\\/\\//.test(`${url}`)\n}\n\nfunction getGraphQlUrl() {\n return `https://${projectId}.api.sanity.io/v1/graphql/${dataset}/default`\n}\n\nfunction getGroqUrl() {\n return `https://${projectId}.api.sanity.io/v1/groq/${dataset}`\n}\n\nfunction getManageUrl() {\n return `https://manage.sanity.io/projects/${projectId}`\n}\n\nclass ProjectInfo extends React.PureComponent {\n static propTypes = {\n // eslint-disable-next-line camelcase\n __experimental_before: PropTypes.array,\n data: PropTypes.array,\n }\n static defaultProps = {\n // eslint-disable-next-line camelcase\n __experimental_before: [],\n data: [],\n }\n\n state = {\n studioHost: null,\n graphqlApi: null,\n }\n\n componentDidMount() {\n // fetch project data\n this.subscriptions = []\n\n this.subscriptions.push(\n versionedClient.observable.request({uri: `/projects/${projectId}`}).subscribe({\n next: (result) => {\n const {studioHost} = result\n this.setState({studioHost: studioHost ? `https://${studioHost}.sanity.studio` : null})\n },\n error: (error) => {\n console.log('Error while looking for studioHost', error)\n this.setState({\n studioHost: {\n error: 'Something went wrong while looking up studioHost. See console.',\n },\n })\n },\n })\n )\n\n // ping assumed graphql endpoint\n this.subscriptions.push(\n versionedClient.observable\n .request({\n method: 'HEAD',\n uri: `/graphql/${dataset}/default`,\n })\n .subscribe({\n next: () => this.setState({graphqlApi: getGraphQlUrl()}),\n error: (error) => {\n if (error.statusCode === 404) {\n this.setState({graphqlApi: null})\n } else {\n console.log('Error while looking for graphqlApi', error)\n this.setState({\n graphqlApi: {\n error: 'Something went wrong while looking up graphqlApi. See console.',\n },\n })\n }\n },\n })\n )\n }\n\n componentWillUnmount() {\n this.subscriptions.forEach((sub) => sub.unsubscribe())\n }\n\n assembleTableRows() {\n const {graphqlApi, studioHost} = this.state\n const propsData = this.props.data\n\n let result = [\n {\n title: 'Sanity project',\n rows: [\n {title: 'Project ID', value: projectId},\n {title: 'Dataset', value: dataset},\n ],\n },\n ]\n\n // Handle any apps\n const apps = [studioHost ? {title: 'Studio', value: studioHost} : null]\n .concat(propsData.filter((item) => item.category === 'apps'))\n .filter(Boolean)\n if (apps.length > 0) {\n result = result.concat([{title: 'Apps', rows: apps}])\n }\n\n // Handle APIs\n result = result.concat(\n [\n {\n title: 'APIs',\n rows: [\n {title: 'GROQ', value: getGroqUrl()},\n {title: 'GraphQL', value: graphqlApi || 'Not deployed'},\n ],\n },\n ],\n propsData.filter((item) => item.category === 'apis')\n )\n\n // Handle whatever else there might be\n const otherStuff = {}\n propsData.forEach((item) => {\n if (item.category !== 'apps' && item.category !== 'apis') {\n if (!otherStuff[item.category]) {\n otherStuff[item.category] = []\n }\n otherStuff[item.category].push(item)\n }\n })\n Object.keys(otherStuff).forEach((category) => {\n result.push({title: category, rows: otherStuff[category]})\n })\n\n return result\n }\n\n render() {\n return (\n <>\n {this.props.__experimental_before &&\n this.props.__experimental_before.map((widgetConfig, idx) => (\n <WidgetContainer key={String(idx)} config={widgetConfig} />\n ))}\n <Box height=\"fill\" marginTop={this.props.__experimental_before?.length > 0 ? 4 : 0}>\n <DashboardWidget\n footer={\n <Button\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Manage project\"\n as=\"a\"\n href={getManageUrl()}\n />\n }\n >\n <Card\n paddingY={4}\n radius={2}\n role=\"table\"\n aria-label=\"Project info\"\n aria-describedby=\"project_info_table\"\n >\n <Stack space={4}>\n <Box paddingX={3} as=\"header\">\n <Heading size={1} as=\"h2\" id=\"project_info_table\">\n Project info\n </Heading>\n </Box>\n {this.assembleTableRows().map((item) => {\n if (!item || !item.rows) {\n return null\n }\n\n return (\n <Stack key={item.title} space={3}>\n <Card borderBottom padding={3}>\n <Label size={0} muted role=\"columnheader\">\n {item.title}\n </Label>\n </Card>\n <Stack space={4} paddingX={3} role=\"rowgroup\">\n {item.rows.map((row) => {\n return (\n <Grid key={row.title} columns={2} role=\"row\">\n <Text weight=\"medium\" role=\"rowheader\">\n {row.title}\n </Text>\n {isPlainObject(row.value) && <Text size={1}>{row.value.error}</Text>}\n {!isPlainObject(row.value) && (\n <>\n {isUrl(row.value) ? (\n <Text size={1} role=\"cell\" style={{wordBreak: 'break-word'}}>\n <a href={row.value}>{row.value}</a>\n </Text>\n ) : (\n <Code size={1} role=\"cell\" style={{wordBreak: 'break-word'}}>\n {row.value}\n </Code>\n )}\n </>\n )}\n </Grid>\n )\n })}\n </Stack>\n </Stack>\n )\n })}\n </Stack>\n </Card>\n </DashboardWidget>\n </Box>\n </>\n )\n }\n}\n\nexport default ProjectInfo\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["name","component","ProjectInfo","layout","width"],"sources":["../../../src/widgets/projectInfo/index.js"],"sourcesContent":["import ProjectInfo from './ProjectInfo'\n\nexport default {\n name: 'project-info',\n component: ProjectInfo,\n layout: {width: 'medium'},\n}\n"],"mappings":";;;;;;AAAA;AAAuC;AAAA,eAExB;EACbA,IAAI,EAAE,cAAc;EACpBC,SAAS,EAAEC,oBAAW;EACtBC,MAAM,EAAE;IAACC,KAAK,EAAE;EAAQ;AAC1B,CAAC;AAAA"}
|
|
@@ -144,4 +144,5 @@ class ProjectUsers extends _react.default.PureComponent {
|
|
|
144
144
|
_defineProperty(ProjectUsers, "propTypes", {});
|
|
145
145
|
_defineProperty(ProjectUsers, "defaultProps", {});
|
|
146
146
|
var _default = ProjectUsers;
|
|
147
|
-
exports.default = _default;
|
|
147
|
+
exports.default = _default;
|
|
148
|
+
//# sourceMappingURL=ProjectUsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectUsers.js","names":["AvatarWrapper","styled","Card","getInviteUrl","projectId","sortUsersByRobotStatus","userA","userB","project","members","membershipA","find","member","id","membershipB","isRobot","ProjectUsers","React","PureComponent","users","error","fetchData","componentDidMount","componentWillUnmount","subscription","unsubscribe","versionedClient","config","observable","request","uri","pipe","switchMap","userStore","getUsers","map","mem","subscribe","next","setState","Array","isArray","sort","render","state","isLoading","handleRetryFetch","cursor","width","undefined","user","membership","media","imageUrl","displayName","role"],"sources":["../../../src/widgets/projectUsers/ProjectUsers.js"],"sourcesContent":["// @todo: remove the following line when part imports has been removed from this file\n///<reference types=\"@sanity/types/parts\" />\n\nimport React from 'react'\nimport {map, switchMap} from 'rxjs/operators'\nimport {Stack, Card, Box, Text, Button} from '@sanity/ui'\nimport {RobotIcon} from '@sanity/icons'\nimport styled from 'styled-components'\nimport {DefaultPreview} from '@sanity/base/components'\nimport Spinner from 'part:@sanity/components/loading/spinner'\nimport {versionedClient} from '../../versionedClient'\nimport {DashboardWidget} from '../../'\nimport {userStore} from '../../legacyParts'\n\nconst AvatarWrapper = styled(Card)`\n box-sizing: border-box;\n border-radius: 50%;\n border-color: transparent;\n overflow: hidden;\n width: 100%;\n height: 100%;\n\n & > img {\n width: 100%;\n height: auto;\n }\n`\n\nfunction getInviteUrl(projectId) {\n return `https://manage.sanity.io/projects/${projectId}/team/invite`\n}\n\nfunction sortUsersByRobotStatus(userA, userB, project) {\n const {members} = project\n const membershipA = members.find((member) => member.id === userA.id)\n const membershipB = members.find((member) => member.id === userB.id)\n if (membershipA.isRobot) {\n return 1\n }\n if (membershipB.isRobot) {\n return -1\n }\n return 0\n}\n\nclass ProjectUsers extends React.PureComponent {\n static propTypes = {}\n static defaultProps = {}\n\n state = {\n project: null,\n users: null,\n error: null,\n }\n\n componentDidMount() {\n this.fetchData()\n }\n\n componentWillUnmount() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n }\n\n fetchData() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n\n const {projectId} = versionedClient.config()\n this.subscription = versionedClient.observable\n .request({\n uri: `/projects/${projectId}`,\n })\n .pipe(\n switchMap((project) =>\n userStore.observable\n .getUsers(project.members.map((mem) => mem.id))\n .pipe(map((users) => ({project, users})))\n )\n )\n .subscribe({\n next: ({users, project}) =>\n this.setState({\n project,\n users: (Array.isArray(users) ? users : [users]).sort((userA, userB) =>\n sortUsersByRobotStatus(userA, userB, project)\n ),\n }),\n error: (error) => this.setState({error}),\n })\n }\n\n handleRetryFetch = () => {\n this.fetchData()\n }\n\n render() {\n const {error, project, users} = this.state\n const isLoading = !users || !project\n\n if (error) {\n return (\n <DashboardWidget header=\"Project users\">\n <Box padding={4}>\n <Text>\n Something went wrong while fetching data. You could{' '}\n <a\n onClick={this.handleRetryFetch}\n title=\"Retry users fetch\"\n style={{cursor: 'pointer'}}\n >\n retry\n </a>\n ..?\n </Text>\n </Box>\n </DashboardWidget>\n )\n }\n\n return (\n <DashboardWidget\n header=\"Project users\"\n footer={\n <Button\n style={{width: '100%'}}\n paddingX={2}\n paddingY={4}\n mode=\"bleed\"\n tone=\"primary\"\n text=\"Invite members\"\n as=\"a\"\n loading={isLoading}\n href={isLoading ? undefined : getInviteUrl(project.id)}\n />\n }\n >\n {isLoading && (\n <Card padding={4}>\n <Spinner center message=\"Loading...\" />\n </Card>\n )}\n\n {!isLoading && (\n <Stack space={3} padding={3}>\n {users.map((user) => {\n const membership = project.members.find((member) => member.id === user.id)\n const media = membership.isRobot ? (\n <Text size={3}>\n <RobotIcon />\n </Text>\n ) : (\n <AvatarWrapper tone=\"transparent\">\n {user?.imageUrl && <img src={user.imageUrl} alt={user?.displayName} />}\n </AvatarWrapper>\n )\n return (\n <Box key={user.id}>\n <DefaultPreview\n title={user.displayName}\n subtitle={membership.role}\n media={media}\n />\n </Box>\n )\n })}\n </Stack>\n )}\n </DashboardWidget>\n )\n }\n}\n\nexport default ProjectUsers\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["name","component","ProjectUsers"],"sources":["../../../src/widgets/projectUsers/index.js"],"sourcesContent":["import ProjectUsers from './ProjectUsers'\n\nexport default {\n name: 'project-users',\n component: ProjectUsers,\n}\n"],"mappings":";;;;;;AAAA;AAAyC;AAAA,eAE1B;EACbA,IAAI,EAAE,eAAe;EACrBC,SAAS,EAAEC;AACb,CAAC;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SanityTutorials.js","names":["FeedItem","feedItem","isEmpty","title","guideOrTutorial","externalLink","feedItems","subtitle","description","createUrl","slug","_type","hasVideo","poster","urlBuilder","image","height","url","undefined","dataAdapter","getFeed","type","current","SanityTutorials","React","Component","componentDidMount","templateRepoId","props","subscription","subscribe","response","setState","items","componentWillUnmount","unsubscribe","render","state","sections","filter","i","columns","length","map","section","sectionItems","_id","item","PropTypes","string"],"sources":["../../../src/widgets/sanityTutorials/SanityTutorials.js"],"sourcesContent":["import React from 'react'\nimport PropTypes from 'prop-types'\nimport {Flex, Grid, Stack, Heading, Container, Card, Text, Button} from '@sanity/ui'\nimport Tutorial from './Tutorial'\nimport dataAdapter from './dataAdapter'\n\nconst FeedItem = ({feedItem}) => {\n // Check to see if the feed item has the content needed to render an item with a link and poster image\n const isEmpty =\n !feedItem.title || (!feedItem.guideOrTutorial && !feedItem.externalLink && !feedItem.feedItems)\n\n if (isEmpty) {\n return null\n }\n const subtitle = feedItem.description\n const {guideOrTutorial = {}} = feedItem\n return (\n <Tutorial\n title={feedItem.title}\n href={createUrl(guideOrTutorial.slug, guideOrTutorial._type) || feedItem.externalLink}\n presenterSubtitle={subtitle}\n showPlayIcon={feedItem.hasVideo}\n posterURL={feedItem.poster ? urlBuilder.image(feedItem.poster).height(360).url() : undefined}\n />\n )\n}\n\nconst {urlBuilder, getFeed} = dataAdapter\n\nfunction createUrl(slug, type) {\n if (type === 'tutorial') {\n return `https://www.sanity.io/docs/tutorials/${slug.current}`\n } else if (type === 'guide') {\n return `https://www.sanity.io/docs/guides/${slug.current}`\n }\n return false\n}\n\nclass SanityTutorials extends React.Component {\n static propTypes = {\n templateRepoId: PropTypes.string,\n }\n\n static defaultProps = {\n templateRepoId: null,\n }\n\n state = {\n feedItems: [],\n }\n\n componentDidMount() {\n const {templateRepoId} = this.props\n this.subscription = getFeed(templateRepoId).subscribe((response) => {\n this.setState({\n title: response.title,\n feedItems: response.items,\n })\n })\n }\n\n componentWillUnmount() {\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n }\n\n render() {\n const {title = 'Learn about Sanity', feedItems} = this.state\n\n // Filter out items and sections for layout purposes\n const sections = feedItems.filter((i) => i._type === 'feedSection')\n const items = feedItems.filter((i) => i._type === 'feedItem')\n\n const columns = (length) => (length < 4 ? [1, 2, 3] : [1, 2, 3, 4])\n\n return (\n <Container width={4}>\n <Stack space={6} paddingBottom={4}>\n <Card\n tone=\"primary\"\n padding={4}\n radius={2}\n border\n marginTop={4}\n data-name=\"sanity-tutorials-widget-docs-link\"\n >\n <Flex direction={['column', 'column', 'row']}>\n <Stack space={4} flex={1} paddingRight={[0, 0, 4]}>\n <Heading as=\"h2\">Getting started guide</Heading>\n <Text as=\"p\">\n {`It's time to learn how to build schemas, create content, and connect it to other\n applications.`}\n </Text>\n </Stack>\n <Flex paddingTop={[4, 4, 0]} align=\"center\">\n <Stack flex={1}>\n <Button\n paddingY={3}\n paddingX={5}\n tone=\"primary\"\n as=\"a\"\n target=\"_blank\"\n href=\"https://www.sanity.io/docs?ref=studio-dashboard\"\n text=\"Go to docs\"\n />\n </Stack>\n </Flex>\n </Flex>\n </Card>\n {sections &&\n sections?.length > 0 &&\n sections.map((section) => {\n return (\n section?.sectionItems && (\n <Stack space={4} key={section._id}>\n <Heading>{section.title}</Heading>\n <Grid\n as=\"ul\"\n columns={columns(section?.sectionItems?.length)}\n gap={4}\n data-name=\"sanity-dashboard-widget-tutorials-section\"\n >\n {section?.sectionItems.map((item) => (\n <Flex as=\"li\" key={item._id}>\n <FeedItem feedItem={item} />\n </Flex>\n ))}\n </Grid>\n </Stack>\n )\n )\n })}\n {items && items.length > 0 && (\n <Stack space={4}>\n <Heading>{title}</Heading>\n <Grid as=\"ul\" columns={columns(items?.length)} gap={4}>\n {items.map((feedItem) => (\n <Flex as=\"li\" key={feedItem._id}>\n <FeedItem feedItem={feedItem} />\n </Flex>\n ))}\n </Grid>\n </Stack>\n )}\n </Stack>\n </Container>\n )\n }\n}\n\nexport default SanityTutorials\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tutorial.js","names":["youtubeRegex","PlayIconBox","styled","Box","theme","sanity","color","card","enabled","bg","Root","Flex","PosterCard","Card","Poster","img","YoutubeContainer","YoutubeEmbed","embedId","Tutorial","React","PureComponent","render","props","title","posterURL","showPlayIcon","href","presenterSubtitle","isYoutube","match","position"],"sources":["../../../src/widgets/sanityTutorials/Tutorial.js"],"sourcesContent":["import React from 'react'\nimport {Card, Box, Flex, Text, Stack} from '@sanity/ui'\nimport styled from 'styled-components'\n\n// eslint-disable-next-line no-useless-escape\nconst youtubeRegex = /youtu(?:.*\\/v\\/|.*v\\=|\\.be\\/)([A-Za-z0-9_-]{11})/\n\nconst PlayIconBox = styled(Box)`\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n\n &:before {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 2.75em;\n height: 2.75em;\n border-radius: 50%;\n background: ${({theme}) => theme.sanity.color.card.enabled.bg};\n opacity: 0.75;\n }\n`\n\nconst Root = styled(Flex)`\n &:hover {\n ${PlayIconBox} {\n &:before {\n opacity: 1;\n }\n }\n }\n`\n\nconst PosterCard = styled(Card)`\n width: 100%;\n padding-bottom: calc(9 / 16 * 100%);\n position: relative;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n`\n\nconst Poster = styled.img`\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n object-fit: cover;\n display: block;\n border-radius: inherit;\n\n &:not([src]) {\n display: none;\n }\n`\nconst YoutubeContainer = styled(Card)`\n position: relative;\n padding-bottom: 56.25%;\n overflow: hidden;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n\n iframe {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n`\nconst YoutubeEmbed = ({embedId}) => (\n <YoutubeContainer radius={3}>\n <iframe\n width=\"853\"\n height=\"480\"\n src={`https://www.youtube.com/embed/${embedId}`}\n frameBorder=\"0\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\n allowFullScreen\n />\n </YoutubeContainer>\n)\nclass Tutorial extends React.PureComponent {\n static defaultProps = {\n posterURL: null,\n showPlayIcon: false,\n }\n\n render() {\n const {title, posterURL, showPlayIcon, href, presenterSubtitle} = this.props\n\n const isYoutube = showPlayIcon && href && href.match(youtubeRegex)\n\n return isYoutube ? (\n <Card\n space={2}\n sizing=\"border\"\n flex={1}\n radius={3}\n style={{position: 'relative'}}\n border\n paddingBottom={2}\n >\n <Stack space={2} height=\"fill\">\n <YoutubeEmbed embedId={href.match(youtubeRegex)[1]} />\n <Stack space={3} flex={1} padding={2}>\n <Text as=\"h3\" size={1} weight=\"bold\">\n {title}\n </Text>\n {presenterSubtitle && (\n <Text size={1} muted>\n {presenterSubtitle}\n </Text>\n )}\n </Stack>\n </Stack>\n </Card>\n ) : (\n <Root flex={1}>\n <Card\n sizing=\"border\"\n flex={1}\n radius={3}\n as=\"a\"\n href={href}\n target=\"_blank\"\n style={{position: 'relative'}}\n border\n paddingBottom={2}\n >\n <Stack space={2} height=\"fill\">\n {posterURL && (\n <PosterCard radius={3}>\n <Poster src={posterURL} />\n </PosterCard>\n )}\n <Stack space={3} flex={1} padding={2}>\n <Text as=\"h3\" size={1} weight=\"bold\">\n {title}\n </Text>\n {presenterSubtitle && (\n <Text size={1} muted>\n {presenterSubtitle}\n </Text>\n )}\n </Stack>\n </Stack>\n </Card>\n </Root>\n )\n }\n}\n\nexport default Tutorial\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataAdapter.js","names":["tutorialsProjectConfig","projectId","dataset","getFeed","templateRepoId","uri","versionedClient","observable","request","withCredentials","urlBuilder","imageUrlBuilder"],"sources":["../../../src/widgets/sanityTutorials/dataAdapter.js"],"sourcesContent":["import imageUrlBuilder from '@sanity/image-url'\nimport {versionedClient} from '../../versionedClient'\n\nconst tutorialsProjectConfig = {\n projectId: '3do82whm',\n dataset: 'next',\n}\n\nexport default {\n getFeed: (templateRepoId) => {\n const uri = templateRepoId\n ? `/addons/dashboard?templateRepoId=${templateRepoId}`\n : '/addons/dashboard'\n return versionedClient.observable.request({uri, withCredentials: false})\n },\n urlBuilder: imageUrlBuilder(tutorialsProjectConfig),\n}\n"],"mappings":";;;;;;AAAA;AACA;AAAqD;AAErD,IAAMA,sBAAsB,GAAG;EAC7BC,SAAS,EAAE,UAAU;EACrBC,OAAO,EAAE;AACX,CAAC;AAAA,eAEc;EACbC,OAAO,EAAGC,cAAc,IAAK;IAC3B,IAAMC,GAAG,GAAGD,cAAc,8CACcA,cAAc,IAClD,mBAAmB;IACvB,OAAOE,gCAAe,CAACC,UAAU,CAACC,OAAO,CAAC;MAACH,GAAG;MAAEI,eAAe,EAAE;IAAK,CAAC,CAAC;EAC1E,CAAC;EACDC,UAAU,EAAE,IAAAC,iBAAe,EAACX,sBAAsB;AACpD,CAAC;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["name","component","SanityTutorials","layout","width"],"sources":["../../../src/widgets/sanityTutorials/index.js"],"sourcesContent":["import SanityTutorials from './SanityTutorials'\n\nexport default {\n name: 'sanity-tutorials',\n component: SanityTutorials,\n layout: {width: 'full'},\n}\n"],"mappings":";;;;;;AAAA;AAA+C;AAAA,eAEhC;EACbA,IAAI,EAAE,kBAAkB;EACxBC,SAAS,EAAEC,wBAAe;EAC1BC,MAAM,EAAE;IAACC,KAAK,EAAE;EAAM;AACxB,CAAC;AAAA"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/dashboard",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.36.0-v2-studio.1",
|
|
4
4
|
"description": "Tool for rendering dashboard widgets",
|
|
5
|
-
"main": "./lib/index.js",
|
|
6
|
-
"types": "./dist/dts",
|
|
7
|
-
"author": "Sanity.io <hello@sanity.io>",
|
|
8
|
-
"license": "MIT",
|
|
9
|
-
"scripts": {
|
|
10
|
-
"clean": "rimraf lib dest"
|
|
11
|
-
},
|
|
12
5
|
"keywords": [
|
|
13
6
|
"sanity",
|
|
14
7
|
"cms",
|
|
@@ -19,6 +12,33 @@
|
|
|
19
12
|
"sanity-plugin",
|
|
20
13
|
"sanity-tool"
|
|
21
14
|
],
|
|
15
|
+
"homepage": "https://www.sanity.io/",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/sanity-io/dashboard/issues"
|
|
18
|
+
},
|
|
19
|
+
"repository": {
|
|
20
|
+
"type": "git",
|
|
21
|
+
"url": "git@github.com:sanity-io/dashboard.git"
|
|
22
|
+
},
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"author": "Sanity.io <hello@sanity.io>",
|
|
25
|
+
"main": "./lib/index.js",
|
|
26
|
+
"types": "./dts/components/dashboardWidget.d.ts",
|
|
27
|
+
"files": [
|
|
28
|
+
"lib",
|
|
29
|
+
"dts",
|
|
30
|
+
"src",
|
|
31
|
+
"sanity.json"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"prebuild": "npm run clean",
|
|
35
|
+
"build": "tsc --declaration --emitDeclarationOnly && sanipack build",
|
|
36
|
+
"clean": "rimraf lib",
|
|
37
|
+
"lint": "eslint .",
|
|
38
|
+
"prepare": "husky install",
|
|
39
|
+
"prepublishOnly": "npm run build",
|
|
40
|
+
"watch": "sanipack build --watch"
|
|
41
|
+
},
|
|
22
42
|
"dependencies": {
|
|
23
43
|
"@sanity/icons": "^1.3.4",
|
|
24
44
|
"@sanity/image-url": "^1.0.1",
|
|
@@ -28,9 +48,28 @@
|
|
|
28
48
|
"rxjs": "^6.5.3"
|
|
29
49
|
},
|
|
30
50
|
"devDependencies": {
|
|
51
|
+
"@commitlint/cli": "^17.3.0",
|
|
52
|
+
"@commitlint/config-conventional": "^17.3.0",
|
|
31
53
|
"@sanity/base": "2.35.2",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
54
|
+
"@sanity/semantic-release-preset": "^2.0.1",
|
|
55
|
+
"@types/styled-components": "5.1.26",
|
|
56
|
+
"@typescript-eslint/eslint-plugin": "^5.42.0",
|
|
57
|
+
"@typescript-eslint/parser": "^5.42.0",
|
|
58
|
+
"eslint": "^8.27.0",
|
|
59
|
+
"eslint-config-prettier": "^8.5.0",
|
|
60
|
+
"eslint-config-sanity": "^6.0.0",
|
|
61
|
+
"eslint-plugin-prettier": "^4.2.1",
|
|
62
|
+
"eslint-plugin-react": "^7.31.10",
|
|
63
|
+
"eslint-plugin-react-hooks": "^4.6.0",
|
|
64
|
+
"husky": "^8.0.1",
|
|
65
|
+
"lint-staged": "^13.0.3",
|
|
66
|
+
"prettier": "^2.7.1",
|
|
67
|
+
"prettier-plugin-packagejson": "^2.3.0",
|
|
68
|
+
"prop-types": "^15.8.1",
|
|
69
|
+
"react": "17.0.1",
|
|
70
|
+
"rimraf": "^2.7.1",
|
|
71
|
+
"sanipack": "^2.1.0",
|
|
72
|
+
"styled-components": "^5.2.0"
|
|
34
73
|
},
|
|
35
74
|
"peerDependencies": {
|
|
36
75
|
"@sanity/base": "^2.0.0",
|
|
@@ -38,14 +77,7 @@
|
|
|
38
77
|
"react": "^16.9 || ^17",
|
|
39
78
|
"styled-components": "^5.2.0"
|
|
40
79
|
},
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
"directory": "packages/@sanity/dashboard"
|
|
45
|
-
},
|
|
46
|
-
"bugs": {
|
|
47
|
-
"url": "https://github.com/sanity-io/sanity/issues"
|
|
48
|
-
},
|
|
49
|
-
"homepage": "https://www.sanity.io/",
|
|
50
|
-
"gitHead": "9bf408d4cc8b3e14bac0bf94d3305d6960181d3c"
|
|
80
|
+
"publishConfig": {
|
|
81
|
+
"access": "public"
|
|
82
|
+
}
|
|
51
83
|
}
|
package/sanity.json
CHANGED
|
@@ -8,10 +8,6 @@
|
|
|
8
8
|
"implements": "part:@sanity/base/tool",
|
|
9
9
|
"path": "DashboardTool"
|
|
10
10
|
},
|
|
11
|
-
{
|
|
12
|
-
"implements": "part:@sanity/base/component",
|
|
13
|
-
"path": "components/story"
|
|
14
|
-
},
|
|
15
11
|
{
|
|
16
12
|
"name": "part:@sanity/dashboard/config",
|
|
17
13
|
"description": "Tool for rendering dashboard widgets"
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import Dashboard from './containers/Dashboard'
|
|
3
|
+
|
|
4
|
+
const strokeStyle = {
|
|
5
|
+
stroke: 'currentColor',
|
|
6
|
+
strokeWidth: 1.2,
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const DashboardIcon = () => (
|
|
10
|
+
<svg
|
|
11
|
+
data-sanity-icon
|
|
12
|
+
viewBox="0 0 25 25"
|
|
13
|
+
fill="none"
|
|
14
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
15
|
+
preserveAspectRatio="xMidYMid"
|
|
16
|
+
width="1em"
|
|
17
|
+
height="1em"
|
|
18
|
+
>
|
|
19
|
+
<path d="M19.5 19.5H5.5V5.5H19.5V19.5Z" style={strokeStyle} />
|
|
20
|
+
<path d="M5.5 12.5H19.5" style={strokeStyle} />
|
|
21
|
+
<path d="M14.5 19.5V12.5M10.5 12.5V5.5" style={strokeStyle} />
|
|
22
|
+
</svg>
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
export default {
|
|
26
|
+
title: 'Dashboard',
|
|
27
|
+
name: 'dashboard',
|
|
28
|
+
icon: DashboardIcon,
|
|
29
|
+
component: Dashboard,
|
|
30
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import PropTypes from 'prop-types'
|
|
2
|
+
import React, {useMemo} from 'react'
|
|
3
|
+
import {Container} from '@sanity/ui'
|
|
4
|
+
|
|
5
|
+
function DashboardLayout(props) {
|
|
6
|
+
const {width} = props
|
|
7
|
+
const formattedWidth = useMemo(() => getWidth(width), [width])
|
|
8
|
+
|
|
9
|
+
return (
|
|
10
|
+
<Container
|
|
11
|
+
width={formattedWidth}
|
|
12
|
+
padding={4}
|
|
13
|
+
sizing="border"
|
|
14
|
+
style={{minHeight: '100%'}}
|
|
15
|
+
data-name="dashboard-layout"
|
|
16
|
+
>
|
|
17
|
+
{props.children}
|
|
18
|
+
</Container>
|
|
19
|
+
)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getWidth(value) {
|
|
23
|
+
const widthMap = {
|
|
24
|
+
small: 2,
|
|
25
|
+
medium: 3,
|
|
26
|
+
large: 4,
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return widthMap?.[value] || widthMap.large
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
DashboardLayout.propTypes = {
|
|
33
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
34
|
+
children: PropTypes.any,
|
|
35
|
+
width: PropTypes.oneOf(['small', 'medium', 'large']),
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
DashboardLayout.defaultProps = {
|
|
39
|
+
children: 'Dummy',
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export default DashboardLayout
|