sanity-plugin-utils 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  var $k7rGe$react = require("react");
2
2
  var $k7rGe$rxjsoperators = require("rxjs/operators");
3
3
  var $k7rGe$reactfastcompare = require("react-fast-compare");
4
- var $k7rGe$sanity_unstable = require("sanity/_unstable");
5
4
  var $k7rGe$sanity = require("sanity");
6
5
  var $k7rGe$reactjsxruntime = require("react/jsx-runtime");
7
6
  var $k7rGe$sanityui = require("@sanity/ui");
@@ -36,7 +35,7 @@ function $38e62e17b2ecf1ab$export$3a1bc984843df335(query, { params: params = $38
36
35
  const [error, setError] = (0, $k7rGe$react.useState)(false);
37
36
  const [data, setData] = (0, $k7rGe$react.useState)(initialValue);
38
37
  const subscription = (0, $k7rGe$react.useRef)(null);
39
- const documentStore = (0, $k7rGe$sanity_unstable.useDocumentStore)();
38
+ const documentStore = (0, $k7rGe$sanity.useDocumentStore)();
40
39
  (0, $k7rGe$react.useEffect)(()=>{
41
40
  if (query) subscription.current = documentStore.listenQuery(query, params, options).pipe((0, $k7rGe$rxjsoperators.distinctUntilChanged)((0, ($parcel$interopDefault($k7rGe$reactfastcompare)))), (0, $k7rGe$rxjsoperators.catchError)((err)=>{
42
41
  console.error(err);
@@ -301,7 +300,7 @@ function $cce1a432d06a385f$export$4a7d9e0c70b27556(props) {
301
300
  children: /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsxs)((0, $k7rGe$sanityui.Flex), {
302
301
  align: "center",
303
302
  children: [
304
- /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanity_unstable.UserAvatar), {
303
+ /*#__PURE__*/ (0, $k7rGe$reactjsxruntime.jsx)((0, $k7rGe$sanity.UserAvatar), {
305
304
  user: user,
306
305
  size: 1
307
306
  }),
@@ -1 +1 @@
1
- {"mappings":"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","sources":["src/index.ts","src/hooks/useListeningQuery.tsx","src/hooks/useProjectUsers.tsx","src/components/Feedback.tsx","src/components/Table.tsx","src/components/UserSelectMenu/index.tsx"],"sourcesContent":["export {useListeningQuery} from './hooks/useListeningQuery'\nexport {useProjectUsers} from './hooks/useProjectUsers'\n\nexport {Feedback} from './components/Feedback'\nexport {Table, Row, Cell} from './components/Table'\nexport {UserSelectMenu} from './components/UserSelectMenu/index'\n","import {useEffect, useState, useRef} from 'react'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport isEqual from 'react-fast-compare'\nimport {useDocumentStore} from 'sanity/_unstable'\nimport {Subscription} from 'rxjs'\n\ntype Params = Record<string, string | number | boolean | string[]>\n\ninterface ListenQueryOptions {\n tag?: string\n apiVersion?: string\n}\n\ntype Value = any\n\ninterface Config<V> {\n params: Params\n options?: ListenQueryOptions\n initialValue?: null | V\n}\n\ninterface Return<V> {\n loading: boolean\n error: boolean\n data: null | V\n initialValue?: Value\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2022-05-09`}\nconst DEFAULT_INITIAL_VALUE = null\n\nexport function useListeningQuery<V>(\n query: string | {fetch: string; listen: string},\n {\n params = DEFAULT_PARAMS,\n options = DEFAULT_OPTIONS,\n initialValue = DEFAULT_INITIAL_VALUE,\n }: Config<V>\n): Return<V> {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [data, setData] = useState(initialValue)\n const subscription = useRef<null | Subscription>(null)\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query) {\n subscription.current = documentStore\n .listenQuery(query, params, options)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents) => {\n setData((current: Value) => (isEqual(current, documents) ? current : documents))\n setLoading(false)\n setError(false)\n })\n }\n\n return () => subscription?.current?.unsubscribe()\n }, [query, params, options, documentStore])\n\n return {data, loading, error}\n}\n","import {useState, useEffect} from 'react'\nimport {useClient, useWorkspace} from 'sanity'\n\nexport type UserExtended = {\n createdAt: string\n displayName: string\n email: string\n familyName: string\n givenName: string\n id: string\n imageUrl: string\n isCurrentUser: boolean\n middleName: string\n projectId: string\n provider: string\n sanityUserId: string\n updatedAt: string\n}\n\ntype UserRole = {\n name: string\n title: string\n}\n\ntype UserResponse = {\n isRobot: boolean\n projectUserId: string\n roles: UserRole[]\n}\n\n// Custom hook to fetch user details\n// Built-in hook doesn't fetch all user details\nexport function useProjectUsers(): UserExtended[] {\n const {currentUser} = useWorkspace()\n const client = useClient()\n const [users, setUsers] = useState([])\n\n useEffect(() => {\n const {projectId} = client.config()\n\n async function getUser(id: string) {\n const userDetails = await client.request({\n url: `/projects/${projectId}/users/${id}`,\n })\n\n return userDetails\n }\n\n async function getUsersWithRoles() {\n const userRoles = await client\n .request({\n url: `/projects/${projectId}/acl`,\n })\n .then(async (res) =>\n Promise.all(\n res.map(async (user: UserResponse) => ({\n isCurrentUser: user.projectUserId === currentUser?.id,\n ...(await getUser(user.projectUserId)),\n }))\n )\n )\n .catch((err) => err)\n\n setUsers(userRoles)\n }\n\n if (!users.length) {\n getUsersWithRoles()\n }\n }, [client, currentUser?.id, users.length])\n\n return users\n}\n","import React from 'react'\nimport {Box, Card, CardTone, Flex, Stack, Text} from '@sanity/ui'\n\ntype FeedbackChildren = {\n children?: React.ReactNode\n title?: never\n description?: never\n}\n\ntype FeedbackTextProps = {\n title?: string\n description?: React.ReactNode\n children?: never\n}\n\ntype FeedbackProps = (FeedbackChildren | FeedbackTextProps) & {\n tone?: CardTone\n icon?: React.ReactNode\n}\n\nconst DEFAULT_PROPS: FeedbackProps = {\n tone: 'primary',\n}\n\nexport function Feedback(props: FeedbackProps) {\n const {title, description, icon, tone, children} = {...DEFAULT_PROPS, ...props}\n\n return (\n <Card tone={tone} padding={4} radius={3} border>\n <Flex>\n {icon ? `display icon` : null}\n {children ? (\n children\n ) : (\n <Box flex={1}>\n <Stack space={4}>\n {title ? <Text weight=\"semibold\">{title}</Text> : null}\n {description ? <Text size={2}>{description}</Text> : null}\n </Stack>\n </Box>\n )}\n </Flex>\n </Card>\n )\n}\n","import React, {PropsWithChildren} from 'react'\nimport styled, {css} from 'styled-components'\nimport {Card, CardProps} from '@sanity/ui'\n\n// Wrappers required because of bug with passing down \"as\" prop\n// https://github.com/styled-components/styled-components/issues/2449\n\n// Table\nconst TableWrapper = (props: CardProps = {}) => {\n return <Card as=\"table\" {...props} />\n}\n\nconst StyledTable = styled(TableWrapper)(\n () =>\n css`\n display: table;\n width: 100%;\n\n &:not([hidden]) {\n display: table;\n }\n `\n)\n\ntype TableProps = PropsWithChildren<CardProps>\n\nexport function Table(props: TableProps) {\n const {children, ...rest} = props\n\n return <StyledTable {...rest}>{children}</StyledTable>\n}\n\n// Row\nconst RowWrapper = (props: CardProps = {}) => {\n return <Card as=\"tr\" {...props} />\n}\n\nconst StyledRow = styled(RowWrapper)(\n () =>\n css`\n display: table-row;\n\n &:not([hidden]) {\n display: table-row;\n }\n `\n)\n\ntype TableRowProps = PropsWithChildren<CardProps>\n\nexport function Row(props: TableRowProps) {\n const {children, ...rest} = props\n\n return <StyledRow {...rest}>{children}</StyledRow>\n}\n\n// Cell\nconst CellWrapper = (props = {}) => {\n return <Card as=\"td\" {...props} />\n}\n\nconst StyledCell = styled(CellWrapper)(\n () =>\n css`\n display: table-cell;\n\n &:not([hidden]) {\n display: table-cell;\n }\n `\n)\n\ntype TableCellProps = PropsWithChildren<CardProps>\n\nexport function Cell(props: TableCellProps) {\n const {children, ...rest} = props\n\n return <StyledCell {...rest}>{children}</StyledCell>\n}\n","import React, {useEffect, useRef} from 'react'\nimport {Box, Text, Menu, MenuItem, TextInput, Flex, Badge} from '@sanity/ui'\nimport {AddCircleIcon, RemoveCircleIcon, RestoreIcon} from '@sanity/icons'\nimport {UserAvatar} from 'sanity/_unstable'\n\nimport {UserExtended} from '../../hooks/useProjectUsers'\n\nfunction searchUsers(users: UserExtended[], searchString: string): UserExtended[] {\n return users.filter((user) => {\n const displayName = (user.displayName || '').toLowerCase()\n if (displayName.startsWith(searchString)) return true\n const givenName = (user.givenName || '').toLowerCase()\n if (givenName.startsWith(searchString)) return true\n const middleName = (user.middleName || '').toLowerCase()\n if (middleName.startsWith(searchString)) return true\n const familyName = (user.familyName || '').toLowerCase()\n if (familyName.startsWith(searchString)) return true\n\n return false\n })\n}\n\ntype UserSelectMenuProps = {\n value: string[]\n userList: UserExtended[]\n onAdd: any\n onRemove: any\n onClear: any\n open: boolean\n style?: React.CSSProperties\n}\n\nexport function UserSelectMenu(props: UserSelectMenuProps) {\n const {value = [], userList = [], onAdd, onRemove, onClear, style = {}} = props\n const [searchString, setSearchString] = React.useState('')\n const searchResults = searchUsers(userList || [], searchString)\n\n const me = userList.find((u) => u.isCurrentUser)\n const meAssigned = me && value.includes(me.id)\n\n // Focus input on open\n // TODO: Fix focus, it gets immediately taken away\n const input = useRef<HTMLInputElement>()\n // useEffect(() => {\n // if (open && input?.current) {\n // input.current.focus()\n // }\n // }, [open])\n\n const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchString(event.target.value)\n }\n\n const handleSelect = (isChecked: boolean, user: UserExtended) => {\n if (!isChecked) {\n if (onAdd) onAdd(user.id)\n } else if (onRemove) onRemove(user.id)\n }\n\n const handleAssignMyself = () => {\n if (me && onAdd) onAdd(me.id)\n }\n\n const handleUnassignMyself = () => {\n if (me && onRemove) onRemove(me.id)\n }\n\n const handleClearAssigneesClick = () => {\n if (onClear) onClear()\n }\n\n return (\n <Menu style={style}>\n {meAssigned ? (\n <MenuItem\n tone=\"caution\"\n disabled={!me}\n onClick={handleUnassignMyself}\n icon={RemoveCircleIcon}\n text=\"Unassign myself\"\n />\n ) : (\n <MenuItem\n tone=\"positive\"\n onClick={handleAssignMyself}\n icon={AddCircleIcon}\n text=\"Assign myself\"\n />\n )}\n\n <MenuItem\n tone=\"critical\"\n disabled={value.length === 0}\n onClick={handleClearAssigneesClick}\n icon={RestoreIcon}\n text=\"Clear assignees\"\n />\n\n <Box padding={1}>\n <TextInput\n // @ts-ignore TODO: Satisfy ref\n ref={input}\n onChange={handleSearchChange}\n placeholder=\"Search members\"\n value={searchString}\n />\n </Box>\n\n {searchString && searchResults?.length === 0 && <MenuItem disabled text=\"No matches\" />}\n\n {searchResults &&\n searchResults.map((user) => (\n <MenuItem\n key={user.id}\n pressed={value.includes(user.id)}\n onClick={() => handleSelect(value.indexOf(user.id) > -1, user)}\n >\n <Flex align=\"center\">\n <UserAvatar user={user} size={1} />\n <Box paddingX={2} flex={1}>\n <Text>{user.displayName}</Text>\n </Box>\n {user.isCurrentUser && (\n <Badge fontSize={1} tone=\"positive\" mode=\"outline\">\n Me\n </Badge>\n )}\n </Flex>\n </MenuItem>\n ))}\n </Menu>\n )\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}
1
+ {"mappings":"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","sources":["src/index.ts","src/hooks/useListeningQuery.tsx","src/hooks/useProjectUsers.tsx","src/components/Feedback.tsx","src/components/Table.tsx","src/components/UserSelectMenu/index.tsx"],"sourcesContent":["export {useListeningQuery} from './hooks/useListeningQuery'\nexport {useProjectUsers} from './hooks/useProjectUsers'\n\nexport {Feedback} from './components/Feedback'\nexport {Table, Row, Cell} from './components/Table'\nexport {UserSelectMenu} from './components/UserSelectMenu/index'\n","import {useEffect, useState, useRef} from 'react'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport isEqual from 'react-fast-compare'\nimport {useDocumentStore} from 'sanity'\nimport {Subscription} from 'rxjs'\n\ntype Params = Record<string, string | number | boolean | string[]>\n\ninterface ListenQueryOptions {\n tag?: string\n apiVersion?: string\n}\n\ntype Value = any\n\ninterface Config<V> {\n params: Params\n options?: ListenQueryOptions\n initialValue?: null | V\n}\n\ninterface Return<V> {\n loading: boolean\n error: boolean\n data: null | V\n initialValue?: Value\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2022-05-09`}\nconst DEFAULT_INITIAL_VALUE = null\n\nexport function useListeningQuery<V>(\n query: string | {fetch: string; listen: string},\n {\n params = DEFAULT_PARAMS,\n options = DEFAULT_OPTIONS,\n initialValue = DEFAULT_INITIAL_VALUE,\n }: Config<V>\n): Return<V> {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [data, setData] = useState(initialValue)\n const subscription = useRef<null | Subscription>(null)\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query) {\n subscription.current = documentStore\n .listenQuery(query, params, options)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents) => {\n setData((current: Value) => (isEqual(current, documents) ? current : documents))\n setLoading(false)\n setError(false)\n })\n }\n\n return () => subscription?.current?.unsubscribe()\n }, [query, params, options, documentStore])\n\n return {data, loading, error}\n}\n","import {useState, useEffect} from 'react'\nimport {useClient, useWorkspace} from 'sanity'\n\nexport type UserExtended = {\n createdAt: string\n displayName: string\n email: string\n familyName: string\n givenName: string\n id: string\n imageUrl: string\n isCurrentUser: boolean\n middleName: string\n projectId: string\n provider: string\n sanityUserId: string\n updatedAt: string\n}\n\ntype UserRole = {\n name: string\n title: string\n}\n\ntype UserResponse = {\n isRobot: boolean\n projectUserId: string\n roles: UserRole[]\n}\n\n// Custom hook to fetch user details\n// Built-in hook doesn't fetch all user details\nexport function useProjectUsers(): UserExtended[] {\n const {currentUser} = useWorkspace()\n const client = useClient()\n const [users, setUsers] = useState([])\n\n useEffect(() => {\n const {projectId} = client.config()\n\n async function getUser(id: string) {\n const userDetails = await client.request({\n url: `/projects/${projectId}/users/${id}`,\n })\n\n return userDetails\n }\n\n async function getUsersWithRoles() {\n const userRoles = await client\n .request({\n url: `/projects/${projectId}/acl`,\n })\n .then(async (res) =>\n Promise.all(\n res.map(async (user: UserResponse) => ({\n isCurrentUser: user.projectUserId === currentUser?.id,\n ...(await getUser(user.projectUserId)),\n }))\n )\n )\n .catch((err) => err)\n\n setUsers(userRoles)\n }\n\n if (!users.length) {\n getUsersWithRoles()\n }\n }, [client, currentUser?.id, users.length])\n\n return users\n}\n","import React from 'react'\nimport {Box, Card, CardTone, Flex, Stack, Text} from '@sanity/ui'\n\ntype FeedbackChildren = {\n children?: React.ReactNode\n title?: never\n description?: never\n}\n\ntype FeedbackTextProps = {\n title?: string\n description?: React.ReactNode\n children?: never\n}\n\ntype FeedbackProps = (FeedbackChildren | FeedbackTextProps) & {\n tone?: CardTone\n icon?: React.ReactNode\n}\n\nconst DEFAULT_PROPS: FeedbackProps = {\n tone: 'primary',\n}\n\nexport function Feedback(props: FeedbackProps) {\n const {title, description, icon, tone, children} = {...DEFAULT_PROPS, ...props}\n\n return (\n <Card tone={tone} padding={4} radius={3} border>\n <Flex>\n {icon ? `display icon` : null}\n {children ? (\n children\n ) : (\n <Box flex={1}>\n <Stack space={4}>\n {title ? <Text weight=\"semibold\">{title}</Text> : null}\n {description ? <Text size={2}>{description}</Text> : null}\n </Stack>\n </Box>\n )}\n </Flex>\n </Card>\n )\n}\n","import React, {PropsWithChildren} from 'react'\nimport styled, {css} from 'styled-components'\nimport {Card, CardProps} from '@sanity/ui'\n\n// Wrappers required because of bug with passing down \"as\" prop\n// https://github.com/styled-components/styled-components/issues/2449\n\n// Table\nconst TableWrapper = (props: CardProps = {}) => {\n return <Card as=\"table\" {...props} />\n}\n\nconst StyledTable = styled(TableWrapper)(\n () =>\n css`\n display: table;\n width: 100%;\n\n &:not([hidden]) {\n display: table;\n }\n `\n)\n\ntype TableProps = PropsWithChildren<CardProps>\n\nexport function Table(props: TableProps) {\n const {children, ...rest} = props\n\n return <StyledTable {...rest}>{children}</StyledTable>\n}\n\n// Row\nconst RowWrapper = (props: CardProps = {}) => {\n return <Card as=\"tr\" {...props} />\n}\n\nconst StyledRow = styled(RowWrapper)(\n () =>\n css`\n display: table-row;\n\n &:not([hidden]) {\n display: table-row;\n }\n `\n)\n\ntype TableRowProps = PropsWithChildren<CardProps>\n\nexport function Row(props: TableRowProps) {\n const {children, ...rest} = props\n\n return <StyledRow {...rest}>{children}</StyledRow>\n}\n\n// Cell\nconst CellWrapper = (props = {}) => {\n return <Card as=\"td\" {...props} />\n}\n\nconst StyledCell = styled(CellWrapper)(\n () =>\n css`\n display: table-cell;\n\n &:not([hidden]) {\n display: table-cell;\n }\n `\n)\n\ntype TableCellProps = PropsWithChildren<CardProps>\n\nexport function Cell(props: TableCellProps) {\n const {children, ...rest} = props\n\n return <StyledCell {...rest}>{children}</StyledCell>\n}\n","import React, {useRef} from 'react'\nimport {Box, Text, Menu, MenuItem, TextInput, Flex, Badge} from '@sanity/ui'\nimport {AddCircleIcon, RemoveCircleIcon, RestoreIcon} from '@sanity/icons'\nimport {UserAvatar} from 'sanity'\n\nimport {UserExtended} from '../../hooks/useProjectUsers'\n\nfunction searchUsers(users: UserExtended[], searchString: string): UserExtended[] {\n return users.filter((user) => {\n const displayName = (user.displayName || '').toLowerCase()\n if (displayName.startsWith(searchString)) return true\n const givenName = (user.givenName || '').toLowerCase()\n if (givenName.startsWith(searchString)) return true\n const middleName = (user.middleName || '').toLowerCase()\n if (middleName.startsWith(searchString)) return true\n const familyName = (user.familyName || '').toLowerCase()\n if (familyName.startsWith(searchString)) return true\n\n return false\n })\n}\n\ntype UserSelectMenuProps = {\n value: string[]\n userList: UserExtended[]\n onAdd: any\n onRemove: any\n onClear: any\n open: boolean\n style?: React.CSSProperties\n}\n\nexport function UserSelectMenu(props: UserSelectMenuProps) {\n const {value = [], userList = [], onAdd, onRemove, onClear, style = {}} = props\n const [searchString, setSearchString] = React.useState('')\n const searchResults = searchUsers(userList || [], searchString)\n\n const me = userList.find((u) => u.isCurrentUser)\n const meAssigned = me && value.includes(me.id)\n\n // Focus input on open\n // TODO: Fix focus, it gets immediately taken away\n const input = useRef<HTMLInputElement>()\n // useEffect(() => {\n // if (open && input?.current) {\n // input.current.focus()\n // }\n // }, [open])\n\n const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchString(event.target.value)\n }\n\n const handleSelect = (isChecked: boolean, user: UserExtended) => {\n if (!isChecked) {\n if (onAdd) onAdd(user.id)\n } else if (onRemove) onRemove(user.id)\n }\n\n const handleAssignMyself = () => {\n if (me && onAdd) onAdd(me.id)\n }\n\n const handleUnassignMyself = () => {\n if (me && onRemove) onRemove(me.id)\n }\n\n const handleClearAssigneesClick = () => {\n if (onClear) onClear()\n }\n\n return (\n <Menu style={style}>\n {meAssigned ? (\n <MenuItem\n tone=\"caution\"\n disabled={!me}\n onClick={handleUnassignMyself}\n icon={RemoveCircleIcon}\n text=\"Unassign myself\"\n />\n ) : (\n <MenuItem\n tone=\"positive\"\n onClick={handleAssignMyself}\n icon={AddCircleIcon}\n text=\"Assign myself\"\n />\n )}\n\n <MenuItem\n tone=\"critical\"\n disabled={value.length === 0}\n onClick={handleClearAssigneesClick}\n icon={RestoreIcon}\n text=\"Clear assignees\"\n />\n\n <Box padding={1}>\n <TextInput\n // @ts-ignore TODO: Satisfy ref\n ref={input}\n onChange={handleSearchChange}\n placeholder=\"Search members\"\n value={searchString}\n />\n </Box>\n\n {searchString && searchResults?.length === 0 && <MenuItem disabled text=\"No matches\" />}\n\n {searchResults &&\n searchResults.map((user) => (\n <MenuItem\n key={user.id}\n pressed={value.includes(user.id)}\n onClick={() => handleSelect(value.indexOf(user.id) > -1, user)}\n >\n <Flex align=\"center\">\n <UserAvatar user={user} size={1} />\n <Box paddingX={2} flex={1}>\n <Text>{user.displayName}</Text>\n </Box>\n {user.isCurrentUser && (\n <Badge fontSize={1} tone=\"positive\" mode=\"outline\">\n Me\n </Badge>\n )}\n </Flex>\n </MenuItem>\n ))}\n </Menu>\n )\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}
package/lib/esm/index.js CHANGED
@@ -1,8 +1,7 @@
1
1
  import $gGrEF$react, {useState as $gGrEF$useState, useRef as $gGrEF$useRef, useEffect as $gGrEF$useEffect} from "react";
2
2
  import {distinctUntilChanged as $gGrEF$distinctUntilChanged, catchError as $gGrEF$catchError} from "rxjs/operators";
3
3
  import $gGrEF$reactfastcompare from "react-fast-compare";
4
- import {useDocumentStore as $gGrEF$useDocumentStore, UserAvatar as $gGrEF$UserAvatar} from "sanity/_unstable";
5
- import {useWorkspace as $gGrEF$useWorkspace, useClient as $gGrEF$useClient} from "sanity";
4
+ import {useDocumentStore as $gGrEF$useDocumentStore, useWorkspace as $gGrEF$useWorkspace, useClient as $gGrEF$useClient, UserAvatar as $gGrEF$UserAvatar} from "sanity";
6
5
  import {jsx as $gGrEF$jsx, jsxs as $gGrEF$jsxs} from "react/jsx-runtime";
7
6
  import {Card as $gGrEF$Card, Flex as $gGrEF$Flex, Box as $gGrEF$Box, Stack as $gGrEF$Stack, Text as $gGrEF$Text, Menu as $gGrEF$Menu, MenuItem as $gGrEF$MenuItem, TextInput as $gGrEF$TextInput, Badge as $gGrEF$Badge} from "@sanity/ui";
8
7
  import $gGrEF$styledcomponents, {css as $gGrEF$css} from "styled-components";
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;ACAA;;;;AA4BA,MAAM,oCAAc,GAAG,EAAE;AACzB,MAAM,qCAAe,GAAG;IAAC,UAAU,EAAE,CAAC,WAAW,CAAC;CAAC;AACnD,MAAM,2CAAqB,GAAG,IAAI;AAE3B,SAAS,yCAAiB,CAC/B,KAA+C,EAC/C,UACE,MAAM,GAAG,oCAAc,YACvB,OAAO,GAAG,qCAAe,iBACzB,YAAY,GAAG,2CAAqB,GAC1B,EACD;IACX,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,CAAA,GAAA,eAAQ,CAAA,CAAC,IAAI,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAA,GAAA,eAAQ,CAAA,CAAC,KAAK,CAAC;IACzC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAA,GAAA,eAAQ,CAAA,CAAC,YAAY,CAAC;IAC9C,MAAM,YAAY,GAAG,CAAA,GAAA,aAAM,CAAA,CAAsB,IAAI,CAAC;IACtD,MAAM,aAAa,GAAG,CAAA,GAAA,uBAAgB,CAAA,EAAE;IAExC,CAAA,GAAA,gBAAS,CAAA,CAAC,IAAM;QACd,IAAI,KAAK,EACP,YAAY,CAAC,OAAO,GAAG,aAAa,CACjC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CACnC,IAAI,CACH,CAAA,GAAA,2BAAoB,CAAA,CAAC,CAAA,GAAA,uBAAO,CAAA,CAAC,EAC7B,CAAA,GAAA,iBAAU,CAAA,CAAC,CAAC,GAAG,GAAK;YAClB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YAClB,QAAQ,CAAC,GAAG,CAAC;YACb,UAAU,CAAC,KAAK,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC;YAEb,OAAO,GAAG,CAAA;SACX,CAAC,CACH,CACA,SAAS,CAAC,CAAC,SAAS,GAAK;YACxB,OAAO,CAAC,CAAC,OAAc,GAAM,CAAA,GAAA,uBAAO,CAAA,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,OAAO,GAAG,SAAS,AAAC,CAAC;YAChF,UAAU,CAAC,KAAK,CAAC;YACjB,QAAQ,CAAC,KAAK,CAAC;SAChB,CAAC;QAGN,OAAO,IAAM,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;KAClD,EAAE;QAAC,KAAK;QAAE,MAAM;QAAE,OAAO;QAAE,aAAa;KAAC,CAAC;IAE3C,OAAO;cAAC,IAAI;iBAAE,OAAO;eAAE,KAAK;KAAC,CAAA;CAC9B;;ADxED;AEAA;;AAgCO,SAAS,yCAAe,GAAmB;IAChD,MAAM,eAAC,WAAW,CAAA,EAAC,GAAG,CAAA,GAAA,mBAAY,CAAA,EAAE;IACpC,MAAM,MAAM,GAAG,CAAA,GAAA,gBAAS,CAAA,EAAE;IAC1B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAA,GAAA,eAAQ,CAAA,CAAC,EAAE,CAAC;IAEtC,CAAA,GAAA,gBAAS,CAAA,CAAC,IAAM;QACd,MAAM,aAAC,SAAS,CAAA,EAAC,GAAG,MAAM,CAAC,MAAM,EAAE;QAEnC,eAAe,OAAO,CAAC,EAAU,EAAE;YACjC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;gBACvC,GAAG,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;aAC1C,CAAC;YAEF,OAAO,WAAW,CAAA;SACnB;QAED,eAAe,iBAAiB,GAAG;YACjC,MAAM,SAAS,GAAG,MAAM,MAAM,CAC3B,OAAO,CAAC;gBACP,GAAG,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC;aAClC,CAAC,CACD,IAAI,CAAC,OAAO,GAAG,GACd,OAAO,CAAC,GAAG,CACT,GAAG,CAAC,GAAG,CAAC,OAAO,IAAkB,GAAM,CAAA;wBACrC,aAAa,EAAE,IAAI,CAAC,aAAa,KAAK,WAAW,EAAE,EAAE;wBACrD,GAAI,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;qBACtC,CAAA,AAAC,CAAC,CACJ,CACF,CACA,KAAK,CAAC,CAAC,GAAG,GAAK,GAAG,CAAC;YAEtB,QAAQ,CAAC,SAAS,CAAC;SACpB;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,EACf,iBAAiB,EAAE;KAEtB,EAAE;QAAC,MAAM;QAAE,WAAW,EAAE,EAAE;QAAE,KAAK,CAAC,MAAM;KAAC,CAAC;IAE3C,OAAO,KAAK,CAAA;CACb;;;ACxED;;;AAoBA,MAAM,mCAAa,GAAkB;IACnC,IAAI,EAAE,SAAS;CAChB;AAEM,SAAS,yCAAQ,CAAC,KAAoB,EAAE;IAC7C,MAAM,SAAC,KAAK,CAAA,eAAE,WAAW,CAAA,QAAE,IAAI,CAAA,QAAE,IAAI,CAAA,YAAE,QAAQ,CAAA,EAAC,GAAG;QAAC,GAAG,mCAAa;QAAE,GAAG,KAAK;KAAC;IAE/E,qBACE,gBAAC,CAAA,GAAA,WAAI,CAAA;QAAC,IAAI,EAAE,IAAI;QAAE,OAAO,EAAE,CAAC;QAAE,MAAM,EAAE,CAAC;QAAE,MAAM;kBAC7C,cAAA,iBAAC,CAAA,GAAA,WAAI,CAAA;;gBACF,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI;gBAC5B,QAAQ,GACP,QAAQ,iBAER,gBAAC,CAAA,GAAA,UAAG,CAAA;oBAAC,IAAI,EAAE,CAAC;8BACV,cAAA,iBAAC,CAAA,GAAA,YAAK,CAAA;wBAAC,KAAK,EAAE,CAAC;;4BACZ,KAAK,iBAAG,gBAAC,CAAA,GAAA,WAAI,CAAA;gCAAC,MAAM,EAAC,UAAU;0CAAE,KAAK;8BAAQ,GAAG,IAAI;4BACrD,WAAW,iBAAG,gBAAC,CAAA,GAAA,WAAI,CAAA;gCAAC,IAAI,EAAE,CAAC;0CAAG,WAAW;8BAAQ,GAAG,IAAI;;sBACnD;kBACJ,AACP;;UACI;MACF,CACR;CACF;;;AC5CD;;;;AAIA,+DAA+D;AAC/D,qEAAqE;AAErE,QAAQ;AACR,MAAM,kCAAY,GAAG,CAAC,KAAgB,GAAG,EAAE,GAAK;IAC9C,qBAAO,gBAAC,CAAA,GAAA,WAAI,CAAA;QAAC,EAAE,EAAC,OAAO;QAAE,GAAG,KAAK;MAAI,CAAA;CACtC;AAED,MAAM,iCAAW,GAAG,CAAA,GAAA,uBAAM,CAAA,CAAC,kCAAY,CAAC,CACtC,IACE,CAAA,GAAA,UAAG,CAAA,CAAC;;;;;;;IAOJ,CAAC,CACJ;AAIM,SAAS,yCAAK,CAAC,KAAiB,EAAE;IACvC,MAAM,YAAC,QAAQ,CAAA,EAAE,GAAG,IAAI,EAAC,GAAG,KAAK;IAEjC,qBAAO,gBAAC,iCAAW;QAAE,GAAG,IAAI;kBAAG,QAAQ;MAAe,CAAA;CACvD;AAED,MAAM;AACN,MAAM,gCAAU,GAAG,CAAC,KAAgB,GAAG,EAAE,GAAK;IAC5C,qBAAO,gBAAC,CAAA,GAAA,WAAI,CAAA;QAAC,EAAE,EAAC,IAAI;QAAE,GAAG,KAAK;MAAI,CAAA;CACnC;AAED,MAAM,+BAAS,GAAG,CAAA,GAAA,uBAAM,CAAA,CAAC,gCAAU,CAAC,CAClC,IACE,CAAA,GAAA,UAAG,CAAA,CAAC;;;;;;IAMJ,CAAC,CACJ;AAIM,SAAS,yCAAG,CAAC,KAAoB,EAAE;IACxC,MAAM,YAAC,QAAQ,CAAA,EAAE,GAAG,IAAI,EAAC,GAAG,KAAK;IAEjC,qBAAO,gBAAC,+BAAS;QAAE,GAAG,IAAI;kBAAG,QAAQ;MAAa,CAAA;CACnD;AAED,OAAO;AACP,MAAM,iCAAW,GAAG,CAAC,KAAK,GAAG,EAAE,GAAK;IAClC,qBAAO,gBAAC,CAAA,GAAA,WAAI,CAAA;QAAC,EAAE,EAAC,IAAI;QAAE,GAAG,KAAK;MAAI,CAAA;CACnC;AAED,MAAM,gCAAU,GAAG,CAAA,GAAA,uBAAM,CAAA,CAAC,iCAAW,CAAC,CACpC,IACE,CAAA,GAAA,UAAG,CAAA,CAAC;;;;;;IAMJ,CAAC,CACJ;AAIM,SAAS,yCAAI,CAAC,KAAqB,EAAE;IAC1C,MAAM,YAAC,QAAQ,CAAA,EAAE,GAAG,IAAI,EAAC,GAAG,KAAK;IAEjC,qBAAO,gBAAC,gCAAU;QAAE,GAAG,IAAI;kBAAG,QAAQ;MAAc,CAAA;CACrD;;;AC9ED;;;;;AAOA,SAAS,iCAAW,CAAC,KAAqB,EAAE,YAAoB,EAAkB;IAChF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,GAAK;QAC5B,MAAM,WAAW,GAAG,AAAC,CAAA,IAAI,CAAC,WAAW,IAAI,EAAE,CAAA,CAAE,WAAW,EAAE;QAC1D,IAAI,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,OAAO,IAAI,CAAA;QACrD,MAAM,SAAS,GAAG,AAAC,CAAA,IAAI,CAAC,SAAS,IAAI,EAAE,CAAA,CAAE,WAAW,EAAE;QACtD,IAAI,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,OAAO,IAAI,CAAA;QACnD,MAAM,UAAU,GAAG,AAAC,CAAA,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA,CAAE,WAAW,EAAE;QACxD,IAAI,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,OAAO,IAAI,CAAA;QACpD,MAAM,UAAU,GAAG,AAAC,CAAA,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA,CAAE,WAAW,EAAE;QACxD,IAAI,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,OAAO,IAAI,CAAA;QAEpD,OAAO,KAAK,CAAA;KACb,CAAC,CAAA;CACH;AAYM,SAAS,yCAAc,CAAC,KAA0B,EAAE;IACzD,MAAM,SAAC,KAAK,GAAG,EAAE,aAAE,QAAQ,GAAG,EAAE,UAAE,KAAK,CAAA,YAAE,QAAQ,CAAA,WAAE,OAAO,CAAA,SAAE,KAAK,GAAG,EAAE,GAAC,GAAG,KAAK;IAC/E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,CAAA,GAAA,YAAK,CAAA,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC1D,MAAM,aAAa,GAAG,iCAAW,CAAC,QAAQ,IAAI,EAAE,EAAE,YAAY,CAAC;IAE/D,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAK,CAAC,CAAC,aAAa,CAAC;IAChD,MAAM,UAAU,GAAG,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IAE9C,sBAAsB;IACtB,kDAAkD;IAClD,MAAM,KAAK,GAAG,CAAA,GAAA,aAAM,CAAA,EAAoB;IACxC,oBAAoB;IACpB,kCAAkC;IAClC,4BAA4B;IAC5B,MAAM;IACN,aAAa;IAEb,MAAM,kBAAkB,GAAG,CAAC,KAA0C,GAAK;QACzE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;KACpC;IAED,MAAM,YAAY,GAAG,CAAC,SAAkB,EAAE,IAAkB,GAAK;QAC/D,IAAI,CAAC,SAAS,EACZ;YAAA,IAAI,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;SAAA,MACpB,IAAI,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;KACvC;IAED,MAAM,kBAAkB,GAAG,IAAM;QAC/B,IAAI,EAAE,IAAI,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;KAC9B;IAED,MAAM,oBAAoB,GAAG,IAAM;QACjC,IAAI,EAAE,IAAI,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;KACpC;IAED,MAAM,yBAAyB,GAAG,IAAM;QACtC,IAAI,OAAO,EAAE,OAAO,EAAE;KACvB;IAED,qBACE,iBAAC,CAAA,GAAA,WAAI,CAAA;QAAC,KAAK,EAAE,KAAK;;YACf,UAAU,iBACT,gBAAC,CAAA,GAAA,eAAQ,CAAA;gBACP,IAAI,EAAC,SAAS;gBACd,QAAQ,EAAE,CAAC,EAAE;gBACb,OAAO,EAAE,oBAAoB;gBAC7B,IAAI,EAAE,CAAA,GAAA,uBAAgB,CAAA;gBACtB,IAAI,EAAC,iBAAiB;cACtB,iBAEF,gBAAC,CAAA,GAAA,eAAQ,CAAA;gBACP,IAAI,EAAC,UAAU;gBACf,OAAO,EAAE,kBAAkB;gBAC3B,IAAI,EAAE,CAAA,GAAA,oBAAa,CAAA;gBACnB,IAAI,EAAC,eAAe;cACpB,AACH;0BAED,gBAAC,CAAA,GAAA,eAAQ,CAAA;gBACP,IAAI,EAAC,UAAU;gBACf,QAAQ,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC;gBAC5B,OAAO,EAAE,yBAAyB;gBAClC,IAAI,EAAE,CAAA,GAAA,kBAAW,CAAA;gBACjB,IAAI,EAAC,iBAAiB;cACtB;0BAEF,gBAAC,CAAA,GAAA,UAAG,CAAA;gBAAC,OAAO,EAAE,CAAC;0BACb,cAAA,gBAAC,CAAA,GAAA,gBAAS,CAAA;oBACR,+BAA+B;oBAC/B,GAAG,EAAE,KAAK;oBACV,QAAQ,EAAE,kBAAkB;oBAC5B,WAAW,EAAC,gBAAgB;oBAC5B,KAAK,EAAE,YAAY;kBACnB;cACE;YAEL,YAAY,IAAI,aAAa,EAAE,MAAM,KAAK,CAAC,kBAAI,gBAAC,CAAA,GAAA,eAAQ,CAAA;gBAAC,QAAQ;gBAAC,IAAI,EAAC,YAAY;cAAG;YAEtF,aAAa,IACZ,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,iBACrB,gBAAC,CAAA,GAAA,eAAQ,CAAA;oBAEP,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,OAAO,EAAE,IAAM,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC;8BAE9D,cAAA,iBAAC,CAAA,GAAA,WAAI,CAAA;wBAAC,KAAK,EAAC,QAAQ;;0CAClB,gBAAC,CAAA,GAAA,iBAAU,CAAA;gCAAC,IAAI,EAAE,IAAI;gCAAE,IAAI,EAAE,CAAC;8BAAI;0CACnC,gBAAC,CAAA,GAAA,UAAG,CAAA;gCAAC,QAAQ,EAAE,CAAC;gCAAE,IAAI,EAAE,CAAC;0CACvB,cAAA,gBAAC,CAAA,GAAA,WAAI,CAAA;8CAAE,IAAI,CAAC,WAAW;kCAAQ;8BAC3B;4BACL,IAAI,CAAC,aAAa,kBACjB,gBAAC,CAAA,GAAA,YAAK,CAAA;gCAAC,QAAQ,EAAE,CAAC;gCAAE,IAAI,EAAC,UAAU;gCAAC,IAAI,EAAC,SAAS;0CAAC,IAEnD;8BAAQ,AACT;;sBACI;mBAdF,IAAI,CAAC,EAAE,CAeH,AACZ,CAAC;;MACC,CACR;CACF;;","sources":["src/index.ts","src/hooks/useListeningQuery.tsx","src/hooks/useProjectUsers.tsx","src/components/Feedback.tsx","src/components/Table.tsx","src/components/UserSelectMenu/index.tsx"],"sourcesContent":["export {useListeningQuery} from './hooks/useListeningQuery'\nexport {useProjectUsers} from './hooks/useProjectUsers'\n\nexport {Feedback} from './components/Feedback'\nexport {Table, Row, Cell} from './components/Table'\nexport {UserSelectMenu} from './components/UserSelectMenu/index'\n","import {useEffect, useState, useRef} from 'react'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport isEqual from 'react-fast-compare'\nimport {useDocumentStore} from 'sanity/_unstable'\nimport {Subscription} from 'rxjs'\n\ntype Params = Record<string, string | number | boolean | string[]>\n\ninterface ListenQueryOptions {\n tag?: string\n apiVersion?: string\n}\n\ntype Value = any\n\ninterface Config<V> {\n params: Params\n options?: ListenQueryOptions\n initialValue?: null | V\n}\n\ninterface Return<V> {\n loading: boolean\n error: boolean\n data: null | V\n initialValue?: Value\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2022-05-09`}\nconst DEFAULT_INITIAL_VALUE = null\n\nexport function useListeningQuery<V>(\n query: string | {fetch: string; listen: string},\n {\n params = DEFAULT_PARAMS,\n options = DEFAULT_OPTIONS,\n initialValue = DEFAULT_INITIAL_VALUE,\n }: Config<V>\n): Return<V> {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [data, setData] = useState(initialValue)\n const subscription = useRef<null | Subscription>(null)\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query) {\n subscription.current = documentStore\n .listenQuery(query, params, options)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents) => {\n setData((current: Value) => (isEqual(current, documents) ? current : documents))\n setLoading(false)\n setError(false)\n })\n }\n\n return () => subscription?.current?.unsubscribe()\n }, [query, params, options, documentStore])\n\n return {data, loading, error}\n}\n","import {useState, useEffect} from 'react'\nimport {useClient, useWorkspace} from 'sanity'\n\nexport type UserExtended = {\n createdAt: string\n displayName: string\n email: string\n familyName: string\n givenName: string\n id: string\n imageUrl: string\n isCurrentUser: boolean\n middleName: string\n projectId: string\n provider: string\n sanityUserId: string\n updatedAt: string\n}\n\ntype UserRole = {\n name: string\n title: string\n}\n\ntype UserResponse = {\n isRobot: boolean\n projectUserId: string\n roles: UserRole[]\n}\n\n// Custom hook to fetch user details\n// Built-in hook doesn't fetch all user details\nexport function useProjectUsers(): UserExtended[] {\n const {currentUser} = useWorkspace()\n const client = useClient()\n const [users, setUsers] = useState([])\n\n useEffect(() => {\n const {projectId} = client.config()\n\n async function getUser(id: string) {\n const userDetails = await client.request({\n url: `/projects/${projectId}/users/${id}`,\n })\n\n return userDetails\n }\n\n async function getUsersWithRoles() {\n const userRoles = await client\n .request({\n url: `/projects/${projectId}/acl`,\n })\n .then(async (res) =>\n Promise.all(\n res.map(async (user: UserResponse) => ({\n isCurrentUser: user.projectUserId === currentUser?.id,\n ...(await getUser(user.projectUserId)),\n }))\n )\n )\n .catch((err) => err)\n\n setUsers(userRoles)\n }\n\n if (!users.length) {\n getUsersWithRoles()\n }\n }, [client, currentUser?.id, users.length])\n\n return users\n}\n","import React from 'react'\nimport {Box, Card, CardTone, Flex, Stack, Text} from '@sanity/ui'\n\ntype FeedbackChildren = {\n children?: React.ReactNode\n title?: never\n description?: never\n}\n\ntype FeedbackTextProps = {\n title?: string\n description?: React.ReactNode\n children?: never\n}\n\ntype FeedbackProps = (FeedbackChildren | FeedbackTextProps) & {\n tone?: CardTone\n icon?: React.ReactNode\n}\n\nconst DEFAULT_PROPS: FeedbackProps = {\n tone: 'primary',\n}\n\nexport function Feedback(props: FeedbackProps) {\n const {title, description, icon, tone, children} = {...DEFAULT_PROPS, ...props}\n\n return (\n <Card tone={tone} padding={4} radius={3} border>\n <Flex>\n {icon ? `display icon` : null}\n {children ? (\n children\n ) : (\n <Box flex={1}>\n <Stack space={4}>\n {title ? <Text weight=\"semibold\">{title}</Text> : null}\n {description ? <Text size={2}>{description}</Text> : null}\n </Stack>\n </Box>\n )}\n </Flex>\n </Card>\n )\n}\n","import React, {PropsWithChildren} from 'react'\nimport styled, {css} from 'styled-components'\nimport {Card, CardProps} from '@sanity/ui'\n\n// Wrappers required because of bug with passing down \"as\" prop\n// https://github.com/styled-components/styled-components/issues/2449\n\n// Table\nconst TableWrapper = (props: CardProps = {}) => {\n return <Card as=\"table\" {...props} />\n}\n\nconst StyledTable = styled(TableWrapper)(\n () =>\n css`\n display: table;\n width: 100%;\n\n &:not([hidden]) {\n display: table;\n }\n `\n)\n\ntype TableProps = PropsWithChildren<CardProps>\n\nexport function Table(props: TableProps) {\n const {children, ...rest} = props\n\n return <StyledTable {...rest}>{children}</StyledTable>\n}\n\n// Row\nconst RowWrapper = (props: CardProps = {}) => {\n return <Card as=\"tr\" {...props} />\n}\n\nconst StyledRow = styled(RowWrapper)(\n () =>\n css`\n display: table-row;\n\n &:not([hidden]) {\n display: table-row;\n }\n `\n)\n\ntype TableRowProps = PropsWithChildren<CardProps>\n\nexport function Row(props: TableRowProps) {\n const {children, ...rest} = props\n\n return <StyledRow {...rest}>{children}</StyledRow>\n}\n\n// Cell\nconst CellWrapper = (props = {}) => {\n return <Card as=\"td\" {...props} />\n}\n\nconst StyledCell = styled(CellWrapper)(\n () =>\n css`\n display: table-cell;\n\n &:not([hidden]) {\n display: table-cell;\n }\n `\n)\n\ntype TableCellProps = PropsWithChildren<CardProps>\n\nexport function Cell(props: TableCellProps) {\n const {children, ...rest} = props\n\n return <StyledCell {...rest}>{children}</StyledCell>\n}\n","import React, {useEffect, useRef} from 'react'\nimport {Box, Text, Menu, MenuItem, TextInput, Flex, Badge} from '@sanity/ui'\nimport {AddCircleIcon, RemoveCircleIcon, RestoreIcon} from '@sanity/icons'\nimport {UserAvatar} from 'sanity/_unstable'\n\nimport {UserExtended} from '../../hooks/useProjectUsers'\n\nfunction searchUsers(users: UserExtended[], searchString: string): UserExtended[] {\n return users.filter((user) => {\n const displayName = (user.displayName || '').toLowerCase()\n if (displayName.startsWith(searchString)) return true\n const givenName = (user.givenName || '').toLowerCase()\n if (givenName.startsWith(searchString)) return true\n const middleName = (user.middleName || '').toLowerCase()\n if (middleName.startsWith(searchString)) return true\n const familyName = (user.familyName || '').toLowerCase()\n if (familyName.startsWith(searchString)) return true\n\n return false\n })\n}\n\ntype UserSelectMenuProps = {\n value: string[]\n userList: UserExtended[]\n onAdd: any\n onRemove: any\n onClear: any\n open: boolean\n style?: React.CSSProperties\n}\n\nexport function UserSelectMenu(props: UserSelectMenuProps) {\n const {value = [], userList = [], onAdd, onRemove, onClear, style = {}} = props\n const [searchString, setSearchString] = React.useState('')\n const searchResults = searchUsers(userList || [], searchString)\n\n const me = userList.find((u) => u.isCurrentUser)\n const meAssigned = me && value.includes(me.id)\n\n // Focus input on open\n // TODO: Fix focus, it gets immediately taken away\n const input = useRef<HTMLInputElement>()\n // useEffect(() => {\n // if (open && input?.current) {\n // input.current.focus()\n // }\n // }, [open])\n\n const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchString(event.target.value)\n }\n\n const handleSelect = (isChecked: boolean, user: UserExtended) => {\n if (!isChecked) {\n if (onAdd) onAdd(user.id)\n } else if (onRemove) onRemove(user.id)\n }\n\n const handleAssignMyself = () => {\n if (me && onAdd) onAdd(me.id)\n }\n\n const handleUnassignMyself = () => {\n if (me && onRemove) onRemove(me.id)\n }\n\n const handleClearAssigneesClick = () => {\n if (onClear) onClear()\n }\n\n return (\n <Menu style={style}>\n {meAssigned ? (\n <MenuItem\n tone=\"caution\"\n disabled={!me}\n onClick={handleUnassignMyself}\n icon={RemoveCircleIcon}\n text=\"Unassign myself\"\n />\n ) : (\n <MenuItem\n tone=\"positive\"\n onClick={handleAssignMyself}\n icon={AddCircleIcon}\n text=\"Assign myself\"\n />\n )}\n\n <MenuItem\n tone=\"critical\"\n disabled={value.length === 0}\n onClick={handleClearAssigneesClick}\n icon={RestoreIcon}\n text=\"Clear assignees\"\n />\n\n <Box padding={1}>\n <TextInput\n // @ts-ignore TODO: Satisfy ref\n ref={input}\n onChange={handleSearchChange}\n placeholder=\"Search members\"\n value={searchString}\n />\n </Box>\n\n {searchString && searchResults?.length === 0 && <MenuItem disabled text=\"No matches\" />}\n\n {searchResults &&\n searchResults.map((user) => (\n <MenuItem\n key={user.id}\n pressed={value.includes(user.id)}\n onClick={() => handleSelect(value.indexOf(user.id) > -1, user)}\n >\n <Flex align=\"center\">\n <UserAvatar user={user} size={1} />\n <Box paddingX={2} flex={1}>\n <Text>{user.displayName}</Text>\n </Box>\n {user.isCurrentUser && (\n <Badge fontSize={1} tone=\"positive\" mode=\"outline\">\n Me\n </Badge>\n )}\n </Flex>\n </MenuItem>\n ))}\n </Menu>\n )\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}
1
+ {"mappings":"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","sources":["src/index.ts","src/hooks/useListeningQuery.tsx","src/hooks/useProjectUsers.tsx","src/components/Feedback.tsx","src/components/Table.tsx","src/components/UserSelectMenu/index.tsx"],"sourcesContent":["export {useListeningQuery} from './hooks/useListeningQuery'\nexport {useProjectUsers} from './hooks/useProjectUsers'\n\nexport {Feedback} from './components/Feedback'\nexport {Table, Row, Cell} from './components/Table'\nexport {UserSelectMenu} from './components/UserSelectMenu/index'\n","import {useEffect, useState, useRef} from 'react'\nimport {catchError, distinctUntilChanged} from 'rxjs/operators'\nimport isEqual from 'react-fast-compare'\nimport {useDocumentStore} from 'sanity'\nimport {Subscription} from 'rxjs'\n\ntype Params = Record<string, string | number | boolean | string[]>\n\ninterface ListenQueryOptions {\n tag?: string\n apiVersion?: string\n}\n\ntype Value = any\n\ninterface Config<V> {\n params: Params\n options?: ListenQueryOptions\n initialValue?: null | V\n}\n\ninterface Return<V> {\n loading: boolean\n error: boolean\n data: null | V\n initialValue?: Value\n}\n\nconst DEFAULT_PARAMS = {}\nconst DEFAULT_OPTIONS = {apiVersion: `v2022-05-09`}\nconst DEFAULT_INITIAL_VALUE = null\n\nexport function useListeningQuery<V>(\n query: string | {fetch: string; listen: string},\n {\n params = DEFAULT_PARAMS,\n options = DEFAULT_OPTIONS,\n initialValue = DEFAULT_INITIAL_VALUE,\n }: Config<V>\n): Return<V> {\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState(false)\n const [data, setData] = useState(initialValue)\n const subscription = useRef<null | Subscription>(null)\n const documentStore = useDocumentStore()\n\n useEffect(() => {\n if (query) {\n subscription.current = documentStore\n .listenQuery(query, params, options)\n .pipe(\n distinctUntilChanged(isEqual),\n catchError((err) => {\n console.error(err)\n setError(err)\n setLoading(false)\n setData(null)\n\n return err\n })\n )\n .subscribe((documents) => {\n setData((current: Value) => (isEqual(current, documents) ? current : documents))\n setLoading(false)\n setError(false)\n })\n }\n\n return () => subscription?.current?.unsubscribe()\n }, [query, params, options, documentStore])\n\n return {data, loading, error}\n}\n","import {useState, useEffect} from 'react'\nimport {useClient, useWorkspace} from 'sanity'\n\nexport type UserExtended = {\n createdAt: string\n displayName: string\n email: string\n familyName: string\n givenName: string\n id: string\n imageUrl: string\n isCurrentUser: boolean\n middleName: string\n projectId: string\n provider: string\n sanityUserId: string\n updatedAt: string\n}\n\ntype UserRole = {\n name: string\n title: string\n}\n\ntype UserResponse = {\n isRobot: boolean\n projectUserId: string\n roles: UserRole[]\n}\n\n// Custom hook to fetch user details\n// Built-in hook doesn't fetch all user details\nexport function useProjectUsers(): UserExtended[] {\n const {currentUser} = useWorkspace()\n const client = useClient()\n const [users, setUsers] = useState([])\n\n useEffect(() => {\n const {projectId} = client.config()\n\n async function getUser(id: string) {\n const userDetails = await client.request({\n url: `/projects/${projectId}/users/${id}`,\n })\n\n return userDetails\n }\n\n async function getUsersWithRoles() {\n const userRoles = await client\n .request({\n url: `/projects/${projectId}/acl`,\n })\n .then(async (res) =>\n Promise.all(\n res.map(async (user: UserResponse) => ({\n isCurrentUser: user.projectUserId === currentUser?.id,\n ...(await getUser(user.projectUserId)),\n }))\n )\n )\n .catch((err) => err)\n\n setUsers(userRoles)\n }\n\n if (!users.length) {\n getUsersWithRoles()\n }\n }, [client, currentUser?.id, users.length])\n\n return users\n}\n","import React from 'react'\nimport {Box, Card, CardTone, Flex, Stack, Text} from '@sanity/ui'\n\ntype FeedbackChildren = {\n children?: React.ReactNode\n title?: never\n description?: never\n}\n\ntype FeedbackTextProps = {\n title?: string\n description?: React.ReactNode\n children?: never\n}\n\ntype FeedbackProps = (FeedbackChildren | FeedbackTextProps) & {\n tone?: CardTone\n icon?: React.ReactNode\n}\n\nconst DEFAULT_PROPS: FeedbackProps = {\n tone: 'primary',\n}\n\nexport function Feedback(props: FeedbackProps) {\n const {title, description, icon, tone, children} = {...DEFAULT_PROPS, ...props}\n\n return (\n <Card tone={tone} padding={4} radius={3} border>\n <Flex>\n {icon ? `display icon` : null}\n {children ? (\n children\n ) : (\n <Box flex={1}>\n <Stack space={4}>\n {title ? <Text weight=\"semibold\">{title}</Text> : null}\n {description ? <Text size={2}>{description}</Text> : null}\n </Stack>\n </Box>\n )}\n </Flex>\n </Card>\n )\n}\n","import React, {PropsWithChildren} from 'react'\nimport styled, {css} from 'styled-components'\nimport {Card, CardProps} from '@sanity/ui'\n\n// Wrappers required because of bug with passing down \"as\" prop\n// https://github.com/styled-components/styled-components/issues/2449\n\n// Table\nconst TableWrapper = (props: CardProps = {}) => {\n return <Card as=\"table\" {...props} />\n}\n\nconst StyledTable = styled(TableWrapper)(\n () =>\n css`\n display: table;\n width: 100%;\n\n &:not([hidden]) {\n display: table;\n }\n `\n)\n\ntype TableProps = PropsWithChildren<CardProps>\n\nexport function Table(props: TableProps) {\n const {children, ...rest} = props\n\n return <StyledTable {...rest}>{children}</StyledTable>\n}\n\n// Row\nconst RowWrapper = (props: CardProps = {}) => {\n return <Card as=\"tr\" {...props} />\n}\n\nconst StyledRow = styled(RowWrapper)(\n () =>\n css`\n display: table-row;\n\n &:not([hidden]) {\n display: table-row;\n }\n `\n)\n\ntype TableRowProps = PropsWithChildren<CardProps>\n\nexport function Row(props: TableRowProps) {\n const {children, ...rest} = props\n\n return <StyledRow {...rest}>{children}</StyledRow>\n}\n\n// Cell\nconst CellWrapper = (props = {}) => {\n return <Card as=\"td\" {...props} />\n}\n\nconst StyledCell = styled(CellWrapper)(\n () =>\n css`\n display: table-cell;\n\n &:not([hidden]) {\n display: table-cell;\n }\n `\n)\n\ntype TableCellProps = PropsWithChildren<CardProps>\n\nexport function Cell(props: TableCellProps) {\n const {children, ...rest} = props\n\n return <StyledCell {...rest}>{children}</StyledCell>\n}\n","import React, {useRef} from 'react'\nimport {Box, Text, Menu, MenuItem, TextInput, Flex, Badge} from '@sanity/ui'\nimport {AddCircleIcon, RemoveCircleIcon, RestoreIcon} from '@sanity/icons'\nimport {UserAvatar} from 'sanity'\n\nimport {UserExtended} from '../../hooks/useProjectUsers'\n\nfunction searchUsers(users: UserExtended[], searchString: string): UserExtended[] {\n return users.filter((user) => {\n const displayName = (user.displayName || '').toLowerCase()\n if (displayName.startsWith(searchString)) return true\n const givenName = (user.givenName || '').toLowerCase()\n if (givenName.startsWith(searchString)) return true\n const middleName = (user.middleName || '').toLowerCase()\n if (middleName.startsWith(searchString)) return true\n const familyName = (user.familyName || '').toLowerCase()\n if (familyName.startsWith(searchString)) return true\n\n return false\n })\n}\n\ntype UserSelectMenuProps = {\n value: string[]\n userList: UserExtended[]\n onAdd: any\n onRemove: any\n onClear: any\n open: boolean\n style?: React.CSSProperties\n}\n\nexport function UserSelectMenu(props: UserSelectMenuProps) {\n const {value = [], userList = [], onAdd, onRemove, onClear, style = {}} = props\n const [searchString, setSearchString] = React.useState('')\n const searchResults = searchUsers(userList || [], searchString)\n\n const me = userList.find((u) => u.isCurrentUser)\n const meAssigned = me && value.includes(me.id)\n\n // Focus input on open\n // TODO: Fix focus, it gets immediately taken away\n const input = useRef<HTMLInputElement>()\n // useEffect(() => {\n // if (open && input?.current) {\n // input.current.focus()\n // }\n // }, [open])\n\n const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchString(event.target.value)\n }\n\n const handleSelect = (isChecked: boolean, user: UserExtended) => {\n if (!isChecked) {\n if (onAdd) onAdd(user.id)\n } else if (onRemove) onRemove(user.id)\n }\n\n const handleAssignMyself = () => {\n if (me && onAdd) onAdd(me.id)\n }\n\n const handleUnassignMyself = () => {\n if (me && onRemove) onRemove(me.id)\n }\n\n const handleClearAssigneesClick = () => {\n if (onClear) onClear()\n }\n\n return (\n <Menu style={style}>\n {meAssigned ? (\n <MenuItem\n tone=\"caution\"\n disabled={!me}\n onClick={handleUnassignMyself}\n icon={RemoveCircleIcon}\n text=\"Unassign myself\"\n />\n ) : (\n <MenuItem\n tone=\"positive\"\n onClick={handleAssignMyself}\n icon={AddCircleIcon}\n text=\"Assign myself\"\n />\n )}\n\n <MenuItem\n tone=\"critical\"\n disabled={value.length === 0}\n onClick={handleClearAssigneesClick}\n icon={RestoreIcon}\n text=\"Clear assignees\"\n />\n\n <Box padding={1}>\n <TextInput\n // @ts-ignore TODO: Satisfy ref\n ref={input}\n onChange={handleSearchChange}\n placeholder=\"Search members\"\n value={searchString}\n />\n </Box>\n\n {searchString && searchResults?.length === 0 && <MenuItem disabled text=\"No matches\" />}\n\n {searchResults &&\n searchResults.map((user) => (\n <MenuItem\n key={user.id}\n pressed={value.includes(user.id)}\n onClick={() => handleSelect(value.indexOf(user.id) > -1, user)}\n >\n <Flex align=\"center\">\n <UserAvatar user={user} size={1} />\n <Box paddingX={2} flex={1}>\n <Text>{user.displayName}</Text>\n </Box>\n {user.isCurrentUser && (\n <Badge fontSize={1} tone=\"positive\" mode=\"outline\">\n Me\n </Badge>\n )}\n </Flex>\n </MenuItem>\n ))}\n </Menu>\n )\n}\n"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sanity-plugin-utils",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "A collection of useful Hooks and Components when creating Plugins",
5
5
  "author": "Simeon Griggs <simeon@sanity.io>",
6
6
  "license": "MIT",
@@ -39,13 +39,12 @@
39
39
  "dependencies": {
40
40
  "@sanity/icons": "^1.3.4",
41
41
  "@sanity/incompatible-plugin": "^1.0.0",
42
- "@sanity/ui": "^0.38.0",
43
42
  "styled-components": "^5.3.5"
44
43
  },
45
44
  "devDependencies": {
46
45
  "@parcel/packager-ts": "^2.7.0",
47
46
  "@parcel/transformer-typescript-types": "^2.7.0",
48
- "@sanity/plugin-kit": "^1.0.1",
47
+ "@sanity/plugin-kit": "^1.1.0",
49
48
  "@types/styled-components": "^5.1.26",
50
49
  "@typescript-eslint/eslint-plugin": "^5.36.1",
51
50
  "@typescript-eslint/parser": "^5.36.1",
@@ -57,16 +56,18 @@
57
56
  "eslint-plugin-react-hooks": "^4.6.0",
58
57
  "parcel": "^2.7.0",
59
58
  "prettier": "^2.7.1",
60
- "react": "^17.0.0 || ^18.0.0",
61
59
  "rimraf": "^3.0.2",
62
- "sanity": "^3.0.0-dev-preview.15",
63
- "typescript": "4.7.4"
60
+ "typescript": "4.7.4",
61
+ "@sanity/ui": "1.0.0-beta.32",
62
+ "react": "^18.0.0",
63
+ "sanity": "dev-preview || 3.0.0-rc.0"
64
64
  },
65
65
  "peerDependencies": {
66
- "react": "^17.0.0 || ^18.0.0",
67
66
  "react-fast-compare": "^3.2.0",
68
67
  "rxjs": "^6.5.3",
69
- "sanity": "dev-preview"
68
+ "@sanity/ui": "1.0.0-beta.32",
69
+ "react": "^18.0.0",
70
+ "sanity": "dev-preview || 3.0.0-rc.0"
70
71
  },
71
72
  "bugs": {
72
73
  "url": "https://github.com/simeongriggs/sanity-plugin-utils/issues"
@@ -1,7 +1,7 @@
1
- import React, {useEffect, useRef} from 'react'
1
+ import React, {useRef} from 'react'
2
2
  import {Box, Text, Menu, MenuItem, TextInput, Flex, Badge} from '@sanity/ui'
3
3
  import {AddCircleIcon, RemoveCircleIcon, RestoreIcon} from '@sanity/icons'
4
- import {UserAvatar} from 'sanity/_unstable'
4
+ import {UserAvatar} from 'sanity'
5
5
 
6
6
  import {UserExtended} from '../../hooks/useProjectUsers'
7
7
 
@@ -1,7 +1,7 @@
1
1
  import {useEffect, useState, useRef} from 'react'
2
2
  import {catchError, distinctUntilChanged} from 'rxjs/operators'
3
3
  import isEqual from 'react-fast-compare'
4
- import {useDocumentStore} from 'sanity/_unstable'
4
+ import {useDocumentStore} from 'sanity'
5
5
  import {Subscription} from 'rxjs'
6
6
 
7
7
  type Params = Record<string, string | number | boolean | string[]>