@sanity/dashboard 6.0.0 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -58,7 +58,7 @@ dashboardTool({
58
58
  Widgets can be configured by passing widget-specific config:
59
59
 
60
60
  ```ts
61
- projectUsersWidget({layout: 'medium'})
61
+ projectUsersWidget({layout: {width: 'medium'}})
62
62
  ```
63
63
 
64
64
  You can change the name, title and icon of the dashboard tool should you want to - which also allows you to configure multiple dashboards with different configurations:
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import { useClient, useListFormat, UserAvatar, useUserStore, definePlugin } from
8
8
  import { from } from "rxjs";
9
9
  import { switchMap, map } from "rxjs/operators";
10
10
  import { RobotIcon, PlayIcon } from "@sanity/icons";
11
- import imageUrlBuilder from "@sanity/image-url";
11
+ import { createImageUrlBuilder } from "@sanity/image-url";
12
12
  const Root$3 = styled(Card).withConfig({
13
13
  displayName: "Root",
14
14
  componentId: "sc-stlwez-0"
@@ -357,7 +357,7 @@ function sortUsersByRobotStatus(userA, userB, project) {
357
357
  }
358
358
  function projectUsersWidget(config) {
359
359
  return {
360
- name: "project-info",
360
+ name: "project-users",
361
361
  component: ProjectUsers,
362
362
  layout: config?.layout
363
363
  };
@@ -378,7 +378,7 @@ function useDataAdapter() {
378
378
  });
379
379
  }, $[0] = versionedClient, $[1] = t0) : t0 = $[1];
380
380
  let t1;
381
- $[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = imageUrlBuilder(tutorialsProjectConfig), $[2] = t1) : t1 = $[2];
381
+ $[2] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t1 = createImageUrlBuilder(tutorialsProjectConfig), $[2] = t1) : t1 = $[2];
382
382
  let t2;
383
383
  return $[3] !== t0 ? (t2 = {
384
384
  getFeed: t0,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/DashboardWidgetContainer.tsx","../src/containers/DashboardContext.tsx","../src/containers/WidgetContainer.tsx","../src/versionedClient.ts","../src/widgets/projectInfo/ProjectInfo.tsx","../src/widgets/projectInfo/index.ts","../src/widgets/projectUsers/ProjectUser.tsx","../src/widgets/projectUsers/ProjectUsers.tsx","../src/widgets/projectUsers/index.ts","../src/widgets/sanityTutorials/dataAdapter.ts","../src/widgets/sanityTutorials/Tutorial.tsx","../src/widgets/sanityTutorials/SanityTutorials.tsx","../src/widgets/sanityTutorials/index.ts","../src/components/DashboardLayout.tsx","../src/components/WidgetGroup.tsx","../src/containers/Dashboard.tsx","../src/plugin.tsx"],"sourcesContent":["import {Card, Box, Heading} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport React, {forwardRef} from 'react'\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}) => getTheme_v2(theme).media[0]}px) {\n overflow-y: auto;\n outline: none;\n }\n`\n\ninterface DashboardWidgetProps {\n header?: string\n children: React.ReactNode\n footer?: React.ReactNode\n}\n\nexport const DashboardWidgetContainer = forwardRef(function DashboardWidgetContainer(\n props: DashboardWidgetProps,\n ref: React.Ref<HTMLDivElement>,\n) {\n const {header, children, footer} = props\n\n return (\n <Root radius={3} display=\"flex\" ref={ref}>\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>{children}</Content>}\n {footer && <Footer borderTop>{footer}</Footer>}\n </Root>\n )\n})\n","import {createContext, useContext} from 'react'\n\nimport {type DashboardConfig} from '../types'\n\nexport const DashboardContext = createContext<DashboardConfig>({widgets: []})\n\nexport function useDashboardConfig(): DashboardConfig {\n return useContext(DashboardContext)\n}\n","import {Card} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {type DashboardWidget} from '../types'\nimport {useDashboardConfig} from './DashboardContext'\n\nexport function WidgetContainer(props: DashboardWidget) {\n const config = useDashboardConfig()\n const layout = useMemo(\n () => ({\n ...props.layout,\n ...config.layout,\n }),\n [props.layout, config.layout],\n )\n\n const Widget = props.component\n\n return (\n <Card shadow={1} data-width={layout.width} data-height={layout.height}>\n <Widget />\n </Card>\n )\n}\n","import {useClient} from 'sanity'\n\nexport function useVersionedClient() {\n return useClient({apiVersion: '2024-08-01'})\n}\n","import {Box, Card, Stack, Heading, Grid, Label, Text, Code, Button} from '@sanity/ui'\nimport {useEffect, useMemo, useState} from 'react'\nimport {type Subscription} from 'rxjs'\n\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\nimport {WidgetContainer} from '../../containers/WidgetContainer'\nimport {type DashboardWidget} from '../../types'\nimport {useVersionedClient} from '../../versionedClient'\nimport {type App, type ProjectInfoProps, type ProjectData, type UserApplication} from './types'\n\nfunction isUrl(url?: string) {\n return url && /^https?:\\/\\//.test(url)\n}\n\nfunction getGraphQLUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/graphql/${dataset}/default`\n}\n\nfunction getGroqUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/groq/${dataset}`\n}\n\nfunction getManageUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}`\n}\n\nconst NO_EXPERIMENTAL: DashboardWidget[] = []\nconst NO_DATA: ProjectData[] = []\n\nexport function ProjectInfo(props: ProjectInfoProps) {\n const {__experimental_before = NO_EXPERIMENTAL, data = NO_DATA} = props\n const [studioApps, setStudioApps] = useState<UserApplication[] | {error: string} | undefined>()\n const [graphQLApi, setGraphQLApi] = useState<string | {error: string} | undefined>()\n const versionedClient = useVersionedClient()\n const {projectId = 'unknown', dataset = 'unknown'} = versionedClient.config()\n\n useEffect(() => {\n const subscriptions: Subscription[] = []\n\n subscriptions.push(\n versionedClient.observable\n .request<UserApplication[]>({uri: '/user-applications', tag: 'dashboard.project-info'})\n .subscribe({\n next: (result) => setStudioApps(result.filter((app) => app.type === 'studio')),\n error: (error) => {\n console.error('Error while resolving user applications', error)\n setStudioApps({\n error: 'Something went wrong while resolving user applications. See console.',\n })\n },\n }),\n )\n\n // ping assumed graphql endpoint\n subscriptions.push(\n versionedClient.observable\n .request({\n method: 'HEAD',\n uri: `/graphql/${dataset}/default`,\n tag: 'dashboard.project-info.graphql-api',\n })\n .subscribe({\n next: () => setGraphQLApi(getGraphQLUrl(projectId, dataset)),\n error: (error) => {\n if (error.statusCode === 404) {\n setGraphQLApi(undefined)\n } else {\n console.error('Error while looking for graphQLApi', error)\n setGraphQLApi({\n error: 'Something went wrong while looking up graphQLApi. See console.',\n })\n }\n },\n }),\n )\n\n return () => {\n subscriptions.forEach((s) => s.unsubscribe())\n }\n }, [dataset, projectId, versionedClient, setGraphQLApi])\n\n const assembleTableRows = useMemo(() => {\n let result: App[] = [\n {\n title: 'Sanity project',\n rows: [\n {title: 'Project ID', value: projectId},\n {title: 'Dataset', value: dataset},\n ],\n },\n ]\n\n const apps: App[] = data.filter((item) => item.category === 'apps')\n\n // Handle studios\n ;(Array.isArray(studioApps) ? studioApps : []).forEach((app) => {\n apps.push({\n title: app.title || 'Studio',\n value: app.urlType === 'internal' ? `https://${app.appHost}.sanity.studio` : app.appHost,\n })\n })\n\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(projectId, dataset)},\n {\n title: 'GraphQL',\n value: (typeof graphQLApi === 'object' ? 'Error' : graphQLApi) ?? 'Not deployed',\n },\n ],\n },\n ],\n data.filter((item) => item.category === 'apis'),\n )\n\n // Handle whatever else there might be\n const otherStuff: Record<string, ProjectData[]> = {}\n data.forEach((item) => {\n if (item.category && item.category !== 'apps' && item.category !== 'apis') {\n const group = otherStuff[item.category] ?? []\n group.push(item)\n otherStuff[item.category] = group\n }\n })\n Object.keys(otherStuff).forEach((category) => {\n result.push({title: category, rows: otherStuff[category]})\n })\n\n return result\n }, [graphQLApi, studioApps, projectId, dataset, data])\n\n return (\n <>\n {__experimental_before.map((widgetConfig, idx) => (\n // eslint-disable-next-line react/no-array-index-key -- static widget config never reorders\n <WidgetContainer key={idx} {...widgetConfig} />\n ))}\n <Box height=\"fill\" marginTop={__experimental_before?.length > 0 ? 4 : 0}>\n <DashboardWidgetContainer\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(projectId)}\n />\n }\n >\n <Card paddingY={4} radius={2} aria-label=\"Project info\">\n <Stack gap={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 {assembleTableRows.map((item) => {\n if (!item || !item.rows) {\n return null\n }\n\n return (\n <Stack key={item.title} gap={3}>\n <Card borderBottom padding={3}>\n <Label size={0} muted>\n {item.title}\n </Label>\n </Card>\n <Stack gap={4} paddingX={3}>\n {item.rows.map((row) => {\n const rowValue = typeof row.value === 'object' ? row.value.error : row.value\n return (\n <Grid key={`${rowValue ?? ''}-${row.title}`} gridTemplateColumns={2}>\n <Text weight=\"medium\">{row.title}</Text>\n {typeof row.value === 'object' && (\n <Text size={1}>{row.value?.error}</Text>\n )}\n {typeof row.value === 'string' && (\n <>\n {isUrl(row.value) ? (\n <Text size={1} style={{wordBreak: 'break-word'}}>\n <a href={row.value}>{row.value}</a>\n </Text>\n ) : (\n <Code size={1} 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 </DashboardWidgetContainer>\n </Box>\n </>\n )\n}\n","import {type LayoutConfig, type DashboardWidget} from '../../types'\nimport {ProjectInfo} from './ProjectInfo'\n\nexport function projectInfoWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectInfo,\n layout: config?.layout ?? {width: 'medium'},\n }\n}\n","import {RobotIcon} from '@sanity/icons'\nimport {Box, Flex, rem, Stack, Text} from '@sanity/ui'\nimport {useListFormat, type User, UserAvatar} from 'sanity'\nimport {styled} from 'styled-components'\n\nconst Root = styled(Flex)`\n height: ${rem(33)}; // 33 = PREVIEW_SIZES.default.media.height\n box-sizing: content-box;\n`\n\nexport interface ProjectUserProps {\n user: User\n isRobot: boolean\n roles: string[]\n}\n\nexport function ProjectUser({user, isRobot, roles}: ProjectUserProps) {\n const listFormat = useListFormat({style: 'narrow'})\n return (\n <Root align=\"center\">\n <Flex align=\"center\" flex={1} gap={2}>\n <Box flex=\"none\">\n {isRobot ? (\n <Text size={2}>\n <RobotIcon />\n </Text>\n ) : (\n <UserAvatar user={user} />\n )}\n </Box>\n\n <Stack flex={1} gap={2}>\n <Text size={1} style={{color: 'inherit'}} textOverflow=\"ellipsis\" weight=\"medium\">\n {user.displayName}\n </Text>\n\n <Text muted size={1} textOverflow=\"ellipsis\">\n {listFormat.format(roles)}\n </Text>\n </Stack>\n </Flex>\n </Root>\n )\n}\n","import {Stack, Spinner, Box, Text, Button} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\nimport {from} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\nimport {type Role, type User, useUserStore} from 'sanity'\n\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\nimport {useVersionedClient} from '../../versionedClient'\nimport {ProjectUser} from './ProjectUser'\n\nfunction getInviteUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}/members`\n}\n\ninterface Member {\n id: string\n roles: Role[]\n isRobot: boolean\n isCurrentUser: boolean\n createdAt: string\n}\n\ninterface Project {\n id: string\n members: Member[]\n}\n\nexport function ProjectUsers() {\n const [project, setProject] = useState<Project | undefined>()\n const [users, setUsers] = useState<User[] | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const userStore = useUserStore()\n const versionedClient = useVersionedClient()\n\n const fetchData = useCallback(() => {\n const {projectId} = versionedClient.config()\n const subscription = versionedClient.observable\n .request<Project>({\n uri: `/projects/${projectId}`,\n tag: 'dashboard.project-users',\n })\n .pipe(\n switchMap((_project) =>\n from(userStore.getUsers(_project.members.map((mem) => mem.id))).pipe(\n map((_users) => ({project: _project, users: _users})),\n ),\n ),\n )\n .subscribe({\n next: ({users: _users, project: _project}) => {\n setProject(_project)\n setUsers(\n (Array.isArray(_users) ? _users : [_users]).sort((userA, userB) =>\n sortUsersByRobotStatus(userA, userB, _project),\n ),\n )\n },\n error: (e: Error) => setError(e),\n })\n\n return () => subscription.unsubscribe()\n }, [userStore, versionedClient])\n\n useEffect(() => fetchData(), [fetchData])\n\n const handleRetryFetch = useCallback(() => fetchData(), [fetchData])\n\n const isLoading = !users || !project\n\n if (error) {\n return (\n <DashboardWidgetContainer header=\"Project users\">\n <Box padding={4}>\n <Stack gap={3}>\n <Text>Something went wrong while fetching data.</Text>\n <Box>\n <Button\n mode=\"ghost\"\n text=\"Retry\"\n title=\"Retry users fetch\"\n onClick={handleRetryFetch}\n />\n </Box>\n </Stack>\n </Box>\n </DashboardWidgetContainer>\n )\n }\n\n return (\n <DashboardWidgetContainer\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=\"Manage members\"\n as=\"a\"\n loading={isLoading}\n href={isLoading ? undefined : getInviteUrl(project.id)}\n />\n }\n >\n {isLoading && (\n <Box paddingY={5} paddingX={2}>\n <Stack gap={4}>\n <Text align=\"center\" muted size={1}>\n <Spinner />\n </Text>\n <Text align=\"center\" size={1} muted>\n Loading items…\n </Text>\n </Stack>\n </Box>\n )}\n\n {!isLoading && (\n <Stack gap={3} padding={3}>\n {users?.map((user) => {\n const membership = project.members.find((member) => member.id === user.id)\n return (\n <ProjectUser\n key={user.id}\n user={user}\n isRobot={membership?.isRobot ?? false}\n roles={membership?.roles.map((role) => role.title) || []}\n />\n )\n })}\n </Stack>\n )}\n </DashboardWidgetContainer>\n )\n}\n\nfunction sortUsersByRobotStatus(userA: User, userB: User, project: 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\n // On ties, sort by when the user was added\n if (membershipA?.isRobot === membershipB?.isRobot) {\n return (membershipA?.createdAt || '') > (membershipB?.createdAt || '') ? 1 : -1\n }\n\n // Robots go to the bottom\n return membershipA?.isRobot ? 1 : -1\n}\n","import {type LayoutConfig, type DashboardWidget} from '../../types'\nimport {ProjectUsers} from './ProjectUsers'\n\nexport function projectUsersWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectUsers,\n layout: config?.layout,\n }\n}\n","import imageUrlBuilder from '@sanity/image-url'\nimport {useMemo} from 'react'\n\nimport {useVersionedClient} from '../../versionedClient'\n\nconst tutorialsProjectConfig = {\n projectId: '3do82whm',\n dataset: 'next',\n}\n\nexport interface Guide {\n _type?: string\n slug?: {current: string}\n presenter?: {\n name?: string\n }\n}\n\nexport interface FeedItem {\n _id: string\n title?: string\n poster?: string\n category?: string\n guideOrTutorial?: Guide\n externalLink?: string\n presenter?: {\n name?: string\n }\n hasVideo?: boolean\n}\n\nexport function useDataAdapter() {\n const versionedClient = useVersionedClient()\n return useMemo(\n () => ({\n getFeed: (templateRepoId: string) => {\n const uri = templateRepoId\n ? `/addons/dashboard?templateRepoId=${templateRepoId}`\n : '/addons/dashboard'\n return versionedClient.observable.request<{items: FeedItem[]}>({\n uri,\n tag: 'dashboard.sanity-tutorials',\n withCredentials: false,\n })\n },\n urlBuilder: imageUrlBuilder(tutorialsProjectConfig),\n }),\n [versionedClient],\n )\n}\n","import {PlayIcon} from '@sanity/icons'\nimport {Card, Box, Heading, Flex, Text, Stack} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {styled} from 'styled-components'\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}) => getTheme_v2(theme).color.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`\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\n &:not([src]) {\n display: none;\n }\n`\n\nexport interface TutorialProps {\n title: string\n posterURL?: string\n href: string\n showPlayIcon?: boolean\n presenterName?: string\n presenterSubtitle?: string\n}\n\nexport function Tutorial(props: TutorialProps) {\n const {title, posterURL, showPlayIcon, href, presenterName, presenterSubtitle} = props\n\n return (\n <Root flex={1}>\n <Card\n sizing=\"border\"\n flex={1}\n padding={2}\n radius={2}\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{position: 'relative'}}\n >\n <Flex direction=\"column\" style={{height: '100%'}}>\n {posterURL && (\n <PosterCard marginBottom={1}>\n <Poster src={posterURL} />\n {showPlayIcon && (\n <PlayIconBox display=\"flex\">\n <Text align=\"center\">\n <PlayIcon />\n </Text>\n </PlayIconBox>\n )}\n </PosterCard>\n )}\n <Flex direction=\"column\" justify=\"space-between\" paddingY={2} flex={1}>\n <Heading as=\"h3\" size={1}>\n {title}\n </Heading>\n <Box marginTop={4}>\n <Stack gap={2} flex={1}>\n <Text size={1}>{presenterName}</Text>\n <Text size={0} style={{opacity: 0.7}}>\n {presenterSubtitle}\n </Text>\n </Stack>\n </Box>\n </Flex>\n </Flex>\n </Card>\n </Root>\n )\n}\n","import {Flex} from '@sanity/ui'\nimport {useEffect, useState} from 'react'\n\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\nimport {type FeedItem, type Guide, useDataAdapter} from './dataAdapter'\nimport {Tutorial} from './Tutorial'\n\nfunction createUrl(slug: {current: string}, type?: string) {\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\nexport interface SanityTutorialsProps {\n templateRepoId: string\n}\n\nexport function SanityTutorials(props: SanityTutorialsProps) {\n const {templateRepoId} = props\n const [feedItems, setFeedItems] = useState<FeedItem[]>([])\n\n const {getFeed, urlBuilder} = useDataAdapter()\n\n useEffect(() => {\n const subscription = getFeed(templateRepoId).subscribe((response) => {\n setFeedItems(response.items)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, [setFeedItems, getFeed, templateRepoId])\n\n const title = 'Learn about Sanity'\n\n return (\n <DashboardWidgetContainer header={title}>\n <Flex as=\"ul\" overflow=\"auto\" align=\"stretch\" paddingY={2}>\n {feedItems?.map((feedItem, index) => {\n if (!feedItem.title || (!feedItem.guideOrTutorial && !feedItem.externalLink)) {\n return null\n }\n const presenter = feedItem.presenter || feedItem.guideOrTutorial?.presenter || {}\n const subtitle = feedItem.category\n const {guideOrTutorial = {} as Guide} = feedItem\n const href =\n (guideOrTutorial.slug\n ? createUrl(guideOrTutorial.slug, guideOrTutorial._type)\n : feedItem.externalLink) || feedItem.externalLink\n\n return (\n <Flex\n as=\"li\"\n key={feedItem._id}\n paddingRight={index < feedItems?.length - 1 ? 1 : 3}\n paddingLeft={index === 0 ? 3 : 0}\n align=\"stretch\"\n style={{minWidth: 272, width: '30%'}}\n >\n <Tutorial\n title={feedItem.title}\n href={href ?? ''}\n presenterName={presenter.name}\n presenterSubtitle={subtitle}\n showPlayIcon={feedItem.hasVideo}\n posterURL={\n feedItem.poster ? urlBuilder.image(feedItem.poster).height(360).url() : undefined\n }\n />\n </Flex>\n )\n })}\n </Flex>\n </DashboardWidgetContainer>\n )\n}\n","import {type LayoutConfig, type DashboardWidget} from '../../types'\nimport {SanityTutorials} from './SanityTutorials'\n\nexport function sanityTutorialsWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'sanity-tutorials',\n component: SanityTutorials,\n layout: config?.layout ?? {width: 'full'},\n }\n}\n","import {Container} from '@sanity/ui'\n\nexport function DashboardLayout({children}: {children: React.ReactNode}) {\n return (\n <Container width={4} padding={4} sizing=\"border\" style={{height: '100%', overflowY: 'auto'}}>\n {children}\n </Container>\n )\n}\n","import {Box, Card, Grid, Text} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {styled, css} from 'styled-components'\n\nimport {WidgetContainer} from '../containers/WidgetContainer'\nimport {type DashboardConfig, type LayoutConfig, type DashboardWidget} from '../types'\n\nconst media = {\n small: (...args: Parameters<typeof css>) => css`\n @media (min-width: ${({theme}) => getTheme_v2(theme).media[0]}px) {\n ${css(...args)}\n }\n `,\n medium: (...args: Parameters<typeof css>) => css`\n @media (min-width: ${({theme}) => getTheme_v2(theme).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\nexport interface WidgetGroupProps {\n config: Partial<DashboardConfig>\n}\n\nconst NO_WIDGETS: DashboardWidget[] = []\nconst NO_LAYOUT: LayoutConfig = {}\n\nexport function WidgetGroup(props: WidgetGroupProps) {\n const {\n config: {layout = NO_LAYOUT, widgets = NO_WIDGETS},\n } = props\n return (\n <Root\n autoFlow=\"row dense\"\n data-width={layout.width || 'auto'}\n data-height={layout.height || 'auto'}\n gap={4}\n >\n {widgets.length ? null : (\n <Card padding={4} shadow={1} tone=\"primary\">\n <Text align=\"center\">Add some widgets to populate this space.</Text>\n </Card>\n )}\n {widgets.map((widgetConfig, index) => {\n if (widgetConfig.type === '__experimental_group') {\n // eslint-disable-next-line react/no-array-index-key -- static widget config never reorders\n return <WidgetGroup key={index} config={widgetConfig} />\n }\n if (widgetConfig.component) {\n // eslint-disable-next-line react/no-array-index-key -- static widget config never reorders\n return <WidgetContainer key={index} {...widgetConfig} />\n }\n // eslint-disable-next-line react/no-array-index-key -- static widget config never reorders\n return <Box key={index}>{widgetConfig.name} is missing widget component</Box>\n })}\n </Root>\n )\n}\n","import {DashboardLayout} from '../components/DashboardLayout'\nimport {WidgetGroup} from '../components/WidgetGroup'\nimport {type DashboardConfig} from '../types'\nimport {DashboardContext} from './DashboardContext'\n\nexport function Dashboard({config}: {config: DashboardConfig}) {\n if (!config) {\n return null\n }\n\n return (\n <DashboardContext.Provider value={config}>\n <DashboardLayout>\n <WidgetGroup config={config} />\n </DashboardLayout>\n </DashboardContext.Provider>\n )\n}\n","import {type ComponentType, type CSSProperties} from 'react'\nimport {definePlugin} from 'sanity'\n\nimport {Dashboard} from './containers/Dashboard'\nimport {type DashboardConfig, type DashboardWidget, type LayoutConfig} from './types'\n\nconst strokeStyle: CSSProperties = {\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 interface DashboardPluginConfig {\n /**\n * Dashboard tool title\n */\n title?: string\n /**\n * Dashboard tool name (used in url path)\n */\n name?: string\n /**\n * Dashboard tool icon\n */\n icon?: ComponentType\n widgets?: DashboardWidget[]\n\n /**\n * Will be used for widgets that do not define a layout directly.\n */\n defaultLayout?: LayoutConfig\n}\n\nexport const dashboardTool = definePlugin<DashboardPluginConfig>((config = {}) => {\n const pluginConfig: DashboardConfig = {\n layout: config.defaultLayout ?? {},\n widgets: config.widgets ?? [],\n }\n\n const title = config.title ?? 'Dashboard'\n const name = config.name ?? 'dashboard'\n const icon = config.icon ?? DashboardIcon\n\n return {\n name: 'dashboard',\n tools: [\n {\n title,\n name,\n icon,\n component: () => <Dashboard config={pluginConfig} />,\n },\n ],\n }\n})\n"],"names":["Root","styled","Card","withConfig","displayName","componentId","Header","Footer","Content","Box","theme","getTheme_v2","media","DashboardWidgetContainer","forwardRef","props","ref","$","_c","header","children","footer","t0","t1","t2","t3","DashboardContext","createContext","widgets","useDashboardConfig","useContext","WidgetContainer","config","layout","Widget","component","height","width","useVersionedClient","for","apiVersion","useClient","isUrl","url","test","getGraphQLUrl","projectId","dataset","getGroqUrl","getManageUrl","NO_EXPERIMENTAL","NO_DATA","ProjectInfo","__experimental_before","data","undefined","studioApps","setStudioApps","useState","graphQLApi","setGraphQLApi","versionedClient","t4","t5","observable","subscriptions","push","request","uri","tag","subscribe","next","result","filter","_temp","error","console","method","error_0","statusCode","forEach","_temp2","t6","useEffect","result_0","title","rows","value","apps","_temp3","Array","isArray","app_0","app","urlType","appHost","length","concat","_temp4","otherStuff","item_1","item","category","group","Object","keys","assembleTableRows","t7","map","_temp5","t8","t9","t10","t11","t12","Symbol","t13","_temp7","t14","t15","t16","t17","item_2","_temp6","row","rowValue","wordBreak","widgetConfig","idx","item_0","s","unsubscribe","type","projectInfoWidget","name","Flex","rem","ProjectUser","user","isRobot","roles","style","listFormat","useListFormat","color","format","getInviteUrl","ProjectUsers","project","setProject","users","setUsers","setError","userStore","useUserStore","subscription","pipe","switchMap","_project","from","getUsers","members","_users","_users_0","_project_0","sort","userA","userB","sortUsersByRobotStatus","e","fetchData","handleRetryFetch","isLoading","id","membership","find","member","role","mem","membershipA","membershipB","createdAt","projectUsersWidget","tutorialsProjectConfig","useDataAdapter","templateRepoId","withCredentials","imageUrlBuilder","getFeed","urlBuilder","PlayIconBox","bg","PosterCard","Poster","img","Tutorial","posterURL","showPlayIcon","href","presenterName","presenterSubtitle","position","opacity","createUrl","slug","current","SanityTutorials","feedItems","setFeedItems","response","items","feedItem","index","guideOrTutorial","externalLink","presenter","subtitle","_type","minWidth","hasVideo","poster","image","_id","sanityTutorialsWidget","DashboardLayout","overflowY","small","args","css","medium","Grid","NO_WIDGETS","NO_LAYOUT","WidgetGroup","Dashboard","strokeStyle","stroke","strokeWidth","DashboardIcon","dashboardTool","definePlugin","pluginConfig","defaultLayout","icon","tools"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/DashboardWidgetContainer.tsx","../src/containers/DashboardContext.tsx","../src/containers/WidgetContainer.tsx","../src/versionedClient.ts","../src/widgets/projectInfo/ProjectInfo.tsx","../src/widgets/projectInfo/index.ts","../src/widgets/projectUsers/ProjectUser.tsx","../src/widgets/projectUsers/ProjectUsers.tsx","../src/widgets/projectUsers/index.ts","../src/widgets/sanityTutorials/dataAdapter.ts","../src/widgets/sanityTutorials/Tutorial.tsx","../src/widgets/sanityTutorials/SanityTutorials.tsx","../src/widgets/sanityTutorials/index.ts","../src/components/DashboardLayout.tsx","../src/components/WidgetGroup.tsx","../src/containers/Dashboard.tsx","../src/plugin.tsx"],"sourcesContent":["import {Card, Box, Heading} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport React, {forwardRef} from 'react'\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}) => getTheme_v2(theme).media[0]}px) {\n overflow-y: auto;\n outline: none;\n }\n`\n\ninterface DashboardWidgetProps {\n header?: string\n children: React.ReactNode\n footer?: React.ReactNode\n}\n\nexport const DashboardWidgetContainer = forwardRef(function DashboardWidgetContainer(\n props: DashboardWidgetProps,\n ref: React.Ref<HTMLDivElement>,\n) {\n const {header, children, footer} = props\n\n return (\n <Root radius={3} display=\"flex\" ref={ref}>\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>{children}</Content>}\n {footer && <Footer borderTop>{footer}</Footer>}\n </Root>\n )\n})\n","import {createContext, useContext} from 'react'\n\nimport {type DashboardConfig} from '../types'\n\nexport const DashboardContext = createContext<DashboardConfig>({widgets: []})\n\nexport function useDashboardConfig(): DashboardConfig {\n return useContext(DashboardContext)\n}\n","import {Card} from '@sanity/ui'\nimport {useMemo} from 'react'\n\nimport {type DashboardWidget} from '../types'\nimport {useDashboardConfig} from './DashboardContext'\n\nexport function WidgetContainer(props: DashboardWidget) {\n const config = useDashboardConfig()\n const layout = useMemo(\n () => ({\n ...props.layout,\n ...config.layout,\n }),\n [props.layout, config.layout],\n )\n\n const Widget = props.component\n\n return (\n <Card shadow={1} data-width={layout.width} data-height={layout.height}>\n <Widget />\n </Card>\n )\n}\n","import {useClient} from 'sanity'\n\nexport function useVersionedClient() {\n return useClient({apiVersion: '2024-08-01'})\n}\n","import {Box, Card, Stack, Heading, Grid, Label, Text, Code, Button} from '@sanity/ui'\nimport {useEffect, useMemo, useState} from 'react'\nimport {type Subscription} from 'rxjs'\n\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\nimport {WidgetContainer} from '../../containers/WidgetContainer'\nimport {type DashboardWidget} from '../../types'\nimport {useVersionedClient} from '../../versionedClient'\nimport {type App, type ProjectInfoProps, type ProjectData, type UserApplication} from './types'\n\nfunction isUrl(url?: string) {\n return url && /^https?:\\/\\//.test(url)\n}\n\nfunction getGraphQLUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/graphql/${dataset}/default`\n}\n\nfunction getGroqUrl(projectId: string, dataset: string) {\n return `https://${projectId}.api.sanity.io/v1/groq/${dataset}`\n}\n\nfunction getManageUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}`\n}\n\nconst NO_EXPERIMENTAL: DashboardWidget[] = []\nconst NO_DATA: ProjectData[] = []\n\nexport function ProjectInfo(props: ProjectInfoProps) {\n const {__experimental_before = NO_EXPERIMENTAL, data = NO_DATA} = props\n const [studioApps, setStudioApps] = useState<UserApplication[] | {error: string} | undefined>()\n const [graphQLApi, setGraphQLApi] = useState<string | {error: string} | undefined>()\n const versionedClient = useVersionedClient()\n const {projectId = 'unknown', dataset = 'unknown'} = versionedClient.config()\n\n useEffect(() => {\n const subscriptions: Subscription[] = []\n\n subscriptions.push(\n versionedClient.observable\n .request<UserApplication[]>({uri: '/user-applications', tag: 'dashboard.project-info'})\n .subscribe({\n next: (result) => setStudioApps(result.filter((app) => app.type === 'studio')),\n error: (error) => {\n console.error('Error while resolving user applications', error)\n setStudioApps({\n error: 'Something went wrong while resolving user applications. See console.',\n })\n },\n }),\n )\n\n // ping assumed graphql endpoint\n subscriptions.push(\n versionedClient.observable\n .request({\n method: 'HEAD',\n uri: `/graphql/${dataset}/default`,\n tag: 'dashboard.project-info.graphql-api',\n })\n .subscribe({\n next: () => setGraphQLApi(getGraphQLUrl(projectId, dataset)),\n error: (error) => {\n if (error.statusCode === 404) {\n setGraphQLApi(undefined)\n } else {\n console.error('Error while looking for graphQLApi', error)\n setGraphQLApi({\n error: 'Something went wrong while looking up graphQLApi. See console.',\n })\n }\n },\n }),\n )\n\n return () => {\n subscriptions.forEach((s) => s.unsubscribe())\n }\n }, [dataset, projectId, versionedClient, setGraphQLApi])\n\n const assembleTableRows = useMemo(() => {\n let result: App[] = [\n {\n title: 'Sanity project',\n rows: [\n {title: 'Project ID', value: projectId},\n {title: 'Dataset', value: dataset},\n ],\n },\n ]\n\n const apps: App[] = data.filter((item) => item.category === 'apps')\n\n // Handle studios\n ;(Array.isArray(studioApps) ? studioApps : []).forEach((app) => {\n apps.push({\n title: app.title || 'Studio',\n value: app.urlType === 'internal' ? `https://${app.appHost}.sanity.studio` : app.appHost,\n })\n })\n\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(projectId, dataset)},\n {\n title: 'GraphQL',\n value: (typeof graphQLApi === 'object' ? 'Error' : graphQLApi) ?? 'Not deployed',\n },\n ],\n },\n ],\n data.filter((item) => item.category === 'apis'),\n )\n\n // Handle whatever else there might be\n const otherStuff: Record<string, ProjectData[]> = {}\n data.forEach((item) => {\n if (item.category && item.category !== 'apps' && item.category !== 'apis') {\n const group = otherStuff[item.category] ?? []\n group.push(item)\n otherStuff[item.category] = group\n }\n })\n Object.keys(otherStuff).forEach((category) => {\n result.push({title: category, rows: otherStuff[category]})\n })\n\n return result\n }, [graphQLApi, studioApps, projectId, dataset, data])\n\n return (\n <>\n {__experimental_before.map((widgetConfig, idx) => (\n // eslint-disable-next-line react/no-array-index-key -- static widget config never reorders\n <WidgetContainer key={idx} {...widgetConfig} />\n ))}\n <Box height=\"fill\" marginTop={__experimental_before?.length > 0 ? 4 : 0}>\n <DashboardWidgetContainer\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(projectId)}\n />\n }\n >\n <Card paddingY={4} radius={2} aria-label=\"Project info\">\n <Stack gap={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 {assembleTableRows.map((item) => {\n if (!item || !item.rows) {\n return null\n }\n\n return (\n <Stack key={item.title} gap={3}>\n <Card borderBottom padding={3}>\n <Label size={0} muted>\n {item.title}\n </Label>\n </Card>\n <Stack gap={4} paddingX={3}>\n {item.rows.map((row) => {\n const rowValue = typeof row.value === 'object' ? row.value.error : row.value\n return (\n <Grid key={`${rowValue ?? ''}-${row.title}`} gridTemplateColumns={2}>\n <Text weight=\"medium\">{row.title}</Text>\n {typeof row.value === 'object' && (\n <Text size={1}>{row.value?.error}</Text>\n )}\n {typeof row.value === 'string' && (\n <>\n {isUrl(row.value) ? (\n <Text size={1} style={{wordBreak: 'break-word'}}>\n <a href={row.value}>{row.value}</a>\n </Text>\n ) : (\n <Code size={1} 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 </DashboardWidgetContainer>\n </Box>\n </>\n )\n}\n","import {type LayoutConfig, type DashboardWidget} from '../../types'\nimport {ProjectInfo} from './ProjectInfo'\n\nexport function projectInfoWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-info',\n component: ProjectInfo,\n layout: config?.layout ?? {width: 'medium'},\n }\n}\n","import {RobotIcon} from '@sanity/icons'\nimport {Box, Flex, rem, Stack, Text} from '@sanity/ui'\nimport {useListFormat, type User, UserAvatar} from 'sanity'\nimport {styled} from 'styled-components'\n\nconst Root = styled(Flex)`\n height: ${rem(33)}; // 33 = PREVIEW_SIZES.default.media.height\n box-sizing: content-box;\n`\n\nexport interface ProjectUserProps {\n user: User\n isRobot: boolean\n roles: string[]\n}\n\nexport function ProjectUser({user, isRobot, roles}: ProjectUserProps) {\n const listFormat = useListFormat({style: 'narrow'})\n return (\n <Root align=\"center\">\n <Flex align=\"center\" flex={1} gap={2}>\n <Box flex=\"none\">\n {isRobot ? (\n <Text size={2}>\n <RobotIcon />\n </Text>\n ) : (\n <UserAvatar user={user} />\n )}\n </Box>\n\n <Stack flex={1} gap={2}>\n <Text size={1} style={{color: 'inherit'}} textOverflow=\"ellipsis\" weight=\"medium\">\n {user.displayName}\n </Text>\n\n <Text muted size={1} textOverflow=\"ellipsis\">\n {listFormat.format(roles)}\n </Text>\n </Stack>\n </Flex>\n </Root>\n )\n}\n","import {Stack, Spinner, Box, Text, Button} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\nimport {from} from 'rxjs'\nimport {map, switchMap} from 'rxjs/operators'\nimport {type Role, type User, useUserStore} from 'sanity'\n\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\nimport {useVersionedClient} from '../../versionedClient'\nimport {ProjectUser} from './ProjectUser'\n\nfunction getInviteUrl(projectId: string) {\n return `https://manage.sanity.io/projects/${projectId}/members`\n}\n\ninterface Member {\n id: string\n roles: Role[]\n isRobot: boolean\n isCurrentUser: boolean\n createdAt: string\n}\n\ninterface Project {\n id: string\n members: Member[]\n}\n\nexport function ProjectUsers() {\n const [project, setProject] = useState<Project | undefined>()\n const [users, setUsers] = useState<User[] | undefined>()\n const [error, setError] = useState<Error | undefined>()\n\n const userStore = useUserStore()\n const versionedClient = useVersionedClient()\n\n const fetchData = useCallback(() => {\n const {projectId} = versionedClient.config()\n const subscription = versionedClient.observable\n .request<Project>({\n uri: `/projects/${projectId}`,\n tag: 'dashboard.project-users',\n })\n .pipe(\n switchMap((_project) =>\n from(userStore.getUsers(_project.members.map((mem) => mem.id))).pipe(\n map((_users) => ({project: _project, users: _users})),\n ),\n ),\n )\n .subscribe({\n next: ({users: _users, project: _project}) => {\n setProject(_project)\n setUsers(\n (Array.isArray(_users) ? _users : [_users]).sort((userA, userB) =>\n sortUsersByRobotStatus(userA, userB, _project),\n ),\n )\n },\n error: (e: Error) => setError(e),\n })\n\n return () => subscription.unsubscribe()\n }, [userStore, versionedClient])\n\n useEffect(() => fetchData(), [fetchData])\n\n const handleRetryFetch = useCallback(() => fetchData(), [fetchData])\n\n const isLoading = !users || !project\n\n if (error) {\n return (\n <DashboardWidgetContainer header=\"Project users\">\n <Box padding={4}>\n <Stack gap={3}>\n <Text>Something went wrong while fetching data.</Text>\n <Box>\n <Button\n mode=\"ghost\"\n text=\"Retry\"\n title=\"Retry users fetch\"\n onClick={handleRetryFetch}\n />\n </Box>\n </Stack>\n </Box>\n </DashboardWidgetContainer>\n )\n }\n\n return (\n <DashboardWidgetContainer\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=\"Manage members\"\n as=\"a\"\n loading={isLoading}\n href={isLoading ? undefined : getInviteUrl(project.id)}\n />\n }\n >\n {isLoading && (\n <Box paddingY={5} paddingX={2}>\n <Stack gap={4}>\n <Text align=\"center\" muted size={1}>\n <Spinner />\n </Text>\n <Text align=\"center\" size={1} muted>\n Loading items…\n </Text>\n </Stack>\n </Box>\n )}\n\n {!isLoading && (\n <Stack gap={3} padding={3}>\n {users?.map((user) => {\n const membership = project.members.find((member) => member.id === user.id)\n return (\n <ProjectUser\n key={user.id}\n user={user}\n isRobot={membership?.isRobot ?? false}\n roles={membership?.roles.map((role) => role.title) || []}\n />\n )\n })}\n </Stack>\n )}\n </DashboardWidgetContainer>\n )\n}\n\nfunction sortUsersByRobotStatus(userA: User, userB: User, project: 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\n // On ties, sort by when the user was added\n if (membershipA?.isRobot === membershipB?.isRobot) {\n return (membershipA?.createdAt || '') > (membershipB?.createdAt || '') ? 1 : -1\n }\n\n // Robots go to the bottom\n return membershipA?.isRobot ? 1 : -1\n}\n","import {type LayoutConfig, type DashboardWidget} from '../../types'\nimport {ProjectUsers} from './ProjectUsers'\n\nexport function projectUsersWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'project-users',\n component: ProjectUsers,\n layout: config?.layout,\n }\n}\n","import {createImageUrlBuilder} from '@sanity/image-url'\nimport {useMemo} from 'react'\n\nimport {useVersionedClient} from '../../versionedClient'\n\nconst tutorialsProjectConfig = {\n projectId: '3do82whm',\n dataset: 'next',\n}\n\nexport interface Guide {\n _type?: string\n slug?: {current: string}\n presenter?: {\n name?: string\n }\n}\n\nexport interface FeedItem {\n _id: string\n title?: string\n poster?: string\n category?: string\n guideOrTutorial?: Guide\n externalLink?: string\n presenter?: {\n name?: string\n }\n hasVideo?: boolean\n}\n\nexport function useDataAdapter() {\n const versionedClient = useVersionedClient()\n return useMemo(\n () => ({\n getFeed: (templateRepoId: string) => {\n const uri = templateRepoId\n ? `/addons/dashboard?templateRepoId=${templateRepoId}`\n : '/addons/dashboard'\n return versionedClient.observable.request<{items: FeedItem[]}>({\n uri,\n tag: 'dashboard.sanity-tutorials',\n withCredentials: false,\n })\n },\n urlBuilder: createImageUrlBuilder(tutorialsProjectConfig),\n }),\n [versionedClient],\n )\n}\n","import {PlayIcon} from '@sanity/icons'\nimport {Card, Box, Heading, Flex, Text, Stack} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {styled} from 'styled-components'\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}) => getTheme_v2(theme).color.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`\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\n &:not([src]) {\n display: none;\n }\n`\n\nexport interface TutorialProps {\n title: string\n posterURL?: string\n href: string\n showPlayIcon?: boolean\n presenterName?: string\n presenterSubtitle?: string\n}\n\nexport function Tutorial(props: TutorialProps) {\n const {title, posterURL, showPlayIcon, href, presenterName, presenterSubtitle} = props\n\n return (\n <Root flex={1}>\n <Card\n sizing=\"border\"\n flex={1}\n padding={2}\n radius={2}\n as=\"a\"\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{position: 'relative'}}\n >\n <Flex direction=\"column\" style={{height: '100%'}}>\n {posterURL && (\n <PosterCard marginBottom={1}>\n <Poster src={posterURL} />\n {showPlayIcon && (\n <PlayIconBox display=\"flex\">\n <Text align=\"center\">\n <PlayIcon />\n </Text>\n </PlayIconBox>\n )}\n </PosterCard>\n )}\n <Flex direction=\"column\" justify=\"space-between\" paddingY={2} flex={1}>\n <Heading as=\"h3\" size={1}>\n {title}\n </Heading>\n <Box marginTop={4}>\n <Stack gap={2} flex={1}>\n <Text size={1}>{presenterName}</Text>\n <Text size={0} style={{opacity: 0.7}}>\n {presenterSubtitle}\n </Text>\n </Stack>\n </Box>\n </Flex>\n </Flex>\n </Card>\n </Root>\n )\n}\n","import {Flex} from '@sanity/ui'\nimport {useEffect, useState} from 'react'\n\nimport {DashboardWidgetContainer} from '../../components/DashboardWidgetContainer'\nimport {type FeedItem, type Guide, useDataAdapter} from './dataAdapter'\nimport {Tutorial} from './Tutorial'\n\nfunction createUrl(slug: {current: string}, type?: string) {\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\nexport interface SanityTutorialsProps {\n templateRepoId: string\n}\n\nexport function SanityTutorials(props: SanityTutorialsProps) {\n const {templateRepoId} = props\n const [feedItems, setFeedItems] = useState<FeedItem[]>([])\n\n const {getFeed, urlBuilder} = useDataAdapter()\n\n useEffect(() => {\n const subscription = getFeed(templateRepoId).subscribe((response) => {\n setFeedItems(response.items)\n })\n return () => {\n subscription.unsubscribe()\n }\n }, [setFeedItems, getFeed, templateRepoId])\n\n const title = 'Learn about Sanity'\n\n return (\n <DashboardWidgetContainer header={title}>\n <Flex as=\"ul\" overflow=\"auto\" align=\"stretch\" paddingY={2}>\n {feedItems?.map((feedItem, index) => {\n if (!feedItem.title || (!feedItem.guideOrTutorial && !feedItem.externalLink)) {\n return null\n }\n const presenter = feedItem.presenter || feedItem.guideOrTutorial?.presenter || {}\n const subtitle = feedItem.category\n const {guideOrTutorial = {} as Guide} = feedItem\n const href =\n (guideOrTutorial.slug\n ? createUrl(guideOrTutorial.slug, guideOrTutorial._type)\n : feedItem.externalLink) || feedItem.externalLink\n\n return (\n <Flex\n as=\"li\"\n key={feedItem._id}\n paddingRight={index < feedItems?.length - 1 ? 1 : 3}\n paddingLeft={index === 0 ? 3 : 0}\n align=\"stretch\"\n style={{minWidth: 272, width: '30%'}}\n >\n <Tutorial\n title={feedItem.title}\n href={href ?? ''}\n presenterName={presenter.name}\n presenterSubtitle={subtitle}\n showPlayIcon={feedItem.hasVideo}\n posterURL={\n feedItem.poster ? urlBuilder.image(feedItem.poster).height(360).url() : undefined\n }\n />\n </Flex>\n )\n })}\n </Flex>\n </DashboardWidgetContainer>\n )\n}\n","import {type LayoutConfig, type DashboardWidget} from '../../types'\nimport {SanityTutorials} from './SanityTutorials'\n\nexport function sanityTutorialsWidget(config?: {layout?: LayoutConfig}): DashboardWidget {\n return {\n name: 'sanity-tutorials',\n component: SanityTutorials,\n layout: config?.layout ?? {width: 'full'},\n }\n}\n","import {Container} from '@sanity/ui'\n\nexport function DashboardLayout({children}: {children: React.ReactNode}) {\n return (\n <Container width={4} padding={4} sizing=\"border\" style={{height: '100%', overflowY: 'auto'}}>\n {children}\n </Container>\n )\n}\n","import {Box, Card, Grid, Text} from '@sanity/ui'\nimport {getTheme_v2} from '@sanity/ui/theme'\nimport {styled, css} from 'styled-components'\n\nimport {WidgetContainer} from '../containers/WidgetContainer'\nimport {type DashboardConfig, type LayoutConfig, type DashboardWidget} from '../types'\n\nconst media = {\n small: (...args: Parameters<typeof css>) => css`\n @media (min-width: ${({theme}) => getTheme_v2(theme).media[0]}px) {\n ${css(...args)}\n }\n `,\n medium: (...args: Parameters<typeof css>) => css`\n @media (min-width: ${({theme}) => getTheme_v2(theme).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\nexport interface WidgetGroupProps {\n config: Partial<DashboardConfig>\n}\n\nconst NO_WIDGETS: DashboardWidget[] = []\nconst NO_LAYOUT: LayoutConfig = {}\n\nexport function WidgetGroup(props: WidgetGroupProps) {\n const {\n config: {layout = NO_LAYOUT, widgets = NO_WIDGETS},\n } = props\n return (\n <Root\n autoFlow=\"row dense\"\n data-width={layout.width || 'auto'}\n data-height={layout.height || 'auto'}\n gap={4}\n >\n {widgets.length ? null : (\n <Card padding={4} shadow={1} tone=\"primary\">\n <Text align=\"center\">Add some widgets to populate this space.</Text>\n </Card>\n )}\n {widgets.map((widgetConfig, index) => {\n if (widgetConfig.type === '__experimental_group') {\n // eslint-disable-next-line react/no-array-index-key -- static widget config never reorders\n return <WidgetGroup key={index} config={widgetConfig} />\n }\n if (widgetConfig.component) {\n // eslint-disable-next-line react/no-array-index-key -- static widget config never reorders\n return <WidgetContainer key={index} {...widgetConfig} />\n }\n // eslint-disable-next-line react/no-array-index-key -- static widget config never reorders\n return <Box key={index}>{widgetConfig.name} is missing widget component</Box>\n })}\n </Root>\n )\n}\n","import {DashboardLayout} from '../components/DashboardLayout'\nimport {WidgetGroup} from '../components/WidgetGroup'\nimport {type DashboardConfig} from '../types'\nimport {DashboardContext} from './DashboardContext'\n\nexport function Dashboard({config}: {config: DashboardConfig}) {\n if (!config) {\n return null\n }\n\n return (\n <DashboardContext.Provider value={config}>\n <DashboardLayout>\n <WidgetGroup config={config} />\n </DashboardLayout>\n </DashboardContext.Provider>\n )\n}\n","import {type ComponentType, type CSSProperties} from 'react'\nimport {definePlugin} from 'sanity'\n\nimport {Dashboard} from './containers/Dashboard'\nimport {type DashboardConfig, type DashboardWidget, type LayoutConfig} from './types'\n\nconst strokeStyle: CSSProperties = {\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 interface DashboardPluginConfig {\n /**\n * Dashboard tool title\n */\n title?: string\n /**\n * Dashboard tool name (used in url path)\n */\n name?: string\n /**\n * Dashboard tool icon\n */\n icon?: ComponentType\n widgets?: DashboardWidget[]\n\n /**\n * Will be used for widgets that do not define a layout directly.\n */\n defaultLayout?: LayoutConfig\n}\n\nexport const dashboardTool = definePlugin<DashboardPluginConfig>((config = {}) => {\n const pluginConfig: DashboardConfig = {\n layout: config.defaultLayout ?? {},\n widgets: config.widgets ?? [],\n }\n\n const title = config.title ?? 'Dashboard'\n const name = config.name ?? 'dashboard'\n const icon = config.icon ?? DashboardIcon\n\n return {\n name: 'dashboard',\n tools: [\n {\n title,\n name,\n icon,\n component: () => <Dashboard config={pluginConfig} />,\n },\n ],\n }\n})\n"],"names":["Root","styled","Card","withConfig","displayName","componentId","Header","Footer","Content","Box","theme","getTheme_v2","media","DashboardWidgetContainer","forwardRef","props","ref","$","_c","header","children","footer","t0","t1","t2","t3","DashboardContext","createContext","widgets","useDashboardConfig","useContext","WidgetContainer","config","layout","Widget","component","height","width","useVersionedClient","for","apiVersion","useClient","isUrl","url","test","getGraphQLUrl","projectId","dataset","getGroqUrl","getManageUrl","NO_EXPERIMENTAL","NO_DATA","ProjectInfo","__experimental_before","data","undefined","studioApps","setStudioApps","useState","graphQLApi","setGraphQLApi","versionedClient","t4","t5","observable","subscriptions","push","request","uri","tag","subscribe","next","result","filter","_temp","error","console","method","error_0","statusCode","forEach","_temp2","t6","useEffect","result_0","title","rows","value","apps","_temp3","Array","isArray","app_0","app","urlType","appHost","length","concat","_temp4","otherStuff","item_1","item","category","group","Object","keys","assembleTableRows","t7","map","_temp5","t8","t9","t10","t11","t12","Symbol","t13","_temp7","t14","t15","t16","t17","item_2","_temp6","row","rowValue","wordBreak","widgetConfig","idx","item_0","s","unsubscribe","type","projectInfoWidget","name","Flex","rem","ProjectUser","user","isRobot","roles","style","listFormat","useListFormat","color","format","getInviteUrl","ProjectUsers","project","setProject","users","setUsers","setError","userStore","useUserStore","subscription","pipe","switchMap","_project","from","getUsers","members","_users","_users_0","_project_0","sort","userA","userB","sortUsersByRobotStatus","e","fetchData","handleRetryFetch","isLoading","id","membership","find","member","role","mem","membershipA","membershipB","createdAt","projectUsersWidget","tutorialsProjectConfig","useDataAdapter","templateRepoId","withCredentials","createImageUrlBuilder","getFeed","urlBuilder","PlayIconBox","bg","PosterCard","Poster","img","Tutorial","posterURL","showPlayIcon","href","presenterName","presenterSubtitle","position","opacity","createUrl","slug","current","SanityTutorials","feedItems","setFeedItems","response","items","feedItem","index","guideOrTutorial","externalLink","presenter","subtitle","_type","minWidth","hasVideo","poster","image","_id","sanityTutorialsWidget","DashboardLayout","overflowY","small","args","css","medium","Grid","NO_WIDGETS","NO_LAYOUT","WidgetGroup","Dashboard","strokeStyle","stroke","strokeWidth","DashboardIcon","dashboardTool","definePlugin","pluginConfig","defaultLayout","icon","tools"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sanity/dashboard",
3
- "version": "6.0.0",
3
+ "version": "6.0.2",
4
4
  "description": "Tool for rendering dashboard widgets",
5
5
  "keywords": [
6
6
  "cms",
@@ -34,7 +34,7 @@
34
34
  },
35
35
  "dependencies": {
36
36
  "@sanity/icons": "^3.5.2",
37
- "@sanity/image-url": "^1.1.0",
37
+ "@sanity/image-url": "^2.1.1",
38
38
  "@sanity/ui": "^3.2.0",
39
39
  "rxjs": "^7.8.2"
40
40
  },