sanity-plugin-workflow 2.1.0 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +21 -22
- package/dist/index.js.map +1 -1
- package/package.json +5 -6
package/dist/index.js
CHANGED
|
@@ -68,12 +68,19 @@ function useWorkflowMetadata(ids) {
|
|
|
68
68
|
let t3;
|
|
69
69
|
bb0: {
|
|
70
70
|
if (!rawData || rawData.length === 0) {
|
|
71
|
-
let
|
|
72
|
-
$[5] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (
|
|
71
|
+
let t42;
|
|
72
|
+
$[5] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel") ? (t42 = {}, $[5] = t42) : t42 = $[5], t3 = t42;
|
|
73
73
|
break bb0;
|
|
74
74
|
}
|
|
75
|
-
let
|
|
76
|
-
|
|
75
|
+
let acc;
|
|
76
|
+
if ($[6] !== rawData) {
|
|
77
|
+
acc = {};
|
|
78
|
+
for (const item of rawData)
|
|
79
|
+
acc[item.documentId] = item;
|
|
80
|
+
$[6] = rawData, $[7] = acc;
|
|
81
|
+
} else
|
|
82
|
+
acc = $[7];
|
|
83
|
+
t3 = acc;
|
|
77
84
|
}
|
|
78
85
|
const keyedMetadata = t3;
|
|
79
86
|
let t4;
|
|
@@ -83,12 +90,6 @@ function useWorkflowMetadata(ids) {
|
|
|
83
90
|
error
|
|
84
91
|
}, $[8] = error, $[9] = keyedMetadata, $[10] = loading, $[11] = t4) : t4 = $[11], t4;
|
|
85
92
|
}
|
|
86
|
-
function _temp$8(acc, cur) {
|
|
87
|
-
return {
|
|
88
|
-
...acc,
|
|
89
|
-
[cur.documentId]: cur
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
93
|
const WorkflowContext = createContext({
|
|
93
94
|
data: {},
|
|
94
95
|
loading: !1,
|
|
@@ -350,13 +351,11 @@ function useBeginWorkflow(t0) {
|
|
|
350
351
|
documentId: id,
|
|
351
352
|
state: states?.[0]?.id,
|
|
352
353
|
orderRank: lowestOrderFirstState ? LexoRank.parse(lowestOrderFirstState).genNext().toString() : LexoRank.min().toString()
|
|
353
|
-
}).
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
}), setBeginning(!1), setComplete(!0);
|
|
359
|
-
});
|
|
354
|
+
}), toast.push({
|
|
355
|
+
status: "success",
|
|
356
|
+
title: "Workflow started",
|
|
357
|
+
description: `Document is now "${states?.[0]?.title}"`
|
|
358
|
+
}), setBeginning(!1), setComplete(!0);
|
|
360
359
|
}, $[1] = client, $[2] = id, $[3] = states?.[0]?.id, $[4] = states?.[0]?.title, $[5] = toast, $[6] = t2) : t2 = $[6];
|
|
361
360
|
const handle = t2;
|
|
362
361
|
if (!draft || complete || metadata2)
|
|
@@ -1315,7 +1314,7 @@ function Verify(props) {
|
|
|
1315
1314
|
documentId,
|
|
1316
1315
|
state
|
|
1317
1316
|
} = cur._metadata ?? {};
|
|
1318
|
-
return !states.find((s) => s.id === state) && documentId
|
|
1317
|
+
return !states.find((s) => s.id === state) && documentId && acc.push(documentId), acc;
|
|
1319
1318
|
}, []) : [], $[1] = data, $[2] = states, $[3] = t1) : t1 = $[3];
|
|
1320
1319
|
const documentsWithoutValidMetadataIds = t1;
|
|
1321
1320
|
let t2;
|
|
@@ -1324,7 +1323,7 @@ function Verify(props) {
|
|
|
1324
1323
|
documentId: documentId_0,
|
|
1325
1324
|
assignees
|
|
1326
1325
|
} = cur_0._metadata ?? {};
|
|
1327
|
-
return !(!assignees?.length || assignees?.every((a) => userList.find((u) => u.id === a))) && documentId_0
|
|
1326
|
+
return !(!assignees?.length || assignees?.every((a) => userList.find((u) => u.id === a))) && documentId_0 && acc_0.push(documentId_0), acc_0;
|
|
1328
1327
|
}, []) : [], $[4] = data, $[5] = userList, $[6] = t2) : t2 = $[6];
|
|
1329
1328
|
const documentsWithInvalidUserIds = t2;
|
|
1330
1329
|
let t3;
|
|
@@ -1336,7 +1335,7 @@ function Verify(props) {
|
|
|
1336
1335
|
documentId: documentId_2,
|
|
1337
1336
|
orderRank: orderRank_0
|
|
1338
1337
|
} = cur_2._metadata ?? {};
|
|
1339
|
-
return orderRank_0 && data.filter((d) => d._metadata?.orderRank === orderRank_0).length > 1 && documentId_2
|
|
1338
|
+
return orderRank_0 && data.filter((d) => d._metadata?.orderRank === orderRank_0).length > 1 && documentId_2 && acc_2.push(documentId_2), acc_2;
|
|
1340
1339
|
}, []) : [], $[9] = data, $[10] = t4) : t4 = $[10];
|
|
1341
1340
|
const documentsWithDuplicatedOrderIds = t4;
|
|
1342
1341
|
let t5;
|
|
@@ -1469,7 +1468,7 @@ function _temp$1(acc_1, cur_1) {
|
|
|
1469
1468
|
documentId: documentId_1,
|
|
1470
1469
|
orderRank
|
|
1471
1470
|
} = cur_1._metadata ?? {};
|
|
1472
|
-
return !orderRank && documentId_1
|
|
1471
|
+
return !orderRank && documentId_1 && acc_1.push(documentId_1), acc_1;
|
|
1473
1472
|
}
|
|
1474
1473
|
function WorkflowTool(props) {
|
|
1475
1474
|
const $ = c(58);
|
|
@@ -1642,7 +1641,7 @@ function _temp5(acc, item_0) {
|
|
|
1642
1641
|
const {
|
|
1643
1642
|
assignees: t0
|
|
1644
1643
|
} = item_0._metadata ?? {}, assignees = t0 === void 0 ? [] : t0, newAssignees = assignees?.length ? assignees.filter((a) => !acc.includes(a)) : [];
|
|
1645
|
-
return newAssignees.length
|
|
1644
|
+
return newAssignees.length && acc.push(...newAssignees), acc;
|
|
1646
1645
|
}
|
|
1647
1646
|
function _temp4(s_3) {
|
|
1648
1647
|
return s_3.id;
|
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 const rawData = _rawData as Metadata[]\n\n const keyedMetadata = useMemo(() => {\n if (!rawData || rawData.length === 0) return {}\n\n return rawData.reduce<KeyedMetadata>((acc, cur) => {\n return {\n ...acc,\n [cur.documentId]: cur,\n }\n }, {})\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 })\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\n .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 .then(() => {\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 })\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({id, onComplete}: 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( {id: documentId}: 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({id: documentId}: 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 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 ArraySchemaType, 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<\n ArrayOfPrimitivesInputProps<string | number | boolean, ArraySchemaType>\n> = (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 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 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 as State}\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(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 // @ts-ignore\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 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, 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: () => parentRef.current,\n getItemKey: (index) => dataFiltered[index]?._metadata?.documentId ?? index,\n estimateSize: () => 115,\n overscan: 7,\n measureElement: (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\n return !stateExists && documentId ? [...acc, documentId] : 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 return !allAssigneesExist && documentId ? [...acc, documentId] : acc\n }, [] as string[])\n : []\n\n const documentsWithoutOrderIds = data?.length\n ? data.reduce((acc, cur) => {\n const {documentId, orderRank} = cur._metadata ?? {}\n\n return !orderRank && documentId ? [...acc, documentId] : acc\n }, [] as string[])\n : []\n\n const documentsWithDuplicatedOrderIds = data?.length\n ? data.reduce((acc, cur) => {\n const {documentId, orderRank} = cur._metadata ?? {}\n\n return orderRank &&\n data.filter((d) => d._metadata?.orderRank === orderRank).length > 1 &&\n documentId\n ? [...acc, documentId]\n : 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 [data, 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 return newAssignees.length ? [...acc, ...newAssignees] : 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","reduce","_temp","keyedMetadata","acc","cur","documentId","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","item","useUpdateWorkflow","actionState","type","onComplete","user","useCurrentUser","client","useClient","toast","useToast","currentUser","state","s","currentState","find","assignees","undefined","validation","isValidating","useValidationStatus","hasValidationErrors","requireValidation","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","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","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, 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: () => parentRef.current,\n getItemKey: (index) => dataFiltered[index]?._metadata?.documentId ?? index,\n estimateSize: () => 115,\n overscan: 7,\n measureElement: (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","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.
|
|
3
|
+
"version": "2.1.2",
|
|
4
4
|
"description": "A demonstration of a custom content publishing workflow using Sanity.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sanity",
|
|
@@ -40,12 +40,12 @@
|
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@sanity/pkg-utils": "^10.1.2",
|
|
42
42
|
"@types/react": "^19.2.7",
|
|
43
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
43
|
+
"@typescript/native-preview": "7.0.0-dev.20251207.1",
|
|
44
44
|
"babel-plugin-react-compiler": "^1.0.0",
|
|
45
45
|
"babel-plugin-styled-components": "^2.1.4",
|
|
46
46
|
"eslint": "^9.39.1",
|
|
47
47
|
"react": "^19.2.1",
|
|
48
|
-
"sanity": "^4.
|
|
48
|
+
"sanity": "^4.21.0",
|
|
49
49
|
"styled-components": "^6.1.19",
|
|
50
50
|
"typescript": "5.9.3",
|
|
51
51
|
"@repo/eslint-config": "0.0.5",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"react": "^18.3 || ^19",
|
|
57
|
-
"sanity": "^4",
|
|
57
|
+
"sanity": "^4.0.0-0 || ^5.0.0-0",
|
|
58
58
|
"styled-components": "^6.1"
|
|
59
59
|
},
|
|
60
60
|
"engines": {
|
|
@@ -62,7 +62,6 @@
|
|
|
62
62
|
},
|
|
63
63
|
"scripts": {
|
|
64
64
|
"build": "pkg build --strict --check --clean",
|
|
65
|
-
"lint": "eslint ."
|
|
66
|
-
"typecheck": "(cd ../.. && tsgo --project plugins/sanity-plugin-workflow/tsconfig.json)"
|
|
65
|
+
"lint": "eslint ."
|
|
67
66
|
}
|
|
68
67
|
}
|