sanity-plugin-workflow 2.1.4 → 2.1.5

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/types/index.ts","../src/constants/index.ts","../src/hooks/useWorkflowMetadata.tsx","../src/components/WorkflowContext.tsx","../src/helpers/arraysContainMatchingString.ts","../src/actions/defineUpdateWorkflow.tsx","../src/components/UserAssignment.tsx","../src/actions/useAssignWorkflow.tsx","../src/actions/useBeginWorkflow.tsx","../src/actions/useCompleteWorkflow.tsx","../src/badges/useAssigneesBadge.tsx","../src/badges/useStateBadge.tsx","../src/components/WorkflowSignal.tsx","../src/components/DocumentCard/EditButton.tsx","../src/components/DocumentCard/Field.tsx","../src/components/UserAssignmentInput.tsx","../src/helpers/initialRank.ts","../src/schema/workflow/workflow.metadata.ts","../src/helpers/filterItemsAndSort.ts","../src/hooks/useWorkflowDocuments.tsx","../src/components/DocumentCard/AvatarGroup.tsx","../src/components/UserDisplay.tsx","../src/components/DocumentCard/CompleteButton.tsx","../src/components/DocumentCard/core/TimeAgo.tsx","../src/components/DocumentCard/core/DraftStatus.tsx","../src/components/DocumentCard/core/PublishedStatus.tsx","../src/components/DocumentCard/Validate.tsx","../src/components/DocumentCard/ValidationStatus.tsx","../src/components/DocumentCard/index.tsx","../src/components/DocumentList.tsx","../src/components/Filters.tsx","../src/components/StateTitle/Status.tsx","../src/components/StateTitle/index.tsx","../src/helpers/generateMultipleOrderRanks.ts","../src/components/FloatingCard.tsx","../src/components/Verify.tsx","../src/components/WorkflowTool.tsx","../src/tools/index.ts","../src/plugin.tsx"],"sourcesContent":["import type {SanityDocumentLike} from 'sanity'\n\nexport type State = {\n id: string\n transitions: string[]\n title: string\n roles?: string[]\n requireAssignment?: boolean\n requireValidation?: boolean\n // From document badges\n color?: 'primary' | 'success' | 'warning' | 'danger'\n}\n\nexport type StateCheck<Id, States> = {\n id: Id\n // Transitions is an array of State ids\n transitions?: States extends {id: infer Id2}[] ? Id2[] : never\n} & State\n\nexport type WorkflowConfig = {\n schemaTypes: string[]\n states?: State[]\n}\n\nexport function defineStates<Id extends string, States extends StateCheck<Id, States>[]>(\n states: States,\n): States {\n return states\n}\n\nexport type User = {\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\nexport type DragData = {\n documentId?: string\n x?: number\n y?: number\n state?: string\n}\n\nexport type Metadata = SanityDocumentLike & {\n _rev: string\n assignees: string[]\n documentId: string\n state: string\n orderRank: string\n}\n\nexport type KeyedMetadata = {[key: string]: Metadata}\n\nexport type SanityDocumentWithMetadata = {\n _metadata: Metadata\n _id: string\n _type: string\n _rev: string\n _updatedAt: string\n}\n","import {defineStates, type WorkflowConfig} from '../types'\n\nexport const API_VERSION = `2023-01-01`\n\nexport const DEFAULT_CONFIG: Required<WorkflowConfig> = {\n schemaTypes: [],\n states: defineStates([\n {\n id: 'inReview',\n title: 'In review',\n color: 'primary',\n roles: ['editor', 'administrator'],\n transitions: ['changesRequested', 'approved'],\n },\n {\n id: 'changesRequested',\n title: 'Changes requested',\n color: 'warning',\n roles: ['editor', 'administrator'],\n transitions: ['approved'],\n },\n {\n id: 'approved',\n title: 'Approved',\n color: 'success',\n roles: ['administrator'],\n transitions: ['changesRequested'],\n requireAssignment: true,\n },\n ]),\n}\n","import {useMemo} from 'react'\nimport {useListeningQuery} from 'sanity-plugin-utils'\n\nimport type {KeyedMetadata, Metadata} from '../types'\n\nimport {API_VERSION} from '../constants'\n\n/**\n * Takes the published ID of documents and return the metadata for those documents.\n *\n * @param ids Source document published IDs\n */\nexport function useWorkflowMetadata(ids: string[]): {\n data: KeyedMetadata\n loading: boolean\n error: unknown\n} {\n const {\n data: _rawData,\n loading,\n error,\n } = useListeningQuery<Metadata[]>(\n `*[_type == \"workflow.metadata\" && documentId in $ids]{\n _id,\n _type,\n _rev,\n assignees,\n documentId,\n state,\n orderRank\n }`,\n {\n params: {ids},\n options: {apiVersion: API_VERSION},\n },\n )\n // oxlint-disable-next-line no-unsafe-type-assertion\n const rawData = _rawData as Metadata[]\n\n const keyedMetadata = useMemo(() => {\n if (!rawData || rawData.length === 0) return {}\n\n const acc: KeyedMetadata = {}\n for (const item of rawData) {\n acc[item.documentId] = item\n }\n return acc\n }, [rawData])\n\n return {data: keyedMetadata, loading, error}\n}\n","import type {LayoutProps} from 'sanity'\n\nimport {useCallback, useContext, useState, createContext} from 'react'\n\nimport type {KeyedMetadata, WorkflowConfig} from '../types'\n\nimport {DEFAULT_CONFIG} from '../constants'\nimport {useWorkflowMetadata} from '../hooks/useWorkflowMetadata'\n\nexport type WorkflowContextValue = Required<WorkflowConfig> & {\n data: KeyedMetadata\n loading: boolean\n error: unknown\n ids: string[]\n addId: (id: string) => void\n removeId: (id: string) => void\n}\n\nconst WorkflowContext = createContext<WorkflowContextValue>({\n data: {},\n loading: false,\n error: false,\n ids: [],\n addId: () => null,\n removeId: () => null,\n ...DEFAULT_CONFIG,\n})\n\nexport function useWorkflowContext(id?: string) {\n const current = useContext(WorkflowContext)\n\n return {...current, metadata: id ? current.data[id] : null}\n}\n\ntype WorkflowProviderProps = LayoutProps & Required<WorkflowConfig>\n\n/**\n * This Provider wraps the Studio and provides the workflow context to document actions and badges.\n * This is so individual actions and badges do not need to all register their own listeners.\n * Instead, each document \"signals\" its ID up to the provider, which then registers a single listener\n * This is performed inside of a component loaded at the root level of the Document Form\n */\nexport function WorkflowProvider(props: WorkflowProviderProps) {\n const [ids, setIds] = useState<string[]>([])\n const addId = useCallback(\n (id: string) => setIds((current) => (current.includes(id) ? current : [...current, id])),\n [],\n )\n const removeId = useCallback(\n (id: string) => setIds((current) => current.filter((i) => i !== id)),\n [],\n )\n const {data, loading, error} = useWorkflowMetadata(ids)\n\n return (\n <WorkflowContext.Provider\n value={{\n data,\n loading,\n error,\n ids,\n addId,\n removeId,\n states: props.states,\n schemaTypes: props.schemaTypes,\n }}\n >\n {props.renderDefault(props)}\n </WorkflowContext.Provider>\n )\n}\n","export function arraysContainMatchingString(one: string[], two: string[]): boolean {\n return one.some((item) => two.includes(item))\n}\n","import {ArrowLeftIcon, ArrowRightIcon} from '@sanity/icons'\nimport {useToast} from '@sanity/ui'\nimport {\n type DocumentActionDescription,\n useCurrentUser,\n useValidationStatus,\n type DocumentActionProps,\n useClient,\n} from 'sanity'\n\nimport type {State} from '../types'\n\nimport {useWorkflowContext} from '../components/WorkflowContext'\nimport {API_VERSION} from '../constants'\nimport {arraysContainMatchingString} from '../helpers/arraysContainMatchingString'\n\nfunction useUpdateWorkflow(\n {id, type, onComplete}: DocumentActionProps,\n actionState: State,\n): DocumentActionDescription | null {\n const user = useCurrentUser()\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n const currentUser = useCurrentUser()\n\n const {metadata, loading, error, states} = useWorkflowContext(id)\n const currentState = states.find((s) => s.id === metadata?.state)\n const {assignees = []} = metadata ?? {}\n\n // TODO: Shouldn't the document action props contain this?\n const {validation, isValidating} = useValidationStatus(id, type)\n const hasValidationErrors =\n currentState?.requireValidation &&\n !isValidating &&\n validation?.length > 0 &&\n validation.find((v) => v.level === 'error')\n\n if (error) {\n console.error(error)\n }\n\n const onHandle = (documentId: string, newState: State) => {\n client\n .patch(`workflow-metadata.${documentId}`)\n .set({state: newState.id})\n .commit()\n .then(() => {\n onComplete()\n toast.push({\n status: 'success',\n title: `Document state now \"${newState.title}\"`,\n })\n return undefined\n })\n .catch((err) => {\n onComplete()\n console.error(err)\n toast.push({\n status: 'error',\n title: `Document state update failed`,\n })\n })\n }\n\n // Remove button if:\n // Document is not in Workflow OR\n // The current State is the same as this actions State\n if (!metadata || (currentState && currentState.id === actionState.id)) {\n return null\n }\n\n const currentStateIndex = states.findIndex((s) => s.id === currentState?.id)\n const actionStateIndex = states.findIndex((s) => s.id === actionState.id)\n const direction = actionStateIndex > currentStateIndex ? 'promote' : 'demote'\n const DirectionIcon = direction === 'promote' ? ArrowRightIcon : ArrowLeftIcon\n const directionLabel = direction === 'promote' ? 'Promote' : 'Demote'\n\n const userRoleCanUpdateState =\n user?.roles?.length && actionState?.roles?.length\n ? // If the Action state is limited to specific roles\n // check that the current user has one of those roles\n arraysContainMatchingString(\n user.roles.map((r) => r.name),\n actionState.roles,\n )\n : // No roles specified on the next state, so anyone can update\n actionState?.roles?.length !== 0\n\n const actionStateIsAValidTransition =\n currentState?.id && currentState?.transitions?.length\n ? // If the Current State limits transitions to specific States\n // Check that the Action State is in Current State's transitions array\n currentState.transitions.includes(actionState.id)\n : // Otherwise this isn't a problem\n true\n\n const userAssignmentCanUpdateState = actionState.requireAssignment\n ? // If the Action State requires assigned users\n // Check the current user ID is in the assignees array\n currentUser && assignees?.length && assignees.includes(currentUser.id)\n : // Otherwise this isn't a problem\n true\n\n let title = `${directionLabel} State to \"${actionState.title}\"`\n\n if (!userRoleCanUpdateState) {\n title = `Your User role cannot ${directionLabel} State to \"${actionState.title}\"`\n } else if (!actionStateIsAValidTransition) {\n title = `You cannot ${directionLabel} State to \"${actionState.title}\" from \"${currentState?.title}\"`\n } else if (!userAssignmentCanUpdateState) {\n title = `You must be assigned to the document to ${directionLabel} State to \"${actionState.title}\"`\n } else if (currentState?.requireValidation && isValidating) {\n title = `Document is validating, cannot ${directionLabel} State to \"${actionState.title}\"`\n } else if (hasValidationErrors) {\n title = `Document has validation errors, cannot ${directionLabel} State to \"${actionState.title}\"`\n }\n\n return {\n icon: DirectionIcon,\n disabled:\n loading ||\n Boolean(error) ||\n (currentState?.requireValidation && isValidating) ||\n Boolean(hasValidationErrors) ||\n !currentState ||\n !userRoleCanUpdateState ||\n !actionStateIsAValidTransition ||\n !userAssignmentCanUpdateState,\n title,\n label: actionState.title,\n onHandle: () => onHandle(id, actionState),\n }\n}\n\n// @TODO memoize this call, so the defined useUpdateWorkflow can persist if actionState is the same\nexport function defineUpdateWorkflow(\n actionState: State,\n): (props: DocumentActionProps) => DocumentActionDescription | null {\n return (props: DocumentActionProps) => useUpdateWorkflow(props, actionState)\n}\n","import {useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useClient} from 'sanity'\nimport {UserSelectMenu} from 'sanity-plugin-utils'\n\nimport type {User} from '../types'\n\nimport {API_VERSION} from '../constants'\n\ntype UserAssignmentProps = {\n userList: User[]\n assignees: string[]\n documentId: string\n}\n\nexport default function UserAssignment(props: UserAssignmentProps) {\n const {assignees, userList, documentId} = props\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n\n const addAssignee = useCallback(\n (userId: string) => {\n const user = userList.find((u) => u.id === userId)\n\n if (!userId || !user) {\n return toast.push({\n status: 'error',\n title: 'Could not find User',\n })\n }\n\n return client\n .patch(`workflow-metadata.${documentId}`)\n .setIfMissing({assignees: []})\n .insert(`after`, `assignees[-1]`, [userId])\n .commit()\n .then(() => {\n return toast.push({\n title: `Added ${user.displayName} to assignees`,\n status: 'success',\n })\n })\n .catch((err) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to add assignee`,\n description: userId,\n status: 'error',\n })\n })\n },\n [documentId, client, toast, userList],\n )\n\n const removeAssignee = useCallback(\n (userId: string) => {\n const user = userList.find((u) => u.id === userId)\n\n if (!userId || !user) {\n return toast.push({\n status: 'error',\n title: 'Could not find User',\n })\n }\n\n return client\n .patch(`workflow-metadata.${documentId}`)\n .unset([`assignees[@ == \"${userId}\"]`])\n .commit()\n .then(() => {\n return toast.push({\n title: `Removed ${user.displayName} from assignees`,\n status: 'success',\n })\n })\n .catch((err) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to remove assignee`,\n description: documentId,\n status: 'error',\n })\n })\n },\n [client, toast, documentId, userList],\n )\n\n const clearAssignees = useCallback(() => {\n return client\n .patch(`workflow-metadata.${documentId}`)\n .unset([`assignees`])\n .commit()\n .then(() => {\n return toast.push({\n title: `Cleared assignees`,\n status: 'success',\n })\n })\n .catch((err) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to clear assignees`,\n description: documentId,\n status: 'error',\n })\n })\n }, [client, toast, documentId])\n\n return (\n <UserSelectMenu\n style={{maxHeight: 300}}\n value={assignees || []}\n userList={userList}\n onAdd={addAssignee}\n onClear={clearAssignees}\n onRemove={removeAssignee}\n />\n )\n}\n","import type {DocumentActionDescription, DocumentActionProps} from 'sanity'\n\nimport {UsersIcon} from '@sanity/icons'\nimport {useState} from 'react'\nimport {useProjectUsers} from 'sanity-plugin-utils'\n\nimport UserAssignment from '../components/UserAssignment'\nimport {useWorkflowContext} from '../components/WorkflowContext'\nimport {API_VERSION} from '../constants'\n\nexport function useAssignWorkflow({id}: DocumentActionProps): DocumentActionDescription | null {\n const {metadata, loading, error} = useWorkflowContext(id)\n const [isDialogOpen, setDialogOpen] = useState(false)\n const userList = useProjectUsers({apiVersion: API_VERSION})\n\n if (error) {\n console.error(error)\n }\n\n if (!metadata) {\n return null\n }\n\n return {\n icon: UsersIcon,\n disabled: !metadata || loading || Boolean(error),\n label: `Assign`,\n title: metadata ? null : `Document is not in Workflow`,\n dialog: isDialogOpen && {\n type: 'popover',\n onClose: () => {\n setDialogOpen(false)\n },\n content: (\n <UserAssignment\n userList={userList}\n assignees={metadata?.assignees?.length > 0 ? metadata.assignees : []}\n documentId={id}\n />\n ),\n },\n onHandle: () => {\n setDialogOpen(true)\n },\n }\n}\n","import {SplitVerticalIcon} from '@sanity/icons'\nimport {useToast} from '@sanity/ui'\nimport {LexoRank} from 'lexorank'\nimport {useCallback, useState} from 'react'\nimport {type DocumentActionDescription, type DocumentActionProps, useClient} from 'sanity'\n\nimport {useWorkflowContext} from '../components/WorkflowContext'\nimport {API_VERSION} from '../constants'\n\nexport function useBeginWorkflow({\n id,\n draft,\n}: DocumentActionProps): DocumentActionDescription | null {\n const {metadata, loading, error, states} = useWorkflowContext(id)\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n const [beginning, setBeginning] = useState(false)\n const [complete, setComplete] = useState(false)\n\n if (error) {\n console.error(error)\n }\n\n const handle = useCallback(async () => {\n setBeginning(true)\n const lowestOrderFirstState = await client.fetch(\n /* groq */ `*[_type == \"workflow.metadata\" && state == $state]|order(orderRank)[0].orderRank`,\n {state: states?.[0]?.id},\n )\n await client.createIfNotExists({\n _id: `workflow-metadata.${id}`,\n _type: `workflow.metadata`,\n documentId: id,\n state: states?.[0]?.id,\n orderRank: lowestOrderFirstState\n ? LexoRank.parse(lowestOrderFirstState).genNext().toString()\n : LexoRank.min().toString(),\n })\n toast.push({\n status: 'success',\n title: 'Workflow started',\n description: `Document is now \"${states?.[0]?.title}\"`,\n })\n setBeginning(false)\n // Optimistically remove action\n setComplete(true)\n }, [id, states, client, toast])\n\n if (!draft || complete || metadata) {\n return null\n }\n\n return {\n icon: SplitVerticalIcon,\n disabled: metadata || loading || Boolean(error) || beginning || complete,\n label: beginning ? `Beginning...` : `Begin Workflow`,\n onHandle: handle,\n }\n}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {type ToastContextValue, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {\n type DocumentActionDescription,\n type DocumentActionProps,\n type SanityClient,\n useClient,\n} from 'sanity'\n\nimport {useWorkflowContext} from '../components/WorkflowContext'\nimport {API_VERSION} from '../constants'\n\nexport const handleDeleteMetadata = async (\n client: SanityClient,\n toast: ToastContextValue,\n id: string,\n) => {\n try {\n await client.delete(`workflow-metadata.${id}`)\n toast.push({\n status: 'success',\n title: 'Workflow completed',\n })\n } catch (error) {\n console.error(error)\n toast.push({\n status: 'error',\n title: 'Could not complete Workflow',\n })\n }\n}\n\nexport function useCompleteWorkflow({\n id,\n onComplete,\n}: DocumentActionProps): DocumentActionDescription | null {\n const {metadata, loading, error, states} = useWorkflowContext(id)\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n\n if (error) {\n console.error(error)\n }\n\n const handle = useCallback(async () => {\n await handleDeleteMetadata(client, toast, id)\n }, [client, toast, id])\n\n if (!metadata) {\n return null\n }\n\n const state = states.find((s) => s.id === metadata.state)\n const isLastState = state?.id === states?.[states?.length - 1]?.id\n\n return {\n icon: CheckmarkIcon,\n disabled: loading || Boolean(error) || !isLastState,\n label: `Complete Workflow`,\n title: isLastState\n ? `Removes the document from the Workflow process`\n : `Cannot remove from workflow until in the last state`,\n onHandle: async () => {\n await handle()\n onComplete()\n },\n tone: 'positive',\n }\n}\n","import {type DocumentBadgeDescription, type DocumentBadgeProps, useCurrentUser} from 'sanity'\nimport {useProjectUsers} from 'sanity-plugin-utils'\n\nimport {useWorkflowContext} from '../components/WorkflowContext'\nimport {API_VERSION} from '../constants'\n\nexport function useAssigneesBadge({\n id: documentId,\n}: DocumentBadgeProps): DocumentBadgeDescription | null {\n const currentUser = useCurrentUser()\n const {metadata, loading, error} = useWorkflowContext(documentId)\n const userList = useProjectUsers({apiVersion: API_VERSION})\n\n if (loading || error || !metadata) {\n if (error) {\n console.error(error)\n }\n\n return null\n }\n\n if (!metadata?.assignees?.length) {\n return {\n label: 'Unassigned',\n }\n }\n\n const {assignees} = metadata ?? []\n const hasMe = currentUser ? assignees.some((assignee) => assignee === currentUser.id) : false\n const assigneesCount = hasMe ? assignees.length - 1 : assignees.length\n const assigneeUsers = userList.filter((user) => assignees.includes(user.id))\n const title = assigneeUsers.map((user) => user.displayName).join(', ')\n\n let label\n\n if (hasMe && assigneesCount === 0) {\n label = 'Assigned to Me'\n } else if (hasMe && assigneesCount > 0) {\n label = `Me and ${assigneesCount} ${assigneesCount === 1 ? 'other' : 'others'}`\n } else {\n label = `${assigneesCount} assigned`\n }\n\n return {\n label,\n title,\n color: 'primary',\n }\n}\n","import type {DocumentBadgeDescription, DocumentBadgeProps} from 'sanity'\n\nimport {useWorkflowContext} from '../components/WorkflowContext'\n\nexport function useStateBadge({\n id: documentId,\n}: DocumentBadgeProps): DocumentBadgeDescription | null {\n const {metadata, loading, error, states} = useWorkflowContext(documentId)\n const state = states.find((s) => s.id === metadata?.state)\n\n if (loading || error) {\n if (error) {\n console.error(error)\n }\n\n return null\n }\n\n if (!state) {\n return null\n }\n\n return {\n label: state.title,\n // title: state.title,\n color: state?.color,\n }\n}\n","import {useEffect} from 'react'\nimport {type ObjectInputProps, getPublishedId} from 'sanity'\n\nimport {useWorkflowContext} from './WorkflowContext'\n\n// This component is loaded at the root level of the Document Form\n// It is used to signal the document ID to the WorkflowProvider\nexport default function WorkflowSignal(props: ObjectInputProps) {\n const documentId = props?.value?.['_id'] ? getPublishedId(props.value['_id']) : null\n\n const {addId, removeId} = useWorkflowContext()\n\n useEffect(() => {\n // On mount, add to the query of listening documents\n if (documentId) {\n addId(documentId)\n }\n\n // On unmount, remove from the query of listening documents\n return () => {\n if (documentId) {\n removeId(documentId)\n }\n }\n }, [documentId, addId, removeId])\n\n return props.renderDefault(props)\n}\n","import {EditIcon} from '@sanity/icons'\nimport {Button} from '@sanity/ui'\nimport {useRouter} from 'sanity/router'\n\ntype EditButtonProps = {\n id: string\n type: string\n disabled?: boolean\n}\n\nexport default function EditButton(props: EditButtonProps) {\n const {id, type, disabled = false} = props\n const {navigateIntent} = useRouter()\n\n return (\n <Button\n onClick={() => navigateIntent('edit', {id, type})}\n mode=\"ghost\"\n fontSize={1}\n padding={2}\n tabIndex={-1}\n icon={EditIcon}\n text=\"Edit\"\n disabled={disabled}\n />\n )\n}\n","import {Flex, Card, Spinner} from '@sanity/ui'\nimport {Preview, type SanityDocument, type StringInputProps, useSchema} from 'sanity'\nimport {useListeningQuery, Feedback} from 'sanity-plugin-utils'\n\nimport EditButton from './EditButton'\n\n// TODO: Update this to use the same component as the Tool\nexport default function Field(props: StringInputProps) {\n const schema = useSchema()\n const {\n data: _data,\n loading,\n error,\n } = useListeningQuery<SanityDocument>(`*[_id in [$id, $draftId]]|order(_updatedAt)[0]`, {\n params: {\n id: String(props.value),\n draftId: `drafts.${String(props.value)}`,\n },\n })\n // oxlint-disable-next-line no-unsafe-type-assertion\n const data = _data as SanityDocument\n\n if (loading) {\n return <Spinner />\n }\n\n const schemaType = schema.get(data?._type ?? ``)\n\n if (error || !data?._type || !schemaType) {\n return <Feedback tone=\"critical\" title=\"Error with query\" />\n }\n\n return (\n <Card border padding={2}>\n <Flex align=\"center\" justify=\"space-between\" gap={2}>\n <Preview layout=\"default\" value={data} schemaType={schemaType} />\n <EditButton id={data._id} type={data._type} />\n </Flex>\n </Card>\n )\n}\n","import {Card} from '@sanity/ui'\nimport {type FunctionComponent} from 'react'\nimport {type ArrayOfPrimitivesInputProps, useFormValue} from 'sanity'\nimport {useProjectUsers} from 'sanity-plugin-utils'\n\nimport {API_VERSION} from '../constants'\nimport UserAssignment from './UserAssignment'\n\nconst UserAssignmentInput: FunctionComponent<ArrayOfPrimitivesInputProps> = (props) => {\n const documentId = useFormValue([`documentId`])\n const userList = useProjectUsers({apiVersion: API_VERSION})\n\n const stringValue =\n Array.isArray(props?.value) && props?.value?.length\n ? props.value.map((item) => String(item))\n : []\n\n return (\n <Card border padding={1}>\n <UserAssignment userList={userList} assignees={stringValue} documentId={String(documentId)} />\n </Card>\n )\n}\n\nexport default UserAssignmentInput\n","import {LexoRank} from 'lexorank'\n\n// Use in initial value field by passing in the rank value of the last document\n// If no value passed, generate a sensibly low rank\nexport default function initialRank(lastRankValue = ``): string {\n const lastRank =\n lastRankValue && typeof lastRankValue === 'string'\n ? LexoRank.parse(lastRankValue)\n : LexoRank.min()\n const nextRank = lastRank.genNext().genNext()\n\n // oxlint-disable-next-line no-unsafe-type-assertion\n return (nextRank as any).value\n}\n","import {defineField, defineType} from 'sanity'\n\nimport type {State} from '../../types'\n\nimport Field from '../../components/DocumentCard/Field'\nimport UserAssignmentInput from '../../components/UserAssignmentInput'\nimport {API_VERSION} from '../../constants'\nimport initialRank from '../../helpers/initialRank'\n\nexport default (states: State[]) =>\n defineType({\n type: 'document',\n name: 'workflow.metadata',\n title: 'Workflow metadata',\n liveEdit: true,\n fields: [\n defineField({\n name: 'state',\n description: `The current \"State\" of the document. Field is read only as changing it would not fire the state's \"operation\" setting. These are fired in the Document Actions and in the custom Tool.`,\n readOnly: true,\n type: 'string',\n options: {\n list: states.length\n ? states.map((state) => ({\n value: state.id,\n title: state.title,\n }))\n : [],\n layout: 'radio',\n },\n }),\n defineField({\n name: 'documentId',\n title: 'Document ID',\n description:\n 'Used to help identify the target document that this metadata is tracking state for.',\n type: 'string',\n readOnly: true,\n components: {\n input: Field,\n },\n }),\n defineField({\n name: 'orderRank',\n description: 'Used to maintain order position of cards in the Tool.',\n type: 'string',\n readOnly: true,\n initialValue: async (_, {getClient}) => {\n const lastDocOrderRank = await getClient({\n apiVersion: API_VERSION,\n }).fetch(/* groq */ `*[_type == $type]|order(@[$order] desc)[0][$order]`, {\n order: `orderRank`,\n type: `workflow.metadata`,\n })\n\n return initialRank(lastDocOrderRank)\n },\n }),\n defineField({\n type: 'array',\n name: 'assignees',\n of: [{type: 'string'}],\n components: {\n input: UserAssignmentInput,\n },\n }),\n ],\n })\n","import type {SanityDocumentWithMetadata} from '../types'\n\nexport function filterItemsAndSort(\n items: SanityDocumentWithMetadata[],\n stateId: string,\n selectedUsers: string[] = [],\n selectedSchemaTypes: null | string[] = [],\n): SanityDocumentWithMetadata[] {\n return (\n items\n // Only items that have existing documents\n .filter((item) => item?._id)\n // Only items of this state\n .filter((item) => item?._metadata?.state === stateId)\n // Only items with selected users, if the document has any assigned users\n .filter((item) =>\n selectedUsers.length && item._metadata?.assignees?.length\n ? item._metadata?.assignees.some((assignee) => selectedUsers.includes(assignee))\n : !selectedUsers.length,\n )\n // Only items of selected schema types, if any are selected\n .filter((item) => {\n if (!selectedSchemaTypes) {\n return true\n }\n\n return selectedSchemaTypes.length ? selectedSchemaTypes.includes(item._type) : false\n })\n // Sort by metadata orderRank, a string field\n .sort((a, b) => {\n const aOrderRank = a._metadata?.orderRank || '0'\n const bOrderRank = b._metadata?.orderRank || '0'\n\n return aOrderRank.localeCompare(bOrderRank)\n })\n )\n}\n","import type {DraggableLocation} from '@hello-pangea/dnd'\n\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\nimport {useClient} from 'sanity'\nimport {useListeningQuery} from 'sanity-plugin-utils'\n\nimport type {SanityDocumentWithMetadata, State} from '../types'\n\nimport {API_VERSION} from '../constants'\n\nconst QUERY = /* groq */ `*[_type == \"workflow.metadata\"]|order(orderRank){\n \"_metadata\": {\n _rev,\n assignees,\n documentId,\n state,\n orderRank,\n \"draftDocumentId\": \"drafts.\" + documentId,\n }\n}{\n ...,\n ...(\n *[_id == ^._metadata.documentId || _id == ^._metadata.draftDocumentId]|order(_updatedAt)[0]{\n _id,\n _type,\n _rev,\n _updatedAt\n }\n )\n}`\n\ntype WorkflowDocuments = {\n workflowData: {\n data: SanityDocumentWithMetadata[]\n loading: boolean\n error: unknown\n }\n operations: {\n move: (\n draggedId: string,\n destination: DraggableLocation,\n states: State[],\n newOrder: string,\n ) => Promise<{_id: string; _type: string; documentId: string; state: State} | null>\n }\n}\n\nexport function useWorkflowDocuments(schemaTypes: string[]): WorkflowDocuments {\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n\n // Get and listen to changes on documents + workflow metadata documents\n const {\n data: _data,\n loading,\n error,\n } = useListeningQuery<SanityDocumentWithMetadata[]>(QUERY, {\n params: {schemaTypes},\n initialValue: [],\n })\n // oxlint-disable-next-line no-unsafe-type-assertion\n const data = _data as SanityDocumentWithMetadata[]\n\n const [localDocuments, setLocalDocuments] = useState<SanityDocumentWithMetadata[]>([])\n\n useEffect(() => {\n if (data) {\n setLocalDocuments(data)\n }\n }, [data])\n\n const move = useCallback(\n async (\n draggedId: string,\n destination: DraggableLocation,\n states: State[],\n newOrder: string,\n ) => {\n // Optimistic update\n const currentLocalData = localDocuments\n const newLocalDocuments = localDocuments.map((item) => {\n if (item?._metadata?.documentId === draggedId) {\n return {\n ...item,\n _metadata: {\n ...item._metadata,\n state: destination.droppableId,\n orderRank: newOrder,\n // This value won't be written to the document\n // It's done so that un/publish operations don't happen twice\n // Because a moved document's card will update once optimistically\n // and then again when the document is updated\n optimistic: true,\n },\n }\n }\n\n return item\n })\n\n setLocalDocuments(newLocalDocuments)\n\n // Now client-side update\n const newStateId = destination.droppableId\n const newState = states.find((s) => s.id === newStateId)\n const document = localDocuments.find((d) => d?._metadata?.documentId === draggedId)\n\n if (!newState?.id) {\n toast.push({\n title: `Could not find target state ${newStateId}`,\n status: 'error',\n })\n return null\n }\n\n if (!document) {\n toast.push({\n title: `Could not find dragged document in data`,\n status: 'error',\n })\n return null\n }\n\n // We need to know if it's a draft or not\n const {_id, _type} = document\n\n // Metadata + useDocumentOperation always uses Published id\n const {documentId, _rev} = document._metadata || {}\n\n await client\n .patch(`workflow-metadata.${documentId}`)\n .ifRevisionId(_rev)\n .set({state: newStateId, orderRank: newOrder})\n .commit()\n .then((res) => {\n toast.push({\n title:\n newState.id === document._metadata.state\n ? `Reordered in \"${newState?.title ?? newStateId}\"`\n : `Moved to \"${newState?.title ?? newStateId}\"`,\n status: 'success',\n })\n return res\n })\n .catch((err) => {\n // Revert optimistic update\n setLocalDocuments(currentLocalData)\n\n toast.push({\n title: `Failed to move to \"${newState?.title ?? newStateId}\"`,\n description: err.message,\n status: 'error',\n })\n return null\n })\n\n // Send back to the workflow board so a document update can happen\n return {_id, _type, documentId, state: newState}\n },\n [client, toast, localDocuments],\n )\n\n return {\n workflowData: {data: localDocuments, loading, error},\n operations: {move},\n }\n}\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {useCurrentUser, UserAvatar} from 'sanity'\n\nimport type {User} from '../../types'\n\ntype AvatarGroupProps = {\n users: User[]\n max?: number\n}\n\nexport default function AvatarGroup(props: AvatarGroupProps) {\n const currentUser = useCurrentUser()\n const {users, max = 4} = props\n\n const len = users?.length\n const {me, visibleUsers} = useMemo(() => {\n return {\n me: currentUser?.id ? users.find((u) => u.id === currentUser.id) : undefined,\n visibleUsers: users.filter((u) => u.id !== currentUser?.id).slice(0, max - 1),\n }\n }, [users, max, currentUser])\n\n if (!users?.length) {\n return null\n }\n\n return (\n <Flex align=\"center\" gap={1}>\n {me ? <UserAvatar user={me} /> : null}\n {visibleUsers.map((user) => (\n <Box key={user.id} style={{marginRight: -8}}>\n <UserAvatar user={user} />\n </Box>\n ))}\n {len > max && (\n <Box paddingLeft={2}>\n <Text size={1}>+{len - max}</Text>\n </Box>\n )}\n </Flex>\n )\n}\n","import {AddIcon} from '@sanity/icons'\nimport {Button, Grid, Popover, useClickOutside} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport type {User} from '../types'\n\nimport AvatarGroup from './DocumentCard/AvatarGroup'\nimport UserAssignment from './UserAssignment'\n\ntype UserDisplayProps = {\n userList: User[]\n assignees: string[]\n documentId: string\n disabled?: boolean\n}\n\nexport default function UserDisplay(props: UserDisplayProps) {\n const {assignees, userList, documentId, disabled = false} = props\n\n const [button] = useState(null)\n const [popover, setPopover] = useState<HTMLDivElement | null>(null)\n const [isOpen, setIsOpen] = useState(false)\n\n const close = useCallback(() => setIsOpen(false), [])\n const open = useCallback(() => setIsOpen(true), [])\n\n useClickOutside(close, [button, popover])\n\n return (\n <Popover\n ref={setPopover}\n content={<UserAssignment userList={userList} assignees={assignees} documentId={documentId} />}\n portal\n open={isOpen}\n >\n {!assignees || assignees.length === 0 ? (\n <Button\n onClick={open}\n fontSize={1}\n padding={2}\n tabIndex={-1}\n icon={AddIcon}\n text=\"Assign\"\n tone=\"positive\"\n mode=\"ghost\"\n disabled={disabled}\n />\n ) : (\n <Grid>\n <Button onClick={open} padding={0} mode=\"bleed\" disabled={disabled}>\n <AvatarGroup users={userList.filter((u) => assignees.includes(u.id))} />\n </Button>\n </Grid>\n )}\n </Popover>\n )\n}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {Box, Button, Text, Tooltip, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useClient} from 'sanity'\n\nimport {handleDeleteMetadata} from '../../actions/useCompleteWorkflow'\nimport {API_VERSION} from '../../constants'\n\ntype CompleteButtonProps = {\n documentId: string\n disabled: boolean\n}\n\nexport default function CompleteButton(props: CompleteButtonProps) {\n const {documentId, disabled = false} = props\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n\n const handleComplete: React.MouseEventHandler<HTMLButtonElement> = useCallback(\n async (event) => {\n const id = event.currentTarget.value\n\n if (!id) {\n return\n }\n\n await handleDeleteMetadata(client, toast, id)\n },\n [client, toast],\n )\n\n return (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>Remove this document from Workflow</Text>\n </Box>\n }\n >\n <Button\n value={documentId}\n onClick={handleComplete}\n text=\"Complete\"\n icon={CheckmarkIcon}\n tone=\"positive\"\n mode=\"ghost\"\n fontSize={1}\n padding={2}\n tabIndex={-1}\n disabled={disabled}\n />\n </Tooltip>\n )\n}\n","import {useTimeAgo} from 'sanity'\n\nexport interface TimeAgoProps {\n time: string | Date\n}\n\nexport function TimeAgo({time}: TimeAgoProps) {\n const timeAgo = useTimeAgo(time)\n\n return <span title={timeAgo}>{timeAgo} ago</span>\n}\n","import {EditIcon} from '@sanity/icons'\nimport {Box, Text, Tooltip} from '@sanity/ui'\nimport {TextWithTone, type PreviewValue, type SanityDocument} from 'sanity'\n\nimport {TimeAgo} from './TimeAgo'\n\nexport function DraftStatus(props: {document?: PreviewValue | Partial<SanityDocument> | null}) {\n const {document} = props\n const updatedAt = document && '_updatedAt' in document && document._updatedAt\n\n return (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>\n {document ? (\n <>Edited {updatedAt && <TimeAgo time={updatedAt} />}</>\n ) : (\n <>No unpublished edits</>\n )}\n </Text>\n </Box>\n }\n >\n <TextWithTone tone=\"caution\" dimmed={!document} muted={!document} size={1}>\n <EditIcon />\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {PublishIcon} from '@sanity/icons'\nimport {Box, Text, Tooltip} from '@sanity/ui'\nimport {TextWithTone, type PreviewValue, type SanityDocument} from 'sanity'\n\nimport {TimeAgo} from './TimeAgo'\n\nexport function PublishedStatus(props: {document?: PreviewValue | Partial<SanityDocument> | null}) {\n const {document} = props\n const updatedAt = document && '_updatedAt' in document && document._updatedAt\n\n return (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>\n {document ? (\n <>Published {updatedAt && <TimeAgo time={updatedAt} />}</>\n ) : (\n <>Not published</>\n )}\n </Text>\n </Box>\n }\n >\n <TextWithTone tone=\"positive\" dimmed={!document} muted={!document} size={1}>\n <PublishIcon />\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {useEffect} from 'react'\nimport {type ValidationMarker, useValidationStatus} from 'sanity'\n\ntype ValidateProps = {\n documentId: string\n type: string\n onChange: (validation: {isValidating: boolean; validation: ValidationMarker[]}) => void\n}\n\n// Document validation is siloed into its own component\n// Because it's not performant to run on a lot of documents\nexport default function Validate(props: ValidateProps) {\n const {documentId, type, onChange} = props\n const {isValidating, validation = []} = useValidationStatus(documentId, type)\n\n useEffect(() => {\n onChange({isValidating, validation})\n }, [onChange, isValidating, validation])\n\n return null\n}\n","import {ErrorOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Text, Tooltip} from '@sanity/ui'\nimport {TextWithTone, type ValidationMarker} from 'sanity'\n\ntype ValidationStatusProps = {\n validation: ValidationMarker[]\n}\n\nexport function ValidationStatus(props: ValidationStatusProps) {\n const {validation = []} = props\n\n if (!validation.length) {\n return null\n }\n\n const hasError = validation.some((item) => item.level === 'error')\n\n return (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>\n {validation.length === 1\n ? `1 validation issue`\n : `${validation.length} validation issues`}\n </Text>\n </Box>\n }\n >\n <TextWithTone tone={hasError ? `critical` : `caution`} size={1}>\n {hasError ? <ErrorOutlineIcon /> : <WarningOutlineIcon />}\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {DragHandleIcon} from '@sanity/icons'\nimport {Box, Card, type CardTone, Flex, Stack, useTheme} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {type SchemaType, type ValidationMarker, useSchema, Preview} from 'sanity'\n\nimport type {SanityDocumentWithMetadata, State, User} from '../../types'\n\nimport UserDisplay from '../UserDisplay'\nimport CompleteButton from './CompleteButton'\nimport {DraftStatus} from './core/DraftStatus'\nimport {PublishedStatus} from './core/PublishedStatus'\nimport EditButton from './EditButton'\nimport Validate from './Validate'\nimport {ValidationStatus} from './ValidationStatus'\n\ntype DocumentCardProps = {\n isDragDisabled: boolean\n isPatching: boolean\n userRoleCanDrop: boolean\n isDragging: boolean\n item: SanityDocumentWithMetadata\n states: State[]\n toggleInvalidDocumentId: (documentId: string, action: 'ADD' | 'REMOVE') => void\n userList: User[]\n}\n\nexport function DocumentCard(props: DocumentCardProps) {\n const {\n isDragDisabled,\n isPatching,\n userRoleCanDrop,\n isDragging,\n item,\n states,\n toggleInvalidDocumentId,\n userList,\n } = props\n const {assignees = [], documentId} = item._metadata ?? {}\n const schema = useSchema()\n const state = states.find((s) => s.id === item._metadata?.state)\n\n const isDarkMode = useTheme().sanity.color.dark\n const defaultCardTone = isDarkMode ? `transparent` : `default`\n\n // Validation only runs if the state requests it\n // Because it's not performant to run it on many documents simultaneously\n // So we fake it here, and maybe set it inside <Validate />\n const [optimisticValidation, setOptimisticValidation] = useState<{\n isValidating: boolean\n validation: ValidationMarker[]\n }>({\n isValidating: state?.requireValidation ?? false,\n validation: [],\n })\n\n const {isValidating, validation} = optimisticValidation\n\n const handleValidation = useCallback(\n (updates: {isValidating: boolean; validation: ValidationMarker[]}) => {\n setOptimisticValidation(updates)\n },\n [],\n )\n\n const cardTone = useMemo(() => {\n let tone: CardTone = defaultCardTone\n\n if (!userRoleCanDrop) return isDarkMode ? `default` : `transparent`\n if (!documentId) return tone\n if (isPatching) tone = isDarkMode ? `default` : `transparent`\n if (isDragging) tone = `positive`\n\n if (state?.requireValidation && !isValidating && validation.length > 0) {\n if (validation.some((v) => v.level === 'error')) {\n tone = `critical`\n } else {\n tone = `caution`\n }\n }\n\n return tone\n }, [\n defaultCardTone,\n userRoleCanDrop,\n isPatching,\n isDarkMode,\n documentId,\n isDragging,\n isValidating,\n validation,\n state?.requireValidation,\n ])\n\n // Update validation status\n // Cannot be done in the above memo because it would set state during render\n useEffect(() => {\n if (!isValidating && validation.length > 0) {\n if (validation.some((v) => v.level === 'error')) {\n toggleInvalidDocumentId(documentId, 'ADD')\n } else {\n toggleInvalidDocumentId(documentId, 'REMOVE')\n }\n } else {\n toggleInvalidDocumentId(documentId, 'REMOVE')\n }\n }, [documentId, isValidating, toggleInvalidDocumentId, validation])\n\n const hasError = useMemo(\n () => (isValidating ? false : validation.some((v) => v.level === 'error')),\n [isValidating, validation],\n )\n\n const isLastState = useMemo(\n () => states?.[states?.length - 1]?.id === item._metadata?.state,\n [states, item._metadata.state],\n )\n\n return (\n <>\n {state?.requireValidation ? (\n <Validate documentId={documentId} type={item._type} onChange={handleValidation} />\n ) : null}\n <Box paddingBottom={3} paddingX={3}>\n <Card radius={2} shadow={isDragging ? 3 : 1} tone={cardTone}>\n <Stack>\n <Card\n borderBottom\n radius={2}\n paddingRight={2}\n tone={cardTone}\n style={{pointerEvents: 'none'}}\n >\n <Flex align=\"center\" justify=\"space-between\" gap={1}>\n <Box flex={1}>\n <Preview\n layout=\"default\"\n skipVisibilityCheck\n value={item}\n // oxlint-disable-next-line no-unsafe-type-assertion\n schemaType={schema.get(item._type) as SchemaType}\n />\n </Box>\n <Box style={{flexShrink: 0}}>\n {hasError || isDragDisabled || isPatching ? null : <DragHandleIcon />}\n </Box>\n </Flex>\n </Card>\n\n <Card padding={2} radius={2} tone=\"inherit\">\n <Flex align=\"center\" justify=\"space-between\" gap={3}>\n <Box flex={1}>\n {documentId && (\n <UserDisplay\n userList={userList}\n assignees={assignees}\n documentId={documentId}\n disabled={!userRoleCanDrop}\n />\n )}\n </Box>\n {validation.length > 0 ? <ValidationStatus validation={validation} /> : null}\n <DraftStatus document={item} />\n <PublishedStatus document={item} />\n <EditButton id={item._id} type={item._type} disabled={!userRoleCanDrop} />\n {isLastState && states.length <= 3 ? (\n <CompleteButton documentId={documentId} disabled={!userRoleCanDrop} />\n ) : null}\n </Flex>\n {isLastState && states.length > 3 ? (\n <Stack paddingTop={2}>\n <CompleteButton documentId={documentId} disabled={!userRoleCanDrop} />\n </Stack>\n ) : null}\n </Card>\n </Stack>\n </Card>\n </Box>\n </>\n )\n}\n","import type {CurrentUser} from 'sanity'\nimport type {UserExtended} from 'sanity-plugin-utils'\n\nimport {Draggable, type DraggableStyle} from '@hello-pangea/dnd'\nimport {useVirtualizer, type VirtualItem} from '@tanstack/react-virtual'\nimport {type CSSProperties, useCallback, useMemo, useRef} from 'react'\n\nimport type {SanityDocumentWithMetadata, State} from '../types'\n\nimport {filterItemsAndSort} from '../helpers/filterItemsAndSort'\nimport {DocumentCard} from './DocumentCard'\n\ntype DocumentListProps = {\n data: SanityDocumentWithMetadata[]\n invalidDocumentIds: string[]\n patchingIds: string[]\n selectedSchemaTypes: string[]\n selectedUserIds: string[]\n state: State\n states: State[]\n toggleInvalidDocumentId: (documentId: string, action: 'ADD' | 'REMOVE') => void\n user: CurrentUser | null\n userList: UserExtended[]\n userRoleCanDrop: boolean\n}\n\nfunction getStyle(\n draggableStyle: DraggableStyle | undefined,\n virtualItem: VirtualItem,\n): CSSProperties {\n // Default transform required by tanstack virtual for positioning\n let transform = `translateY(${virtualItem.start}px)`\n\n // If a card is being dragged over, this card needs to move up or down\n if (draggableStyle && draggableStyle.transform) {\n // So get the transform value from beautiful-dnd\n const draggableTransformY = parseInt(\n draggableStyle.transform.split(',')[1]!.split('px')[0]!,\n 10,\n )\n\n // And apply it to the card\n transform = `translateY(${virtualItem.start + draggableTransformY}px)`\n }\n\n return {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualItem.size}px`,\n transform,\n }\n}\n\nexport default function DocumentList(props: DocumentListProps) {\n const {\n data = [],\n invalidDocumentIds,\n patchingIds,\n selectedSchemaTypes,\n selectedUserIds,\n state,\n states,\n toggleInvalidDocumentId,\n user,\n userList,\n userRoleCanDrop,\n } = props\n\n const dataFiltered = useMemo(() => {\n return data.length\n ? filterItemsAndSort(data, state.id, selectedUserIds, selectedSchemaTypes)\n : []\n }, [data, selectedSchemaTypes, selectedUserIds, state.id])\n\n const parentRef = useRef(null)\n\n // eslint-disable-next-line react-hooks/incompatible-library\n const virtualizer = useVirtualizer({\n count: dataFiltered.length,\n getScrollElement: useCallback(() => parentRef.current, []),\n getItemKey: useCallback(\n (index) => dataFiltered[index]?._metadata?.documentId ?? index,\n [dataFiltered],\n ),\n estimateSize: useCallback(() => 115, []),\n overscan: 7,\n measureElement: useCallback((element: Element) => {\n return element.getBoundingClientRect().height || 115\n }, []),\n })\n\n if (!data.length || !dataFiltered.length) {\n return null\n }\n\n return (\n <div\n ref={parentRef}\n style={{\n height: `100%`,\n overflow: 'auto',\n // Smooths scrollbar behaviour\n overflowAnchor: 'none',\n scrollBehavior: 'auto',\n paddingTop: 1,\n }}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: '100%',\n position: 'relative',\n }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const item = dataFiltered[virtualItem.index]\n\n const {documentId, assignees} = item?._metadata ?? {}\n\n const isInvalid = invalidDocumentIds.includes(documentId!)\n const meInAssignees = user?.id ? assignees?.includes(user.id) : false\n const isDragDisabled =\n patchingIds.includes(documentId!) ||\n !userRoleCanDrop ||\n isInvalid ||\n !(state.requireAssignment ? state.requireAssignment && meInAssignees : true)\n\n return (\n <Draggable\n key={virtualItem.key}\n draggableId={documentId!}\n index={virtualItem.index}\n isDragDisabled={isDragDisabled}\n >\n {(draggableProvided, draggableSnapshot) => (\n <div\n ref={draggableProvided.innerRef}\n {...draggableProvided.draggableProps}\n {...draggableProvided.dragHandleProps}\n style={getStyle(draggableProvided.draggableProps.style, virtualItem)}\n >\n <div ref={virtualizer.measureElement} data-index={virtualItem.index}>\n <DocumentCard\n userRoleCanDrop={userRoleCanDrop}\n isDragDisabled={isDragDisabled}\n isPatching={patchingIds.includes(documentId!)}\n isDragging={draggableSnapshot.isDragging}\n item={item!}\n toggleInvalidDocumentId={toggleInvalidDocumentId}\n userList={userList}\n states={states}\n />\n </div>\n </div>\n )}\n </Draggable>\n )\n })}\n </div>\n </div>\n )\n}\n","import {ResetIcon, UserIcon} from '@sanity/icons'\nimport {Button, Card, Flex, Menu, MenuButton} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useCurrentUser, UserAvatar, useSchema} from 'sanity'\nimport {type UserExtended, UserSelectMenu} from 'sanity-plugin-utils'\n\ntype FiltersProps = {\n uniqueAssignedUsers: UserExtended[]\n selectedUserIds: string[]\n schemaTypes: string[]\n selectedSchemaTypes: string[]\n toggleSelectedUser: (userId: string) => void\n resetSelectedUsers: () => void\n toggleSelectedSchemaType: (schemaType: string) => void\n}\n\nexport default function Filters(props: FiltersProps) {\n const {\n uniqueAssignedUsers = [],\n selectedUserIds,\n schemaTypes,\n selectedSchemaTypes,\n toggleSelectedUser,\n resetSelectedUsers,\n toggleSelectedSchemaType,\n } = props\n\n const currentUser = useCurrentUser()\n const schema = useSchema()\n\n const onAdd = useCallback(\n (id: string) => {\n if (!selectedUserIds.includes(id)) {\n toggleSelectedUser(id)\n }\n },\n [selectedUserIds, toggleSelectedUser],\n )\n\n const onRemove = useCallback(\n (id: string) => {\n if (selectedUserIds.includes(id)) {\n toggleSelectedUser(id)\n }\n },\n [selectedUserIds, toggleSelectedUser],\n )\n\n const onClear = useCallback(() => {\n resetSelectedUsers()\n }, [resetSelectedUsers])\n\n if (uniqueAssignedUsers.length === 0 && schemaTypes.length < 2) {\n return null\n }\n\n const meInUniqueAssignees =\n currentUser?.id && uniqueAssignedUsers.find((u) => u.id === currentUser.id)\n const uniqueAssigneesNotMe = uniqueAssignedUsers.filter((u) => u.id !== currentUser?.id)\n\n return (\n <Card tone=\"primary\" padding={2} borderBottom style={{overflowX: 'hidden'}}>\n <Flex align=\"center\">\n <Flex align=\"center\" gap={1} flex={1}>\n {uniqueAssignedUsers.length > 5 ? (\n <Card tone=\"default\">\n <MenuButton\n button={\n <Button\n padding={3}\n fontSize={1}\n text=\"Filter Assignees\"\n tone=\"primary\"\n icon={UserIcon}\n />\n }\n id=\"user-filters\"\n menu={\n <Menu>\n <UserSelectMenu\n value={selectedUserIds}\n userList={uniqueAssignedUsers}\n onAdd={onAdd}\n onRemove={onRemove}\n onClear={onClear}\n labels={{\n addMe: 'Filter mine',\n removeMe: 'Clear mine',\n clear: 'Clear filters',\n }}\n />\n </Menu>\n }\n popover={{portal: true}}\n />\n </Card>\n ) : (\n <>\n {meInUniqueAssignees ? (\n <>\n <Button\n padding={0}\n mode={selectedUserIds.includes(currentUser.id) ? `default` : `bleed`}\n onClick={() => toggleSelectedUser(currentUser.id)}\n >\n <Flex padding={1} align=\"center\" justify=\"center\">\n <UserAvatar user={currentUser.id} size={1} withTooltip />\n </Flex>\n </Button>\n <Card borderRight style={{height: 30}} tone=\"inherit\" />\n </>\n ) : null}\n {uniqueAssigneesNotMe.map((user) => (\n <Button\n key={user.id}\n padding={0}\n mode={selectedUserIds.includes(user.id) ? `default` : `bleed`}\n onClick={() => toggleSelectedUser(user.id)}\n >\n <Flex padding={1} align=\"center\" justify=\"center\">\n <UserAvatar user={user} size={1} withTooltip />\n </Flex>\n </Button>\n ))}\n\n {selectedUserIds.length > 0 ? (\n <Button\n padding={3}\n fontSize={1}\n text=\"Clear\"\n onClick={resetSelectedUsers}\n mode=\"ghost\"\n icon={ResetIcon}\n />\n ) : null}\n </>\n )}\n </Flex>\n\n {schemaTypes.length > 1 ? (\n <Flex align=\"center\" gap={1}>\n {schemaTypes.map((typeName) => {\n const schemaType = schema.get(typeName)\n\n if (!schemaType) {\n return null\n }\n\n return (\n <Button\n padding={3}\n fontSize={1}\n key={typeName}\n text={schemaType?.title ?? typeName}\n icon={schemaType?.icon ?? undefined}\n mode={selectedSchemaTypes.includes(typeName) ? `default` : `ghost`}\n onClick={() => toggleSelectedSchemaType(typeName)}\n />\n )\n })}\n </Flex>\n ) : null}\n </Flex>\n </Card>\n )\n}\n","import {Box, Text, Tooltip} from '@sanity/ui'\n\ntype StatusProps = {\n text: string\n icon: React.ComponentType\n}\n\nexport function Status(props: StatusProps) {\n const {text, icon} = props\n const Icon = icon\n\n return (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>{text}</Text>\n </Box>\n }\n >\n <Text size={1}>\n <Icon />\n </Text>\n </Tooltip>\n )\n}\n","import {InfoOutlineIcon, UserIcon} from '@sanity/icons'\nimport {Badge, type BadgeTone, Box, Card, Flex, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport type {State} from '../../types'\n\nimport {Status} from './Status'\n\nconst StyledStickyCard = styled(Card)`\n position: sticky;\n top: 0;\n z-index: 1;\n`\n\ntype StateTitleProps = {\n state: State\n requireAssignment: boolean\n userRoleCanDrop: boolean\n isDropDisabled: boolean\n draggingFrom: string\n documentCount: number\n}\n\nexport default function StateTitle(props: StateTitleProps) {\n const {state, requireAssignment, userRoleCanDrop, isDropDisabled, draggingFrom, documentCount} =\n props\n\n let tone: BadgeTone = 'default'\n const isSource = draggingFrom === state.id\n\n if (draggingFrom) {\n tone = isDropDisabled || isSource ? 'default' : 'positive'\n }\n\n return (\n <StyledStickyCard paddingY={4} padding={3} tone=\"inherit\">\n <Flex gap={3} align=\"center\">\n <Badge\n mode={(draggingFrom && !isDropDisabled) || isSource ? 'default' : 'outline'}\n tone={tone}\n muted={!userRoleCanDrop || isDropDisabled}\n >\n {state.title}\n </Badge>\n {userRoleCanDrop ? null : (\n <Status\n text=\"You do not have permissions to move documents to this State\"\n icon={InfoOutlineIcon}\n />\n )}\n {requireAssignment ? (\n <Status\n text=\"You must be assigned to the document to move documents to this State\"\n icon={UserIcon}\n />\n ) : null}\n <Box flex={1}>\n {documentCount > 0 ? (\n <Text weight=\"semibold\" align=\"right\" size={1}>\n {documentCount}\n </Text>\n ) : null}\n </Box>\n </Flex>\n </StyledStickyCard>\n )\n}\n","import {LexoRank} from 'lexorank'\n\nfunction generateMiddleValue(ranks: (LexoRank | undefined)[]) {\n // Has no undefined values\n if (!ranks.some((rank) => !rank)) {\n return ranks\n }\n\n // Find the first undefined value\n const firstUndefined = ranks.findIndex((rank) => !rank)\n\n // Find the first defined value after the undefined value\n const firstDefinedAfter = ranks.findIndex((rank, index) => rank && index > firstUndefined)\n // Find the first defined value before the undefined value\n const firstDefinedBefore = ranks.findLastIndex((rank, index) => rank && index < firstUndefined)\n\n if (firstDefinedAfter === -1 || firstDefinedBefore === -1) {\n throw new Error(\n `Unable to generate middle value between indexes ${firstDefinedBefore} and ${firstDefinedAfter}`,\n )\n }\n\n const beforeRank = ranks[firstDefinedBefore]\n const afterRank = ranks[firstDefinedAfter]\n\n if (\n !beforeRank ||\n typeof beforeRank === 'undefined' ||\n !afterRank ||\n typeof afterRank === 'undefined'\n ) {\n throw new Error(\n `Unable to generate middle value between indexes ${firstDefinedBefore} and ${firstDefinedAfter}`,\n )\n }\n\n // Generate a new value between the two\n const between = beforeRank.between(afterRank)\n\n // Calculate the middle index between the defined values\n const middle = Math.floor((firstDefinedAfter + firstDefinedBefore) / 2)\n\n if (ranks[middle]) {\n throw new Error(`Should not have overwritten value at index ${middle}`)\n }\n\n // Insert the new value into the array\n ranks[middle] = between\n\n // Return as a new array\n return ranks\n}\n\n// Generates an array of LexoRanks between two values\nexport function generateMultipleOrderRanks(\n count: number,\n start?: LexoRank,\n end?: LexoRank,\n): LexoRank[] {\n // Begin array with correct size\n let ranks = [...Array(count)]\n\n // Use or create default values\n const rankStart = start ?? LexoRank.min().genNext().genNext()\n const rankEnd = end ?? LexoRank.max().genPrev().genPrev()\n\n ranks[0] = rankStart\n ranks[count - 1] = rankEnd\n\n // Keep processing the array until every value between undefined values is defined\n for (let i = 0; i < count; i++) {\n ranks = generateMiddleValue(ranks)\n }\n\n return ranks.sort((a, b) => a.toString().localeCompare(b.toString()))\n}\n","import type {PropsWithChildren} from 'react'\n\nimport {Card, Grid} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'motion/react'\nimport {styled} from 'styled-components'\n\nconst StyledFloatingCard = styled(Card)`\n position: fixed;\n bottom: 0;\n left: 0;\n z-index: 1000;\n`\n\nexport default function FloatingCard({children}: PropsWithChildren) {\n const childrenHaveValues = Array.isArray(children) ? children.some(Boolean) : Boolean(children)\n\n return (\n <AnimatePresence>\n {childrenHaveValues ? (\n <motion.div key=\"floater\" initial={{opacity: 0}} animate={{opacity: 1}} exit={{opacity: 0}}>\n <StyledFloatingCard shadow={3} padding={3} margin={3} radius={3}>\n <Grid gap={2}>{children}</Grid>\n </StyledFloatingCard>\n </motion.div>\n ) : null}\n </AnimatePresence>\n )\n}\n","import type {UserExtended} from 'sanity-plugin-utils'\n\nimport {Button, useToast} from '@sanity/ui'\nimport {LexoRank} from 'lexorank'\nimport {useCallback, useMemo} from 'react'\nimport {useClient} from 'sanity'\n\nimport type {SanityDocumentWithMetadata, State} from '../types'\n\nimport {API_VERSION} from '../constants'\nimport {generateMultipleOrderRanks} from '../helpers/generateMultipleOrderRanks'\nimport FloatingCard from './FloatingCard'\n\ntype VerifyProps = {\n data: SanityDocumentWithMetadata[]\n userList: UserExtended[]\n states: State[]\n}\n\n// This component checks the validity of the data in the Kanban\n// It will only render something if there is invalid data\n// And will render buttons to fix the data\nexport default function Verify(props: VerifyProps) {\n const {data, userList, states} = props\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n\n // A lot of error-checking\n const documentsWithoutValidMetadataIds = data?.length\n ? data.reduce((acc, cur) => {\n const {documentId, state} = cur._metadata ?? {}\n const stateExists = states.find((s) => s.id === state)\n if (!stateExists && documentId) {\n acc.push(documentId)\n }\n return acc\n }, [] as string[])\n : []\n\n const documentsWithInvalidUserIds =\n data?.length && userList?.length\n ? data.reduce((acc, cur) => {\n const {documentId, assignees} = cur._metadata ?? {}\n const allAssigneesExist = assignees?.length\n ? assignees?.every((a) => userList.find((u) => u.id === a))\n : true\n\n if (!allAssigneesExist && documentId) {\n acc.push(documentId)\n }\n\n return acc\n }, [] as string[])\n : []\n\n const documentsWithoutOrderIds = data?.length\n ? data.reduce((acc, cur) => {\n const {documentId, orderRank} = cur._metadata ?? {}\n\n if (!orderRank && documentId) {\n acc.push(documentId)\n }\n return acc\n }, [] as string[])\n : []\n\n const documentsWithDuplicatedOrderIds = data?.length\n ? data.reduce((acc, cur) => {\n const {documentId, orderRank} = cur._metadata ?? {}\n\n if (\n orderRank &&\n data.filter((d) => d._metadata?.orderRank === orderRank).length > 1 &&\n documentId\n ) {\n acc.push(documentId)\n }\n\n return acc\n }, [] as string[])\n : []\n\n // Updates metadata documents to a valid, existing state\n const correctDocuments = useCallback(\n async (ids: string[]) => {\n toast.push({\n title: 'Correcting...',\n status: 'info',\n })\n\n const tx = ids.reduce((item, documentId) => {\n return item.patch(`workflow-metadata.${documentId}`, {\n set: {state: states?.[0]?.id},\n })\n }, client.transaction())\n\n await tx.commit()\n\n toast.push({\n title: `Corrected ${ids.length === 1 ? `1 Document` : `${ids.length} Documents`}`,\n status: 'success',\n })\n },\n [client, states, toast],\n )\n\n // Remove users that are no longer in the project from documents\n const removeUsersFromDocuments = useCallback(\n async (ids: string[]) => {\n toast.push({\n title: 'Removing users...',\n status: 'info',\n })\n\n const tx = ids.reduce((item, documentId) => {\n const {assignees} = data.find((d) => d._id === documentId)?._metadata ?? {}\n const validAssignees = assignees?.length\n ? assignees.filter((a) => userList.find((u) => u.id === a)?.id)\n : []\n\n return item.patch(`workflow-metadata.${documentId}`, {\n set: {assignees: validAssignees},\n })\n }, client.transaction())\n\n await tx.commit()\n\n toast.push({\n title: `Corrected ${ids.length === 1 ? `1 Document` : `${ids.length} Documents`}`,\n status: 'success',\n })\n },\n [client, data, toast, userList],\n )\n\n // Add order value to metadata documents\n const addOrderToDocuments = useCallback(\n async (ids: string[]) => {\n toast.push({\n title: 'Adding ordering...',\n status: 'info',\n })\n\n // Get first and second order values, if they exist\n const [firstOrder, secondOrder] = [...data].slice(0, 2).map((d) => d._metadata?.orderRank)\n const minLexo = firstOrder ? LexoRank.parse(firstOrder) : undefined\n const maxLexo = secondOrder ? LexoRank.parse(secondOrder) : undefined\n const ranks = generateMultipleOrderRanks(ids.length, minLexo, maxLexo)\n\n const tx = client.transaction()\n\n // Create a new in-between value for each document\n for (let index = 0; index < ids.length; index += 1) {\n tx.patch(`workflow-metadata.${ids[index]}`, {\n set: {orderRank: ranks[index]!.toString()},\n })\n }\n\n await tx.commit()\n\n toast.push({\n title: `Added order to ${ids.length === 1 ? `1 Document` : `${ids.length} Documents`}`,\n status: 'success',\n })\n },\n [data, client, toast],\n )\n\n // Reset order value on all metadata documents\n const resetOrderOfAllDocuments = useCallback(\n async (ids: string[]) => {\n toast.push({\n title: 'Adding ordering...',\n status: 'info',\n })\n\n const ranks = generateMultipleOrderRanks(ids.length)\n\n const tx = client.transaction()\n\n // Create a new in-between value for each document\n for (let index = 0; index < ids.length; index += 1) {\n tx.patch(`workflow-metadata.${ids[index]}`, {\n set: {orderRank: ranks[index]!.toString()},\n })\n }\n\n await tx.commit()\n\n toast.push({\n title: `Added order to ${ids.length === 1 ? `1 Document` : `${ids.length} Documents`}`,\n status: 'success',\n })\n },\n [client, toast],\n )\n\n // A document could be deleted and the workflow metadata left behind\n const orphanedMetadataDocumentIds = useMemo(() => {\n return data.length ? data.filter((doc) => !doc?._id).map((doc) => doc._metadata.documentId) : []\n }, [data])\n\n const handleOrphans = useCallback(async () => {\n toast.push({\n title: 'Removing orphaned metadata...',\n status: 'info',\n })\n\n const tx = client.transaction()\n orphanedMetadataDocumentIds.forEach((id) => {\n tx.delete(`workflow-metadata.${id}`)\n })\n\n await tx.commit()\n\n toast.push({\n title: `Removed ${orphanedMetadataDocumentIds.length} orphaned metadata documents`,\n status: 'success',\n })\n }, [client, orphanedMetadataDocumentIds, toast])\n\n return (\n <FloatingCard>\n {documentsWithoutValidMetadataIds.length > 0 ? (\n <Button\n tone=\"caution\"\n mode=\"ghost\"\n onClick={() => correctDocuments(documentsWithoutValidMetadataIds)}\n text={\n documentsWithoutValidMetadataIds.length === 1\n ? `Correct 1 Document State`\n : `Correct ${documentsWithoutValidMetadataIds.length} Document States`\n }\n />\n ) : null}\n {documentsWithInvalidUserIds.length > 0 ? (\n <Button\n tone=\"caution\"\n mode=\"ghost\"\n onClick={() => removeUsersFromDocuments(documentsWithInvalidUserIds)}\n text={\n documentsWithInvalidUserIds.length === 1\n ? `Remove Invalid Users from 1 Document`\n : `Remove Invalid Users from ${documentsWithInvalidUserIds.length} Documents`\n }\n />\n ) : null}\n {documentsWithoutOrderIds.length > 0 ? (\n <Button\n tone=\"caution\"\n mode=\"ghost\"\n onClick={() => addOrderToDocuments(documentsWithoutOrderIds)}\n text={\n documentsWithoutOrderIds.length === 1\n ? `Set Order for 1 Document`\n : `Set Order for ${documentsWithoutOrderIds.length} Documents`\n }\n />\n ) : null}\n {documentsWithDuplicatedOrderIds.length > 0 ? (\n <>\n <Button\n tone=\"caution\"\n mode=\"ghost\"\n onClick={() => addOrderToDocuments(documentsWithDuplicatedOrderIds)}\n text={\n documentsWithDuplicatedOrderIds.length === 1\n ? `Set Unique Order for 1 Document`\n : `Set Unique Order for ${documentsWithDuplicatedOrderIds.length} Documents`\n }\n />\n <Button\n tone=\"caution\"\n mode=\"ghost\"\n onClick={() =>\n resetOrderOfAllDocuments(data.map((doc) => String(doc._metadata?.documentId)))\n }\n text={\n data.length === 1\n ? `Reset Order for 1 Document`\n : `Reset Order for all ${data.length} Documents`\n }\n />\n </>\n ) : null}\n {orphanedMetadataDocumentIds.length > 0 ? (\n <Button\n text=\"Cleanup orphaned metadata\"\n onClick={handleOrphans}\n tone=\"caution\"\n mode=\"ghost\"\n />\n ) : null}\n </FloatingCard>\n )\n}\n","import {\n DragDropContext,\n type DraggableChildrenFn,\n type DragStart,\n Droppable,\n type DropResult,\n} from '@hello-pangea/dnd'\nimport {Box, Card, Container, Flex, Grid, Spinner, useTheme, useToast} from '@sanity/ui'\nimport {LexoRank} from 'lexorank'\nimport {useCallback, useMemo, useState} from 'react'\nimport {type Tool, useCurrentUser} from 'sanity'\nimport {Feedback, useProjectUsers} from 'sanity-plugin-utils'\n\nimport type {State, WorkflowConfig} from '../types'\n\nimport {API_VERSION} from '../constants'\nimport {arraysContainMatchingString} from '../helpers/arraysContainMatchingString'\nimport {filterItemsAndSort} from '../helpers/filterItemsAndSort'\nimport {useWorkflowDocuments} from '../hooks/useWorkflowDocuments'\nimport {DocumentCard} from './DocumentCard'\nimport DocumentList from './DocumentList'\nimport Filters from './Filters'\nimport StateTitle from './StateTitle'\nimport Verify from './Verify'\n\ntype WorkflowToolProps = {\n tool: Tool<WorkflowConfig>\n}\n\nexport default function WorkflowTool(props: WorkflowToolProps) {\n const {schemaTypes = [], states = []} = props?.tool?.options ?? {}\n\n const isDarkMode = useTheme().sanity.color.dark\n const defaultCardTone = isDarkMode ? 'default' : 'transparent'\n const toast = useToast()\n\n const userList = useProjectUsers({apiVersion: API_VERSION})\n\n const user = useCurrentUser()\n const userRoleNames = user?.roles?.length ? user?.roles.map((r) => r.name) : []\n\n const {workflowData, operations} = useWorkflowDocuments(schemaTypes)\n const [patchingIds, setPatchingIds] = useState<string[]>([])\n\n // Data to display in cards\n const {data, loading, error} = workflowData\n\n // Operations to perform on cards\n const {move} = operations\n\n const [undroppableStates, setUndroppableStates] = useState<string[]>([])\n const [draggingFrom, setDraggingFrom] = useState(``)\n\n // When drag starts, check for any States we should not allow dropping on\n // Because of either:\n // 1. The \"destination\" State requires user assignment and the user is not assigned to the dragged document\n // 2. The \"source\" State State has a list of transitions and the \"destination\" State is not in that list\n const handleDragStart = useCallback(\n (start: DragStart) => {\n const {draggableId, source} = start\n const {droppableId: currentStateId} = source\n setDraggingFrom(currentStateId)\n\n const document = data.find((item) => item._metadata?.documentId === draggableId)\n const state = states.find((s) => s.id === currentStateId)\n\n // This shouldn't happen but TypeScript\n if (!document || !state) return\n\n const undroppableStateIds = []\n const statesThatRequireAssignmentIds = states\n .filter((s) => s.requireAssignment)\n .map((s) => s.id)\n\n if (statesThatRequireAssignmentIds.length) {\n const documentAssignees = document._metadata?.assignees ?? []\n const userIsAssignedToDocument = user?.id ? documentAssignees.includes(user.id) : false\n\n if (!userIsAssignedToDocument) {\n undroppableStateIds.push(...statesThatRequireAssignmentIds)\n }\n }\n\n const statesThatCannotBeTransitionedToIds =\n state.transitions && state.transitions.length\n ? states.filter((s) => !state.transitions?.includes(s.id)).map((s) => s.id)\n : []\n\n if (statesThatCannotBeTransitionedToIds.length) {\n undroppableStateIds.push(...statesThatCannotBeTransitionedToIds)\n }\n\n // Remove currentStateId from undroppableStates\n const undroppableExceptSelf = undroppableStateIds.filter((id) => id !== currentStateId)\n\n if (undroppableExceptSelf.length) {\n setUndroppableStates(undroppableExceptSelf)\n }\n },\n [data, states, user],\n )\n\n const handleDragEnd = useCallback(\n async (result: DropResult) => {\n // Reset undroppable states\n setUndroppableStates([])\n setDraggingFrom(``)\n\n const {draggableId, source, destination} = result\n\n if (\n // No destination?\n !destination ||\n // No change in position?\n (destination.droppableId === source.droppableId && destination.index === source.index)\n ) {\n return\n }\n\n // Find all items in current state\n const destinationStateItems = [...filterItemsAndSort(data, destination.droppableId, [], null)]\n const destinationStateIndex = states.findIndex((s) => s.id === destination.droppableId)\n const globalStateMinimumRank = data?.[0]?._metadata.orderRank\n const globalStateMaximumRank = data?.[data?.length - 1]?._metadata.orderRank\n\n let newOrder\n\n if (!destinationStateItems.length) {\n // Only item in state\n // New minimum rank\n if (destinationStateIndex === 0) {\n // Only the first state should generate an absolute minimum rank\n newOrder = LexoRank.min().toString()\n } else {\n // Otherwise create one rank above the minimum\n newOrder = LexoRank.min().genNext().toString()\n }\n } else if (destination.index === 0) {\n // Now first item in order\n const firstItemOrderRank = [...destinationStateItems].shift()?._metadata?.orderRank\n\n if (firstItemOrderRank && typeof firstItemOrderRank === 'string') {\n newOrder = LexoRank.parse(firstItemOrderRank).genPrev().toString()\n } else if (destinationStateIndex === 0) {\n // Only the first state should generate an absolute minimum rank\n newOrder = LexoRank.min().toString()\n } else {\n // Otherwise create the next rank between min and the globally minimum rank\n newOrder = LexoRank.parse(globalStateMinimumRank!).between(LexoRank.min()).toString()\n }\n } else if (destination.index + 1 === destinationStateItems.length) {\n // Now last item in order\n const lastItemOrderRank = [...destinationStateItems].pop()?._metadata?.orderRank\n\n if (lastItemOrderRank && typeof lastItemOrderRank === 'string') {\n newOrder = LexoRank.parse(lastItemOrderRank).genNext().toString()\n } else if (destinationStateIndex === states.length - 1) {\n // Only the last state should generate an absolute maximum rank\n newOrder = LexoRank.max().toString()\n } else {\n // Otherwise create the next rank between max and the globally maximum rank\n newOrder = LexoRank.parse(globalStateMaximumRank!).between(LexoRank.min()).toString()\n }\n } else {\n // Must be between two items\n const itemBefore = destinationStateItems[destination.index - 1]\n const itemBeforeRank = itemBefore?._metadata?.orderRank\n let itemBeforeRankParsed\n if (itemBeforeRank) {\n itemBeforeRankParsed = LexoRank.parse(itemBeforeRank)\n } else if (destinationStateIndex === 0) {\n itemBeforeRankParsed = LexoRank.min()\n } else {\n itemBeforeRankParsed = LexoRank.parse(globalStateMinimumRank!)\n }\n\n const itemAfter = destinationStateItems[destination.index]\n const itemAfterRank = itemAfter?._metadata?.orderRank\n let itemAfterRankParsed\n if (itemAfterRank) {\n itemAfterRankParsed = LexoRank.parse(itemAfterRank)\n } else if (destinationStateIndex === states.length - 1) {\n itemAfterRankParsed = LexoRank.max()\n } else {\n itemAfterRankParsed = LexoRank.parse(globalStateMaximumRank!)\n }\n\n newOrder = itemBeforeRankParsed.between(itemAfterRankParsed).toString()\n }\n\n setPatchingIds([...patchingIds, draggableId])\n toast.push({\n status: 'info',\n title: 'Updating document state...',\n })\n await move(draggableId, destination, states, newOrder)\n setPatchingIds((ids: string[]) => ids.filter((id) => id !== draggableId))\n },\n [data, patchingIds, toast, move, states],\n )\n\n // Used for the user filter UI\n const uniqueAssignedUsers = useMemo(() => {\n const uniqueUserIds = data.reduce((acc, item) => {\n const {assignees = []} = item._metadata ?? {}\n const newAssignees = assignees?.length ? assignees.filter((a) => !acc.includes(a)) : []\n if (newAssignees.length) {\n acc.push(...newAssignees)\n }\n return acc\n }, [] as string[])\n\n return userList.filter((u) => uniqueUserIds.includes(u.id))\n }, [data, userList])\n\n // Selected user IDs filter the visible workflow documents\n const [selectedUserIds, setSelectedUserIds] = useState<string[]>(\n uniqueAssignedUsers.map((u) => u.id),\n )\n const toggleSelectedUser = useCallback((userId: string) => {\n setSelectedUserIds((prev) =>\n prev.includes(userId) ? prev.filter((u) => u !== userId) : [...prev, userId],\n )\n }, [])\n const resetSelectedUsers = useCallback(() => {\n setSelectedUserIds([])\n }, [])\n\n // Selected schema types filter the visible workflow documents\n const [selectedSchemaTypes, setSelectedSchemaTypes] = useState<string[]>(schemaTypes)\n const toggleSelectedSchemaType = useCallback((schemaType: string) => {\n setSelectedSchemaTypes((prev) =>\n prev.includes(schemaType) ? prev.filter((u) => u !== schemaType) : [...prev, schemaType],\n )\n }, [])\n\n // Document IDs that have validation errors\n const [invalidDocumentIds, setInvalidDocumentIds] = useState<string[]>([])\n const toggleInvalidDocumentId = useCallback((docId: string, action: 'ADD' | 'REMOVE') => {\n setInvalidDocumentIds((prev) =>\n action === 'ADD' ? [...prev, docId] : prev.filter((id) => id !== docId),\n )\n }, [])\n\n const Clone: DraggableChildrenFn = useCallback(\n (provided, snapshot, rubric) => {\n const item = data.find((doc) => doc?._metadata?.documentId === rubric.draggableId)\n\n return (\n <div {...provided.draggableProps} {...provided.dragHandleProps} ref={provided.innerRef}>\n {item ? (\n <DocumentCard\n // Assumed false, if it's dragging it's not disabled\n isDragDisabled={false}\n // Assumed false, if it's dragging it's not patching\n isPatching={false}\n // Assumed true, if you can drag it you can drop it\n userRoleCanDrop\n isDragging={snapshot.isDragging}\n item={item}\n states={states}\n toggleInvalidDocumentId={toggleInvalidDocumentId}\n userList={userList}\n />\n ) : (\n <Feedback title=\"Item not found\" tone=\"caution\" />\n )}\n </div>\n )\n },\n [data, states, toggleInvalidDocumentId, userList],\n )\n\n if (!states?.length) {\n return (\n <Container width={1} padding={5}>\n <Feedback\n tone=\"caution\"\n title=\"Plugin options error\"\n description=\"No States defined in plugin config\"\n />\n </Container>\n )\n }\n\n if (error && !data.length) {\n return (\n <Container width={1} padding={5}>\n <Feedback tone=\"critical\" title=\"Error querying for Workflow documents\" />\n </Container>\n )\n }\n\n return (\n <Flex direction=\"column\" height=\"fill\" overflow=\"hidden\">\n <Verify data={data} userList={userList} states={states} />\n\n <Filters\n uniqueAssignedUsers={uniqueAssignedUsers}\n selectedUserIds={selectedUserIds}\n toggleSelectedUser={toggleSelectedUser}\n resetSelectedUsers={resetSelectedUsers}\n schemaTypes={schemaTypes}\n selectedSchemaTypes={selectedSchemaTypes}\n toggleSelectedSchemaType={toggleSelectedSchemaType}\n />\n <DragDropContext onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <Grid columns={states.length} height=\"fill\">\n {states.map((state: State, stateIndex: number) => {\n const userRoleCanDrop = state?.roles?.length\n ? arraysContainMatchingString(state.roles, userRoleNames)\n : true\n const isDropDisabled = !userRoleCanDrop || undroppableStates.includes(state.id)\n\n return (\n <Card key={state.id} borderLeft={stateIndex > 0} tone={defaultCardTone}>\n <Flex direction=\"column\" height=\"fill\">\n <StateTitle\n state={state}\n requireAssignment={state.requireAssignment ?? false}\n userRoleCanDrop={userRoleCanDrop}\n isDropDisabled={isDropDisabled}\n draggingFrom={draggingFrom}\n documentCount={\n filterItemsAndSort(data, state.id, selectedUserIds, selectedSchemaTypes)\n .length\n }\n />\n <Box flex={1}>\n <Droppable\n droppableId={state.id}\n isDropDisabled={isDropDisabled}\n // props required for virtualization\n mode=\"virtual\"\n renderClone={Clone}\n >\n {(provided, snapshot) => (\n <Card\n ref={provided.innerRef}\n tone={snapshot.isDraggingOver ? `primary` : defaultCardTone}\n height=\"fill\"\n >\n {loading ? (\n <Flex padding={5} align=\"center\" justify=\"center\">\n <Spinner muted />\n </Flex>\n ) : null}\n\n <DocumentList\n data={data}\n invalidDocumentIds={invalidDocumentIds}\n patchingIds={patchingIds}\n selectedSchemaTypes={selectedSchemaTypes}\n selectedUserIds={selectedUserIds}\n state={state}\n states={states}\n toggleInvalidDocumentId={toggleInvalidDocumentId}\n user={user}\n userList={userList}\n userRoleCanDrop={userRoleCanDrop}\n />\n\n {/* Not required for virtualized lists */}\n {/* {provided.placeholder} */}\n </Card>\n )}\n </Droppable>\n </Box>\n </Flex>\n </Card>\n )\n })}\n </Grid>\n </DragDropContext>\n </Flex>\n )\n}\n","import type {Tool} from 'sanity'\n\nimport {SplitVerticalIcon} from '@sanity/icons'\n\nimport type {WorkflowConfig} from '../types'\n\nimport WorkflowTool from '../components/WorkflowTool'\n\nexport type WorkflowToolConfig = (options: WorkflowConfig) => Tool\n\nexport const workflowTool: WorkflowToolConfig = (options: WorkflowConfig) => ({\n name: 'workflow',\n title: 'Workflow',\n component: WorkflowTool,\n icon: SplitVerticalIcon,\n options,\n})\n","import {definePlugin, isObjectInputProps, type Plugin} from 'sanity'\n\nimport type {WorkflowConfig} from './types'\n\nimport {defineUpdateWorkflow} from './actions/defineUpdateWorkflow'\nimport {useAssignWorkflow} from './actions/useAssignWorkflow'\nimport {useBeginWorkflow} from './actions/useBeginWorkflow'\nimport {useCompleteWorkflow} from './actions/useCompleteWorkflow'\nimport {useAssigneesBadge} from './badges/useAssigneesBadge'\nimport {useStateBadge} from './badges/useStateBadge'\nimport {WorkflowProvider} from './components/WorkflowContext'\nimport WorkflowSignal from './components/WorkflowSignal'\nimport {DEFAULT_CONFIG} from './constants'\nimport metadata from './schema/workflow/workflow.metadata'\nimport {workflowTool} from './tools'\n\nexport const workflow: Plugin<WorkflowConfig> = definePlugin<WorkflowConfig>(\n (config = DEFAULT_CONFIG) => {\n const {schemaTypes, states} = {...DEFAULT_CONFIG, ...config}\n\n if (!states?.length) {\n throw new Error(`Workflow plugin: Missing \"states\" in config`)\n }\n\n if (!schemaTypes?.length) {\n throw new Error(`Workflow plugin: Missing \"schemaTypes\" in config`)\n }\n\n const useUpdateActions = states.map((state) => defineUpdateWorkflow(state))\n\n return {\n name: 'sanity-plugin-workflow',\n schema: {\n types: [metadata(states)],\n },\n // TODO: Remove 'workflow.metadata' from list of new document types\n // ...\n studio: {\n components: {\n layout: (props) => (\n <WorkflowProvider {...props} schemaTypes={schemaTypes} states={states} />\n ),\n },\n },\n form: {\n components: {\n input: (props) => {\n if (\n props.id === `root` &&\n isObjectInputProps(props) &&\n schemaTypes.includes(props.schemaType.name)\n ) {\n return <WorkflowSignal {...props} />\n }\n\n return props.renderDefault(props)\n },\n },\n },\n document: {\n actions: (prev, context) => {\n if (!schemaTypes.includes(context.schemaType)) {\n return prev\n }\n\n return [\n useBeginWorkflow,\n useAssignWorkflow,\n ...useUpdateActions,\n useCompleteWorkflow,\n ...prev,\n ]\n },\n badges: (prev, context) => {\n if (!schemaTypes.includes(context.schemaType)) {\n return prev\n }\n\n if (!context.documentId) {\n return prev\n }\n\n return [useStateBadge, useAssigneesBadge, ...prev]\n },\n },\n tools: [\n // TODO: These configs could be read from Context\n workflowTool({schemaTypes, states}),\n ],\n }\n },\n)\n"],"names":["defineStates","states","API_VERSION","DEFAULT_CONFIG","schemaTypes","id","title","color","roles","transitions","requireAssignment","useWorkflowMetadata","ids","$","_c","t0","t1","for","apiVersion","t2","params","options","data","_rawData","loading","error","useListeningQuery","rawData","t3","bb0","length","t4","acc","item","documentId","keyedMetadata","WorkflowContext","createContext","addId","removeId","useWorkflowContext","current","useContext","metadata","WorkflowProvider","props","Symbol","setIds","useState","includes","id_0","current_0","filter","i","renderDefault","t5","arraysContainMatchingString","one","two","some","useUpdateWorkflow","actionState","type","onComplete","user","useCurrentUser","client","useClient","toast","useToast","currentUser","state","s","currentState","find","assignees","undefined","validation","isValidating","useValidationStatus","hasValidationErrors","requireValidation","_temp","console","t6","newState","patch","set","commit","then","push","status","catch","err","onHandle","currentStateIndex","findIndex","s_0","direction","s_1","DirectionIcon","ArrowRightIcon","ArrowLeftIcon","directionLabel","t7","map","_temp2","userRoleCanUpdateState","actionStateIsAValidTransition","t8","userAssignmentCanUpdateState","t9","Boolean","t10","t11","icon","disabled","label","r","name","v","level","defineUpdateWorkflow","UserAssignment","userList","userId","u","setIfMissing","insert","displayName","description","addAssignee","userId_0","user_0","u_0","unset","err_0","removeAssignee","err_1","clearAssignees","maxHeight","useAssignWorkflow","isDialogOpen","setDialogOpen","useProjectUsers","onClose","content","UsersIcon","dialog","useBeginWorkflow","draft","beginning","setBeginning","complete","setComplete","lowestOrderFirstState","fetch","createIfNotExists","_id","_type","orderRank","LexoRank","parse","genNext","toString","min","handle","SplitVerticalIcon","handleDeleteMetadata","delete","useCompleteWorkflow","isLastState","CheckmarkIcon","tone","useAssigneesBadge","hasMe","assignee","assigneesCount","join","useStateBadge","WorkflowSignal","value","getPublishedId","useEffect","EditButton","navigateIntent","useRouter","EditIcon","Field","schema","useSchema","String","draftId","_data","get","schemaType","UserAssignmentInput","useFormValue","Array","isArray","stringValue","initialRank","lastRankValue","defineType","liveEdit","fields","defineField","readOnly","list","layout","components","input","initialValue","_","getClient","lastDocOrderRank","order","of","filterItemsAndSort","items","stateId","selectedUsers","selectedSchemaTypes","_metadata","sort","a","b","aOrderRank","bOrderRank","localeCompare","QUERY","useWorkflowDocuments","localDocuments","setLocalDocuments","draggedId","destination","newOrder","currentLocalData","newLocalDocuments","droppableId","optimistic","newStateId","document","d","_rev","ifRevisionId","res","message","move","workflowData","operations","AvatarGroup","users","max","len","slice","me","visibleUsers","marginRight","UserDisplay","button","popover","setPopover","isOpen","setIsOpen","close","open","useClickOutside","AddIcon","CompleteButton","event","currentTarget","handleComplete","TimeAgo","time","timeAgo","useTimeAgo","DraftStatus","updatedAt","_updatedAt","PublishedStatus","Validate","onChange","ValidationStatus","hasError","DocumentCard","isDragDisabled","isPatching","userRoleCanDrop","isDragging","toggleInvalidDocumentId","isDarkMode","useTheme","sanity","dark","defaultCardTone","optimisticValidation","setOptimisticValidation","updates","handleValidation","cardTone","_temp3","t12","t13","t14","pointerEvents","t15","t16","t17","t18","flexShrink","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","v_1","v_0","getStyle","draggableStyle","virtualItem","transform","start","draggableTransformY","parseInt","split","position","top","left","width","height","size","DocumentList","invalidDocumentIds","patchingIds","selectedUserIds","dataFiltered","useMemo","parentRef","useRef","virtualizer","useVirtualizer","count","getScrollElement","useCallback","getItemKey","index","estimateSize","overscan","measureElement","element","getBoundingClientRect","overflow","overflowAnchor","scrollBehavior","paddingTop","getTotalSize","getVirtualItems","isInvalid","meInAssignees","draggableProvided","draggableSnapshot","innerRef","draggableProps","dragHandleProps","style","key","Filters","uniqueAssignedUsers","toggleSelectedUser","resetSelectedUsers","toggleSelectedSchemaType","onAdd","onRemove","onClear","meInUniqueAssignees","uniqueAssigneesNotMe","T0","Card","overflowX","T1","Flex","T2","UserIcon","addMe","removeMe","clear","portal","ResetIcon","typeName","Status","text","Icon","StyledStickyCard","styled","withConfig","componentId","StateTitle","isDropDisabled","draggingFrom","documentCount","isSource","InfoOutlineIcon","generateMiddleValue","ranks","rank","firstUndefined","firstDefinedAfter","firstDefinedBefore","findLastIndex","Error","beforeRank","afterRank","between","middle","Math","floor","generateMultipleOrderRanks","end","rankStart","rankEnd","genPrev","StyledFloatingCard","FloatingCard","children","childrenHaveValues","opacity","Verify","reduce","cur","documentsWithoutValidMetadataIds","acc_0","cur_0","documentId_0","every","documentsWithInvalidUserIds","documentsWithoutOrderIds","acc_2","cur_2","documentId_2","orderRank_0","documentsWithDuplicatedOrderIds","documentId_3","transaction","correctDocuments","ids_0","item_0","documentId_4","assignees_0","d_0","validAssignees","a_0","removeUsersFromDocuments","ids_1","firstOrder","secondOrder","minLexo","maxLexo","tx_1","tx","addOrderToDocuments","ids_2","ranks_0","tx_2","index_0","resetOrderOfAllDocuments","_temp4","orphanedMetadataDocumentIds","tx_3","forEach","handleOrphans","_temp5","doc_1","doc","doc_0","d_1","acc_1","cur_1","documentId_1","WorkflowTool","tool","userRoleNames","setPatchingIds","undroppableStates","setUndroppableStates","setDraggingFrom","draggableId","source","currentStateId","undroppableStateIds","statesThatRequireAssignmentIds","documentAssignees","statesThatCannotBeTransitionedToIds","s_2","undroppableExceptSelf","handleDragStart","result","draggableId_0","source_0","destinationStateItems","destinationStateIndex","s_4","globalStateMinimumRank","globalStateMaximumRank","firstItemOrderRank","shift","lastItemOrderRank","pop","itemBeforeRank","itemBeforeRankParsed","itemAfterRank","itemAfterRankParsed","handleDragEnd","uniqueUserIds","_temp6","setSelectedUserIds","prev","u_1","setSelectedSchemaTypes","prev_0","u_2","setInvalidDocumentIds","docId","action","prev_1","id_1","provided","snapshot","rubric","item_1","Clone","DragDropContext","Grid","state_0","stateIndex","provided_0","snapshot_0","isDraggingOver","newAssignees","s_3","workflowTool","component","workflow","definePlugin","config","useUpdateActions","types","studio","form","isObjectInputProps","actions","context","badges","tools"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/types/index.ts","../src/constants/index.ts","../src/hooks/useWorkflowMetadata.tsx","../src/components/WorkflowContext.tsx","../src/helpers/arraysContainMatchingString.ts","../src/actions/defineUpdateWorkflow.tsx","../src/components/UserAssignment.tsx","../src/actions/useAssignWorkflow.tsx","../src/actions/useBeginWorkflow.tsx","../src/actions/useCompleteWorkflow.tsx","../src/badges/useAssigneesBadge.tsx","../src/badges/useStateBadge.tsx","../src/components/WorkflowSignal.tsx","../src/components/DocumentCard/EditButton.tsx","../src/components/DocumentCard/Field.tsx","../src/components/UserAssignmentInput.tsx","../src/helpers/initialRank.ts","../src/schema/workflow/workflow.metadata.ts","../src/helpers/filterItemsAndSort.ts","../src/hooks/useWorkflowDocuments.tsx","../src/components/DocumentCard/AvatarGroup.tsx","../src/components/UserDisplay.tsx","../src/components/DocumentCard/CompleteButton.tsx","../src/components/DocumentCard/core/TimeAgo.tsx","../src/components/DocumentCard/core/DraftStatus.tsx","../src/components/DocumentCard/core/PublishedStatus.tsx","../src/components/DocumentCard/Validate.tsx","../src/components/DocumentCard/ValidationStatus.tsx","../src/components/DocumentCard/index.tsx","../src/components/DocumentList.tsx","../src/components/Filters.tsx","../src/components/StateTitle/Status.tsx","../src/components/StateTitle/index.tsx","../src/helpers/generateMultipleOrderRanks.ts","../src/components/FloatingCard.tsx","../src/components/Verify.tsx","../src/components/WorkflowTool.tsx","../src/tools/index.ts","../src/plugin.tsx"],"sourcesContent":["import type {SanityDocumentLike} from 'sanity'\n\nexport type State = {\n id: string\n transitions: string[]\n title: string\n roles?: string[]\n requireAssignment?: boolean\n requireValidation?: boolean\n // From document badges\n color?: 'primary' | 'success' | 'warning' | 'danger'\n}\n\nexport type StateCheck<Id, States> = {\n id: Id\n // Transitions is an array of State ids\n transitions?: States extends {id: infer Id2}[] ? Id2[] : never\n} & State\n\nexport type WorkflowConfig = {\n schemaTypes: string[]\n states?: State[]\n}\n\nexport function defineStates<Id extends string, States extends StateCheck<Id, States>[]>(\n states: States,\n): States {\n return states\n}\n\nexport type User = {\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\nexport type DragData = {\n documentId?: string\n x?: number\n y?: number\n state?: string\n}\n\nexport type Metadata = SanityDocumentLike & {\n _rev: string\n assignees: string[]\n documentId: string\n state: string\n orderRank: string\n}\n\nexport type KeyedMetadata = {[key: string]: Metadata}\n\nexport type SanityDocumentWithMetadata = {\n _metadata: Metadata\n _id: string\n _type: string\n _rev: string\n _updatedAt: string\n}\n","import {defineStates, type WorkflowConfig} from '../types'\n\nexport const API_VERSION = `2023-01-01`\n\nexport const DEFAULT_CONFIG: Required<WorkflowConfig> = {\n schemaTypes: [],\n states: defineStates([\n {\n id: 'inReview',\n title: 'In review',\n color: 'primary',\n roles: ['editor', 'administrator'],\n transitions: ['changesRequested', 'approved'],\n },\n {\n id: 'changesRequested',\n title: 'Changes requested',\n color: 'warning',\n roles: ['editor', 'administrator'],\n transitions: ['approved'],\n },\n {\n id: 'approved',\n title: 'Approved',\n color: 'success',\n roles: ['administrator'],\n transitions: ['changesRequested'],\n requireAssignment: true,\n },\n ]),\n}\n","import {useMemo} from 'react'\nimport {useListeningQuery} from 'sanity-plugin-utils'\n\nimport type {KeyedMetadata, Metadata} from '../types'\n\nimport {API_VERSION} from '../constants'\n\n/**\n * Takes the published ID of documents and return the metadata for those documents.\n *\n * @param ids Source document published IDs\n */\nexport function useWorkflowMetadata(ids: string[]): {\n data: KeyedMetadata\n loading: boolean\n error: unknown\n} {\n const {\n data: _rawData,\n loading,\n error,\n } = useListeningQuery<Metadata[]>(\n `*[_type == \"workflow.metadata\" && documentId in $ids]{\n _id,\n _type,\n _rev,\n assignees,\n documentId,\n state,\n orderRank\n }`,\n {\n params: {ids},\n options: {apiVersion: API_VERSION},\n },\n )\n // oxlint-disable-next-line no-unsafe-type-assertion\n const rawData = _rawData as Metadata[]\n\n const keyedMetadata = useMemo(() => {\n if (!rawData || rawData.length === 0) return {}\n\n const acc: KeyedMetadata = {}\n for (const item of rawData) {\n acc[item.documentId] = item\n }\n return acc\n }, [rawData])\n\n return {data: keyedMetadata, loading, error}\n}\n","import type {LayoutProps} from 'sanity'\n\nimport {useCallback, useContext, useState, createContext} from 'react'\n\nimport type {KeyedMetadata, WorkflowConfig} from '../types'\n\nimport {DEFAULT_CONFIG} from '../constants'\nimport {useWorkflowMetadata} from '../hooks/useWorkflowMetadata'\n\nexport type WorkflowContextValue = Required<WorkflowConfig> & {\n data: KeyedMetadata\n loading: boolean\n error: unknown\n ids: string[]\n addId: (id: string) => void\n removeId: (id: string) => void\n}\n\nconst WorkflowContext = createContext<WorkflowContextValue>({\n data: {},\n loading: false,\n error: false,\n ids: [],\n addId: () => null,\n removeId: () => null,\n ...DEFAULT_CONFIG,\n})\n\nexport function useWorkflowContext(id?: string) {\n const current = useContext(WorkflowContext)\n\n return {...current, metadata: id ? current.data[id] : null}\n}\n\ntype WorkflowProviderProps = LayoutProps & Required<WorkflowConfig>\n\n/**\n * This Provider wraps the Studio and provides the workflow context to document actions and badges.\n * This is so individual actions and badges do not need to all register their own listeners.\n * Instead, each document \"signals\" its ID up to the provider, which then registers a single listener\n * This is performed inside of a component loaded at the root level of the Document Form\n */\nexport function WorkflowProvider(props: WorkflowProviderProps) {\n const [ids, setIds] = useState<string[]>([])\n const addId = useCallback(\n (id: string) => setIds((current) => (current.includes(id) ? current : [...current, id])),\n [],\n )\n const removeId = useCallback(\n (id: string) => setIds((current) => current.filter((i) => i !== id)),\n [],\n )\n const {data, loading, error} = useWorkflowMetadata(ids)\n\n return (\n <WorkflowContext.Provider\n value={{\n data,\n loading,\n error,\n ids,\n addId,\n removeId,\n states: props.states,\n schemaTypes: props.schemaTypes,\n }}\n >\n {props.renderDefault(props)}\n </WorkflowContext.Provider>\n )\n}\n","export function arraysContainMatchingString(one: string[], two: string[]): boolean {\n return one.some((item) => two.includes(item))\n}\n","import {ArrowLeftIcon, ArrowRightIcon} from '@sanity/icons'\nimport {useToast} from '@sanity/ui'\nimport {\n type DocumentActionDescription,\n useCurrentUser,\n useValidationStatus,\n type DocumentActionProps,\n useClient,\n} from 'sanity'\n\nimport type {State} from '../types'\n\nimport {useWorkflowContext} from '../components/WorkflowContext'\nimport {API_VERSION} from '../constants'\nimport {arraysContainMatchingString} from '../helpers/arraysContainMatchingString'\n\nfunction useUpdateWorkflow(\n {id, type, onComplete}: DocumentActionProps,\n actionState: State,\n): DocumentActionDescription | null {\n const user = useCurrentUser()\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n const currentUser = useCurrentUser()\n\n const {metadata, loading, error, states} = useWorkflowContext(id)\n const currentState = states.find((s) => s.id === metadata?.state)\n const {assignees = []} = metadata ?? {}\n\n // TODO: Shouldn't the document action props contain this?\n const {validation, isValidating} = useValidationStatus(id, type)\n const hasValidationErrors =\n currentState?.requireValidation &&\n !isValidating &&\n validation?.length > 0 &&\n validation.find((v) => v.level === 'error')\n\n if (error) {\n console.error(error)\n }\n\n const onHandle = (documentId: string, newState: State) => {\n client\n .patch(`workflow-metadata.${documentId}`)\n .set({state: newState.id})\n .commit()\n .then(() => {\n onComplete()\n toast.push({\n status: 'success',\n title: `Document state now \"${newState.title}\"`,\n })\n return undefined\n })\n .catch((err) => {\n onComplete()\n console.error(err)\n toast.push({\n status: 'error',\n title: `Document state update failed`,\n })\n })\n }\n\n // Remove button if:\n // Document is not in Workflow OR\n // The current State is the same as this actions State\n if (!metadata || (currentState && currentState.id === actionState.id)) {\n return null\n }\n\n const currentStateIndex = states.findIndex((s) => s.id === currentState?.id)\n const actionStateIndex = states.findIndex((s) => s.id === actionState.id)\n const direction = actionStateIndex > currentStateIndex ? 'promote' : 'demote'\n const DirectionIcon = direction === 'promote' ? ArrowRightIcon : ArrowLeftIcon\n const directionLabel = direction === 'promote' ? 'Promote' : 'Demote'\n\n const userRoleCanUpdateState =\n user?.roles?.length && actionState?.roles?.length\n ? // If the Action state is limited to specific roles\n // check that the current user has one of those roles\n arraysContainMatchingString(\n user.roles.map((r) => r.name),\n actionState.roles,\n )\n : // No roles specified on the next state, so anyone can update\n actionState?.roles?.length !== 0\n\n const actionStateIsAValidTransition =\n currentState?.id && currentState?.transitions?.length\n ? // If the Current State limits transitions to specific States\n // Check that the Action State is in Current State's transitions array\n currentState.transitions.includes(actionState.id)\n : // Otherwise this isn't a problem\n true\n\n const userAssignmentCanUpdateState = actionState.requireAssignment\n ? // If the Action State requires assigned users\n // Check the current user ID is in the assignees array\n currentUser && assignees?.length && assignees.includes(currentUser.id)\n : // Otherwise this isn't a problem\n true\n\n let title = `${directionLabel} State to \"${actionState.title}\"`\n\n if (!userRoleCanUpdateState) {\n title = `Your User role cannot ${directionLabel} State to \"${actionState.title}\"`\n } else if (!actionStateIsAValidTransition) {\n title = `You cannot ${directionLabel} State to \"${actionState.title}\" from \"${currentState?.title}\"`\n } else if (!userAssignmentCanUpdateState) {\n title = `You must be assigned to the document to ${directionLabel} State to \"${actionState.title}\"`\n } else if (currentState?.requireValidation && isValidating) {\n title = `Document is validating, cannot ${directionLabel} State to \"${actionState.title}\"`\n } else if (hasValidationErrors) {\n title = `Document has validation errors, cannot ${directionLabel} State to \"${actionState.title}\"`\n }\n\n return {\n icon: DirectionIcon,\n disabled:\n loading ||\n Boolean(error) ||\n (currentState?.requireValidation && isValidating) ||\n Boolean(hasValidationErrors) ||\n !currentState ||\n !userRoleCanUpdateState ||\n !actionStateIsAValidTransition ||\n !userAssignmentCanUpdateState,\n title,\n label: actionState.title,\n onHandle: () => onHandle(id, actionState),\n }\n}\n\n// @TODO memoize this call, so the defined useUpdateWorkflow can persist if actionState is the same\nexport function defineUpdateWorkflow(\n actionState: State,\n): (props: DocumentActionProps) => DocumentActionDescription | null {\n return (props: DocumentActionProps) => useUpdateWorkflow(props, actionState)\n}\n","import {useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useClient} from 'sanity'\nimport {UserSelectMenu} from 'sanity-plugin-utils'\n\nimport type {User} from '../types'\n\nimport {API_VERSION} from '../constants'\n\ntype UserAssignmentProps = {\n userList: User[]\n assignees: string[]\n documentId: string\n}\n\nexport default function UserAssignment(props: UserAssignmentProps) {\n const {assignees, userList, documentId} = props\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n\n const addAssignee = useCallback(\n (userId: string) => {\n const user = userList.find((u) => u.id === userId)\n\n if (!userId || !user) {\n return toast.push({\n status: 'error',\n title: 'Could not find User',\n })\n }\n\n return client\n .patch(`workflow-metadata.${documentId}`)\n .setIfMissing({assignees: []})\n .insert(`after`, `assignees[-1]`, [userId])\n .commit()\n .then(() => {\n return toast.push({\n title: `Added ${user.displayName} to assignees`,\n status: 'success',\n })\n })\n .catch((err) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to add assignee`,\n description: userId,\n status: 'error',\n })\n })\n },\n [documentId, client, toast, userList],\n )\n\n const removeAssignee = useCallback(\n (userId: string) => {\n const user = userList.find((u) => u.id === userId)\n\n if (!userId || !user) {\n return toast.push({\n status: 'error',\n title: 'Could not find User',\n })\n }\n\n return client\n .patch(`workflow-metadata.${documentId}`)\n .unset([`assignees[@ == \"${userId}\"]`])\n .commit()\n .then(() => {\n return toast.push({\n title: `Removed ${user.displayName} from assignees`,\n status: 'success',\n })\n })\n .catch((err) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to remove assignee`,\n description: documentId,\n status: 'error',\n })\n })\n },\n [client, toast, documentId, userList],\n )\n\n const clearAssignees = useCallback(() => {\n return client\n .patch(`workflow-metadata.${documentId}`)\n .unset([`assignees`])\n .commit()\n .then(() => {\n return toast.push({\n title: `Cleared assignees`,\n status: 'success',\n })\n })\n .catch((err) => {\n console.error(err)\n\n return toast.push({\n title: `Failed to clear assignees`,\n description: documentId,\n status: 'error',\n })\n })\n }, [client, toast, documentId])\n\n return (\n <UserSelectMenu\n style={{maxHeight: 300}}\n value={assignees || []}\n userList={userList}\n onAdd={addAssignee}\n onClear={clearAssignees}\n onRemove={removeAssignee}\n />\n )\n}\n","import type {DocumentActionDescription, DocumentActionProps} from 'sanity'\n\nimport {UsersIcon} from '@sanity/icons'\nimport {useState} from 'react'\nimport {useProjectUsers} from 'sanity-plugin-utils'\n\nimport UserAssignment from '../components/UserAssignment'\nimport {useWorkflowContext} from '../components/WorkflowContext'\nimport {API_VERSION} from '../constants'\n\nexport function useAssignWorkflow({id}: DocumentActionProps): DocumentActionDescription | null {\n const {metadata, loading, error} = useWorkflowContext(id)\n const [isDialogOpen, setDialogOpen] = useState(false)\n const userList = useProjectUsers({apiVersion: API_VERSION})\n\n if (error) {\n console.error(error)\n }\n\n if (!metadata) {\n return null\n }\n\n return {\n icon: UsersIcon,\n disabled: !metadata || loading || Boolean(error),\n label: `Assign`,\n title: metadata ? null : `Document is not in Workflow`,\n dialog: isDialogOpen && {\n type: 'popover',\n onClose: () => {\n setDialogOpen(false)\n },\n content: (\n <UserAssignment\n userList={userList}\n assignees={metadata?.assignees?.length > 0 ? metadata.assignees : []}\n documentId={id}\n />\n ),\n },\n onHandle: () => {\n setDialogOpen(true)\n },\n }\n}\n","import {SplitVerticalIcon} from '@sanity/icons'\nimport {useToast} from '@sanity/ui'\nimport {LexoRank} from 'lexorank'\nimport {useCallback, useState} from 'react'\nimport {type DocumentActionDescription, type DocumentActionProps, useClient} from 'sanity'\n\nimport {useWorkflowContext} from '../components/WorkflowContext'\nimport {API_VERSION} from '../constants'\n\nexport function useBeginWorkflow({\n id,\n draft,\n}: DocumentActionProps): DocumentActionDescription | null {\n const {metadata, loading, error, states} = useWorkflowContext(id)\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n const [beginning, setBeginning] = useState(false)\n const [complete, setComplete] = useState(false)\n\n if (error) {\n console.error(error)\n }\n\n const handle = useCallback(async () => {\n setBeginning(true)\n const lowestOrderFirstState = await client.fetch(\n /* groq */ `*[_type == \"workflow.metadata\" && state == $state]|order(orderRank)[0].orderRank`,\n {state: states?.[0]?.id},\n )\n await client.createIfNotExists({\n _id: `workflow-metadata.${id}`,\n _type: `workflow.metadata`,\n documentId: id,\n state: states?.[0]?.id,\n orderRank: lowestOrderFirstState\n ? LexoRank.parse(lowestOrderFirstState).genNext().toString()\n : LexoRank.min().toString(),\n })\n toast.push({\n status: 'success',\n title: 'Workflow started',\n description: `Document is now \"${states?.[0]?.title}\"`,\n })\n setBeginning(false)\n // Optimistically remove action\n setComplete(true)\n }, [id, states, client, toast])\n\n if (!draft || complete || metadata) {\n return null\n }\n\n return {\n icon: SplitVerticalIcon,\n disabled: metadata || loading || Boolean(error) || beginning || complete,\n label: beginning ? `Beginning...` : `Begin Workflow`,\n onHandle: handle,\n }\n}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {type ToastContextValue, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {\n type DocumentActionDescription,\n type DocumentActionProps,\n type SanityClient,\n useClient,\n} from 'sanity'\n\nimport {useWorkflowContext} from '../components/WorkflowContext'\nimport {API_VERSION} from '../constants'\n\nexport const handleDeleteMetadata = async (\n client: SanityClient,\n toast: ToastContextValue,\n id: string,\n) => {\n try {\n await client.delete(`workflow-metadata.${id}`)\n toast.push({\n status: 'success',\n title: 'Workflow completed',\n })\n } catch (error) {\n console.error(error)\n toast.push({\n status: 'error',\n title: 'Could not complete Workflow',\n })\n }\n}\n\nexport function useCompleteWorkflow({\n id,\n onComplete,\n}: DocumentActionProps): DocumentActionDescription | null {\n const {metadata, loading, error, states} = useWorkflowContext(id)\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n\n if (error) {\n console.error(error)\n }\n\n const handle = useCallback(async () => {\n await handleDeleteMetadata(client, toast, id)\n }, [client, toast, id])\n\n if (!metadata) {\n return null\n }\n\n const state = states.find((s) => s.id === metadata.state)\n const isLastState = state?.id === states?.[states?.length - 1]?.id\n\n return {\n icon: CheckmarkIcon,\n disabled: loading || Boolean(error) || !isLastState,\n label: `Complete Workflow`,\n title: isLastState\n ? `Removes the document from the Workflow process`\n : `Cannot remove from workflow until in the last state`,\n onHandle: async () => {\n await handle()\n onComplete()\n },\n tone: 'positive',\n }\n}\n","import {type DocumentBadgeDescription, type DocumentBadgeProps, useCurrentUser} from 'sanity'\nimport {useProjectUsers} from 'sanity-plugin-utils'\n\nimport {useWorkflowContext} from '../components/WorkflowContext'\nimport {API_VERSION} from '../constants'\n\nexport function useAssigneesBadge({\n id: documentId,\n}: DocumentBadgeProps): DocumentBadgeDescription | null {\n const currentUser = useCurrentUser()\n const {metadata, loading, error} = useWorkflowContext(documentId)\n const userList = useProjectUsers({apiVersion: API_VERSION})\n\n if (loading || error || !metadata) {\n if (error) {\n console.error(error)\n }\n\n return null\n }\n\n if (!metadata?.assignees?.length) {\n return {\n label: 'Unassigned',\n }\n }\n\n const {assignees} = metadata ?? []\n const hasMe = currentUser ? assignees.some((assignee) => assignee === currentUser.id) : false\n const assigneesCount = hasMe ? assignees.length - 1 : assignees.length\n const assigneeUsers = userList.filter((user) => assignees.includes(user.id))\n const title = assigneeUsers.map((user) => user.displayName).join(', ')\n\n let label\n\n if (hasMe && assigneesCount === 0) {\n label = 'Assigned to Me'\n } else if (hasMe && assigneesCount > 0) {\n label = `Me and ${assigneesCount} ${assigneesCount === 1 ? 'other' : 'others'}`\n } else {\n label = `${assigneesCount} assigned`\n }\n\n return {\n label,\n title,\n color: 'primary',\n }\n}\n","import type {DocumentBadgeDescription, DocumentBadgeProps} from 'sanity'\n\nimport {useWorkflowContext} from '../components/WorkflowContext'\n\nexport function useStateBadge({\n id: documentId,\n}: DocumentBadgeProps): DocumentBadgeDescription | null {\n const {metadata, loading, error, states} = useWorkflowContext(documentId)\n const state = states.find((s) => s.id === metadata?.state)\n\n if (loading || error) {\n if (error) {\n console.error(error)\n }\n\n return null\n }\n\n if (!state) {\n return null\n }\n\n return {\n label: state.title,\n // title: state.title,\n color: state?.color,\n }\n}\n","import {useEffect} from 'react'\nimport {type ObjectInputProps, getPublishedId} from 'sanity'\n\nimport {useWorkflowContext} from './WorkflowContext'\n\n// This component is loaded at the root level of the Document Form\n// It is used to signal the document ID to the WorkflowProvider\nexport default function WorkflowSignal(props: ObjectInputProps) {\n const documentId = props?.value?.['_id'] ? getPublishedId(props.value['_id']) : null\n\n const {addId, removeId} = useWorkflowContext()\n\n useEffect(() => {\n // On mount, add to the query of listening documents\n if (documentId) {\n addId(documentId)\n }\n\n // On unmount, remove from the query of listening documents\n return () => {\n if (documentId) {\n removeId(documentId)\n }\n }\n }, [documentId, addId, removeId])\n\n return props.renderDefault(props)\n}\n","import {EditIcon} from '@sanity/icons'\nimport {Button} from '@sanity/ui'\nimport {useRouter} from 'sanity/router'\n\ntype EditButtonProps = {\n id: string\n type: string\n disabled?: boolean\n}\n\nexport default function EditButton(props: EditButtonProps) {\n const {id, type, disabled = false} = props\n const {navigateIntent} = useRouter()\n\n return (\n <Button\n onClick={() => navigateIntent('edit', {id, type})}\n mode=\"ghost\"\n fontSize={1}\n padding={2}\n tabIndex={-1}\n icon={EditIcon}\n text=\"Edit\"\n disabled={disabled}\n />\n )\n}\n","import {Flex, Card, Spinner} from '@sanity/ui'\nimport {Preview, type SanityDocument, type StringInputProps, useSchema} from 'sanity'\nimport {useListeningQuery, Feedback} from 'sanity-plugin-utils'\n\nimport EditButton from './EditButton'\n\n// TODO: Update this to use the same component as the Tool\nexport default function Field(props: StringInputProps) {\n const schema = useSchema()\n const {\n data: _data,\n loading,\n error,\n } = useListeningQuery<SanityDocument>(`*[_id in [$id, $draftId]]|order(_updatedAt)[0]`, {\n params: {\n id: String(props.value),\n draftId: `drafts.${String(props.value)}`,\n },\n })\n // oxlint-disable-next-line no-unsafe-type-assertion\n const data = _data as SanityDocument\n\n if (loading) {\n return <Spinner />\n }\n\n const schemaType = schema.get(data?._type ?? ``)\n\n if (error || !data?._type || !schemaType) {\n return <Feedback tone=\"critical\" title=\"Error with query\" />\n }\n\n return (\n <Card border padding={2}>\n <Flex align=\"center\" justify=\"space-between\" gap={2}>\n <Preview layout=\"default\" value={data} schemaType={schemaType} />\n <EditButton id={data._id} type={data._type} />\n </Flex>\n </Card>\n )\n}\n","import {Card} from '@sanity/ui'\nimport {type FunctionComponent} from 'react'\nimport {type ArrayOfPrimitivesInputProps, useFormValue} from 'sanity'\nimport {useProjectUsers} from 'sanity-plugin-utils'\n\nimport {API_VERSION} from '../constants'\nimport UserAssignment from './UserAssignment'\n\nconst UserAssignmentInput: FunctionComponent<ArrayOfPrimitivesInputProps> = (props) => {\n const documentId = useFormValue([`documentId`])\n const userList = useProjectUsers({apiVersion: API_VERSION})\n\n const stringValue =\n Array.isArray(props?.value) && props?.value?.length\n ? props.value.map((item) => String(item))\n : []\n\n return (\n <Card border padding={1}>\n <UserAssignment userList={userList} assignees={stringValue} documentId={String(documentId)} />\n </Card>\n )\n}\n\nexport default UserAssignmentInput\n","import {LexoRank} from 'lexorank'\n\n// Use in initial value field by passing in the rank value of the last document\n// If no value passed, generate a sensibly low rank\nexport default function initialRank(lastRankValue = ``): string {\n const lastRank =\n lastRankValue && typeof lastRankValue === 'string'\n ? LexoRank.parse(lastRankValue)\n : LexoRank.min()\n const nextRank = lastRank.genNext().genNext()\n\n // oxlint-disable-next-line no-unsafe-type-assertion\n return (nextRank as any).value\n}\n","import {defineField, defineType} from 'sanity'\n\nimport type {State} from '../../types'\n\nimport Field from '../../components/DocumentCard/Field'\nimport UserAssignmentInput from '../../components/UserAssignmentInput'\nimport {API_VERSION} from '../../constants'\nimport initialRank from '../../helpers/initialRank'\n\nexport default (states: State[]) =>\n defineType({\n type: 'document',\n name: 'workflow.metadata',\n title: 'Workflow metadata',\n liveEdit: true,\n fields: [\n defineField({\n name: 'state',\n description: `The current \"State\" of the document. Field is read only as changing it would not fire the state's \"operation\" setting. These are fired in the Document Actions and in the custom Tool.`,\n readOnly: true,\n type: 'string',\n options: {\n list: states.length\n ? states.map((state) => ({\n value: state.id,\n title: state.title,\n }))\n : [],\n layout: 'radio',\n },\n }),\n defineField({\n name: 'documentId',\n title: 'Document ID',\n description:\n 'Used to help identify the target document that this metadata is tracking state for.',\n type: 'string',\n readOnly: true,\n components: {\n input: Field,\n },\n }),\n defineField({\n name: 'orderRank',\n description: 'Used to maintain order position of cards in the Tool.',\n type: 'string',\n readOnly: true,\n initialValue: async (_, {getClient}) => {\n const lastDocOrderRank = await getClient({\n apiVersion: API_VERSION,\n }).fetch(/* groq */ `*[_type == $type]|order(@[$order] desc)[0][$order]`, {\n order: `orderRank`,\n type: `workflow.metadata`,\n })\n\n return initialRank(lastDocOrderRank)\n },\n }),\n defineField({\n type: 'array',\n name: 'assignees',\n of: [{type: 'string'}],\n components: {\n input: UserAssignmentInput,\n },\n }),\n ],\n })\n","import type {SanityDocumentWithMetadata} from '../types'\n\nexport function filterItemsAndSort(\n items: SanityDocumentWithMetadata[],\n stateId: string,\n selectedUsers: string[] = [],\n selectedSchemaTypes: null | string[] = [],\n): SanityDocumentWithMetadata[] {\n return (\n items\n // Only items that have existing documents\n .filter((item) => item?._id)\n // Only items of this state\n .filter((item) => item?._metadata?.state === stateId)\n // Only items with selected users, if the document has any assigned users\n .filter((item) =>\n selectedUsers.length && item._metadata?.assignees?.length\n ? item._metadata?.assignees.some((assignee) => selectedUsers.includes(assignee))\n : !selectedUsers.length,\n )\n // Only items of selected schema types, if any are selected\n .filter((item) => {\n if (!selectedSchemaTypes) {\n return true\n }\n\n return selectedSchemaTypes.length ? selectedSchemaTypes.includes(item._type) : false\n })\n // Sort by metadata orderRank, a string field\n .sort((a, b) => {\n const aOrderRank = a._metadata?.orderRank || '0'\n const bOrderRank = b._metadata?.orderRank || '0'\n\n return aOrderRank.localeCompare(bOrderRank)\n })\n )\n}\n","import type {DraggableLocation} from '@hello-pangea/dnd'\n\nimport {useToast} from '@sanity/ui'\nimport {useCallback, useEffect, useState} from 'react'\nimport {useClient} from 'sanity'\nimport {useListeningQuery} from 'sanity-plugin-utils'\n\nimport type {SanityDocumentWithMetadata, State} from '../types'\n\nimport {API_VERSION} from '../constants'\n\nconst QUERY = /* groq */ `*[_type == \"workflow.metadata\"]|order(orderRank){\n \"_metadata\": {\n _rev,\n assignees,\n documentId,\n state,\n orderRank,\n \"draftDocumentId\": \"drafts.\" + documentId,\n }\n}{\n ...,\n ...(\n *[_id == ^._metadata.documentId || _id == ^._metadata.draftDocumentId]|order(_updatedAt)[0]{\n _id,\n _type,\n _rev,\n _updatedAt\n }\n )\n}`\n\ntype WorkflowDocuments = {\n workflowData: {\n data: SanityDocumentWithMetadata[]\n loading: boolean\n error: unknown\n }\n operations: {\n move: (\n draggedId: string,\n destination: DraggableLocation,\n states: State[],\n newOrder: string,\n ) => Promise<{_id: string; _type: string; documentId: string; state: State} | null>\n }\n}\n\nexport function useWorkflowDocuments(schemaTypes: string[]): WorkflowDocuments {\n const toast = useToast()\n const client = useClient({apiVersion: API_VERSION})\n\n // Get and listen to changes on documents + workflow metadata documents\n const {\n data: _data,\n loading,\n error,\n } = useListeningQuery<SanityDocumentWithMetadata[]>(QUERY, {\n params: {schemaTypes},\n initialValue: [],\n })\n // oxlint-disable-next-line no-unsafe-type-assertion\n const data = _data as SanityDocumentWithMetadata[]\n\n const [localDocuments, setLocalDocuments] = useState<SanityDocumentWithMetadata[]>([])\n\n useEffect(() => {\n if (data) {\n setLocalDocuments(data)\n }\n }, [data])\n\n const move = useCallback(\n async (\n draggedId: string,\n destination: DraggableLocation,\n states: State[],\n newOrder: string,\n ) => {\n // Optimistic update\n const currentLocalData = localDocuments\n const newLocalDocuments = localDocuments.map((item) => {\n if (item?._metadata?.documentId === draggedId) {\n return {\n ...item,\n _metadata: {\n ...item._metadata,\n state: destination.droppableId,\n orderRank: newOrder,\n // This value won't be written to the document\n // It's done so that un/publish operations don't happen twice\n // Because a moved document's card will update once optimistically\n // and then again when the document is updated\n optimistic: true,\n },\n }\n }\n\n return item\n })\n\n setLocalDocuments(newLocalDocuments)\n\n // Now client-side update\n const newStateId = destination.droppableId\n const newState = states.find((s) => s.id === newStateId)\n const document = localDocuments.find((d) => d?._metadata?.documentId === draggedId)\n\n if (!newState?.id) {\n toast.push({\n title: `Could not find target state ${newStateId}`,\n status: 'error',\n })\n return null\n }\n\n if (!document) {\n toast.push({\n title: `Could not find dragged document in data`,\n status: 'error',\n })\n return null\n }\n\n // We need to know if it's a draft or not\n const {_id, _type} = document\n\n // Metadata + useDocumentOperation always uses Published id\n const {documentId, _rev} = document._metadata || {}\n\n await client\n .patch(`workflow-metadata.${documentId}`)\n .ifRevisionId(_rev)\n .set({state: newStateId, orderRank: newOrder})\n .commit()\n .then((res) => {\n toast.push({\n title:\n newState.id === document._metadata.state\n ? `Reordered in \"${newState?.title ?? newStateId}\"`\n : `Moved to \"${newState?.title ?? newStateId}\"`,\n status: 'success',\n })\n return res\n })\n .catch((err) => {\n // Revert optimistic update\n setLocalDocuments(currentLocalData)\n\n toast.push({\n title: `Failed to move to \"${newState?.title ?? newStateId}\"`,\n description: err.message,\n status: 'error',\n })\n return null\n })\n\n // Send back to the workflow board so a document update can happen\n return {_id, _type, documentId, state: newState}\n },\n [client, toast, localDocuments],\n )\n\n return {\n workflowData: {data: localDocuments, loading, error},\n operations: {move},\n }\n}\n","import {Box, Flex, Text} from '@sanity/ui'\nimport {useMemo} from 'react'\nimport {useCurrentUser, UserAvatar} from 'sanity'\n\nimport type {User} from '../../types'\n\ntype AvatarGroupProps = {\n users: User[]\n max?: number\n}\n\nexport default function AvatarGroup(props: AvatarGroupProps) {\n const currentUser = useCurrentUser()\n const {users, max = 4} = props\n\n const len = users?.length\n const {me, visibleUsers} = useMemo(() => {\n return {\n me: currentUser?.id ? users.find((u) => u.id === currentUser.id) : undefined,\n visibleUsers: users.filter((u) => u.id !== currentUser?.id).slice(0, max - 1),\n }\n }, [users, max, currentUser])\n\n if (!users?.length) {\n return null\n }\n\n return (\n <Flex align=\"center\" gap={1}>\n {me ? <UserAvatar user={me} /> : null}\n {visibleUsers.map((user) => (\n <Box key={user.id} style={{marginRight: -8}}>\n <UserAvatar user={user} />\n </Box>\n ))}\n {len > max && (\n <Box paddingLeft={2}>\n <Text size={1}>+{len - max}</Text>\n </Box>\n )}\n </Flex>\n )\n}\n","import {AddIcon} from '@sanity/icons'\nimport {Button, Grid, Popover, useClickOutside} from '@sanity/ui'\nimport {useCallback, useState} from 'react'\n\nimport type {User} from '../types'\n\nimport AvatarGroup from './DocumentCard/AvatarGroup'\nimport UserAssignment from './UserAssignment'\n\ntype UserDisplayProps = {\n userList: User[]\n assignees: string[]\n documentId: string\n disabled?: boolean\n}\n\nexport default function UserDisplay(props: UserDisplayProps) {\n const {assignees, userList, documentId, disabled = false} = props\n\n const [button] = useState(null)\n const [popover, setPopover] = useState<HTMLDivElement | null>(null)\n const [isOpen, setIsOpen] = useState(false)\n\n const close = useCallback(() => setIsOpen(false), [])\n const open = useCallback(() => setIsOpen(true), [])\n\n useClickOutside(close, [button, popover])\n\n return (\n <Popover\n ref={setPopover}\n content={<UserAssignment userList={userList} assignees={assignees} documentId={documentId} />}\n portal\n open={isOpen}\n >\n {!assignees || assignees.length === 0 ? (\n <Button\n onClick={open}\n fontSize={1}\n padding={2}\n tabIndex={-1}\n icon={AddIcon}\n text=\"Assign\"\n tone=\"positive\"\n mode=\"ghost\"\n disabled={disabled}\n />\n ) : (\n <Grid>\n <Button onClick={open} padding={0} mode=\"bleed\" disabled={disabled}>\n <AvatarGroup users={userList.filter((u) => assignees.includes(u.id))} />\n </Button>\n </Grid>\n )}\n </Popover>\n )\n}\n","import {CheckmarkIcon} from '@sanity/icons'\nimport {Box, Button, Text, Tooltip, useToast} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useClient} from 'sanity'\n\nimport {handleDeleteMetadata} from '../../actions/useCompleteWorkflow'\nimport {API_VERSION} from '../../constants'\n\ntype CompleteButtonProps = {\n documentId: string\n disabled: boolean\n}\n\nexport default function CompleteButton(props: CompleteButtonProps) {\n const {documentId, disabled = false} = props\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n\n const handleComplete: React.MouseEventHandler<HTMLButtonElement> = useCallback(\n async (event) => {\n const id = event.currentTarget.value\n\n if (!id) {\n return\n }\n\n await handleDeleteMetadata(client, toast, id)\n },\n [client, toast],\n )\n\n return (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>Remove this document from Workflow</Text>\n </Box>\n }\n >\n <Button\n value={documentId}\n onClick={handleComplete}\n text=\"Complete\"\n icon={CheckmarkIcon}\n tone=\"positive\"\n mode=\"ghost\"\n fontSize={1}\n padding={2}\n tabIndex={-1}\n disabled={disabled}\n />\n </Tooltip>\n )\n}\n","import {useTimeAgo} from 'sanity'\n\nexport interface TimeAgoProps {\n time: string | Date\n}\n\nexport function TimeAgo({time}: TimeAgoProps) {\n const timeAgo = useTimeAgo(time)\n\n return <span title={timeAgo}>{timeAgo} ago</span>\n}\n","import {EditIcon} from '@sanity/icons'\nimport {Box, Text, Tooltip} from '@sanity/ui'\nimport {TextWithTone, type PreviewValue, type SanityDocument} from 'sanity'\n\nimport {TimeAgo} from './TimeAgo'\n\nexport function DraftStatus(props: {document?: PreviewValue | Partial<SanityDocument> | null}) {\n const {document} = props\n const updatedAt = document && '_updatedAt' in document && document._updatedAt\n\n return (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>\n {document ? (\n <>Edited {updatedAt && <TimeAgo time={updatedAt} />}</>\n ) : (\n <>No unpublished edits</>\n )}\n </Text>\n </Box>\n }\n >\n <TextWithTone tone=\"caution\" dimmed={!document} muted={!document} size={1}>\n <EditIcon />\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {PublishIcon} from '@sanity/icons'\nimport {Box, Text, Tooltip} from '@sanity/ui'\nimport {TextWithTone, type PreviewValue, type SanityDocument} from 'sanity'\n\nimport {TimeAgo} from './TimeAgo'\n\nexport function PublishedStatus(props: {document?: PreviewValue | Partial<SanityDocument> | null}) {\n const {document} = props\n const updatedAt = document && '_updatedAt' in document && document._updatedAt\n\n return (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>\n {document ? (\n <>Published {updatedAt && <TimeAgo time={updatedAt} />}</>\n ) : (\n <>Not published</>\n )}\n </Text>\n </Box>\n }\n >\n <TextWithTone tone=\"positive\" dimmed={!document} muted={!document} size={1}>\n <PublishIcon />\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {useEffect} from 'react'\nimport {type ValidationMarker, useValidationStatus} from 'sanity'\n\ntype ValidateProps = {\n documentId: string\n type: string\n onChange: (validation: {isValidating: boolean; validation: ValidationMarker[]}) => void\n}\n\n// Document validation is siloed into its own component\n// Because it's not performant to run on a lot of documents\nexport default function Validate(props: ValidateProps) {\n const {documentId, type, onChange} = props\n const {isValidating, validation = []} = useValidationStatus(documentId, type)\n\n useEffect(() => {\n onChange({isValidating, validation})\n }, [onChange, isValidating, validation])\n\n return null\n}\n","import {ErrorOutlineIcon, WarningOutlineIcon} from '@sanity/icons'\nimport {Box, Text, Tooltip} from '@sanity/ui'\nimport {TextWithTone, type ValidationMarker} from 'sanity'\n\ntype ValidationStatusProps = {\n validation: ValidationMarker[]\n}\n\nexport function ValidationStatus(props: ValidationStatusProps) {\n const {validation = []} = props\n\n if (!validation.length) {\n return null\n }\n\n const hasError = validation.some((item) => item.level === 'error')\n\n return (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>\n {validation.length === 1\n ? `1 validation issue`\n : `${validation.length} validation issues`}\n </Text>\n </Box>\n }\n >\n <TextWithTone tone={hasError ? `critical` : `caution`} size={1}>\n {hasError ? <ErrorOutlineIcon /> : <WarningOutlineIcon />}\n </TextWithTone>\n </Tooltip>\n )\n}\n","import {DragHandleIcon} from '@sanity/icons'\nimport {Box, Card, type CardTone, Flex, Stack, useTheme} from '@sanity/ui'\nimport {useCallback, useEffect, useMemo, useState} from 'react'\nimport {type SchemaType, type ValidationMarker, useSchema, Preview} from 'sanity'\n\nimport type {SanityDocumentWithMetadata, State, User} from '../../types'\n\nimport UserDisplay from '../UserDisplay'\nimport CompleteButton from './CompleteButton'\nimport {DraftStatus} from './core/DraftStatus'\nimport {PublishedStatus} from './core/PublishedStatus'\nimport EditButton from './EditButton'\nimport Validate from './Validate'\nimport {ValidationStatus} from './ValidationStatus'\n\ntype DocumentCardProps = {\n isDragDisabled: boolean\n isPatching: boolean\n userRoleCanDrop: boolean\n isDragging: boolean\n item: SanityDocumentWithMetadata\n states: State[]\n toggleInvalidDocumentId: (documentId: string, action: 'ADD' | 'REMOVE') => void\n userList: User[]\n}\n\nexport function DocumentCard(props: DocumentCardProps) {\n const {\n isDragDisabled,\n isPatching,\n userRoleCanDrop,\n isDragging,\n item,\n states,\n toggleInvalidDocumentId,\n userList,\n } = props\n const {assignees = [], documentId} = item._metadata ?? {}\n const schema = useSchema()\n const state = states.find((s) => s.id === item._metadata?.state)\n\n const isDarkMode = useTheme().sanity.color.dark\n const defaultCardTone = isDarkMode ? `transparent` : `default`\n\n // Validation only runs if the state requests it\n // Because it's not performant to run it on many documents simultaneously\n // So we fake it here, and maybe set it inside <Validate />\n const [optimisticValidation, setOptimisticValidation] = useState<{\n isValidating: boolean\n validation: ValidationMarker[]\n }>({\n isValidating: state?.requireValidation ?? false,\n validation: [],\n })\n\n const {isValidating, validation} = optimisticValidation\n\n const handleValidation = useCallback(\n (updates: {isValidating: boolean; validation: ValidationMarker[]}) => {\n setOptimisticValidation(updates)\n },\n [],\n )\n\n const cardTone = useMemo(() => {\n let tone: CardTone = defaultCardTone\n\n if (!userRoleCanDrop) return isDarkMode ? `default` : `transparent`\n if (!documentId) return tone\n if (isPatching) tone = isDarkMode ? `default` : `transparent`\n if (isDragging) tone = `positive`\n\n if (state?.requireValidation && !isValidating && validation.length > 0) {\n if (validation.some((v) => v.level === 'error')) {\n tone = `critical`\n } else {\n tone = `caution`\n }\n }\n\n return tone\n }, [\n defaultCardTone,\n userRoleCanDrop,\n isPatching,\n isDarkMode,\n documentId,\n isDragging,\n isValidating,\n validation,\n state?.requireValidation,\n ])\n\n // Update validation status\n // Cannot be done in the above memo because it would set state during render\n useEffect(() => {\n if (!isValidating && validation.length > 0) {\n if (validation.some((v) => v.level === 'error')) {\n toggleInvalidDocumentId(documentId, 'ADD')\n } else {\n toggleInvalidDocumentId(documentId, 'REMOVE')\n }\n } else {\n toggleInvalidDocumentId(documentId, 'REMOVE')\n }\n }, [documentId, isValidating, toggleInvalidDocumentId, validation])\n\n const hasError = useMemo(\n () => (isValidating ? false : validation.some((v) => v.level === 'error')),\n [isValidating, validation],\n )\n\n const isLastState = useMemo(\n () => states?.[states?.length - 1]?.id === item._metadata?.state,\n [states, item._metadata.state],\n )\n\n return (\n <>\n {state?.requireValidation ? (\n <Validate documentId={documentId} type={item._type} onChange={handleValidation} />\n ) : null}\n <Box paddingBottom={3} paddingX={3}>\n <Card radius={2} shadow={isDragging ? 3 : 1} tone={cardTone}>\n <Stack>\n <Card\n borderBottom\n radius={2}\n paddingRight={2}\n tone={cardTone}\n style={{pointerEvents: 'none'}}\n >\n <Flex align=\"center\" justify=\"space-between\" gap={1}>\n <Box flex={1}>\n <Preview\n layout=\"default\"\n skipVisibilityCheck\n value={item}\n // oxlint-disable-next-line no-unsafe-type-assertion\n schemaType={schema.get(item._type) as SchemaType}\n />\n </Box>\n <Box style={{flexShrink: 0}}>\n {hasError || isDragDisabled || isPatching ? null : <DragHandleIcon />}\n </Box>\n </Flex>\n </Card>\n\n <Card padding={2} radius={2} tone=\"inherit\">\n <Flex align=\"center\" justify=\"space-between\" gap={3}>\n <Box flex={1}>\n {documentId && (\n <UserDisplay\n userList={userList}\n assignees={assignees}\n documentId={documentId}\n disabled={!userRoleCanDrop}\n />\n )}\n </Box>\n {validation.length > 0 ? <ValidationStatus validation={validation} /> : null}\n <DraftStatus document={item} />\n <PublishedStatus document={item} />\n <EditButton id={item._id} type={item._type} disabled={!userRoleCanDrop} />\n {isLastState && states.length <= 3 ? (\n <CompleteButton documentId={documentId} disabled={!userRoleCanDrop} />\n ) : null}\n </Flex>\n {isLastState && states.length > 3 ? (\n <Stack paddingTop={2}>\n <CompleteButton documentId={documentId} disabled={!userRoleCanDrop} />\n </Stack>\n ) : null}\n </Card>\n </Stack>\n </Card>\n </Box>\n </>\n )\n}\n","import type {CurrentUser} from 'sanity'\nimport type {UserExtended} from 'sanity-plugin-utils'\n\nimport {Draggable, type DraggableStyle} from '@hello-pangea/dnd'\nimport {useVirtualizer, type VirtualItem} from '@tanstack/react-virtual'\nimport {type CSSProperties, useCallback, useMemo, useRef} from 'react'\n\nimport type {SanityDocumentWithMetadata, State} from '../types'\n\nimport {filterItemsAndSort} from '../helpers/filterItemsAndSort'\nimport {DocumentCard} from './DocumentCard'\n\ntype DocumentListProps = {\n data: SanityDocumentWithMetadata[]\n invalidDocumentIds: string[]\n patchingIds: string[]\n selectedSchemaTypes: string[]\n selectedUserIds: string[]\n state: State\n states: State[]\n toggleInvalidDocumentId: (documentId: string, action: 'ADD' | 'REMOVE') => void\n user: CurrentUser | null\n userList: UserExtended[]\n userRoleCanDrop: boolean\n}\n\nfunction getStyle(\n draggableStyle: DraggableStyle | undefined,\n virtualItem: VirtualItem,\n): CSSProperties {\n // Default transform required by tanstack virtual for positioning\n let transform = `translateY(${virtualItem.start}px)`\n\n // If a card is being dragged over, this card needs to move up or down\n if (draggableStyle && draggableStyle.transform) {\n // So get the transform value from beautiful-dnd\n const draggableTransformY = parseInt(\n draggableStyle.transform.split(',')[1]!.split('px')[0]!,\n 10,\n )\n\n // And apply it to the card\n transform = `translateY(${virtualItem.start + draggableTransformY}px)`\n }\n\n return {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: `${virtualItem.size}px`,\n transform,\n }\n}\n\nexport default function DocumentList(props: DocumentListProps) {\n const {\n data = [],\n invalidDocumentIds,\n patchingIds,\n selectedSchemaTypes,\n selectedUserIds,\n state,\n states,\n toggleInvalidDocumentId,\n user,\n userList,\n userRoleCanDrop,\n } = props\n\n const dataFiltered = useMemo(() => {\n return data.length\n ? filterItemsAndSort(data, state.id, selectedUserIds, selectedSchemaTypes)\n : []\n }, [data, selectedSchemaTypes, selectedUserIds, state.id])\n\n const parentRef = useRef(null)\n\n // eslint-disable-next-line react-hooks/incompatible-library\n const virtualizer = useVirtualizer({\n count: dataFiltered.length,\n getScrollElement: useCallback(() => parentRef.current, []),\n getItemKey: useCallback(\n (index) => dataFiltered[index]?._metadata?.documentId ?? index,\n [dataFiltered],\n ),\n estimateSize: useCallback(() => 115, []),\n overscan: 7,\n measureElement: useCallback((element: Element) => {\n return element.getBoundingClientRect().height || 115\n }, []),\n })\n\n if (!data.length || !dataFiltered.length) {\n return null\n }\n\n return (\n <div\n ref={parentRef}\n style={{\n height: `100%`,\n overflow: 'auto',\n // Smooths scrollbar behaviour\n overflowAnchor: 'none',\n scrollBehavior: 'auto',\n paddingTop: 1,\n }}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: '100%',\n position: 'relative',\n }}\n >\n {virtualizer.getVirtualItems().map((virtualItem) => {\n const item = dataFiltered[virtualItem.index]\n\n const {documentId, assignees} = item?._metadata ?? {}\n\n const isInvalid = invalidDocumentIds.includes(documentId!)\n const meInAssignees = user?.id ? assignees?.includes(user.id) : false\n const isDragDisabled =\n patchingIds.includes(documentId!) ||\n !userRoleCanDrop ||\n isInvalid ||\n !(state.requireAssignment ? state.requireAssignment && meInAssignees : true)\n\n return (\n <Draggable\n key={virtualItem.key}\n draggableId={documentId!}\n index={virtualItem.index}\n isDragDisabled={isDragDisabled}\n >\n {(draggableProvided, draggableSnapshot) => (\n <div\n ref={draggableProvided.innerRef}\n {...draggableProvided.draggableProps}\n {...draggableProvided.dragHandleProps}\n style={getStyle(draggableProvided.draggableProps.style, virtualItem)}\n >\n <div ref={virtualizer.measureElement} data-index={virtualItem.index}>\n <DocumentCard\n userRoleCanDrop={userRoleCanDrop}\n isDragDisabled={isDragDisabled}\n isPatching={patchingIds.includes(documentId!)}\n isDragging={draggableSnapshot.isDragging}\n item={item!}\n toggleInvalidDocumentId={toggleInvalidDocumentId}\n userList={userList}\n states={states}\n />\n </div>\n </div>\n )}\n </Draggable>\n )\n })}\n </div>\n </div>\n )\n}\n","import {ResetIcon, UserIcon} from '@sanity/icons'\nimport {Button, Card, Flex, Menu, MenuButton} from '@sanity/ui'\nimport {useCallback} from 'react'\nimport {useCurrentUser, UserAvatar, useSchema} from 'sanity'\nimport {type UserExtended, UserSelectMenu} from 'sanity-plugin-utils'\n\ntype FiltersProps = {\n uniqueAssignedUsers: UserExtended[]\n selectedUserIds: string[]\n schemaTypes: string[]\n selectedSchemaTypes: string[]\n toggleSelectedUser: (userId: string) => void\n resetSelectedUsers: () => void\n toggleSelectedSchemaType: (schemaType: string) => void\n}\n\nexport default function Filters(props: FiltersProps) {\n const {\n uniqueAssignedUsers = [],\n selectedUserIds,\n schemaTypes,\n selectedSchemaTypes,\n toggleSelectedUser,\n resetSelectedUsers,\n toggleSelectedSchemaType,\n } = props\n\n const currentUser = useCurrentUser()\n const schema = useSchema()\n\n const onAdd = useCallback(\n (id: string) => {\n if (!selectedUserIds.includes(id)) {\n toggleSelectedUser(id)\n }\n },\n [selectedUserIds, toggleSelectedUser],\n )\n\n const onRemove = useCallback(\n (id: string) => {\n if (selectedUserIds.includes(id)) {\n toggleSelectedUser(id)\n }\n },\n [selectedUserIds, toggleSelectedUser],\n )\n\n const onClear = useCallback(() => {\n resetSelectedUsers()\n }, [resetSelectedUsers])\n\n if (uniqueAssignedUsers.length === 0 && schemaTypes.length < 2) {\n return null\n }\n\n const meInUniqueAssignees =\n currentUser?.id && uniqueAssignedUsers.find((u) => u.id === currentUser.id)\n const uniqueAssigneesNotMe = uniqueAssignedUsers.filter((u) => u.id !== currentUser?.id)\n\n return (\n <Card tone=\"primary\" padding={2} borderBottom style={{overflowX: 'hidden'}}>\n <Flex align=\"center\">\n <Flex align=\"center\" gap={1} flex={1}>\n {uniqueAssignedUsers.length > 5 ? (\n <Card tone=\"default\">\n <MenuButton\n button={\n <Button\n padding={3}\n fontSize={1}\n text=\"Filter Assignees\"\n tone=\"primary\"\n icon={UserIcon}\n />\n }\n id=\"user-filters\"\n menu={\n <Menu>\n <UserSelectMenu\n value={selectedUserIds}\n userList={uniqueAssignedUsers}\n onAdd={onAdd}\n onRemove={onRemove}\n onClear={onClear}\n labels={{\n addMe: 'Filter mine',\n removeMe: 'Clear mine',\n clear: 'Clear filters',\n }}\n />\n </Menu>\n }\n popover={{portal: true}}\n />\n </Card>\n ) : (\n <>\n {meInUniqueAssignees ? (\n <>\n <Button\n padding={0}\n mode={selectedUserIds.includes(currentUser.id) ? `default` : `bleed`}\n onClick={() => toggleSelectedUser(currentUser.id)}\n >\n <Flex padding={1} align=\"center\" justify=\"center\">\n <UserAvatar user={currentUser.id} size={1} withTooltip />\n </Flex>\n </Button>\n <Card borderRight style={{height: 30}} tone=\"inherit\" />\n </>\n ) : null}\n {uniqueAssigneesNotMe.map((user) => (\n <Button\n key={user.id}\n padding={0}\n mode={selectedUserIds.includes(user.id) ? `default` : `bleed`}\n onClick={() => toggleSelectedUser(user.id)}\n >\n <Flex padding={1} align=\"center\" justify=\"center\">\n <UserAvatar user={user} size={1} withTooltip />\n </Flex>\n </Button>\n ))}\n\n {selectedUserIds.length > 0 ? (\n <Button\n padding={3}\n fontSize={1}\n text=\"Clear\"\n onClick={resetSelectedUsers}\n mode=\"ghost\"\n icon={ResetIcon}\n />\n ) : null}\n </>\n )}\n </Flex>\n\n {schemaTypes.length > 1 ? (\n <Flex align=\"center\" gap={1}>\n {schemaTypes.map((typeName) => {\n const schemaType = schema.get(typeName)\n\n if (!schemaType) {\n return null\n }\n\n return (\n <Button\n key={typeName}\n padding={3}\n fontSize={1}\n text={schemaType?.title ?? typeName}\n icon={schemaType?.icon ?? undefined}\n mode={selectedSchemaTypes.includes(typeName) ? `default` : `ghost`}\n onClick={() => toggleSelectedSchemaType(typeName)}\n />\n )\n })}\n </Flex>\n ) : null}\n </Flex>\n </Card>\n )\n}\n","import {Box, Text, Tooltip} from '@sanity/ui'\n\ntype StatusProps = {\n text: string\n icon: React.ComponentType\n}\n\nexport function Status(props: StatusProps) {\n const {text, icon} = props\n const Icon = icon\n\n return (\n <Tooltip\n portal\n content={\n <Box padding={2}>\n <Text size={1}>{text}</Text>\n </Box>\n }\n >\n <Text size={1}>\n <Icon />\n </Text>\n </Tooltip>\n )\n}\n","import {InfoOutlineIcon, UserIcon} from '@sanity/icons'\nimport {Badge, type BadgeTone, Box, Card, Flex, Text} from '@sanity/ui'\nimport {styled} from 'styled-components'\n\nimport type {State} from '../../types'\n\nimport {Status} from './Status'\n\nconst StyledStickyCard = styled(Card)`\n position: sticky;\n top: 0;\n z-index: 1;\n`\n\ntype StateTitleProps = {\n state: State\n requireAssignment: boolean\n userRoleCanDrop: boolean\n isDropDisabled: boolean\n draggingFrom: string\n documentCount: number\n}\n\nexport default function StateTitle(props: StateTitleProps) {\n const {state, requireAssignment, userRoleCanDrop, isDropDisabled, draggingFrom, documentCount} =\n props\n\n let tone: BadgeTone = 'default'\n const isSource = draggingFrom === state.id\n\n if (draggingFrom) {\n tone = isDropDisabled || isSource ? 'default' : 'positive'\n }\n\n return (\n <StyledStickyCard paddingY={4} padding={3} tone=\"inherit\">\n <Flex gap={3} align=\"center\">\n <Badge\n mode={(draggingFrom && !isDropDisabled) || isSource ? 'default' : 'outline'}\n tone={tone}\n muted={!userRoleCanDrop || isDropDisabled}\n >\n {state.title}\n </Badge>\n {userRoleCanDrop ? null : (\n <Status\n text=\"You do not have permissions to move documents to this State\"\n icon={InfoOutlineIcon}\n />\n )}\n {requireAssignment ? (\n <Status\n text=\"You must be assigned to the document to move documents to this State\"\n icon={UserIcon}\n />\n ) : null}\n <Box flex={1}>\n {documentCount > 0 ? (\n <Text weight=\"semibold\" align=\"right\" size={1}>\n {documentCount}\n </Text>\n ) : null}\n </Box>\n </Flex>\n </StyledStickyCard>\n )\n}\n","import {LexoRank} from 'lexorank'\n\nfunction generateMiddleValue(ranks: (LexoRank | undefined)[]) {\n // Has no undefined values\n if (!ranks.some((rank) => !rank)) {\n return ranks\n }\n\n // Find the first undefined value\n const firstUndefined = ranks.findIndex((rank) => !rank)\n\n // Find the first defined value after the undefined value\n const firstDefinedAfter = ranks.findIndex((rank, index) => rank && index > firstUndefined)\n // Find the first defined value before the undefined value\n const firstDefinedBefore = ranks.findLastIndex((rank, index) => rank && index < firstUndefined)\n\n if (firstDefinedAfter === -1 || firstDefinedBefore === -1) {\n throw new Error(\n `Unable to generate middle value between indexes ${firstDefinedBefore} and ${firstDefinedAfter}`,\n )\n }\n\n const beforeRank = ranks[firstDefinedBefore]\n const afterRank = ranks[firstDefinedAfter]\n\n if (\n !beforeRank ||\n typeof beforeRank === 'undefined' ||\n !afterRank ||\n typeof afterRank === 'undefined'\n ) {\n throw new Error(\n `Unable to generate middle value between indexes ${firstDefinedBefore} and ${firstDefinedAfter}`,\n )\n }\n\n // Generate a new value between the two\n const between = beforeRank.between(afterRank)\n\n // Calculate the middle index between the defined values\n const middle = Math.floor((firstDefinedAfter + firstDefinedBefore) / 2)\n\n if (ranks[middle]) {\n throw new Error(`Should not have overwritten value at index ${middle}`)\n }\n\n // Insert the new value into the array\n ranks[middle] = between\n\n // Return as a new array\n return ranks\n}\n\n// Generates an array of LexoRanks between two values\nexport function generateMultipleOrderRanks(\n count: number,\n start?: LexoRank,\n end?: LexoRank,\n): LexoRank[] {\n // Begin array with correct size\n let ranks = [...Array(count)]\n\n // Use or create default values\n const rankStart = start ?? LexoRank.min().genNext().genNext()\n const rankEnd = end ?? LexoRank.max().genPrev().genPrev()\n\n ranks[0] = rankStart\n ranks[count - 1] = rankEnd\n\n // Keep processing the array until every value between undefined values is defined\n for (let i = 0; i < count; i++) {\n ranks = generateMiddleValue(ranks)\n }\n\n return ranks.sort((a, b) => a.toString().localeCompare(b.toString()))\n}\n","import type {PropsWithChildren} from 'react'\n\nimport {Card, Grid} from '@sanity/ui'\nimport {AnimatePresence, motion} from 'motion/react'\nimport {styled} from 'styled-components'\n\nconst StyledFloatingCard = styled(Card)`\n position: fixed;\n bottom: 0;\n left: 0;\n z-index: 1000;\n`\n\nexport default function FloatingCard({children}: PropsWithChildren) {\n const childrenHaveValues = Array.isArray(children) ? children.some(Boolean) : Boolean(children)\n\n return (\n <AnimatePresence>\n {childrenHaveValues ? (\n <motion.div key=\"floater\" initial={{opacity: 0}} animate={{opacity: 1}} exit={{opacity: 0}}>\n <StyledFloatingCard shadow={3} padding={3} margin={3} radius={3}>\n <Grid gap={2}>{children}</Grid>\n </StyledFloatingCard>\n </motion.div>\n ) : null}\n </AnimatePresence>\n )\n}\n","import type {UserExtended} from 'sanity-plugin-utils'\n\nimport {Button, useToast} from '@sanity/ui'\nimport {LexoRank} from 'lexorank'\nimport {useCallback, useMemo} from 'react'\nimport {useClient} from 'sanity'\n\nimport type {SanityDocumentWithMetadata, State} from '../types'\n\nimport {API_VERSION} from '../constants'\nimport {generateMultipleOrderRanks} from '../helpers/generateMultipleOrderRanks'\nimport FloatingCard from './FloatingCard'\n\ntype VerifyProps = {\n data: SanityDocumentWithMetadata[]\n userList: UserExtended[]\n states: State[]\n}\n\n// This component checks the validity of the data in the Kanban\n// It will only render something if there is invalid data\n// And will render buttons to fix the data\nexport default function Verify(props: VerifyProps) {\n const {data, userList, states} = props\n const client = useClient({apiVersion: API_VERSION})\n const toast = useToast()\n\n // A lot of error-checking\n const documentsWithoutValidMetadataIds = data?.length\n ? data.reduce((acc, cur) => {\n const {documentId, state} = cur._metadata ?? {}\n const stateExists = states.find((s) => s.id === state)\n if (!stateExists && documentId) {\n acc.push(documentId)\n }\n return acc\n }, [] as string[])\n : []\n\n const documentsWithInvalidUserIds =\n data?.length && userList?.length\n ? data.reduce((acc, cur) => {\n const {documentId, assignees} = cur._metadata ?? {}\n const allAssigneesExist = assignees?.length\n ? assignees?.every((a) => userList.find((u) => u.id === a))\n : true\n\n if (!allAssigneesExist && documentId) {\n acc.push(documentId)\n }\n\n return acc\n }, [] as string[])\n : []\n\n const documentsWithoutOrderIds = data?.length\n ? data.reduce((acc, cur) => {\n const {documentId, orderRank} = cur._metadata ?? {}\n\n if (!orderRank && documentId) {\n acc.push(documentId)\n }\n return acc\n }, [] as string[])\n : []\n\n const documentsWithDuplicatedOrderIds = data?.length\n ? data.reduce((acc, cur) => {\n const {documentId, orderRank} = cur._metadata ?? {}\n\n if (\n orderRank &&\n data.filter((d) => d._metadata?.orderRank === orderRank).length > 1 &&\n documentId\n ) {\n acc.push(documentId)\n }\n\n return acc\n }, [] as string[])\n : []\n\n // Updates metadata documents to a valid, existing state\n const correctDocuments = useCallback(\n async (ids: string[]) => {\n toast.push({\n title: 'Correcting...',\n status: 'info',\n })\n\n const tx = ids.reduce((item, documentId) => {\n return item.patch(`workflow-metadata.${documentId}`, {\n set: {state: states?.[0]?.id},\n })\n }, client.transaction())\n\n await tx.commit()\n\n toast.push({\n title: `Corrected ${ids.length === 1 ? `1 Document` : `${ids.length} Documents`}`,\n status: 'success',\n })\n },\n [client, states, toast],\n )\n\n // Remove users that are no longer in the project from documents\n const removeUsersFromDocuments = useCallback(\n async (ids: string[]) => {\n toast.push({\n title: 'Removing users...',\n status: 'info',\n })\n\n const tx = ids.reduce((item, documentId) => {\n const {assignees} = data.find((d) => d._id === documentId)?._metadata ?? {}\n const validAssignees = assignees?.length\n ? assignees.filter((a) => userList.find((u) => u.id === a)?.id)\n : []\n\n return item.patch(`workflow-metadata.${documentId}`, {\n set: {assignees: validAssignees},\n })\n }, client.transaction())\n\n await tx.commit()\n\n toast.push({\n title: `Corrected ${ids.length === 1 ? `1 Document` : `${ids.length} Documents`}`,\n status: 'success',\n })\n },\n [client, data, toast, userList],\n )\n\n // Add order value to metadata documents\n const addOrderToDocuments = useCallback(\n async (ids: string[]) => {\n toast.push({\n title: 'Adding ordering...',\n status: 'info',\n })\n\n // Get first and second order values, if they exist\n const [firstOrder, secondOrder] = [...data].slice(0, 2).map((d) => d._metadata?.orderRank)\n const minLexo = firstOrder ? LexoRank.parse(firstOrder) : undefined\n const maxLexo = secondOrder ? LexoRank.parse(secondOrder) : undefined\n const ranks = generateMultipleOrderRanks(ids.length, minLexo, maxLexo)\n\n const tx = client.transaction()\n\n // Create a new in-between value for each document\n for (let index = 0; index < ids.length; index += 1) {\n tx.patch(`workflow-metadata.${ids[index]}`, {\n set: {orderRank: ranks[index]!.toString()},\n })\n }\n\n await tx.commit()\n\n toast.push({\n title: `Added order to ${ids.length === 1 ? `1 Document` : `${ids.length} Documents`}`,\n status: 'success',\n })\n },\n [data, client, toast],\n )\n\n // Reset order value on all metadata documents\n const resetOrderOfAllDocuments = useCallback(\n async (ids: string[]) => {\n toast.push({\n title: 'Adding ordering...',\n status: 'info',\n })\n\n const ranks = generateMultipleOrderRanks(ids.length)\n\n const tx = client.transaction()\n\n // Create a new in-between value for each document\n for (let index = 0; index < ids.length; index += 1) {\n tx.patch(`workflow-metadata.${ids[index]}`, {\n set: {orderRank: ranks[index]!.toString()},\n })\n }\n\n await tx.commit()\n\n toast.push({\n title: `Added order to ${ids.length === 1 ? `1 Document` : `${ids.length} Documents`}`,\n status: 'success',\n })\n },\n [client, toast],\n )\n\n // A document could be deleted and the workflow metadata left behind\n const orphanedMetadataDocumentIds = useMemo(() => {\n return data.length ? data.filter((doc) => !doc?._id).map((doc) => doc._metadata.documentId) : []\n }, [data])\n\n const handleOrphans = useCallback(async () => {\n toast.push({\n title: 'Removing orphaned metadata...',\n status: 'info',\n })\n\n const tx = client.transaction()\n orphanedMetadataDocumentIds.forEach((id) => {\n tx.delete(`workflow-metadata.${id}`)\n })\n\n await tx.commit()\n\n toast.push({\n title: `Removed ${orphanedMetadataDocumentIds.length} orphaned metadata documents`,\n status: 'success',\n })\n }, [client, orphanedMetadataDocumentIds, toast])\n\n return (\n <FloatingCard>\n {documentsWithoutValidMetadataIds.length > 0 ? (\n <Button\n tone=\"caution\"\n mode=\"ghost\"\n onClick={() => correctDocuments(documentsWithoutValidMetadataIds)}\n text={\n documentsWithoutValidMetadataIds.length === 1\n ? `Correct 1 Document State`\n : `Correct ${documentsWithoutValidMetadataIds.length} Document States`\n }\n />\n ) : null}\n {documentsWithInvalidUserIds.length > 0 ? (\n <Button\n tone=\"caution\"\n mode=\"ghost\"\n onClick={() => removeUsersFromDocuments(documentsWithInvalidUserIds)}\n text={\n documentsWithInvalidUserIds.length === 1\n ? `Remove Invalid Users from 1 Document`\n : `Remove Invalid Users from ${documentsWithInvalidUserIds.length} Documents`\n }\n />\n ) : null}\n {documentsWithoutOrderIds.length > 0 ? (\n <Button\n tone=\"caution\"\n mode=\"ghost\"\n onClick={() => addOrderToDocuments(documentsWithoutOrderIds)}\n text={\n documentsWithoutOrderIds.length === 1\n ? `Set Order for 1 Document`\n : `Set Order for ${documentsWithoutOrderIds.length} Documents`\n }\n />\n ) : null}\n {documentsWithDuplicatedOrderIds.length > 0 ? (\n <>\n <Button\n tone=\"caution\"\n mode=\"ghost\"\n onClick={() => addOrderToDocuments(documentsWithDuplicatedOrderIds)}\n text={\n documentsWithDuplicatedOrderIds.length === 1\n ? `Set Unique Order for 1 Document`\n : `Set Unique Order for ${documentsWithDuplicatedOrderIds.length} Documents`\n }\n />\n <Button\n tone=\"caution\"\n mode=\"ghost\"\n onClick={() =>\n resetOrderOfAllDocuments(data.map((doc) => String(doc._metadata?.documentId)))\n }\n text={\n data.length === 1\n ? `Reset Order for 1 Document`\n : `Reset Order for all ${data.length} Documents`\n }\n />\n </>\n ) : null}\n {orphanedMetadataDocumentIds.length > 0 ? (\n <Button\n text=\"Cleanup orphaned metadata\"\n onClick={handleOrphans}\n tone=\"caution\"\n mode=\"ghost\"\n />\n ) : null}\n </FloatingCard>\n )\n}\n","import {\n DragDropContext,\n type DraggableChildrenFn,\n type DragStart,\n Droppable,\n type DropResult,\n} from '@hello-pangea/dnd'\nimport {Box, Card, Container, Flex, Grid, Spinner, useTheme, useToast} from '@sanity/ui'\nimport {LexoRank} from 'lexorank'\nimport {useCallback, useMemo, useState} from 'react'\nimport {type Tool, useCurrentUser} from 'sanity'\nimport {Feedback, useProjectUsers} from 'sanity-plugin-utils'\n\nimport type {State, WorkflowConfig} from '../types'\n\nimport {API_VERSION} from '../constants'\nimport {arraysContainMatchingString} from '../helpers/arraysContainMatchingString'\nimport {filterItemsAndSort} from '../helpers/filterItemsAndSort'\nimport {useWorkflowDocuments} from '../hooks/useWorkflowDocuments'\nimport {DocumentCard} from './DocumentCard'\nimport DocumentList from './DocumentList'\nimport Filters from './Filters'\nimport StateTitle from './StateTitle'\nimport Verify from './Verify'\n\ntype WorkflowToolProps = {\n tool: Tool<WorkflowConfig>\n}\n\nexport default function WorkflowTool(props: WorkflowToolProps) {\n const {schemaTypes = [], states = []} = props?.tool?.options ?? {}\n\n const isDarkMode = useTheme().sanity.color.dark\n const defaultCardTone = isDarkMode ? 'default' : 'transparent'\n const toast = useToast()\n\n const userList = useProjectUsers({apiVersion: API_VERSION})\n\n const user = useCurrentUser()\n const userRoleNames = user?.roles?.length ? user?.roles.map((r) => r.name) : []\n\n const {workflowData, operations} = useWorkflowDocuments(schemaTypes)\n const [patchingIds, setPatchingIds] = useState<string[]>([])\n\n // Data to display in cards\n const {data, loading, error} = workflowData\n\n // Operations to perform on cards\n const {move} = operations\n\n const [undroppableStates, setUndroppableStates] = useState<string[]>([])\n const [draggingFrom, setDraggingFrom] = useState(``)\n\n // When drag starts, check for any States we should not allow dropping on\n // Because of either:\n // 1. The \"destination\" State requires user assignment and the user is not assigned to the dragged document\n // 2. The \"source\" State State has a list of transitions and the \"destination\" State is not in that list\n const handleDragStart = useCallback(\n (start: DragStart) => {\n const {draggableId, source} = start\n const {droppableId: currentStateId} = source\n setDraggingFrom(currentStateId)\n\n const document = data.find((item) => item._metadata?.documentId === draggableId)\n const state = states.find((s) => s.id === currentStateId)\n\n // This shouldn't happen but TypeScript\n if (!document || !state) return\n\n const undroppableStateIds = []\n const statesThatRequireAssignmentIds = states\n .filter((s) => s.requireAssignment)\n .map((s) => s.id)\n\n if (statesThatRequireAssignmentIds.length) {\n const documentAssignees = document._metadata?.assignees ?? []\n const userIsAssignedToDocument = user?.id ? documentAssignees.includes(user.id) : false\n\n if (!userIsAssignedToDocument) {\n undroppableStateIds.push(...statesThatRequireAssignmentIds)\n }\n }\n\n const statesThatCannotBeTransitionedToIds =\n state.transitions && state.transitions.length\n ? states.filter((s) => !state.transitions?.includes(s.id)).map((s) => s.id)\n : []\n\n if (statesThatCannotBeTransitionedToIds.length) {\n undroppableStateIds.push(...statesThatCannotBeTransitionedToIds)\n }\n\n // Remove currentStateId from undroppableStates\n const undroppableExceptSelf = undroppableStateIds.filter((id) => id !== currentStateId)\n\n if (undroppableExceptSelf.length) {\n setUndroppableStates(undroppableExceptSelf)\n }\n },\n [data, states, user],\n )\n\n const handleDragEnd = useCallback(\n async (result: DropResult) => {\n // Reset undroppable states\n setUndroppableStates([])\n setDraggingFrom(``)\n\n const {draggableId, source, destination} = result\n\n if (\n // No destination?\n !destination ||\n // No change in position?\n (destination.droppableId === source.droppableId && destination.index === source.index)\n ) {\n return\n }\n\n // Find all items in current state\n const destinationStateItems = [...filterItemsAndSort(data, destination.droppableId, [], null)]\n const destinationStateIndex = states.findIndex((s) => s.id === destination.droppableId)\n const globalStateMinimumRank = data?.[0]?._metadata.orderRank\n const globalStateMaximumRank = data?.[data?.length - 1]?._metadata.orderRank\n\n let newOrder\n\n if (!destinationStateItems.length) {\n // Only item in state\n // New minimum rank\n if (destinationStateIndex === 0) {\n // Only the first state should generate an absolute minimum rank\n newOrder = LexoRank.min().toString()\n } else {\n // Otherwise create one rank above the minimum\n newOrder = LexoRank.min().genNext().toString()\n }\n } else if (destination.index === 0) {\n // Now first item in order\n const firstItemOrderRank = [...destinationStateItems].shift()?._metadata?.orderRank\n\n if (firstItemOrderRank && typeof firstItemOrderRank === 'string') {\n newOrder = LexoRank.parse(firstItemOrderRank).genPrev().toString()\n } else if (destinationStateIndex === 0) {\n // Only the first state should generate an absolute minimum rank\n newOrder = LexoRank.min().toString()\n } else {\n // Otherwise create the next rank between min and the globally minimum rank\n newOrder = LexoRank.parse(globalStateMinimumRank!).between(LexoRank.min()).toString()\n }\n } else if (destination.index + 1 === destinationStateItems.length) {\n // Now last item in order\n const lastItemOrderRank = [...destinationStateItems].pop()?._metadata?.orderRank\n\n if (lastItemOrderRank && typeof lastItemOrderRank === 'string') {\n newOrder = LexoRank.parse(lastItemOrderRank).genNext().toString()\n } else if (destinationStateIndex === states.length - 1) {\n // Only the last state should generate an absolute maximum rank\n newOrder = LexoRank.max().toString()\n } else {\n // Otherwise create the next rank between max and the globally maximum rank\n newOrder = LexoRank.parse(globalStateMaximumRank!).between(LexoRank.min()).toString()\n }\n } else {\n // Must be between two items\n const itemBefore = destinationStateItems[destination.index - 1]\n const itemBeforeRank = itemBefore?._metadata?.orderRank\n let itemBeforeRankParsed\n if (itemBeforeRank) {\n itemBeforeRankParsed = LexoRank.parse(itemBeforeRank)\n } else if (destinationStateIndex === 0) {\n itemBeforeRankParsed = LexoRank.min()\n } else {\n itemBeforeRankParsed = LexoRank.parse(globalStateMinimumRank!)\n }\n\n const itemAfter = destinationStateItems[destination.index]\n const itemAfterRank = itemAfter?._metadata?.orderRank\n let itemAfterRankParsed\n if (itemAfterRank) {\n itemAfterRankParsed = LexoRank.parse(itemAfterRank)\n } else if (destinationStateIndex === states.length - 1) {\n itemAfterRankParsed = LexoRank.max()\n } else {\n itemAfterRankParsed = LexoRank.parse(globalStateMaximumRank!)\n }\n\n newOrder = itemBeforeRankParsed.between(itemAfterRankParsed).toString()\n }\n\n setPatchingIds([...patchingIds, draggableId])\n toast.push({\n status: 'info',\n title: 'Updating document state...',\n })\n await move(draggableId, destination, states, newOrder)\n setPatchingIds((ids: string[]) => ids.filter((id) => id !== draggableId))\n },\n [data, patchingIds, toast, move, states],\n )\n\n // Used for the user filter UI\n const uniqueAssignedUsers = useMemo(() => {\n const uniqueUserIds = data.reduce((acc, item) => {\n const {assignees = []} = item._metadata ?? {}\n const newAssignees = assignees?.length ? assignees.filter((a) => !acc.includes(a)) : []\n if (newAssignees.length) {\n acc.push(...newAssignees)\n }\n return acc\n }, [] as string[])\n\n return userList.filter((u) => uniqueUserIds.includes(u.id))\n }, [data, userList])\n\n // Selected user IDs filter the visible workflow documents\n const [selectedUserIds, setSelectedUserIds] = useState<string[]>(\n uniqueAssignedUsers.map((u) => u.id),\n )\n const toggleSelectedUser = useCallback((userId: string) => {\n setSelectedUserIds((prev) =>\n prev.includes(userId) ? prev.filter((u) => u !== userId) : [...prev, userId],\n )\n }, [])\n const resetSelectedUsers = useCallback(() => {\n setSelectedUserIds([])\n }, [])\n\n // Selected schema types filter the visible workflow documents\n const [selectedSchemaTypes, setSelectedSchemaTypes] = useState<string[]>(schemaTypes)\n const toggleSelectedSchemaType = useCallback((schemaType: string) => {\n setSelectedSchemaTypes((prev) =>\n prev.includes(schemaType) ? prev.filter((u) => u !== schemaType) : [...prev, schemaType],\n )\n }, [])\n\n // Document IDs that have validation errors\n const [invalidDocumentIds, setInvalidDocumentIds] = useState<string[]>([])\n const toggleInvalidDocumentId = useCallback((docId: string, action: 'ADD' | 'REMOVE') => {\n setInvalidDocumentIds((prev) =>\n action === 'ADD' ? [...prev, docId] : prev.filter((id) => id !== docId),\n )\n }, [])\n\n const Clone: DraggableChildrenFn = useCallback(\n (provided, snapshot, rubric) => {\n const item = data.find((doc) => doc?._metadata?.documentId === rubric.draggableId)\n\n return (\n <div {...provided.draggableProps} {...provided.dragHandleProps} ref={provided.innerRef}>\n {item ? (\n <DocumentCard\n // Assumed false, if it's dragging it's not disabled\n isDragDisabled={false}\n // Assumed false, if it's dragging it's not patching\n isPatching={false}\n // Assumed true, if you can drag it you can drop it\n userRoleCanDrop\n isDragging={snapshot.isDragging}\n item={item}\n states={states}\n toggleInvalidDocumentId={toggleInvalidDocumentId}\n userList={userList}\n />\n ) : (\n <Feedback title=\"Item not found\" tone=\"caution\" />\n )}\n </div>\n )\n },\n [data, states, toggleInvalidDocumentId, userList],\n )\n\n if (!states?.length) {\n return (\n <Container width={1} padding={5}>\n <Feedback\n tone=\"caution\"\n title=\"Plugin options error\"\n description=\"No States defined in plugin config\"\n />\n </Container>\n )\n }\n\n if (error && !data.length) {\n return (\n <Container width={1} padding={5}>\n <Feedback tone=\"critical\" title=\"Error querying for Workflow documents\" />\n </Container>\n )\n }\n\n return (\n <Flex direction=\"column\" height=\"fill\" overflow=\"hidden\">\n <Verify data={data} userList={userList} states={states} />\n\n <Filters\n uniqueAssignedUsers={uniqueAssignedUsers}\n selectedUserIds={selectedUserIds}\n toggleSelectedUser={toggleSelectedUser}\n resetSelectedUsers={resetSelectedUsers}\n schemaTypes={schemaTypes}\n selectedSchemaTypes={selectedSchemaTypes}\n toggleSelectedSchemaType={toggleSelectedSchemaType}\n />\n <DragDropContext onDragStart={handleDragStart} onDragEnd={handleDragEnd}>\n <Grid columns={states.length} height=\"fill\">\n {states.map((state: State, stateIndex: number) => {\n const userRoleCanDrop = state?.roles?.length\n ? arraysContainMatchingString(state.roles, userRoleNames)\n : true\n const isDropDisabled = !userRoleCanDrop || undroppableStates.includes(state.id)\n\n return (\n <Card key={state.id} borderLeft={stateIndex > 0} tone={defaultCardTone}>\n <Flex direction=\"column\" height=\"fill\">\n <StateTitle\n state={state}\n requireAssignment={state.requireAssignment ?? false}\n userRoleCanDrop={userRoleCanDrop}\n isDropDisabled={isDropDisabled}\n draggingFrom={draggingFrom}\n documentCount={\n filterItemsAndSort(data, state.id, selectedUserIds, selectedSchemaTypes)\n .length\n }\n />\n <Box flex={1}>\n <Droppable\n droppableId={state.id}\n isDropDisabled={isDropDisabled}\n // props required for virtualization\n mode=\"virtual\"\n renderClone={Clone}\n >\n {(provided, snapshot) => (\n <Card\n ref={provided.innerRef}\n tone={snapshot.isDraggingOver ? `primary` : defaultCardTone}\n height=\"fill\"\n >\n {loading ? (\n <Flex padding={5} align=\"center\" justify=\"center\">\n <Spinner muted />\n </Flex>\n ) : null}\n\n <DocumentList\n data={data}\n invalidDocumentIds={invalidDocumentIds}\n patchingIds={patchingIds}\n selectedSchemaTypes={selectedSchemaTypes}\n selectedUserIds={selectedUserIds}\n state={state}\n states={states}\n toggleInvalidDocumentId={toggleInvalidDocumentId}\n user={user}\n userList={userList}\n userRoleCanDrop={userRoleCanDrop}\n />\n\n {/* Not required for virtualized lists */}\n {/* {provided.placeholder} */}\n </Card>\n )}\n </Droppable>\n </Box>\n </Flex>\n </Card>\n )\n })}\n </Grid>\n </DragDropContext>\n </Flex>\n )\n}\n","import type {Tool} from 'sanity'\n\nimport {SplitVerticalIcon} from '@sanity/icons'\n\nimport type {WorkflowConfig} from '../types'\n\nimport WorkflowTool from '../components/WorkflowTool'\n\nexport type WorkflowToolConfig = (options: WorkflowConfig) => Tool\n\nexport const workflowTool: WorkflowToolConfig = (options: WorkflowConfig) => ({\n name: 'workflow',\n title: 'Workflow',\n component: WorkflowTool,\n icon: SplitVerticalIcon,\n options,\n})\n","import {definePlugin, isObjectInputProps, type Plugin} from 'sanity'\n\nimport type {WorkflowConfig} from './types'\n\nimport {defineUpdateWorkflow} from './actions/defineUpdateWorkflow'\nimport {useAssignWorkflow} from './actions/useAssignWorkflow'\nimport {useBeginWorkflow} from './actions/useBeginWorkflow'\nimport {useCompleteWorkflow} from './actions/useCompleteWorkflow'\nimport {useAssigneesBadge} from './badges/useAssigneesBadge'\nimport {useStateBadge} from './badges/useStateBadge'\nimport {WorkflowProvider} from './components/WorkflowContext'\nimport WorkflowSignal from './components/WorkflowSignal'\nimport {DEFAULT_CONFIG} from './constants'\nimport metadata from './schema/workflow/workflow.metadata'\nimport {workflowTool} from './tools'\n\nexport const workflow: Plugin<WorkflowConfig> = definePlugin<WorkflowConfig>(\n (config = DEFAULT_CONFIG) => {\n const {schemaTypes, states} = {...DEFAULT_CONFIG, ...config}\n\n if (!states?.length) {\n throw new Error(`Workflow plugin: Missing \"states\" in config`)\n }\n\n if (!schemaTypes?.length) {\n throw new Error(`Workflow plugin: Missing \"schemaTypes\" in config`)\n }\n\n const useUpdateActions = states.map((state) => defineUpdateWorkflow(state))\n\n return {\n name: 'sanity-plugin-workflow',\n schema: {\n types: [metadata(states)],\n },\n // TODO: Remove 'workflow.metadata' from list of new document types\n // ...\n studio: {\n components: {\n layout: (props) => (\n <WorkflowProvider {...props} schemaTypes={schemaTypes} states={states} />\n ),\n },\n },\n form: {\n components: {\n input: (props) => {\n if (\n props.id === `root` &&\n isObjectInputProps(props) &&\n schemaTypes.includes(props.schemaType.name)\n ) {\n return <WorkflowSignal {...props} />\n }\n\n return props.renderDefault(props)\n },\n },\n },\n document: {\n actions: (prev, context) => {\n if (!schemaTypes.includes(context.schemaType)) {\n return prev\n }\n\n return [\n useBeginWorkflow,\n useAssignWorkflow,\n ...useUpdateActions,\n useCompleteWorkflow,\n ...prev,\n ]\n },\n badges: (prev, context) => {\n if (!schemaTypes.includes(context.schemaType)) {\n return prev\n }\n\n if (!context.documentId) {\n return prev\n }\n\n return [useStateBadge, useAssigneesBadge, ...prev]\n },\n },\n tools: [\n // TODO: These configs could be read from Context\n workflowTool({schemaTypes, states}),\n ],\n }\n },\n)\n"],"names":["defineStates","states","API_VERSION","DEFAULT_CONFIG","schemaTypes","id","title","color","roles","transitions","requireAssignment","useWorkflowMetadata","ids","$","_c","t0","t1","for","apiVersion","t2","params","options","data","_rawData","loading","error","useListeningQuery","rawData","t3","bb0","length","t4","acc","item","documentId","keyedMetadata","WorkflowContext","createContext","addId","removeId","useWorkflowContext","current","useContext","metadata","WorkflowProvider","props","Symbol","setIds","useState","includes","id_0","current_0","filter","i","renderDefault","t5","arraysContainMatchingString","one","two","some","useUpdateWorkflow","actionState","type","onComplete","user","useCurrentUser","client","useClient","toast","useToast","currentUser","state","s","currentState","find","assignees","undefined","validation","isValidating","useValidationStatus","hasValidationErrors","requireValidation","_temp","console","t6","newState","patch","set","commit","then","push","status","catch","err","onHandle","currentStateIndex","findIndex","s_0","direction","s_1","DirectionIcon","ArrowRightIcon","ArrowLeftIcon","directionLabel","t7","map","_temp2","userRoleCanUpdateState","actionStateIsAValidTransition","t8","userAssignmentCanUpdateState","t9","Boolean","t10","t11","icon","disabled","label","r","name","v","level","defineUpdateWorkflow","UserAssignment","userList","userId","u","setIfMissing","insert","displayName","description","addAssignee","userId_0","user_0","u_0","unset","err_0","removeAssignee","err_1","clearAssignees","maxHeight","useAssignWorkflow","isDialogOpen","setDialogOpen","useProjectUsers","onClose","content","UsersIcon","dialog","useBeginWorkflow","draft","beginning","setBeginning","complete","setComplete","lowestOrderFirstState","fetch","createIfNotExists","_id","_type","orderRank","LexoRank","parse","genNext","toString","min","handle","SplitVerticalIcon","handleDeleteMetadata","delete","useCompleteWorkflow","isLastState","CheckmarkIcon","tone","useAssigneesBadge","hasMe","assignee","assigneesCount","join","useStateBadge","WorkflowSignal","value","getPublishedId","useEffect","EditButton","navigateIntent","useRouter","EditIcon","Field","schema","useSchema","String","draftId","_data","get","schemaType","UserAssignmentInput","useFormValue","Array","isArray","stringValue","initialRank","lastRankValue","defineType","liveEdit","fields","defineField","readOnly","list","layout","components","input","initialValue","_","getClient","lastDocOrderRank","order","of","filterItemsAndSort","items","stateId","selectedUsers","selectedSchemaTypes","_metadata","sort","a","b","aOrderRank","bOrderRank","localeCompare","QUERY","useWorkflowDocuments","localDocuments","setLocalDocuments","draggedId","destination","newOrder","currentLocalData","newLocalDocuments","droppableId","optimistic","newStateId","document","d","_rev","ifRevisionId","res","message","move","workflowData","operations","AvatarGroup","users","max","len","slice","me","visibleUsers","marginRight","UserDisplay","button","popover","setPopover","isOpen","setIsOpen","close","open","useClickOutside","AddIcon","CompleteButton","event","currentTarget","handleComplete","TimeAgo","time","timeAgo","useTimeAgo","DraftStatus","updatedAt","_updatedAt","PublishedStatus","Validate","onChange","ValidationStatus","hasError","DocumentCard","isDragDisabled","isPatching","userRoleCanDrop","isDragging","toggleInvalidDocumentId","isDarkMode","useTheme","sanity","dark","defaultCardTone","optimisticValidation","setOptimisticValidation","updates","handleValidation","cardTone","_temp3","t12","t13","t14","pointerEvents","t15","t16","t17","t18","flexShrink","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","t33","t34","t35","t36","v_1","v_0","getStyle","draggableStyle","virtualItem","transform","start","draggableTransformY","parseInt","split","position","top","left","width","height","size","DocumentList","invalidDocumentIds","patchingIds","selectedUserIds","dataFiltered","useMemo","parentRef","useRef","virtualizer","useVirtualizer","count","getScrollElement","useCallback","getItemKey","index","estimateSize","overscan","measureElement","element","getBoundingClientRect","overflow","overflowAnchor","scrollBehavior","paddingTop","getTotalSize","getVirtualItems","isInvalid","meInAssignees","draggableProvided","draggableSnapshot","innerRef","draggableProps","dragHandleProps","style","key","Filters","uniqueAssignedUsers","toggleSelectedUser","resetSelectedUsers","toggleSelectedSchemaType","onAdd","onRemove","onClear","meInUniqueAssignees","uniqueAssigneesNotMe","T0","Card","overflowX","T1","Flex","T2","UserIcon","addMe","removeMe","clear","portal","ResetIcon","typeName","Status","text","Icon","StyledStickyCard","styled","withConfig","componentId","StateTitle","isDropDisabled","draggingFrom","documentCount","isSource","InfoOutlineIcon","generateMiddleValue","ranks","rank","firstUndefined","firstDefinedAfter","firstDefinedBefore","findLastIndex","Error","beforeRank","afterRank","between","middle","Math","floor","generateMultipleOrderRanks","end","rankStart","rankEnd","genPrev","StyledFloatingCard","FloatingCard","children","childrenHaveValues","opacity","Verify","reduce","cur","documentsWithoutValidMetadataIds","acc_0","cur_0","documentId_0","every","documentsWithInvalidUserIds","documentsWithoutOrderIds","acc_2","cur_2","documentId_2","orderRank_0","documentsWithDuplicatedOrderIds","documentId_3","transaction","correctDocuments","ids_0","item_0","documentId_4","assignees_0","d_0","validAssignees","a_0","removeUsersFromDocuments","ids_1","firstOrder","secondOrder","minLexo","maxLexo","tx_1","tx","addOrderToDocuments","ids_2","ranks_0","tx_2","index_0","resetOrderOfAllDocuments","_temp4","orphanedMetadataDocumentIds","tx_3","forEach","handleOrphans","_temp5","doc_1","doc","doc_0","d_1","acc_1","cur_1","documentId_1","WorkflowTool","tool","userRoleNames","setPatchingIds","undroppableStates","setUndroppableStates","setDraggingFrom","draggableId","source","currentStateId","undroppableStateIds","statesThatRequireAssignmentIds","documentAssignees","statesThatCannotBeTransitionedToIds","s_2","undroppableExceptSelf","handleDragStart","result","draggableId_0","source_0","destinationStateItems","destinationStateIndex","s_4","globalStateMinimumRank","globalStateMaximumRank","firstItemOrderRank","shift","lastItemOrderRank","pop","itemBeforeRank","itemBeforeRankParsed","itemAfterRank","itemAfterRankParsed","handleDragEnd","uniqueUserIds","_temp6","setSelectedUserIds","prev","u_1","setSelectedSchemaTypes","prev_0","u_2","setInvalidDocumentIds","docId","action","prev_1","id_1","provided","snapshot","rubric","item_1","Clone","DragDropContext","Grid","state_0","stateIndex","provided_0","snapshot_0","isDraggingOver","newAssignees","s_3","workflowTool","component","workflow","definePlugin","config","useUpdateActions","types","studio","form","isObjectInputProps","actions","context","badges","tools"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sanity-plugin-workflow",
3
- "version": "2.1.4",
3
+ "version": "2.1.5",
4
4
  "description": "A demonstration of a custom content publishing workflow using Sanity.",
5
5
  "keywords": [
6
6
  "sanity",
@@ -38,7 +38,7 @@
38
38
  "sanity-plugin-utils": "^1.7.0"
39
39
  },
40
40
  "devDependencies": {
41
- "@sanity/pkg-utils": "^10.1.3",
41
+ "@sanity/pkg-utils": "^10.2.1",
42
42
  "@types/react": "^19.2.7",
43
43
  "@typescript/native-preview": "7.0.0-dev.20251212.1",
44
44
  "babel-plugin-react-compiler": "^1.0.0",